using System.Collections.Concurrent; using System.Text.RegularExpressions; using Common.Configuration.ContentBlocker; using Common.Configuration.DownloadCleaner; using Infrastructure.Interceptors; namespace Infrastructure.Verticals.DownloadClient; public interface IDownloadService : IDisposable { public Task LoginAsync(); /// /// 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); /// /// Blocks unwanted files from being fully downloaded. /// /// The torrent hash. /// The . /// The patterns to test the files against. /// The regexes to test the files against. /// Downloads to ignore from processing. /// True if all files have been blocked; otherwise false. public Task BlockUnwantedFilesAsync(string hash, BlocklistType blocklistType, ConcurrentBag patterns, ConcurrentBag regexes, 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); }