using Data.Models.Configuration.DownloadCleaner; namespace Infrastructure.Verticals.DownloadClient; public interface IDownloadService : IDisposable { /// /// Gets the unique identifier for this download client /// /// The client ID Guid GetClientId(); 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 categories by which to filter the downloads. /// A list of downloads for the provided categories. List? FilterDownloadsToBeCleanedAsync(List? downloads, List categories); /// /// 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 categories that should be cleaned. /// The hashes that should not be cleaned. /// The downloads to ignore from processing. Task CleanDownloadsAsync(List? downloads, List categoriesToClean, HashSet excludedHashes, IReadOnlyList ignoredDownloads); /// /// Changes the category for downloads that have no hardlinks. /// /// The downloads to change. /// The hashes that should not be cleaned. /// The downloads to ignore from processing. Task ChangeCategoryForNoHardLinksAsync(List? downloads, HashSet excludedHashes, IReadOnlyList ignoredDownloads); /// /// Deletes a download item. /// public Task DeleteDownload(string hash); /// /// Creates a category. /// /// The category name. public Task CreateCategoryAsync(string name); }