using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using ErsatzTV.Core; using ErsatzTV.Core.Interfaces.Repositories; using LanguageExt; namespace ErsatzTV.Application.Plex.Commands { public class UpdatePlexLibraryPreferencesHandler : MediatR.IRequestHandler> { private readonly IMediaSourceRepository _mediaSourceRepository; public UpdatePlexLibraryPreferencesHandler(IMediaSourceRepository mediaSourceRepository) => _mediaSourceRepository = mediaSourceRepository; public async Task> Handle( UpdatePlexLibraryPreferences request, CancellationToken cancellationToken) { var toDisable = request.Preferences.Filter(p => p.ShouldSyncItems == false).Map(p => p.Id).ToList(); await _mediaSourceRepository.DisablePlexLibrarySync(toDisable); IEnumerable toEnable = request.Preferences.Filter(p => p.ShouldSyncItems).Map(p => p.Id); await _mediaSourceRepository.EnablePlexLibrarySync(toEnable); return Unit.Default; } } }