mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-18 21:34:28 -04:00
Option to ignore items when removing from queue instead of removing from client
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -41,6 +41,7 @@ namespace NzbDrone.Core.History
|
||||
TrackFileRenamed = 6,
|
||||
AlbumImportIncomplete = 7,
|
||||
DownloadImported = 8,
|
||||
TrackFileRetagged = 9
|
||||
TrackFileRetagged = 9,
|
||||
DownloadIgnored = 10
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user