using ErsatzTV.Core; using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Interfaces.Search; namespace ErsatzTV.Application.Jellyfin; public class UpdateJellyfinLibraryPreferencesHandler : IRequestHandler> { private readonly IMediaSourceRepository _mediaSourceRepository; private readonly ISearchIndex _searchIndex; public UpdateJellyfinLibraryPreferencesHandler( IMediaSourceRepository mediaSourceRepository, ISearchIndex searchIndex) { _mediaSourceRepository = mediaSourceRepository; _searchIndex = searchIndex; } public async Task> Handle( UpdateJellyfinLibraryPreferences request, CancellationToken cancellationToken) { var toDisable = request.Preferences.Filter(p => p.ShouldSyncItems == false).Map(p => p.Id).ToList(); List ids = await _mediaSourceRepository.DisableJellyfinLibrarySync(toDisable); await _searchIndex.RemoveItems(ids); _searchIndex.Commit(); IEnumerable toEnable = request.Preferences.Filter(p => p.ShouldSyncItems).Map(p => p.Id); await _mediaSourceRepository.EnableJellyfinLibrarySync(toEnable); return Unit.Default; } }