|
|
|
using System;
|
|
|
|
using System.Linq;
|
|
|
|
using NLog;
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Music
|
|
|
|
{
|
|
|
|
public interface ICheckIfArtistShouldBeRefreshed
|
|
|
|
{
|
|
|
|
bool ShouldRefresh(Artist artist);
|
|
|
|
}
|
|
|
|
|
|
|
|
public class ShouldRefreshArtist : ICheckIfArtistShouldBeRefreshed
|
|
|
|
{
|
|
|
|
private readonly IAlbumService _albumService;
|
|
|
|
private readonly Logger _logger;
|
|
|
|
|
|
|
|
public ShouldRefreshArtist(IAlbumService albumService, Logger logger)
|
|
|
|
{
|
|
|
|
_albumService = albumService;
|
|
|
|
_logger = logger;
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool ShouldRefresh(Artist artist)
|
|
|
|
{
|
|
|
|
if (artist.LastInfoSync < DateTime.UtcNow.AddDays(-30))
|
|
|
|
{
|
|
|
|
_logger.Trace("Artist {0} last updated more than 30 days ago, should refresh.", artist.Name);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (artist.LastInfoSync >= DateTime.UtcNow.AddHours(-12))
|
|
|
|
{
|
|
|
|
_logger.Trace("Artist {0} last updated less than 12 hours ago, should not be refreshed.", artist.Name);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (artist.Metadata.Value.Status == ArtistStatusType.Continuing && artist.LastInfoSync < DateTime.UtcNow.AddDays(-2))
|
|
|
|
{
|
|
|
|
_logger.Trace("Artist {0} is continuing and has not been refreshed in 2 days, should refresh.", artist.Name);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
var lastAlbum = _albumService.GetAlbumsByArtist(artist.Id).OrderByDescending(e => e.ReleaseDate).FirstOrDefault();
|
|
|
|
|
|
|
|
if (lastAlbum != null && lastAlbum.ReleaseDate > DateTime.UtcNow.AddDays(-30))
|
|
|
|
{
|
|
|
|
_logger.Trace("Last album in {0} aired less than 30 days ago, should refresh.", artist.Name);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
_logger.Trace("Artist {0} ended long ago, should not be refreshed.", artist.Name);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|