public async Task RefreshFilms(string cinemaId)
        {
            var externalFilms = await _apiClient.GetFilmsForCinema(cinemaId);

            var localFilms = await GetLocalFilms();

            var allFilms = await _apiClient.GetAllFilms();

            await CheckForUnlimitedScreenings();

            var isFirstRun = !localFilms.Any();

            var existingLocalFilms = localFilms
                                     .Where(x => externalFilms.Any(y => y.FilmId == x.Code))
                                     .ToList();

            var localFilmsChanged = CorrectWeightingOfExistingFilms(existingLocalFilms, allFilms);

            var existingExternalFilms = externalFilms
                                        .Where(x => localFilms.Any(y => y.Code == x.FilmId))
                                        .ToList();

            var filmsToRemove = localFilms
                                .Where(x => existingLocalFilms.All(y => y.Code != x.Code))
                                .ToList();

            if (filmsToRemove.Any())
            {
                RemoveFilms(localFilms, filmsToRemove);
                localFilmsChanged = true;
            }

            var addedExternalFilms = externalFilms
                                     .Except(existingExternalFilms)
                                     .ToList();

            var addedLocalFilms = allFilms
                                  .Where(x => addedExternalFilms.Any(y => y.FilmId == x.Code))
                                  .ToList();

            if (addedExternalFilms.Any())
            {
                if (!isFirstRun)
                {
                    await _toastService.DisplayToasts(addedLocalFilms);
                }

                localFilms.AddRange(addedLocalFilms);
                localFilmsChanged = true;
            }

            if (localFilmsChanged)
            {
                localFilms = localFilms.OrderBy(x => x.Weight).ToList();
                await WriteFilmsToFile(FilmCacheFile, localFilms);

                _filmCache.ClearCache(FilmCacheFile);
            }

            await WriteFilmsToFile(AllFilmCacheFile, allFilms);
        }