Files
ersatztv/ErsatzTV.Core/Interfaces/Emby/IEmbyApiClient.cs
T
timothy 7cc12881de
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
docs(484): correct the counted-enumeration counts on the api client interfaces
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.
2026-07-25 16:36:35 +02:00

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);
}