mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-21 05:53:33 -07:00
New: Selectively refresh albums (#215)
* New: Selectively refresh albums Closes #211
This commit is contained in:
parent
54ca73f474
commit
8395999696
6 changed files with 160 additions and 1 deletions
|
@ -43,6 +43,10 @@ namespace NzbDrone.Core.Test.MusicTests
|
|||
Mocker.GetMock<IProvideAlbumInfo>()
|
||||
.Setup(s => s.GetAlbumInfo(It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Callback(() => { throw new AlbumNotFoundException(album1.ForeignAlbumId); });
|
||||
|
||||
Mocker.GetMock<ICheckIfAlbumShouldBeRefreshed>()
|
||||
.Setup(s => s.ShouldRefresh(It.IsAny<Album>()))
|
||||
.Returns(true);
|
||||
}
|
||||
|
||||
private void GivenNewAlbumInfo(Album album)
|
||||
|
|
103
src/NzbDrone.Core.Test/MusicTests/ShouldRefreshAlbumFixture.cs
Normal file
103
src/NzbDrone.Core.Test/MusicTests/ShouldRefreshAlbumFixture.cs
Normal file
|
@ -0,0 +1,103 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
namespace NzbDrone.Core.Test.MusicTests
|
||||
{
|
||||
[TestFixture]
|
||||
public class ShouldRefreshAlbumFixture : TestBase<ShouldRefreshAlbum>
|
||||
{
|
||||
private Album _album;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_album = Builder<Album>.CreateNew()
|
||||
.With(e=>e.ReleaseDate = DateTime.Today.AddDays(-100))
|
||||
.Build();
|
||||
}
|
||||
|
||||
private void GivenAlbumLastRefreshedMonthsAgo()
|
||||
{
|
||||
_album.LastInfoSync = DateTime.UtcNow.AddDays(-90);
|
||||
}
|
||||
|
||||
private void GivenAlbumLastRefreshedYesterday()
|
||||
{
|
||||
_album.LastInfoSync = DateTime.UtcNow.AddDays(-1);
|
||||
}
|
||||
|
||||
private void GivenAlbumLastRefreshedRecently()
|
||||
{
|
||||
_album.LastInfoSync = DateTime.UtcNow.AddHours(-1);
|
||||
}
|
||||
|
||||
private void GivenRecentlyReleased()
|
||||
{
|
||||
_album.ReleaseDate = DateTime.Today.AddDays(-7);
|
||||
}
|
||||
|
||||
private void GivenFutureRelease()
|
||||
{
|
||||
_album.ReleaseDate = DateTime.Today.AddDays(7);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_if_album_last_refreshed_less_than_6_hours_ago()
|
||||
{
|
||||
GivenAlbumLastRefreshedRecently();
|
||||
|
||||
Subject.ShouldRefresh(_album).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_album_last_refreshed_more_than_30_days_ago()
|
||||
{
|
||||
GivenAlbumLastRefreshedMonthsAgo();
|
||||
|
||||
Subject.ShouldRefresh(_album).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_album_released_in_last_30_days()
|
||||
{
|
||||
GivenAlbumLastRefreshedYesterday();
|
||||
|
||||
GivenRecentlyReleased();
|
||||
|
||||
Subject.ShouldRefresh(_album).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_true_if_album_releases_in_future()
|
||||
{
|
||||
GivenAlbumLastRefreshedYesterday();
|
||||
|
||||
GivenFutureRelease();
|
||||
|
||||
Subject.ShouldRefresh(_album).Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_recently_refreshed_album_released_over_30_days_ago()
|
||||
{
|
||||
GivenAlbumLastRefreshedYesterday();
|
||||
|
||||
Subject.ShouldRefresh(_album).Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_false_when_recently_refreshed_album_released_in_last_30_days()
|
||||
{
|
||||
GivenAlbumLastRefreshedRecently();
|
||||
|
||||
GivenRecentlyReleased();
|
||||
|
||||
Subject.ShouldRefresh(_album).Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -298,6 +298,7 @@
|
|||
<Compile Include="MusicTests\ArtistServiceTests\AddArtistFixture.cs" />
|
||||
<Compile Include="MusicTests\ArtistServiceTests\UpdateMultipleArtistFixture.cs" />
|
||||
<Compile Include="MusicTests\RefreshAlbumServiceFixture.cs" />
|
||||
<Compile Include="MusicTests\ShouldRefreshAlbumFixture.cs" />
|
||||
<Compile Include="NotificationTests\NotificationBaseFixture.cs" />
|
||||
<Compile Include="NotificationTests\SynologyIndexerFixture.cs" />
|
||||
<Compile Include="OrganizerTests\FileNameBuilderTests\CleanTitleFixture.cs" />
|
||||
|
|
|
@ -30,6 +30,7 @@ namespace NzbDrone.Core.Music
|
|||
private readonly IProvideAlbumInfo _albumInfo;
|
||||
private readonly IRefreshTrackService _refreshTrackService;
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly ICheckIfAlbumShouldBeRefreshed _checkIfAlbumShouldBeRefreshed;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public RefreshAlbumService(IAlbumService albumService,
|
||||
|
@ -37,6 +38,7 @@ namespace NzbDrone.Core.Music
|
|||
IProvideAlbumInfo albumInfo,
|
||||
IRefreshTrackService refreshTrackService,
|
||||
IEventAggregator eventAggregator,
|
||||
ICheckIfAlbumShouldBeRefreshed checkIfAlbumShouldBeRefreshed,
|
||||
Logger logger)
|
||||
{
|
||||
_albumService = albumService;
|
||||
|
@ -44,6 +46,7 @@ namespace NzbDrone.Core.Music
|
|||
_albumInfo = albumInfo;
|
||||
_refreshTrackService = refreshTrackService;
|
||||
_eventAggregator = eventAggregator;
|
||||
_checkIfAlbumShouldBeRefreshed = checkIfAlbumShouldBeRefreshed;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
@ -51,7 +54,10 @@ namespace NzbDrone.Core.Music
|
|||
{
|
||||
foreach (var album in albums)
|
||||
{
|
||||
RefreshAlbumInfo(album);
|
||||
if (_checkIfAlbumShouldBeRefreshed.ShouldRefresh(album))
|
||||
{
|
||||
RefreshAlbumInfo(album);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
44
src/NzbDrone.Core/Music/ShouldRefreshAlbum.cs
Normal file
44
src/NzbDrone.Core/Music/ShouldRefreshAlbum.cs
Normal file
|
@ -0,0 +1,44 @@
|
|||
using NLog;
|
||||
using System;
|
||||
|
||||
namespace NzbDrone.Core.Music
|
||||
{
|
||||
public interface ICheckIfAlbumShouldBeRefreshed
|
||||
{
|
||||
bool ShouldRefresh(Album album);
|
||||
}
|
||||
|
||||
public class ShouldRefreshAlbum : ICheckIfAlbumShouldBeRefreshed
|
||||
{
|
||||
private readonly Logger _logger;
|
||||
|
||||
public ShouldRefreshAlbum(Logger logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public bool ShouldRefresh(Album album)
|
||||
{
|
||||
if (album.LastInfoSync < DateTime.UtcNow.AddDays(-30))
|
||||
{
|
||||
_logger.Trace("Album {0} last updated more than 30 days ago, should refresh.", album.Title);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (album.LastInfoSync >= DateTime.UtcNow.AddHours(-6))
|
||||
{
|
||||
_logger.Trace("Album {0} last updated less than 6 hours ago, should not be refreshed.", album.Title);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (album.ReleaseDate > DateTime.UtcNow.AddDays(-30))
|
||||
{
|
||||
_logger.Trace("album {0} released less than 30 days ago, should refresh.", album.Title);
|
||||
return true;
|
||||
}
|
||||
|
||||
_logger.Trace("Album {0} released long ago and recently refreshed, should not be refreshed.", album.Title);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -822,6 +822,7 @@
|
|||
<Compile Include="Music\MoveArtistService.cs" />
|
||||
<Compile Include="Music\ArtistScannedHandler.cs" />
|
||||
<Compile Include="Music\ArtistEditedService.cs" />
|
||||
<Compile Include="Music\ShouldRefreshAlbum.cs" />
|
||||
<Compile Include="Music\TrackMonitoredService.cs" />
|
||||
<Compile Include="Music\Member.cs" />
|
||||
<Compile Include="Music\AddArtistOptions.cs" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue