1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-11-04 10:02:40 +01:00

Fixed: Remove seeded downloads if they've finished seeding after import

This commit is contained in:
Mark McDowall 2020-04-25 11:49:18 -07:00 committed by Qstick
parent eee6fd9f54
commit 0f0afd62bb
6 changed files with 69 additions and 22 deletions

View File

@ -0,0 +1,15 @@
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Download.TrackedDownloads;
namespace NzbDrone.Core.Download
{
public class DownloadCanBeRemovedEvent : IEvent
{
public TrackedDownload TrackedDownload { get; private set; }
public DownloadCanBeRemovedEvent(TrackedDownload trackedDownload)
{
TrackedDownload = trackedDownload;
}
}
}

View File

@ -6,7 +6,7 @@
namespace NzbDrone.Core.Download
{
[DebuggerDisplay("{DownloadClientName}:{Title}")]
[DebuggerDisplay("{DownloadClientInfo?.Name}:{Title}")]
public class DownloadClientItem
{
public DownloadClientItemClientInfo DownloadClientInfo { get; set; }

View File

@ -0,0 +1,15 @@
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Download.TrackedDownloads;
namespace NzbDrone.Core.Download
{
public class DownloadCompletedEvent : IEvent
{
public TrackedDownload TrackedDownload { get; private set; }
public DownloadCompletedEvent(TrackedDownload trackedDownload)
{
TrackedDownload = trackedDownload;
}
}
}

View File

@ -1,24 +1,14 @@
using System;
using NLog;
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Download.TrackedDownloads;
using NzbDrone.Core.Messaging.Events;
namespace NzbDrone.Core.Download
{
public class DownloadCompletedEvent : IEvent
{
public TrackedDownload TrackedDownload { get; private set; }
public DownloadCompletedEvent(TrackedDownload trackedDownload)
{
TrackedDownload = trackedDownload;
}
}
public class DownloadEventHub : IHandle<DownloadFailedEvent>,
IHandle<DownloadCompletedEvent>
IHandle<DownloadCompletedEvent>,
IHandle<DownloadCanBeRemovedEvent>
{
private readonly IConfigService _configService;
private readonly IProvideDownloadClient _downloadClientProvider;
@ -33,6 +23,18 @@ public DownloadEventHub(IConfigService configService,
_logger = logger;
}
public void Handle(DownloadFailedEvent message)
{
var trackedDownload = message.TrackedDownload;
if (trackedDownload == null || !trackedDownload.DownloadItem.CanBeRemoved || _configService.RemoveFailedDownloads == false)
{
return;
}
RemoveFromDownloadClient(trackedDownload);
}
public void Handle(DownloadCompletedEvent message)
{
if (_configService.RemoveCompletedDownloads &&
@ -48,16 +50,10 @@ public void Handle(DownloadCompletedEvent message)
}
}
public void Handle(DownloadFailedEvent message)
public void Handle(DownloadCanBeRemovedEvent message)
{
var trackedDownload = message.TrackedDownload;
if (trackedDownload == null || !trackedDownload.DownloadItem.CanBeRemoved || _configService.RemoveFailedDownloads == false)
{
return;
}
RemoveFromDownloadClient(trackedDownload);
// Already verified that it can be removed, just needs to be removed
RemoveFromDownloadClient(message.TrackedDownload);
}
private void RemoveFromDownloadClient(TrackedDownload trackedDownload)

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NLog;
using NzbDrone.Core.Configuration;
@ -32,9 +33,18 @@ public DownloadProcessingService(IConfigService configService,
_logger = logger;
}
private void RemoveCompletedDownloads(List<TrackedDownload> trackedDownloads)
{
foreach (var trackedDownload in trackedDownloads.Where(c => c.DownloadItem.CanBeRemoved && c.State == TrackedDownloadState.Imported))
{
_eventAggregator.PublishEvent(new DownloadCompletedEvent(trackedDownload));
}
}
public void Execute(ProcessMonitoredDownloadsCommand message)
{
var enableCompletedDownloadHandling = _configService.EnableCompletedDownloadHandling;
var removeCompletedDownloads = _configService.RemoveCompletedDownloads;
var trackedDownloads = _trackedDownloadService.GetTrackedDownloads()
.Where(t => t.IsTrackable)
.ToList();
@ -46,11 +56,21 @@ public void Execute(ProcessMonitoredDownloadsCommand message)
if (trackedDownload.State == TrackedDownloadState.FailedPending)
{
_failedDownloadService.ProcessFailed(trackedDownload);
continue;
}
if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending)
{
_completedDownloadService.Import(trackedDownload);
continue;
}
if (removeCompletedDownloads &&
trackedDownload.DownloadItem.Removed &&
trackedDownload.DownloadItem.CanBeRemoved &&
trackedDownload.State == TrackedDownloadState.Imported)
{
_eventAggregator.PublishEvent(new DownloadCanBeRemovedEvent(trackedDownload));
}
}
catch (Exception e)

View File

@ -108,6 +108,7 @@ private TrackedDownload ProcessClientItem(IDownloadClient downloadClient, Downlo
try
{
var trackedDownload = _trackedDownloadService.TrackDownload((DownloadClientDefinition)downloadClient.Definition, downloadItem);
if (trackedDownload != null && trackedDownload.State == TrackedDownloadState.Downloading)
{
_failedDownloadService.Check(trackedDownload);