public async Task CheckForUnlimitedScreenings()
        {
            var externalUnlimitedFilms = await _apiClient.SearchUnlimitedFilms();

            var localUnlimitedFilms = await _filmCache.Get(UnlimitedScreeningsCacheFile);

            var isFirstRun = !localUnlimitedFilms.Any();

            var existingLocalFilms = localUnlimitedFilms
                                     .Where(x => externalUnlimitedFilms.Any(y => y.FeatureTitle == x.FeatureTitle))
                                     .ToList();

            var existingExternalFilms = externalUnlimitedFilms
                                        .Where(x => localUnlimitedFilms.Any(y => y.FeatureTitle == x.FeatureTitle))
                                        .ToList();

            var filmsToRemove = localUnlimitedFilms
                                .Where(x => existingLocalFilms.All(y => y.FeatureTitle != x.FeatureTitle))
                                .ToList();

            var localFileChanged = false;

            if (filmsToRemove.Any())
            {
                RemoveFilms(localUnlimitedFilms, filmsToRemove);
                localFileChanged = true;
            }

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

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

                localUnlimitedFilms.AddRange(addedExternalFilms);
                localFileChanged = true;
            }

            if (localFileChanged)
            {
                await WriteFilmsToFile(UnlimitedScreeningsCacheFile, localUnlimitedFilms);

                _filmCache.ClearCache(UnlimitedScreeningsCacheFile);
            }
        }