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); Task> GetExistingSeasons(TLibrary library, TShow show); Task> GetExistingEpisodes(TLibrary library, TSeason season); Task>> GetOrAdd(TLibrary library, TShow item); Task>> GetOrAdd(TLibrary library, TSeason item); Task>> GetOrAdd(TLibrary library, TEpisode item, bool deepScan); Task SetEtag(TShow show, string etag); Task SetEtag(TSeason season, string etag); Task SetEtag(TEpisode episode, string etag); Task> FlagNormal(TLibrary library, TEpisode episode); Task> FlagNormal(TLibrary library, TSeason season); Task> FlagNormal(TLibrary library, TShow show); Task> FlagFileNotFoundShows(TLibrary library, List showItemIds); Task> FlagFileNotFoundSeasons(TLibrary library, List seasonItemIds); Task> FlagFileNotFoundEpisodes(TLibrary library, List episodeItemIds); Task> FlagUnavailable(TLibrary library, TEpisode episode); Task> FlagRemoteOnly(TLibrary library, TEpisode episode); }