mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-19 13:10:13 -07:00
Fixed: Remove seeded downloads if they've finished seeding after import
Closes #1389 (cherry picked from commit 9d766cfed588ee49525f68815b7e5eb980ddc11f)
This commit is contained in:
parent
e0d880f1da
commit
1d58b33ac6
5 changed files with 67 additions and 21 deletions
15
src/NzbDrone.Core/Download/DownloadCanBeRemovedEvent.cs
Normal file
15
src/NzbDrone.Core/Download/DownloadCanBeRemovedEvent.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
src/NzbDrone.Core/Download/DownloadCompletedEvent.cs
Normal file
15
src/NzbDrone.Core/Download/DownloadCompletedEvent.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,24 +1,14 @@
|
||||||
using System;
|
using System;
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Common.Messaging;
|
|
||||||
using NzbDrone.Core.Configuration;
|
using NzbDrone.Core.Configuration;
|
||||||
using NzbDrone.Core.Download.TrackedDownloads;
|
using NzbDrone.Core.Download.TrackedDownloads;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Download
|
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>,
|
public class DownloadEventHub : IHandle<DownloadFailedEvent>,
|
||||||
IHandle<DownloadCompletedEvent>
|
IHandle<DownloadCompletedEvent>,
|
||||||
|
IHandle<DownloadCanBeRemovedEvent>
|
||||||
{
|
{
|
||||||
private readonly IConfigService _configService;
|
private readonly IConfigService _configService;
|
||||||
private readonly IProvideDownloadClient _downloadClientProvider;
|
private readonly IProvideDownloadClient _downloadClientProvider;
|
||||||
|
@ -33,6 +23,18 @@ namespace NzbDrone.Core.Download
|
||||||
_logger = logger;
|
_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)
|
public void Handle(DownloadCompletedEvent message)
|
||||||
{
|
{
|
||||||
if (_configService.RemoveCompletedDownloads &&
|
if (_configService.RemoveCompletedDownloads &&
|
||||||
|
@ -48,16 +50,10 @@ namespace NzbDrone.Core.Download
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(DownloadFailedEvent message)
|
public void Handle(DownloadCanBeRemovedEvent message)
|
||||||
{
|
{
|
||||||
var trackedDownload = message.TrackedDownload;
|
// Already verified that it can be removed, just needs to be removed
|
||||||
|
RemoveFromDownloadClient(message.TrackedDownload);
|
||||||
if (trackedDownload == null || !trackedDownload.DownloadItem.CanBeRemoved || _configService.RemoveFailedDownloads == false)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RemoveFromDownloadClient(trackedDownload);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveFromDownloadClient(TrackedDownload trackedDownload)
|
private void RemoveFromDownloadClient(TrackedDownload trackedDownload)
|
||||||
|
|
|
@ -31,9 +31,18 @@ namespace NzbDrone.Core.Download
|
||||||
_logger = logger;
|
_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)
|
public void Execute(ProcessMonitoredDownloadsCommand message)
|
||||||
{
|
{
|
||||||
var enableCompletedDownloadHandling = _configService.EnableCompletedDownloadHandling;
|
var enableCompletedDownloadHandling = _configService.EnableCompletedDownloadHandling;
|
||||||
|
var removeCompletedDownloads = _configService.RemoveCompletedDownloads;
|
||||||
var trackedDownloads = _trackedDownloadService.GetTrackedDownloads()
|
var trackedDownloads = _trackedDownloadService.GetTrackedDownloads()
|
||||||
.Where(t => t.IsTrackable)
|
.Where(t => t.IsTrackable)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
@ -45,11 +54,21 @@ namespace NzbDrone.Core.Download
|
||||||
if (trackedDownload.State == TrackedDownloadState.DownloadFailedPending)
|
if (trackedDownload.State == TrackedDownloadState.DownloadFailedPending)
|
||||||
{
|
{
|
||||||
_failedDownloadService.ProcessFailed(trackedDownload);
|
_failedDownloadService.ProcessFailed(trackedDownload);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending)
|
if (enableCompletedDownloadHandling && trackedDownload.State == TrackedDownloadState.ImportPending)
|
||||||
{
|
{
|
||||||
_completedDownloadService.Import(trackedDownload);
|
_completedDownloadService.Import(trackedDownload);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (removeCompletedDownloads &&
|
||||||
|
trackedDownload.DownloadItem.Removed &&
|
||||||
|
trackedDownload.DownloadItem.CanBeRemoved &&
|
||||||
|
trackedDownload.State == TrackedDownloadState.Imported)
|
||||||
|
{
|
||||||
|
_eventAggregator.PublishEvent(new DownloadCanBeRemovedEvent(trackedDownload));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -114,6 +114,7 @@ namespace NzbDrone.Core.Download.TrackedDownloads
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var trackedDownload = _trackedDownloadService.TrackDownload((DownloadClientDefinition)downloadClient.Definition, downloadItem);
|
var trackedDownload = _trackedDownloadService.TrackDownload((DownloadClientDefinition)downloadClient.Definition, downloadItem);
|
||||||
|
|
||||||
if (trackedDownload != null && trackedDownload.State == TrackedDownloadState.Downloading)
|
if (trackedDownload != null && trackedDownload.State == TrackedDownloadState.Downloading)
|
||||||
{
|
{
|
||||||
_failedDownloadService.Check(trackedDownload);
|
_failedDownloadService.Check(trackedDownload);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue