diff --git a/src/NzbDrone.Core/Datastore/Migration/077_album_last_searched_time.cs b/src/NzbDrone.Core/Datastore/Migration/077_album_last_searched_time.cs new file mode 100644 index 000000000..7100103d8 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/077_album_last_searched_time.cs @@ -0,0 +1,14 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(077)] + public class album_last_searched_time : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Alter.Table("Albums").AddColumn("LastSearchTime").AsDateTimeOffset().Nullable(); + } + } +} diff --git a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs index cc6fad685..89b71f62e 100644 --- a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs @@ -139,6 +139,16 @@ namespace NzbDrone.Core.IndexerSearch _logger.Debug("Total of {0} reports were found for {1} from {2} indexers", reports.Count, criteriaBase, indexers.Count); + // Update the last search time for all albums if at least 1 indexer was searched. + if (indexers.Any()) + { + var lastSearchTime = DateTime.UtcNow; + _logger.Debug("Setting last search time to: {0}", lastSearchTime); + + criteriaBase.Albums.ForEach(a => a.LastSearchTime = lastSearchTime); + _albumService.UpdateLastSearchTime(criteriaBase.Albums); + } + return _makeDownloadDecision.GetSearchDecision(reports, criteriaBase).ToList(); } diff --git a/src/NzbDrone.Core/Music/Model/Album.cs b/src/NzbDrone.Core/Music/Model/Album.cs index 582ffe241..6ac9c13b0 100644 --- a/src/NzbDrone.Core/Music/Model/Album.cs +++ b/src/NzbDrone.Core/Music/Model/Album.cs @@ -38,6 +38,7 @@ namespace NzbDrone.Core.Music public string AlbumType { get; set; } public List SecondaryTypes { get; set; } public Ratings Ratings { get; set; } + public DateTime? LastSearchTime { get; set; } // These are Lidarr generated/config public string CleanTitle { get; set; } diff --git a/src/NzbDrone.Core/Music/Services/AlbumService.cs b/src/NzbDrone.Core/Music/Services/AlbumService.cs index 1f1d421fb..91f3fd37c 100644 --- a/src/NzbDrone.Core/Music/Services/AlbumService.cs +++ b/src/NzbDrone.Core/Music/Services/AlbumService.cs @@ -30,6 +30,7 @@ namespace NzbDrone.Core.Music Album UpdateAlbum(Album album); void SetAlbumMonitored(int albumId, bool monitored); void SetMonitored(IEnumerable ids, bool monitored); + void UpdateLastSearchTime(List albums); PagingSpec AlbumsWithoutFiles(PagingSpec pagingSpec); List AlbumsBetweenDates(DateTime start, DateTime end, bool includeUnmonitored); List ArtistAlbumsBetweenDates(Artist artist, DateTime start, DateTime end, bool includeUnmonitored); @@ -301,6 +302,11 @@ namespace NzbDrone.Core.Music } } + public void UpdateLastSearchTime(List albums) + { + _albumRepository.SetFields(albums, a => a.LastSearchTime); + } + public void Handle(ArtistsDeletedEvent message) { // TODO Do this in one call instead of one for each artist?