using Cleanuparr.Domain.Entities.Arr; using Cleanuparr.Persistence.Models.Configuration.Arr; namespace Cleanuparr.Infrastructure.Features.Arr.Interfaces; public interface ISonarrClient : IArrClient { /// /// Streams series from a Sonarr instance one item at a time /// IAsyncEnumerable StreamAllSeriesAsync(ArrInstance arrInstance, CancellationToken cancellationToken = default); /// /// Fetches all episodes for a specific series from a Sonarr instance /// Task> GetEpisodesAsync(ArrInstance arrInstance, long seriesId, CancellationToken cancellationToken = default); /// /// Fetches quality profiles from a Sonarr instance /// Task> GetQualityProfilesAsync(ArrInstance arrInstance); /// /// Fetches episode file metadata for a specific series, including quality cutoff status /// Task> GetEpisodeFilesAsync(ArrInstance arrInstance, long seriesId, CancellationToken cancellationToken = default); /// /// Fetches custom format scores for episode files in batches /// Task> GetEpisodeFileScoresAsync(ArrInstance arrInstance, List episodeFileIds); /// /// Fetches the series/season pairs Sonarr grabbed an episode for since the given time. /// Task> GetRecentlyGrabbedSeasonsAsync(ArrInstance arrInstance, DateTimeOffset since, CancellationToken cancellationToken = default); /// /// Fetches every episode Sonarr lists as missing, filtered by monitored state. /// Task> GetMissingEpisodesAsync(ArrInstance arrInstance, bool monitored, CancellationToken cancellationToken = default); /// /// Fetches every episode Sonarr lists as a cutoff-unmet upgrade, filtered by monitored state. /// Task> GetCutoffUnmetEpisodesAsync(ArrInstance arrInstance, bool monitored, CancellationToken cancellationToken = default); }