diff --git a/src/NzbDrone.Core/IndexerSearch/AlbumSearchService.cs b/src/NzbDrone.Core/IndexerSearch/AlbumSearchService.cs index 1b2dbc649..ef75dba40 100644 --- a/src/NzbDrone.Core/IndexerSearch/AlbumSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/AlbumSearchService.cs @@ -1,7 +1,5 @@ -using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using System.Threading.Tasks; using NLog; using NzbDrone.Common.Instrumentation.Extensions; @@ -40,21 +38,31 @@ namespace NzbDrone.Core.IndexerSearch _logger = logger; } - private async Task SearchForMissingAlbums(List albums, bool userInvokedSearch) + private async Task SearchForBulkAlbums(List albums, bool userInvokedSearch) { _logger.ProgressInfo("Performing missing search for {0} albums", albums.Count); var downloadedCount = 0; - foreach (var album in albums) + foreach (var album in albums.OrderBy(a => a.LastSearchTime ?? DateTime.MinValue)) { List decisions; - decisions = await _releaseSearchService.AlbumSearch(album.Id, false, userInvokedSearch, false); + + try + { + decisions = await _releaseSearchService.AlbumSearch(album.Id, false, userInvokedSearch, false); + } + catch (Exception ex) + { + _logger.Error(ex, "Unable to search for album: [{0}]", album); + continue; + } + var processed = await _processDownloadDecisions.ProcessDecisions(decisions); downloadedCount += processed.Grabbed.Count; } - _logger.ProgressInfo("Completed missing search for {0} albums. {1} reports downloaded.", albums.Count, downloadedCount); + _logger.ProgressInfo("Completed search for {0} albums. {1} reports downloaded.", albums.Count, downloadedCount); } public void Execute(AlbumSearchCommand message) @@ -106,17 +114,11 @@ namespace NzbDrone.Core.IndexerSearch var queue = _queueService.GetQueue().Where(q => q.Album != null).Select(q => q.Album.Id); var missing = albums.Where(e => !queue.Contains(e.Id)).ToList(); - SearchForMissingAlbums(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult(); + SearchForBulkAlbums(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult(); } public void Execute(CutoffUnmetAlbumSearchCommand message) { - Expression> filterExpression; - - filterExpression = v => - v.Monitored == true && - v.Artist.Value.Monitored == true; - var pagingSpec = new PagingSpec { Page = 1, @@ -125,14 +127,13 @@ namespace NzbDrone.Core.IndexerSearch SortKey = "Id" }; - pagingSpec.FilterExpressions.Add(filterExpression); + pagingSpec.FilterExpressions.Add(v => v.Monitored == true && v.Artist.Value.Monitored == true); var albums = _albumCutoffService.AlbumsWhereCutoffUnmet(pagingSpec).Records.ToList(); - var queue = _queueService.GetQueue().Where(q => q.Album != null).Select(q => q.Album.Id); - var missing = albums.Where(e => !queue.Contains(e.Id)).ToList(); + var cutoffUnmet = albums.Where(e => !queue.Contains(e.Id)).ToList(); - SearchForMissingAlbums(missing, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult(); + SearchForBulkAlbums(cutoffUnmet, message.Trigger == CommandTrigger.Manual).GetAwaiter().GetResult(); } } }