using ErsatzTV.Core.Domain; using ErsatzTV.Core.Metadata; namespace ErsatzTV.Core.Interfaces.Repositories; public interface IMediaServerTelevisionRepository where TLibrary : Library where TShow : Show where TSeason : Season where TEpisode : Episode where TEtag : MediaServerItemEtag { Task> GetExistingShows(TLibrary library, CancellationToken cancellationToken); Task> GetExistingSeasons(TLibrary library, TShow show, CancellationToken cancellationToken); Task> GetExistingEpisodes(TLibrary library, TSeason season, CancellationToken cancellationToken); Task>> GetOrAdd( TLibrary library, TShow item, CancellationToken cancellationToken); Task>> GetOrAdd( TLibrary library, TSeason item, CancellationToken cancellationToken); Task>> GetOrAdd( TLibrary library, TEpisode item, bool deepScan, CancellationToken cancellationToken); Task SetEtag(TShow show, string etag, CancellationToken cancellationToken); Task SetEtag(TSeason season, string etag, CancellationToken cancellationToken); Task SetEtag(TEpisode episode, string etag, CancellationToken cancellationToken); Task> FlagNormal(TLibrary library, TEpisode episode, CancellationToken cancellationToken); Task> FlagNormal(TLibrary library, TSeason season, CancellationToken cancellationToken); Task> FlagNormal(TLibrary library, TShow show, CancellationToken cancellationToken); Task> FlagFileNotFoundShows( TLibrary library, List showItemIds, CancellationToken cancellationToken); Task> FlagFileNotFoundSeasons( TLibrary library, List seasonItemIds, CancellationToken cancellationToken); Task> FlagFileNotFoundEpisodes( TLibrary library, List episodeItemIds, CancellationToken cancellationToken); // Cascade helpers (#476): when a parent is swept to FileNotFound because it is gone from the media // server, the per-parent loop never visits it, so its descendants are never reconciled. These flag // the descendants by parent MediaItem.Id (Season.ShowId / Episode.SeasonId are on the base tables). Task> FlagFileNotFoundSeasonsForShows( List showIds, CancellationToken cancellationToken); Task> FlagFileNotFoundEpisodesForSeasons( List seasonIds, CancellationToken cancellationToken); Task> FlagUnavailable(TLibrary library, TEpisode episode, CancellationToken cancellationToken); Task> FlagRemoteOnly(TLibrary library, TEpisode episode, CancellationToken cancellationToken); }