using System.Collections.Generic; using System.Linq; using NLog; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.ThingiProvider.Events; namespace NzbDrone.Core.ImportLists.ImportListMovies { public interface IImportListMovieService { List GetAllListMovies(); List GetAllForLists(List listIds); ImportListMovie AddListMovie(ImportListMovie listMovie); List AddListMovies(List listMovies); List SyncMoviesForList(List listMovies, int listId); void RemoveListMovie(ImportListMovie listMovie); ImportListMovie GetById(int id); } public class ImportListMovieService : IImportListMovieService, IHandleAsync> { private readonly IImportListMovieRepository _importListMovieRepository; private readonly Logger _logger; public ImportListMovieService(IImportListMovieRepository importListMovieRepository, Logger logger) { _importListMovieRepository = importListMovieRepository; _logger = logger; } public ImportListMovie AddListMovie(ImportListMovie exclusion) { return _importListMovieRepository.Insert(exclusion); } public List AddListMovies(List listMovies) { _importListMovieRepository.InsertMany(listMovies); return listMovies; } public List SyncMoviesForList(List listMovies, int listId) { var existingListMovies = GetAllForLists(new List { listId }); listMovies.ForEach(l => l.Id = existingListMovies.FirstOrDefault(e => e.TmdbId == l.TmdbId)?.Id ?? 0); _importListMovieRepository.InsertMany(listMovies.Where(l => l.Id == 0).ToList()); _importListMovieRepository.UpdateMany(listMovies.Where(l => l.Id > 0).ToList()); _importListMovieRepository.DeleteMany(existingListMovies.Where(l => !listMovies.Any(x => x.TmdbId == l.TmdbId)).ToList()); return listMovies; } public List GetAllListMovies() { return _importListMovieRepository.All().ToList(); } public List GetAllForLists(List listIds) { return _importListMovieRepository.GetAllForLists(listIds).ToList(); } public void RemoveListMovie(ImportListMovie listMovie) { _importListMovieRepository.Delete(listMovie); } public ImportListMovie GetById(int id) { return _importListMovieRepository.Get(id); } public void HandleAsync(ProviderDeletedEvent message) { var moviesOnList = _importListMovieRepository.GetAllForLists(new List { message.ProviderId }); _importListMovieRepository.DeleteMany(moviesOnList); } } }