Option to ignore items when removing from queue instead of removing from client

This commit is contained in:
Mark McDowall
2019-10-24 21:42:41 +01:00
committed by ta264
parent 94ac75c6b7
commit d459a36591
21 changed files with 277 additions and 65 deletions
@@ -0,0 +1,17 @@
using System.Collections.Generic;
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Qualities;
namespace NzbDrone.Core.Download
{
public class DownloadIgnoredEvent : IEvent
{
public int ArtistId { get; set; }
public List<int> AlbumIds { get; set; }
public QualityModel Quality { get; set; }
public string SourceTitle { get; set; }
public string DownloadClient { get; set; }
public string DownloadId { get; set; }
public string Message { get; set; }
}
}
@@ -0,0 +1,52 @@
using System.Linq;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Download.TrackedDownloads;
using NzbDrone.Core.Messaging.Events;
namespace NzbDrone.Core.Download
{
public interface IIgnoredDownloadService
{
bool IgnoreDownload(TrackedDownload trackedDownload);
}
public class IgnoredDownloadService : IIgnoredDownloadService
{
private readonly IEventAggregator _eventAggregator;
private readonly Logger _logger;
public IgnoredDownloadService(IEventAggregator eventAggregator,
Logger logger)
{
_eventAggregator = eventAggregator;
_logger = logger;
}
public bool IgnoreDownload(TrackedDownload trackedDownload)
{
var artist = trackedDownload.RemoteAlbum.Artist;
var albums = trackedDownload.RemoteAlbum.Albums;
if (artist == null || albums.Empty())
{
_logger.Warn("Unable to ignore download for unknown artist/album");
return false;
}
var downloadIgnoredEvent = new DownloadIgnoredEvent
{
ArtistId = artist.Id,
AlbumIds = albums.Select(e => e.Id).ToList(),
Quality = trackedDownload.RemoteAlbum.ParsedAlbumInfo.Quality,
SourceTitle = trackedDownload.DownloadItem.Title,
DownloadClient = trackedDownload.DownloadItem.DownloadClient,
DownloadId = trackedDownload.DownloadItem.DownloadId,
Message = "Manually ignored"
};
_eventAggregator.PublishEvent(downloadIgnoredEvent);
return true;
}
}
}
@@ -131,8 +131,10 @@ namespace NzbDrone.Core.Download.TrackedDownloads
private bool DownloadIsTrackable(TrackedDownload trackedDownload)
{
// If the download has already been imported or failed don't track it
if (trackedDownload.State == TrackedDownloadState.Imported || trackedDownload.State == TrackedDownloadState.DownloadFailed)
// If the download has already been imported or failed or the user ignored it don't track it
if (trackedDownload.State == TrackedDownloadState.Imported ||
trackedDownload.State == TrackedDownloadState.DownloadFailed ||
trackedDownload.State == TrackedDownloadState.Ignored)
{
return false;
}
@@ -41,7 +41,8 @@ namespace NzbDrone.Core.Download.TrackedDownloads
ImportPending,
Importing,
ImportFailed,
Imported
Imported,
Ignored
}
public enum TrackedDownloadStatus
@@ -252,6 +252,8 @@ namespace NzbDrone.Core.Download.TrackedDownloads
return TrackedDownloadState.Imported;
case HistoryEventType.DownloadFailed:
return TrackedDownloadState.DownloadFailed;
case HistoryEventType.DownloadIgnored:
return TrackedDownloadState.Ignored;
}
// Since DownloadComplete is a new event type, we can't assume it exists for old downloads
+2 -1
View File
@@ -41,6 +41,7 @@ namespace NzbDrone.Core.History
TrackFileRenamed = 6,
AlbumImportIncomplete = 7,
DownloadImported = 8,
TrackFileRetagged = 9
TrackFileRetagged = 9,
DownloadIgnored = 10
}
}
+27 -1
View File
@@ -39,7 +39,8 @@ namespace NzbDrone.Core.History
IHandle<TrackFileDeletedEvent>,
IHandle<TrackFileRenamedEvent>,
IHandle<TrackFileRetaggedEvent>,
IHandle<ArtistDeletedEvent>
IHandle<ArtistDeletedEvent>,
IHandle<DownloadIgnoredEvent>
{
private readonly IHistoryRepository _historyRepository;
private readonly Logger _logger;
@@ -369,6 +370,31 @@ namespace NzbDrone.Core.History
_historyRepository.DeleteForArtist(message.Artist.Id);
}
public void Handle(DownloadIgnoredEvent message)
{
var historyToAdd = new List<History>();
foreach (var albumId in message.AlbumIds)
{
var history = new History
{
EventType = HistoryEventType.DownloadIgnored,
Date = DateTime.UtcNow,
Quality = message.Quality,
SourceTitle = message.SourceTitle,
ArtistId = message.ArtistId,
AlbumId = albumId,
DownloadId = message.DownloadId
};
history.Data.Add("DownloadClient", message.DownloadClient);
history.Data.Add("Message", message.Message);
historyToAdd.Add(history);
}
_historyRepository.InsertMany(historyToAdd);
}
public List<History> Since(DateTime date, HistoryEventType? eventType)
{
return _historyRepository.Since(date, eventType);