PR Gates / CI image pin matches docker/ci (pull_request) Successful in 16s
PR Gates / Docs update reminder (pull_request) Successful in 16s
PR Gates / decisions lifecycle (pull_request) Successful in 21s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 6m7s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 9s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 13s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 17m26s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 22m17s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Review follow-up. The comments still said three (Jellyfin) / two (Emby) library-level enumerations after the nested season and episode ones were counted, which understates the reach of the very safety property this branch establishes -- a future auditor reading them would conclude the nested sweeps are unprotected.
69 lines
2.7 KiB
C#
69 lines
2.7 KiB
C#
using ErsatzTV.Core.Domain;
|
|
using ErsatzTV.Core.Emby;
|
|
using ErsatzTV.Core.Metadata;
|
|
|
|
namespace ErsatzTV.Core.Interfaces.Emby;
|
|
|
|
public interface IEmbyApiClient
|
|
{
|
|
Task<Either<BaseError, EmbyServerInformation>> GetServerInformation(string address, string apiKey);
|
|
Task<Either<BaseError, List<EmbyLibrary>>> GetLibraries(string address, string apiKey);
|
|
|
|
// #484: the four enumerations that feed a reconciliation sweep accept an optional per-enumeration
|
|
// counter -- the two library-level ones (movies, shows) AND the two nested ones (seasons per show,
|
|
// episodes per season), which feed the per-parent sweeps in MediaServerTelevisionLibraryScanner.
|
|
// The caller creates one instance per enumeration, scoped to the parent it sweeps, and reads it
|
|
// only after that enumeration completes; passing null (the default) opts out and costs existing
|
|
// callers nothing.
|
|
IAsyncEnumerable<Tuple<EmbyMovie, int>> GetMovieLibraryItems(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
MediaServerProjectionFailureCounter projectionFailures = null);
|
|
|
|
IAsyncEnumerable<Tuple<EmbyShow, int>> GetShowLibraryItems(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
MediaServerProjectionFailureCounter projectionFailures = null);
|
|
|
|
// #484: the nested per-show season and per-season episode enumerations feed their own sweeps
|
|
// (FlagFileNotFoundSeasons / FlagFileNotFoundEpisodes), so they carry the same optional counter.
|
|
IAsyncEnumerable<Tuple<EmbySeason, int>> GetSeasonLibraryItems(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
string showId,
|
|
MediaServerProjectionFailureCounter projectionFailures = null);
|
|
|
|
IAsyncEnumerable<Tuple<EmbyEpisode, int>> GetEpisodeLibraryItems(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
string showId,
|
|
string seasonId,
|
|
MediaServerProjectionFailureCounter projectionFailures = null);
|
|
|
|
IAsyncEnumerable<Tuple<EmbyCollection, int>> GetCollectionLibraryItems(string address, string apiKey);
|
|
|
|
IAsyncEnumerable<Tuple<MediaItem, int>> GetCollectionItems(string address, string apiKey, string collectionId);
|
|
|
|
Task<Either<BaseError, MediaVersion>> GetPlaybackInfo(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
string itemId);
|
|
|
|
Task<Either<BaseError, Option<EmbyShow>>> GetSingleShow(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
string showId);
|
|
|
|
Task<Either<BaseError, List<EmbyShow>>> SearchShowsByTitle(
|
|
string address,
|
|
string apiKey,
|
|
EmbyLibrary library,
|
|
string showTitle);
|
|
}
|