luminate/Sources/LuminateCore/Models/JellyfinItemField.swift

78 lines
3.1 KiB
Swift

//
// JellyfinItemField.swift
//
// Copyright 2026 Brendan Szymanski <hello@bscubed.dev>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-or-later
//
/// Optional metadata a Jellyfin server only populates when explicitly asked for.
///
/// Item responses are lean by default: overviews, genres, media streams, and similar heavy fields
/// stay `nil` unless the corresponding field is requested. Request only what a screen renders --
/// every added field costs server work and response size.
package enum JellyfinItemField: String, CaseIterable, Hashable, Sendable {
/// The long-form synopsis.
case overview = "Overview"
/// The genres attached to the item.
case genres = "Genres"
/// Marketing taglines.
case taglines = "Taglines"
/// Free-form tags.
case tags = "Tags"
/// The producing studios.
case studios = "Studios"
/// Cast and crew.
case people = "People"
/// External database identifiers such as IMDb or TMDb.
case providerIDs = "ProviderIds"
/// The playable media sources, including container and bitrate.
case mediaSources = "MediaSources"
/// The audio, video, and subtitle streams of each media source.
case mediaStreams = "MediaStreams"
/// Chapter markers.
case chapters = "Chapters"
/// Trickplay tile metadata used for seek previews.
case trickplay = "Trickplay"
/// Whether the current user may play the item.
case playAccess = "PlayAccess"
/// The identifier of the containing item.
case parentID = "ParentId"
/// The studio of the parent series, for episodes.
case seriesStudio = "SeriesStudio"
/// The title in the original production language.
case originalTitle = "OriginalTitle"
/// How many direct children the item has.
case childCount = "ChildCount"
/// How many descendants the item has in total.
case recursiveItemCount = "RecursiveItemCount"
/// Whether the current user may delete the item.
case canDelete = "CanDelete"
/// Whether the current user may download the item.
case canDownload = "CanDownload"
/// The video width in pixels.
case width = "Width"
/// The video height in pixels.
case height = "Height"
/// Whether the item is high definition.
case isHighDefinition = "IsHD"
/// When the item was added to the library.
case dateCreated = "DateCreated"
/// The server-computed sort title.
case sortName = "SortName"
/// The aspect ratio of the primary image.
case primaryImageAspectRatio = "PrimaryImageAspectRatio"
}