using Cleanuparr.Domain.Entities; using Cleanuparr.Domain.Entities.HealthCheck; using Cleanuparr.Persistence.Models.Configuration; using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner; namespace Cleanuparr.Infrastructure.Features.DownloadClient; public interface IDownloadService : IDisposable { DownloadClientConfig ClientConfig { get; } public Task LoginAsync(); /// /// Performs a health check on the download client /// /// The health check result public Task HealthCheckAsync(); /// /// Checks whether the download should be removed from the *arr queue. /// /// The download hash. /// Downloads to ignore from processing. public Task ShouldRemoveFromArrQueueAsync(string hash, IReadOnlyList ignoredDownloads); /// /// Fetches all seeding downloads. /// /// A list of downloads that are seeding. Task> GetSeedingDownloads(); /// /// Filters downloads that should be cleaned. /// /// The downloads to filter. /// The seeding rules by which to filter the downloads. /// A list of downloads for the provided categories. List? FilterDownloadsToBeCleanedAsync(List? downloads, List seedingRules); /// /// Filters downloads that should have their category changed. /// /// The downloads to filter. /// The categories by which to filter the downloads. /// A list of downloads for the provided categories. List? FilterDownloadsToChangeCategoryAsync(List? downloads, List categories); /// /// Cleans the downloads. /// /// The downloads to clean. /// The seeding rules. Task CleanDownloadsAsync(List? downloads, List seedingRules); /// /// Changes the category for downloads that have no hardlinks. /// /// The downloads to change. Task ChangeCategoryForNoHardLinksAsync(List? downloads); /// /// Deletes a download item. /// /// The torrent item. /// Whether to delete the source files along with the torrent. Defaults to true. public Task DeleteDownload(ITorrentItemWrapper item, bool deleteSourceFiles); /// /// Creates a category. /// /// The category name. public Task CreateCategoryAsync(string name); /// /// Blocks unwanted files from being fully downloaded. /// /// The torrent hash. /// Downloads to ignore from processing. /// True if all files have been blocked; otherwise false. public Task BlockUnwantedFilesAsync(string hash, IReadOnlyList ignoredDownloads); }