diff --git a/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs b/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs index 75e13e528..6b2a820ee 100644 --- a/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs +++ b/src/NzbDrone.Core/Download/Clients/Flood/Flood.cs @@ -17,8 +17,10 @@ namespace NzbDrone.Core.Download.Clients.Flood public class Flood : TorrentClientBase { private readonly IFloodProxy _proxy; + private readonly IDownloadSeedConfigProvider _downloadSeedConfigProvider; public Flood(IFloodProxy proxy, + IDownloadSeedConfigProvider downloadSeedConfigProvider, ITorrentFileInfoReader torrentFileInfoReader, IHttpClient httpClient, IConfigService configService, @@ -28,6 +30,7 @@ namespace NzbDrone.Core.Download.Clients.Flood : base(torrentFileInfoReader, httpClient, configService, diskProvider, remotePathMappingService, logger) { _proxy = proxy; + _downloadSeedConfigProvider = downloadSeedConfigProvider; } private static IEnumerable HandleTags(RemoteBook remoteBook, FloodSettings settings) @@ -70,7 +73,7 @@ namespace NzbDrone.Core.Download.Clients.Flood } public override string Name => "Flood"; - public override ProviderMessage Message => new ProviderMessage("Readarr is unable to remove torrents that have finished seeding when using Flood", ProviderMessageType.Warning); + public override ProviderMessage Message => new ProviderMessage("Readarr will handle automatic removal of torrents based on the current seed criteria in Settings -> Indexers", ProviderMessageType.Info); protected override string AddFromTorrentFile(RemoteBook remoteBook, string hash, string filename, byte[] fileContent) { @@ -112,6 +115,8 @@ namespace NzbDrone.Core.Download.Clients.Flood TotalSize = properties.SizeBytes, SeedRatio = properties.Ratio, Message = properties.Message, + CanMoveFiles = false, + CanBeRemoved = false, }; if (properties.Eta > 0) @@ -136,7 +141,28 @@ namespace NzbDrone.Core.Download.Clients.Flood item.Status = DownloadItemStatus.Paused; } - item.CanMoveFiles = item.CanBeRemoved = false; + if (item.Status == DownloadItemStatus.Completed) + { + // Grab cached seedConfig + var seedConfig = _downloadSeedConfigProvider.GetSeedConfiguration(item.DownloadId); + + if (seedConfig != null) + { + if (item.SeedRatio >= seedConfig.Ratio) + { + // Check if seed ratio reached + item.CanMoveFiles = item.CanBeRemoved = true; + } + else if (properties.DateFinished != null && properties.DateFinished > 0) + { + // Check if seed time reached + if ((DateTimeOffset.Now - DateTimeOffset.FromUnixTimeSeconds(properties.DateFinished)) >= seedConfig.SeedTime) + { + item.CanMoveFiles = item.CanBeRemoved = true; + } + } + } + } items.Add(item); } diff --git a/src/NzbDrone.Core/Download/Clients/Flood/Types/Torrent.cs b/src/NzbDrone.Core/Download/Clients/Flood/Types/Torrent.cs index 3f3500307..92ac1d1ab 100644 --- a/src/NzbDrone.Core/Download/Clients/Flood/Types/Torrent.cs +++ b/src/NzbDrone.Core/Download/Clients/Flood/Types/Torrent.cs @@ -31,5 +31,9 @@ namespace NzbDrone.Core.Download.Clients.Flood.Types [JsonProperty(PropertyName = "tags")] public List Tags { get; set; } + + // added in Flood 4.5 + [JsonProperty(PropertyName = "dateFinished")] + public long? DateFinished { get; set; } } }