Compare commits

...

2 Commits

Author SHA1 Message Date
Flaminel
2cc3eb4ebb Fix ignored downloads not checking for certain fields (#362) 2025-11-09 18:24:26 +02:00
Flaminel
3a064a22bd Remove hardcoded app status timeout (#356) 2025-11-03 18:38:09 +02:00
5 changed files with 90 additions and 19 deletions

View File

@@ -1,5 +1,6 @@
using Cleanuparr.Domain.Entities;
using Cleanuparr.Domain.Entities.Deluge.Response;
using Cleanuparr.Infrastructure.Services;
namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge;
@@ -70,11 +71,26 @@ public sealed class DelugeItem : ITorrentItem
{
return false;
}
foreach (string pattern in ignoredDownloads)
{
if (Hash?.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) is true)
{
return true;
}
return ignoredDownloads.Any(pattern =>
Name.Contains(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Hash.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Trackers.Any(tracker => tracker.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase)));
if (Category?.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) is true)
{
return true;
}
if (_downloadStatus.Trackers.Any(x => UriService.GetDomain(x.Url)?.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase) is true))
{
return true;
}
}
return false;
}
/// <summary>

View File

@@ -1,4 +1,5 @@
using Cleanuparr.Domain.Entities;
using Cleanuparr.Infrastructure.Features.DownloadClient.UTorrent.Extensions;
using QBittorrent.Client;
namespace Cleanuparr.Infrastructure.Features.DownloadClient.QBittorrent;
@@ -73,10 +74,30 @@ public sealed class QBitItem : ITorrentItem
return false;
}
return ignoredDownloads.Any(pattern =>
Name.Contains(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Hash.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Trackers.Any(tracker => tracker.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase)));
foreach (string pattern in ignoredDownloads)
{
if (Hash.Equals(pattern, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
if (Category?.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) is true)
{
return true;
}
if (_torrentInfo.Tags.Contains(pattern, StringComparer.InvariantCultureIgnoreCase))
{
return true;
}
if (Trackers.Any(tracker => tracker.ShouldIgnore(ignoredDownloads)))
{
return true;
}
}
return false;
}
/// <summary>

View File

@@ -1,4 +1,6 @@
using Cleanuparr.Domain.Entities;
using Cleanuparr.Infrastructure.Extensions;
using Cleanuparr.Infrastructure.Services;
using Transmission.API.RPC.Entity;
namespace Cleanuparr.Infrastructure.Features.DownloadClient.Transmission;
@@ -55,7 +57,7 @@ public sealed class TransmissionItem : ITorrentItem
public long SeedingTimeSeconds => _torrentInfo.SecondsSeeding ?? 0;
// Categories and tags
public string? Category => _torrentInfo.Labels?.FirstOrDefault();
public string? Category => _torrentInfo.GetCategory();
public IReadOnlyList<string> Tags => _torrentInfo.Labels?.ToList().AsReadOnly() ?? (IReadOnlyList<string>)Array.Empty<string>();
// State checking methods
@@ -78,10 +80,28 @@ public sealed class TransmissionItem : ITorrentItem
return false;
}
return ignoredDownloads.Any(pattern =>
Name.Contains(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Hash.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Trackers.Any(tracker => tracker.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase)));
foreach (string pattern in ignoredDownloads)
{
if (Hash?.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) is true)
{
return true;
}
if (Category?.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) is true)
{
return true;
}
bool? hasIgnoredTracker = _torrentInfo.Trackers?
.Any(x => UriService.GetDomain(x.Announce)?.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase) ?? false);
if (hasIgnoredTracker is true)
{
return true;
}
}
return false;
}
/// <summary>

View File

@@ -1,5 +1,6 @@
using Cleanuparr.Domain.Entities;
using Cleanuparr.Domain.Entities.UTorrent.Response;
using Cleanuparr.Infrastructure.Features.DownloadClient.UTorrent.Extensions;
namespace Cleanuparr.Infrastructure.Features.DownloadClient.UTorrent;
@@ -82,11 +83,26 @@ public sealed class UTorrentItemWrapper : ITorrentItem
{
return false;
}
foreach (string value in ignoredDownloads)
{
if (Hash.Equals(value, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
if (Category?.Equals(value, StringComparison.InvariantCultureIgnoreCase) is true)
{
return true;
}
return ignoredDownloads.Any(pattern =>
Name.Contains(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Hash.Equals(pattern, StringComparison.InvariantCultureIgnoreCase) ||
Trackers.Any(tracker => tracker.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase)));
if (_torrentProperties.TrackerList.Any(x => x.ShouldIgnore(ignoredDownloads)))
{
return true;
}
}
return false;
}
/// <summary>

View File

@@ -22,7 +22,6 @@ public sealed class AppStatusRefreshService : BackgroundService
private static readonly Uri StatusUri = new("https://cleanuparr-status.pages.dev/status.json");
private static readonly TimeSpan PollInterval = TimeSpan.FromMinutes(10);
private static readonly TimeSpan StartupDelay = TimeSpan.FromSeconds(5);
private static readonly TimeSpan RequestTimeout = TimeSpan.FromSeconds(3);
public AppStatusRefreshService(
ILogger<AppStatusRefreshService> logger,
@@ -70,7 +69,6 @@ public sealed class AppStatusRefreshService : BackgroundService
try
{
using var client = _httpClientFactory.CreateClient(Constants.HttpClientWithRetryName);
client.Timeout = RequestTimeout;
using var response = await client.GetAsync(StatusUri, cancellationToken);
response.EnsureSuccessStatusCode();