mirror of
https://github.com/Cleanuparr/Cleanuparr.git
synced 2026-11-01 12:03:34 -05:00
80 lines
2.8 KiB
C#
80 lines
2.8 KiB
C#
using Cleanuparr.Domain.Entities;
|
|
using Cleanuparr.Domain.Enums;
|
|
using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
|
|
using Microsoft.Extensions.Logging;
|
|
using Transmission.API.RPC.Entity;
|
|
|
|
namespace Cleanuparr.Infrastructure.Features.DownloadClient.Transmission;
|
|
|
|
public partial class TransmissionService
|
|
{
|
|
/// <inheritdoc/>
|
|
public override async Task<DownloadCheckResult> ShouldRemoveFromArrQueueAsync(string downloadId, IReadOnlyList<string> ignoredDownloads)
|
|
{
|
|
DownloadCheckResult result = new();
|
|
TorrentInfo? download = await GetTorrentAsync(downloadId);
|
|
|
|
if (download is null)
|
|
{
|
|
_logger.LogDebug("Failed to find torrent {DownloadId} in the {Name} download client", downloadId, _downloadClientConfig.Name);
|
|
return result;
|
|
}
|
|
|
|
bool isPrivate = download.IsPrivate ?? false;
|
|
result.IsPrivate = isPrivate;
|
|
result.Found = true;
|
|
SetDownloadClientContext();
|
|
|
|
// Create ITorrentItem wrapper for consistent interface usage
|
|
TransmissionItemWrapper torrent = new(download);
|
|
result.Item = torrent;
|
|
|
|
if (torrent.IsIgnored(ignoredDownloads))
|
|
{
|
|
_logger.LogDebug("skip | download is ignored | {name}", torrent.Name);
|
|
return result;
|
|
}
|
|
|
|
bool shouldRemove = download.FileStats?.Length > 0;
|
|
|
|
foreach (TransmissionTorrentFileStats stats in download.FileStats ?? [])
|
|
{
|
|
if (!stats.Wanted.HasValue)
|
|
{
|
|
// if any files stats are missing, do not remove
|
|
shouldRemove = false;
|
|
}
|
|
|
|
if (stats.Wanted.HasValue && stats.Wanted.Value)
|
|
{
|
|
// if any files are wanted, do not remove
|
|
shouldRemove = false;
|
|
}
|
|
}
|
|
|
|
if (shouldRemove)
|
|
{
|
|
// remove if all files are unwanted
|
|
_logger.LogDebug("all files are unwanted | removing download | {name}", torrent.Name);
|
|
result.ShouldRemove = true;
|
|
result.DeleteReason = DeleteReason.AllFilesSkipped;
|
|
result.DeleteFromClient = true;
|
|
return result;
|
|
}
|
|
|
|
// remove if download is stuck
|
|
(result.ShouldRemove, result.DeleteReason, result.DeleteFromClient, result.ChangeCategory) = await EvaluateDownloadRemoval(torrent);
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
protected override Func<Task<bool>>? GetAltSpeedLimitProbe() => IsAltSpeedLimitActiveAsync;
|
|
|
|
/// <inheritdoc/>
|
|
protected override Task<(bool ShouldRemove, DeleteReason Reason, bool DeleteFromClient, bool ChangeCategory)?> CheckIfErrored(
|
|
ITorrentItemWrapper wrapper,
|
|
ErroredConfig erroredConfig) =>
|
|
StrikeErroredAsync(wrapper, erroredConfig, () => ResumeDownload(wrapper));
|
|
}
|