From a6c96698dcc2d5cf62863dc01f61176bccc47382 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 20 Oct 2025 10:33:02 -0600 Subject: [PATCH 1/7] Generate on 10.11 --- Sources/Entities/BackupManifestDto.swift | 55 + Sources/Entities/BackupOptionsDto.swift | 44 + .../Entities/BackupRestoreRequestDto.swift | 30 + Sources/Entities/BaseItemDto.swift | 10 +- Sources/Entities/BaseItemPerson.swift | 2 +- Sources/Entities/BrandingOptionsDto.swift | 41 + Sources/Entities/CustomDatabaseOption.swift | 34 + Sources/Entities/CustomDatabaseOptions.swift | 49 + .../DatabaseConfigurationOptions.swift | 45 + .../DatabaseLockingBehaviorTypes.swift | 16 + Sources/Entities/DisplayPreferencesDto.swift | 4 +- Sources/Entities/ExternalIDInfo.swift | 9 +- Sources/Entities/ExternalIDMediaType.swift | 1 + Sources/Entities/FolderStorageDto.swift | 49 + Sources/Entities/GroupUpdate.swift | 48 +- Sources/Entities/GroupUpdateType.swift | 2 - Sources/Entities/ItemFields.swift | 11 - Sources/Entities/ItemSortBy.swift | 2 - Sources/Entities/LibraryOptions.swift | 10 +- .../Entities/LibraryOptionsResultDto.swift | 6 + Sources/Entities/LibraryStorageDto.swift | 39 + Sources/Entities/LyricLine.swift | 7 +- Sources/Entities/LyricLineCue.swift | 44 + Sources/Entities/MediaSegmentDto.swift | 2 +- Sources/Entities/MediaSegmentType.swift | 2 +- Sources/Entities/MediaStream.swift | 11 +- Sources/Entities/MetadataEditorInfo.swift | 7 + Sources/Entities/NetworkConfiguration.swift | 2 + Sources/Entities/OpenLiveStreamDto.swift | 2 +- .../Entities/OutboundWebSocketMessage.swift | 8 +- Sources/Entities/ParentalRating.swift | 7 +- Sources/Entities/ParentalRatingScore.swift | 34 + Sources/Entities/PlaybackInfoDto.swift | 2 +- Sources/Entities/PluginStatus.swift | 1 + Sources/Entities/ProfileConditionValue.swift | 1 + Sources/Entities/SearchHint.swift | 4 +- Sources/Entities/ServerConfiguration.swift | 37 +- .../Entities/StartupConfigurationDto.swift | 12 +- Sources/Entities/StartupRemoteAccessDto.swift | 2 + .../SyncPlayGroupDoesNotExistUpdate.swift | 38 + .../Entities/SyncPlayGroupJoinedUpdate.swift | 38 + .../Entities/SyncPlayGroupLeftUpdate.swift | 38 + .../Entities/SyncPlayGroupUpdateMessage.swift | 39 + .../SyncPlayLibraryAccessDeniedUpdate.swift | 38 + .../Entities/SyncPlayNotInGroupUpdate.swift | 38 + .../Entities/SyncPlayPlayQueueUpdate.swift | 38 + Sources/Entities/SyncPlayStateUpdate.swift | 38 + .../Entities/SyncPlayUserJoinedUpdate.swift | 38 + Sources/Entities/SyncPlayUserLeftUpdate.swift | 38 + Sources/Entities/SystemInfo.swift | 14 + Sources/Entities/SystemStorageDto.swift | 73 + Sources/Entities/TaskTriggerInfoType.swift | 17 + Sources/Entities/TranscodeReason.swift | 1 + Sources/Entities/TranscodingInfo.swift | 2 +- Sources/Entities/TranscodingProfile.swift | 4 +- Sources/Entities/TrickplayInfoDto.swift | 67 + Sources/Entities/TunerHostInfo.swift | 5 + Sources/Entities/UserPolicy.swift | 7 +- Sources/Entities/VideoRangeType.swift | 4 + .../Extensions/JellyfinClient+Version.swift | 2 +- Sources/Paths/CreateBackupAPI.swift | 18 + Sources/Paths/GetBackupAPI.swift | 18 + Sources/Paths/GetBrandingCss2API.swift | 2 +- Sources/Paths/GetBrandingCssAPI.swift | 2 +- Sources/Paths/GetBrandingOptionsAPI.swift | 2 +- Sources/Paths/GetGuideInfoAPI.swift | 2 +- .../GetMusicAlbumRemoteSearchResultsAPI.swift | 5 +- ...GetMusicArtistRemoteSearchResultsAPI.swift | 5 +- .../GetMusicVideoRemoteSearchResultsAPI.swift | 5 +- .../GetPersonRemoteSearchResultsAPI.swift | 5 +- Sources/Paths/GetRecommendedProgramsAPI.swift | 4 + Sources/Paths/GetSplashscreenAPI.swift | 45 +- Sources/Paths/GetSystemStorageAPI.swift | 18 + .../GetTrailerRemoteSearchResultsAPI.swift | 5 +- Sources/Paths/GetUserImageAPI.swift | 58 +- Sources/Paths/HeadUserImageAPI.swift | 58 +- Sources/Paths/ListBackupsAPI.swift | 18 + Sources/Paths/OnPlaybackProgressAPI.swift | 1 + Sources/Paths/OnPlaybackStartAPI.swift | 1 + Sources/Paths/OnPlaybackStoppedAPI.swift | 1 + Sources/Paths/StartRestoreBackupAPI.swift | 18 + Sources/Paths/SyncPlayCreateGroupAPI.swift | 2 +- Sources/Paths/SyncPlayGetGroupAPI.swift | 18 + .../UpdateBrandingConfigurationAPI.swift | 18 + Sources/jellyfin-openapi-stable.json | 12315 ++++++++++++++-- 85 files changed, 12535 insertions(+), 1378 deletions(-) create mode 100644 Sources/Entities/BackupManifestDto.swift create mode 100644 Sources/Entities/BackupOptionsDto.swift create mode 100644 Sources/Entities/BackupRestoreRequestDto.swift create mode 100644 Sources/Entities/BrandingOptionsDto.swift create mode 100644 Sources/Entities/CustomDatabaseOption.swift create mode 100644 Sources/Entities/CustomDatabaseOptions.swift create mode 100644 Sources/Entities/DatabaseConfigurationOptions.swift create mode 100644 Sources/Entities/DatabaseLockingBehaviorTypes.swift create mode 100644 Sources/Entities/FolderStorageDto.swift create mode 100644 Sources/Entities/LibraryStorageDto.swift create mode 100644 Sources/Entities/LyricLineCue.swift create mode 100644 Sources/Entities/ParentalRatingScore.swift create mode 100644 Sources/Entities/SyncPlayGroupDoesNotExistUpdate.swift create mode 100644 Sources/Entities/SyncPlayGroupJoinedUpdate.swift create mode 100644 Sources/Entities/SyncPlayGroupLeftUpdate.swift create mode 100644 Sources/Entities/SyncPlayGroupUpdateMessage.swift create mode 100644 Sources/Entities/SyncPlayLibraryAccessDeniedUpdate.swift create mode 100644 Sources/Entities/SyncPlayNotInGroupUpdate.swift create mode 100644 Sources/Entities/SyncPlayPlayQueueUpdate.swift create mode 100644 Sources/Entities/SyncPlayStateUpdate.swift create mode 100644 Sources/Entities/SyncPlayUserJoinedUpdate.swift create mode 100644 Sources/Entities/SyncPlayUserLeftUpdate.swift create mode 100644 Sources/Entities/SystemStorageDto.swift create mode 100644 Sources/Entities/TaskTriggerInfoType.swift create mode 100644 Sources/Entities/TrickplayInfoDto.swift create mode 100644 Sources/Paths/CreateBackupAPI.swift create mode 100644 Sources/Paths/GetBackupAPI.swift create mode 100644 Sources/Paths/GetSystemStorageAPI.swift create mode 100644 Sources/Paths/ListBackupsAPI.swift create mode 100644 Sources/Paths/StartRestoreBackupAPI.swift create mode 100644 Sources/Paths/SyncPlayGetGroupAPI.swift create mode 100644 Sources/Paths/UpdateBrandingConfigurationAPI.swift diff --git a/Sources/Entities/BackupManifestDto.swift b/Sources/Entities/BackupManifestDto.swift new file mode 100644 index 000000000..a0be54fc8 --- /dev/null +++ b/Sources/Entities/BackupManifestDto.swift @@ -0,0 +1,55 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Manifest type for backups internal structure. +public struct BackupManifestDto: Codable, Hashable { + /// Gets or sets the backup engine version this backup was created with. + public var backupEngineVersion: String? + /// Gets or sets the date this backup was created with. + public var dateCreated: Date? + /// Gets or sets the contents of the backup archive. + public var options: BackupOptionsDto? + /// Gets or sets the path to the backup on the system. + public var path: String? + /// Gets or sets the jellyfin version this backup was created with. + public var serverVersion: String? + + public init( + backupEngineVersion: String? = nil, + dateCreated: Date? = nil, + options: BackupOptionsDto? = nil, + path: String? = nil, + serverVersion: String? = nil + ) { + self.backupEngineVersion = backupEngineVersion + self.dateCreated = dateCreated + self.options = options + self.path = path + self.serverVersion = serverVersion + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.backupEngineVersion = try values.decodeIfPresent(String.self, forKey: "BackupEngineVersion") + self.dateCreated = try values.decodeIfPresent(Date.self, forKey: "DateCreated") + self.options = try values.decodeIfPresent(BackupOptionsDto.self, forKey: "Options") + self.path = try values.decodeIfPresent(String.self, forKey: "Path") + self.serverVersion = try values.decodeIfPresent(String.self, forKey: "ServerVersion") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(backupEngineVersion, forKey: "BackupEngineVersion") + try values.encodeIfPresent(dateCreated, forKey: "DateCreated") + try values.encodeIfPresent(options, forKey: "Options") + try values.encodeIfPresent(path, forKey: "Path") + try values.encodeIfPresent(serverVersion, forKey: "ServerVersion") + } +} diff --git a/Sources/Entities/BackupOptionsDto.swift b/Sources/Entities/BackupOptionsDto.swift new file mode 100644 index 000000000..5ac0c9515 --- /dev/null +++ b/Sources/Entities/BackupOptionsDto.swift @@ -0,0 +1,44 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Defines the optional contents of the backup archive. +public struct BackupOptionsDto: Codable, Hashable { + /// Gets or sets a value indicating whether the archive contains the Database contents. + public var isDatabase: Bool? + /// Gets or sets a value indicating whether the archive contains the Metadata contents. + public var isMetadata: Bool? + /// Gets or sets a value indicating whether the archive contains the Subtitle contents. + public var isSubtitles: Bool? + /// Gets or sets a value indicating whether the archive contains the Trickplay contents. + public var isTrickplay: Bool? + + public init(isDatabase: Bool? = nil, isMetadata: Bool? = nil, isSubtitles: Bool? = nil, isTrickplay: Bool? = nil) { + self.isDatabase = isDatabase + self.isMetadata = isMetadata + self.isSubtitles = isSubtitles + self.isTrickplay = isTrickplay + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.isDatabase = try values.decodeIfPresent(Bool.self, forKey: "Database") + self.isMetadata = try values.decodeIfPresent(Bool.self, forKey: "Metadata") + self.isSubtitles = try values.decodeIfPresent(Bool.self, forKey: "Subtitles") + self.isTrickplay = try values.decodeIfPresent(Bool.self, forKey: "Trickplay") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(isDatabase, forKey: "Database") + try values.encodeIfPresent(isMetadata, forKey: "Metadata") + try values.encodeIfPresent(isSubtitles, forKey: "Subtitles") + try values.encodeIfPresent(isTrickplay, forKey: "Trickplay") + } +} diff --git a/Sources/Entities/BackupRestoreRequestDto.swift b/Sources/Entities/BackupRestoreRequestDto.swift new file mode 100644 index 000000000..b5091f2ed --- /dev/null +++ b/Sources/Entities/BackupRestoreRequestDto.swift @@ -0,0 +1,30 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Defines properties used to start a restore process. +public struct BackupRestoreRequestDto: Codable, Hashable { + /// Gets or Sets the name of the backup archive to restore from. Must be present in + /// MediaBrowser.Common.Configuration.IApplicationPaths.BackupPath. + public var archiveFileName: String? + + public init(archiveFileName: String? = nil) { + self.archiveFileName = archiveFileName + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.archiveFileName = try values.decodeIfPresent(String.self, forKey: "ArchiveFileName") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(archiveFileName, forKey: "ArchiveFileName") + } +} diff --git a/Sources/Entities/BaseItemDto.swift b/Sources/Entities/BaseItemDto.swift index 8de957466..d82e63634 100644 --- a/Sources/Entities/BaseItemDto.swift +++ b/Sources/Entities/BaseItemDto.swift @@ -154,7 +154,7 @@ public struct BaseItemDto: Codable, Hashable, Identifiable { public var mediaSources: [MediaSourceInfo]? /// Gets or sets the media streams. public var mediaStreams: [MediaStream]? - /// Gets or sets the type of the media. + /// Media types. public var mediaType: MediaType? /// Gets or sets the movie count. public var movieCount: Int? @@ -272,8 +272,8 @@ public struct BaseItemDto: Codable, Hashable, Identifiable { /// Gets or sets the trailer count. public var trailerCount: Int? /// Gets or sets the trickplay manifest. - public var trickplay: [String: [String: TrickplayInfo]]? - /// Gets or sets the type. + public var trickplay: [String: [String: TrickplayInfoDto]]? + /// The base item kind. public var type: BaseItemKind? /// Gets or sets the user data for this item based on the user it's being requested for. public var userData: UserItemDataDto? @@ -513,7 +513,7 @@ public struct BaseItemDto: Codable, Hashable, Identifiable { tags: [String]? = nil, timerID: String? = nil, trailerCount: Int? = nil, - trickplay: [String: [String: TrickplayInfo]]? = nil, + trickplay: [String: [String: TrickplayInfoDto]]? = nil, type: BaseItemKind? = nil, userData: UserItemDataDto? = nil, video3DFormat: Video3DFormat? = nil, @@ -822,7 +822,7 @@ public struct BaseItemDto: Codable, Hashable, Identifiable { self.tags = try values.decodeIfPresent([String].self, forKey: "Tags") self.timerID = try values.decodeIfPresent(String.self, forKey: "TimerId") self.trailerCount = try values.decodeIfPresent(Int.self, forKey: "TrailerCount") - self.trickplay = try values.decodeIfPresent([String: [String: TrickplayInfo]].self, forKey: "Trickplay") + self.trickplay = try values.decodeIfPresent([String: [String: TrickplayInfoDto]].self, forKey: "Trickplay") self.type = try values.decodeIfPresent(BaseItemKind.self, forKey: "Type") self.userData = try values.decodeIfPresent(UserItemDataDto.self, forKey: "UserData") self.video3DFormat = try values.decodeIfPresent(Video3DFormat.self, forKey: "Video3DFormat") diff --git a/Sources/Entities/BaseItemPerson.swift b/Sources/Entities/BaseItemPerson.swift index 95fbcddc5..fde8b203d 100644 --- a/Sources/Entities/BaseItemPerson.swift +++ b/Sources/Entities/BaseItemPerson.swift @@ -20,7 +20,7 @@ public struct BaseItemPerson: Codable, Hashable, Identifiable { public var primaryImageTag: String? /// Gets or sets the role. public var role: String? - /// Gets or sets the type. + /// The person kind. public var type: PersonKind? /// Gets or sets the primary image blurhash. diff --git a/Sources/Entities/BrandingOptionsDto.swift b/Sources/Entities/BrandingOptionsDto.swift new file mode 100644 index 000000000..f650ac465 --- /dev/null +++ b/Sources/Entities/BrandingOptionsDto.swift @@ -0,0 +1,41 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// The branding options DTO for API use. +/// +/// This DTO excludes SplashscreenLocation to prevent it from being updated via API. +public struct BrandingOptionsDto: Codable, Hashable { + /// Gets or sets the custom CSS. + public var customCss: String? + /// Gets or sets the login disclaimer. + public var loginDisclaimer: String? + /// Gets or sets a value indicating whether to enable the splashscreen. + public var isSplashscreenEnabled: Bool? + + public init(customCss: String? = nil, loginDisclaimer: String? = nil, isSplashscreenEnabled: Bool? = nil) { + self.customCss = customCss + self.loginDisclaimer = loginDisclaimer + self.isSplashscreenEnabled = isSplashscreenEnabled + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.customCss = try values.decodeIfPresent(String.self, forKey: "CustomCss") + self.loginDisclaimer = try values.decodeIfPresent(String.self, forKey: "LoginDisclaimer") + self.isSplashscreenEnabled = try values.decodeIfPresent(Bool.self, forKey: "SplashscreenEnabled") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(customCss, forKey: "CustomCss") + try values.encodeIfPresent(loginDisclaimer, forKey: "LoginDisclaimer") + try values.encodeIfPresent(isSplashscreenEnabled, forKey: "SplashscreenEnabled") + } +} diff --git a/Sources/Entities/CustomDatabaseOption.swift b/Sources/Entities/CustomDatabaseOption.swift new file mode 100644 index 000000000..4fbf052c1 --- /dev/null +++ b/Sources/Entities/CustomDatabaseOption.swift @@ -0,0 +1,34 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// The custom value option for custom database providers. +public struct CustomDatabaseOption: Codable, Hashable { + /// Gets or sets the key of the value. + public var key: String? + /// Gets or sets the value. + public var value: String? + + public init(key: String? = nil, value: String? = nil) { + self.key = key + self.value = value + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.key = try values.decodeIfPresent(String.self, forKey: "Key") + self.value = try values.decodeIfPresent(String.self, forKey: "Value") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(key, forKey: "Key") + try values.encodeIfPresent(value, forKey: "Value") + } +} diff --git a/Sources/Entities/CustomDatabaseOptions.swift b/Sources/Entities/CustomDatabaseOptions.swift new file mode 100644 index 000000000..835ce7e06 --- /dev/null +++ b/Sources/Entities/CustomDatabaseOptions.swift @@ -0,0 +1,49 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Defines the options for a custom database connector. +public struct CustomDatabaseOptions: Codable, Hashable { + /// Gets or sets the connection string for the custom database provider. + public var connectionString: String? + /// Gets or sets the list of extra options for the custom provider. + public var options: [CustomDatabaseOption]? + /// Gets or sets the plugin assembly to search for providers. + public var pluginAssembly: String? + /// Gets or sets the Plugin name to search for database providers. + public var pluginName: String? + + public init( + connectionString: String? = nil, + options: [CustomDatabaseOption]? = nil, + pluginAssembly: String? = nil, + pluginName: String? = nil + ) { + self.connectionString = connectionString + self.options = options + self.pluginAssembly = pluginAssembly + self.pluginName = pluginName + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.connectionString = try values.decodeIfPresent(String.self, forKey: "ConnectionString") + self.options = try values.decodeIfPresent([CustomDatabaseOption].self, forKey: "Options") + self.pluginAssembly = try values.decodeIfPresent(String.self, forKey: "PluginAssembly") + self.pluginName = try values.decodeIfPresent(String.self, forKey: "PluginName") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(connectionString, forKey: "ConnectionString") + try values.encodeIfPresent(options, forKey: "Options") + try values.encodeIfPresent(pluginAssembly, forKey: "PluginAssembly") + try values.encodeIfPresent(pluginName, forKey: "PluginName") + } +} diff --git a/Sources/Entities/DatabaseConfigurationOptions.swift b/Sources/Entities/DatabaseConfigurationOptions.swift new file mode 100644 index 000000000..7152286e6 --- /dev/null +++ b/Sources/Entities/DatabaseConfigurationOptions.swift @@ -0,0 +1,45 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Options to configure jellyfins managed database. +public struct DatabaseConfigurationOptions: Codable, Hashable { + /// Gets or sets the options required to use a custom database provider. + public var customProviderOptions: CustomDatabaseOptions? + /// Gets or Sets the type of database jellyfin should use. + public var databaseType: String? + /// Gets or Sets the kind of locking behavior jellyfin should perform. Possible options are "NoLock", "Pessimistic", "Optimistic". + /// + /// Defaults to "NoLock". + public var lockingBehavior: DatabaseLockingBehaviorTypes? + + public init( + customProviderOptions: CustomDatabaseOptions? = nil, + databaseType: String? = nil, + lockingBehavior: DatabaseLockingBehaviorTypes? = nil + ) { + self.customProviderOptions = customProviderOptions + self.databaseType = databaseType + self.lockingBehavior = lockingBehavior + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.customProviderOptions = try values.decodeIfPresent(CustomDatabaseOptions.self, forKey: "CustomProviderOptions") + self.databaseType = try values.decodeIfPresent(String.self, forKey: "DatabaseType") + self.lockingBehavior = try values.decodeIfPresent(DatabaseLockingBehaviorTypes.self, forKey: "LockingBehavior") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(customProviderOptions, forKey: "CustomProviderOptions") + try values.encodeIfPresent(databaseType, forKey: "DatabaseType") + try values.encodeIfPresent(lockingBehavior, forKey: "LockingBehavior") + } +} diff --git a/Sources/Entities/DatabaseLockingBehaviorTypes.swift b/Sources/Entities/DatabaseLockingBehaviorTypes.swift new file mode 100644 index 000000000..a950b8c45 --- /dev/null +++ b/Sources/Entities/DatabaseLockingBehaviorTypes.swift @@ -0,0 +1,16 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Defines all possible methods for locking database access for concurrent queries. +public enum DatabaseLockingBehaviorTypes: String, Codable, CaseIterable { + case noLock = "NoLock" + case pessimistic = "Pessimistic" + case optimistic = "Optimistic" +} diff --git a/Sources/Entities/DisplayPreferencesDto.swift b/Sources/Entities/DisplayPreferencesDto.swift index 3e490c42d..f503f3406 100644 --- a/Sources/Entities/DisplayPreferencesDto.swift +++ b/Sources/Entities/DisplayPreferencesDto.swift @@ -26,7 +26,7 @@ public struct DisplayPreferencesDto: Codable, Hashable, Identifiable { public var isRememberIndexing: Bool? /// Gets or sets a value indicating whether [remember sorting]. public var isRememberSorting: Bool? - /// Gets or sets the scroll direction. + /// An enum representing the axis that should be scrolled. public var scrollDirection: ScrollDirection? /// Gets or sets a value indicating whether to show backdrops on this item. public var isShowBackdrop: Bool? @@ -34,7 +34,7 @@ public struct DisplayPreferencesDto: Codable, Hashable, Identifiable { public var isShowSidebar: Bool? /// Gets or sets the sort by. public var sortBy: String? - /// Gets or sets the sort order. + /// An enum representing the sorting order. public var sortOrder: SortOrder? /// Gets or sets the type of the view. public var viewType: String? diff --git a/Sources/Entities/ExternalIDInfo.swift b/Sources/Entities/ExternalIDInfo.swift index 4e2e2bd60..161685060 100644 --- a/Sources/Entities/ExternalIDInfo.swift +++ b/Sources/Entities/ExternalIDInfo.swift @@ -22,16 +22,11 @@ public struct ExternalIDInfo: Codable, Hashable { /// /// default id for the external provider so there is no need to specify a type. public var type: ExternalIDMediaType? - /// Gets or sets the URL format string. - /// - /// - warning: Deprecated. - public var urlFormatString: String? - public init(key: String? = nil, name: String? = nil, type: ExternalIDMediaType? = nil, urlFormatString: String? = nil) { + public init(key: String? = nil, name: String? = nil, type: ExternalIDMediaType? = nil) { self.key = key self.name = name self.type = type - self.urlFormatString = urlFormatString } public init(from decoder: Decoder) throws { @@ -39,7 +34,6 @@ public struct ExternalIDInfo: Codable, Hashable { self.key = try values.decodeIfPresent(String.self, forKey: "Key") self.name = try values.decodeIfPresent(String.self, forKey: "Name") self.type = try values.decodeIfPresent(ExternalIDMediaType.self, forKey: "Type") - self.urlFormatString = try values.decodeIfPresent(String.self, forKey: "UrlFormatString") } public func encode(to encoder: Encoder) throws { @@ -47,6 +41,5 @@ public struct ExternalIDInfo: Codable, Hashable { try values.encodeIfPresent(key, forKey: "Key") try values.encodeIfPresent(name, forKey: "Name") try values.encodeIfPresent(type, forKey: "Type") - try values.encodeIfPresent(urlFormatString, forKey: "UrlFormatString") } } diff --git a/Sources/Entities/ExternalIDMediaType.swift b/Sources/Entities/ExternalIDMediaType.swift index 8fe6de1d4..4ef637170 100644 --- a/Sources/Entities/ExternalIDMediaType.swift +++ b/Sources/Entities/ExternalIDMediaType.swift @@ -23,4 +23,5 @@ public enum ExternalIDMediaType: String, Codable, CaseIterable { case series = "Series" case track = "Track" case book = "Book" + case recording = "Recording" } diff --git a/Sources/Entities/FolderStorageDto.swift b/Sources/Entities/FolderStorageDto.swift new file mode 100644 index 000000000..53c9a4c3d --- /dev/null +++ b/Sources/Entities/FolderStorageDto.swift @@ -0,0 +1,49 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Contains information about a specific folder. +public struct FolderStorageDto: Codable, Hashable { + /// Gets the Device Identifier. + public var deviceID: String? + /// Gets the free space of the underlying storage device of the Jellyfin.Api.Models.SystemInfoDtos.FolderStorageDto.Path. + public var freeSpace: Int? + /// Gets the path of the folder in question. + public var path: String? + /// Gets the kind of storage device of the Jellyfin.Api.Models.SystemInfoDtos.FolderStorageDto.Path. + public var storageType: String? + /// Gets the used space of the underlying storage device of the Jellyfin.Api.Models.SystemInfoDtos.FolderStorageDto.Path. + public var usedSpace: Int? + + public init(deviceID: String? = nil, freeSpace: Int? = nil, path: String? = nil, storageType: String? = nil, usedSpace: Int? = nil) { + self.deviceID = deviceID + self.freeSpace = freeSpace + self.path = path + self.storageType = storageType + self.usedSpace = usedSpace + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.deviceID = try values.decodeIfPresent(String.self, forKey: "DeviceId") + self.freeSpace = try values.decodeIfPresent(Int.self, forKey: "FreeSpace") + self.path = try values.decodeIfPresent(String.self, forKey: "Path") + self.storageType = try values.decodeIfPresent(String.self, forKey: "StorageType") + self.usedSpace = try values.decodeIfPresent(Int.self, forKey: "UsedSpace") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(deviceID, forKey: "DeviceId") + try values.encodeIfPresent(freeSpace, forKey: "FreeSpace") + try values.encodeIfPresent(path, forKey: "Path") + try values.encodeIfPresent(storageType, forKey: "StorageType") + try values.encodeIfPresent(usedSpace, forKey: "UsedSpace") + } +} diff --git a/Sources/Entities/GroupUpdate.swift b/Sources/Entities/GroupUpdate.swift index 31e456163..ddcdba3b3 100644 --- a/Sources/Entities/GroupUpdate.swift +++ b/Sources/Entities/GroupUpdate.swift @@ -8,12 +8,17 @@ import Foundation -/// Group update without data. +/// Represents the list of possible group update types public enum GroupUpdate: Codable, Hashable { - case groupInfoDtoGroupUpdate(GroupInfoDtoGroupUpdate) - case groupStateUpdateGroupUpdate(GroupStateUpdateGroupUpdate) - case stringGroupUpdate(StringGroupUpdate) - case playQueueUpdateGroupUpdate(PlayQueueUpdateGroupUpdate) + case syncPlayGroupDoesNotExistUpdate(SyncPlayGroupDoesNotExistUpdate) + case syncPlayGroupJoinedUpdate(SyncPlayGroupJoinedUpdate) + case syncPlayGroupLeftUpdate(SyncPlayGroupLeftUpdate) + case syncPlayLibraryAccessDeniedUpdate(SyncPlayLibraryAccessDeniedUpdate) + case syncPlayNotInGroupUpdate(SyncPlayNotInGroupUpdate) + case syncPlayPlayQueueUpdate(SyncPlayPlayQueueUpdate) + case syncPlayStateUpdate(SyncPlayStateUpdate) + case syncPlayUserJoinedUpdate(SyncPlayUserJoinedUpdate) + case syncPlayUserLeftUpdate(SyncPlayUserLeftUpdate) public init(from decoder: Decoder) throws { @@ -25,19 +30,19 @@ public enum GroupUpdate: Codable, Hashable { let discriminatorValue = try container.decode(Discriminator.self)._Type switch discriminatorValue { - case "GroupJoined": self = try .groupInfoDtoGroupUpdate(container.decode(GroupInfoDtoGroupUpdate.self)) - case "StateUpdate": self = try .groupStateUpdateGroupUpdate(container.decode(GroupStateUpdateGroupUpdate.self)) - case "GroupDoesNotExist": self = try .stringGroupUpdate(container.decode(StringGroupUpdate.self)) - case "GroupLeft": self = try .stringGroupUpdate(container.decode(StringGroupUpdate.self)) - case "LibraryAccessDenied": self = try .stringGroupUpdate(container.decode(StringGroupUpdate.self)) - case "NotInGroup": self = try .stringGroupUpdate(container.decode(StringGroupUpdate.self)) - case "UserJoined": self = try .stringGroupUpdate(container.decode(StringGroupUpdate.self)) - case "UserLeft": self = try .stringGroupUpdate(container.decode(StringGroupUpdate.self)) - case "PlayQueue": self = try .playQueueUpdateGroupUpdate(container.decode(PlayQueueUpdateGroupUpdate.self)) + case "GroupDoesNotExist": self = try .syncPlayGroupDoesNotExistUpdate(container.decode(SyncPlayGroupDoesNotExistUpdate.self)) + case "GroupJoined": self = try .syncPlayGroupJoinedUpdate(container.decode(SyncPlayGroupJoinedUpdate.self)) + case "GroupLeft": self = try .syncPlayGroupLeftUpdate(container.decode(SyncPlayGroupLeftUpdate.self)) + case "LibraryAccessDenied": self = try .syncPlayLibraryAccessDeniedUpdate(container.decode(SyncPlayLibraryAccessDeniedUpdate.self)) + case "NotInGroup": self = try .syncPlayNotInGroupUpdate(container.decode(SyncPlayNotInGroupUpdate.self)) + case "PlayQueue": self = try .syncPlayPlayQueueUpdate(container.decode(SyncPlayPlayQueueUpdate.self)) + case "StateUpdate": self = try .syncPlayStateUpdate(container.decode(SyncPlayStateUpdate.self)) + case "UserJoined": self = try .syncPlayUserJoinedUpdate(container.decode(SyncPlayUserJoinedUpdate.self)) + case "UserLeft": self = try .syncPlayUserLeftUpdate(container.decode(SyncPlayUserLeftUpdate.self)) default: throw DecodingError.dataCorruptedError( in: container, - debugDescription: "Discriminator value '\(discriminatorValue)' does not match any expected values (GroupJoined, StateUpdate, GroupDoesNotExist, GroupLeft, LibraryAccessDenied, NotInGroup, UserJoined, UserLeft, PlayQueue)." + debugDescription: "Discriminator value '\(discriminatorValue)' does not match any expected values (GroupDoesNotExist, GroupJoined, GroupLeft, LibraryAccessDenied, NotInGroup, PlayQueue, StateUpdate, UserJoined, UserLeft)." ) } } @@ -45,10 +50,15 @@ public enum GroupUpdate: Codable, Hashable { public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() switch self { - case let .groupInfoDtoGroupUpdate(value): try container.encode(value) - case let .groupStateUpdateGroupUpdate(value): try container.encode(value) - case let .stringGroupUpdate(value): try container.encode(value) - case let .playQueueUpdateGroupUpdate(value): try container.encode(value) + case let .syncPlayGroupDoesNotExistUpdate(value): try container.encode(value) + case let .syncPlayGroupJoinedUpdate(value): try container.encode(value) + case let .syncPlayGroupLeftUpdate(value): try container.encode(value) + case let .syncPlayLibraryAccessDeniedUpdate(value): try container.encode(value) + case let .syncPlayNotInGroupUpdate(value): try container.encode(value) + case let .syncPlayPlayQueueUpdate(value): try container.encode(value) + case let .syncPlayStateUpdate(value): try container.encode(value) + case let .syncPlayUserJoinedUpdate(value): try container.encode(value) + case let .syncPlayUserLeftUpdate(value): try container.encode(value) } } } diff --git a/Sources/Entities/GroupUpdateType.swift b/Sources/Entities/GroupUpdateType.swift index 42f52ff6d..47e4df24e 100644 --- a/Sources/Entities/GroupUpdateType.swift +++ b/Sources/Entities/GroupUpdateType.swift @@ -18,7 +18,5 @@ public enum GroupUpdateType: String, Codable, CaseIterable { case playQueue = "PlayQueue" case notInGroup = "NotInGroup" case groupDoesNotExist = "GroupDoesNotExist" - case createGroupDenied = "CreateGroupDenied" - case joinGroupDenied = "JoinGroupDenied" case libraryAccessDenied = "LibraryAccessDenied" } diff --git a/Sources/Entities/ItemFields.swift b/Sources/Entities/ItemFields.swift index b84a777a4..22fc64aad 100644 --- a/Sources/Entities/ItemFields.swift +++ b/Sources/Entities/ItemFields.swift @@ -25,7 +25,6 @@ public enum ItemFields: String, Codable, CaseIterable { case etag = "Etag" case externalURLs = "ExternalUrls" case genres = "Genres" - case homePageURL = "HomePageUrl" case itemCounts = "ItemCounts" case mediaSourceCount = "MediaSourceCount" case mediaSources = "MediaSources" @@ -40,8 +39,6 @@ public enum ItemFields: String, Codable, CaseIterable { case primaryImageAspectRatio = "PrimaryImageAspectRatio" case recursiveItemCount = "RecursiveItemCount" case settings = "Settings" - case screenshotImageTags = "ScreenshotImageTags" - case seriesPrimaryImage = "SeriesPrimaryImage" case seriesStudio = "SeriesStudio" case sortName = "SortName" case specialEpisodeNumbers = "SpecialEpisodeNumbers" @@ -51,14 +48,6 @@ public enum ItemFields: String, Codable, CaseIterable { case remoteTrailers = "RemoteTrailers" case mediaStreams = "MediaStreams" case seasonUserData = "SeasonUserData" - case serviceName = "ServiceName" - case themeSongIDs = "ThemeSongIds" - case themeVideoIDs = "ThemeVideoIds" - case externalEtag = "ExternalEtag" - case presentationUniqueKey = "PresentationUniqueKey" - case inheritedParentalRatingValue = "InheritedParentalRatingValue" - case externalSeriesID = "ExternalSeriesId" - case seriesPresentationUniqueKey = "SeriesPresentationUniqueKey" case dateLastRefreshed = "DateLastRefreshed" case dateLastSaved = "DateLastSaved" case refreshState = "RefreshState" diff --git a/Sources/Entities/ItemSortBy.swift b/Sources/Entities/ItemSortBy.swift index d5158e311..f04271e9e 100644 --- a/Sources/Entities/ItemSortBy.swift +++ b/Sources/Entities/ItemSortBy.swift @@ -40,6 +40,4 @@ public enum ItemSortBy: String, Codable, CaseIterable { case seriesDatePlayed = "SeriesDatePlayed" case parentIndexNumber = "ParentIndexNumber" case indexNumber = "IndexNumber" - case similarityScore = "SimilarityScore" - case searchScore = "SearchScore" } diff --git a/Sources/Entities/LibraryOptions.swift b/Sources/Entities/LibraryOptions.swift index 627ee53eb..004aeec4b 100644 --- a/Sources/Entities/LibraryOptions.swift +++ b/Sources/Entities/LibraryOptions.swift @@ -35,7 +35,7 @@ public struct LibraryOptions: Codable, Hashable { public var isExtractTrickplayImagesDuringLibraryScan: Bool? public var localMetadataReaderOrder: [String]? public var lyricFetcherOrder: [String]? - public var mediaSegmentProvideOrder: [String]? + public var mediaSegmentProviderOrder: [String]? /// Gets or sets the metadata country code. public var metadataCountryCode: String? public var metadataSavers: [String]? @@ -81,7 +81,7 @@ public struct LibraryOptions: Codable, Hashable { isExtractTrickplayImagesDuringLibraryScan: Bool? = nil, localMetadataReaderOrder: [String]? = nil, lyricFetcherOrder: [String]? = nil, - mediaSegmentProvideOrder: [String]? = nil, + mediaSegmentProviderOrder: [String]? = nil, metadataCountryCode: String? = nil, metadataSavers: [String]? = nil, pathInfos: [MediaPathInfo]? = nil, @@ -124,7 +124,7 @@ public struct LibraryOptions: Codable, Hashable { self.isExtractTrickplayImagesDuringLibraryScan = isExtractTrickplayImagesDuringLibraryScan self.localMetadataReaderOrder = localMetadataReaderOrder self.lyricFetcherOrder = lyricFetcherOrder - self.mediaSegmentProvideOrder = mediaSegmentProvideOrder + self.mediaSegmentProviderOrder = mediaSegmentProviderOrder self.metadataCountryCode = metadataCountryCode self.metadataSavers = metadataSavers self.pathInfos = pathInfos @@ -176,7 +176,7 @@ public struct LibraryOptions: Codable, Hashable { ) self.localMetadataReaderOrder = try values.decodeIfPresent([String].self, forKey: "LocalMetadataReaderOrder") self.lyricFetcherOrder = try values.decodeIfPresent([String].self, forKey: "LyricFetcherOrder") - self.mediaSegmentProvideOrder = try values.decodeIfPresent([String].self, forKey: "MediaSegmentProvideOrder") + self.mediaSegmentProviderOrder = try values.decodeIfPresent([String].self, forKey: "MediaSegmentProviderOrder") self.metadataCountryCode = try values.decodeIfPresent(String.self, forKey: "MetadataCountryCode") self.metadataSavers = try values.decodeIfPresent([String].self, forKey: "MetadataSavers") self.pathInfos = try values.decodeIfPresent([MediaPathInfo].self, forKey: "PathInfos") @@ -225,7 +225,7 @@ public struct LibraryOptions: Codable, Hashable { try values.encodeIfPresent(isExtractTrickplayImagesDuringLibraryScan, forKey: "ExtractTrickplayImagesDuringLibraryScan") try values.encodeIfPresent(localMetadataReaderOrder, forKey: "LocalMetadataReaderOrder") try values.encodeIfPresent(lyricFetcherOrder, forKey: "LyricFetcherOrder") - try values.encodeIfPresent(mediaSegmentProvideOrder, forKey: "MediaSegmentProvideOrder") + try values.encodeIfPresent(mediaSegmentProviderOrder, forKey: "MediaSegmentProviderOrder") try values.encodeIfPresent(metadataCountryCode, forKey: "MetadataCountryCode") try values.encodeIfPresent(metadataSavers, forKey: "MetadataSavers") try values.encodeIfPresent(pathInfos, forKey: "PathInfos") diff --git a/Sources/Entities/LibraryOptionsResultDto.swift b/Sources/Entities/LibraryOptionsResultDto.swift index 5046ac791..1bfd77a34 100644 --- a/Sources/Entities/LibraryOptionsResultDto.swift +++ b/Sources/Entities/LibraryOptionsResultDto.swift @@ -12,6 +12,8 @@ import Foundation public struct LibraryOptionsResultDto: Codable, Hashable { /// Gets or sets the list of lyric fetchers. public var lyricFetchers: [LibraryOptionInfoDto]? + /// Gets or sets the list of MediaSegment Providers. + public var mediaSegmentProviders: [LibraryOptionInfoDto]? /// Gets or sets the metadata readers. public var metadataReaders: [LibraryOptionInfoDto]? /// Gets or sets the metadata savers. @@ -23,12 +25,14 @@ public struct LibraryOptionsResultDto: Codable, Hashable { public init( lyricFetchers: [LibraryOptionInfoDto]? = nil, + mediaSegmentProviders: [LibraryOptionInfoDto]? = nil, metadataReaders: [LibraryOptionInfoDto]? = nil, metadataSavers: [LibraryOptionInfoDto]? = nil, subtitleFetchers: [LibraryOptionInfoDto]? = nil, typeOptions: [LibraryTypeOptionsDto]? = nil ) { self.lyricFetchers = lyricFetchers + self.mediaSegmentProviders = mediaSegmentProviders self.metadataReaders = metadataReaders self.metadataSavers = metadataSavers self.subtitleFetchers = subtitleFetchers @@ -38,6 +42,7 @@ public struct LibraryOptionsResultDto: Codable, Hashable { public init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: StringCodingKey.self) self.lyricFetchers = try values.decodeIfPresent([LibraryOptionInfoDto].self, forKey: "LyricFetchers") + self.mediaSegmentProviders = try values.decodeIfPresent([LibraryOptionInfoDto].self, forKey: "MediaSegmentProviders") self.metadataReaders = try values.decodeIfPresent([LibraryOptionInfoDto].self, forKey: "MetadataReaders") self.metadataSavers = try values.decodeIfPresent([LibraryOptionInfoDto].self, forKey: "MetadataSavers") self.subtitleFetchers = try values.decodeIfPresent([LibraryOptionInfoDto].self, forKey: "SubtitleFetchers") @@ -47,6 +52,7 @@ public struct LibraryOptionsResultDto: Codable, Hashable { public func encode(to encoder: Encoder) throws { var values = encoder.container(keyedBy: StringCodingKey.self) try values.encodeIfPresent(lyricFetchers, forKey: "LyricFetchers") + try values.encodeIfPresent(mediaSegmentProviders, forKey: "MediaSegmentProviders") try values.encodeIfPresent(metadataReaders, forKey: "MetadataReaders") try values.encodeIfPresent(metadataSavers, forKey: "MetadataSavers") try values.encodeIfPresent(subtitleFetchers, forKey: "SubtitleFetchers") diff --git a/Sources/Entities/LibraryStorageDto.swift b/Sources/Entities/LibraryStorageDto.swift new file mode 100644 index 000000000..9c2777f3b --- /dev/null +++ b/Sources/Entities/LibraryStorageDto.swift @@ -0,0 +1,39 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Contains informations about a libraries storage informations. +public struct LibraryStorageDto: Codable, Hashable, Identifiable { + /// Gets or sets the storage informations about the folders used in a library. + public var folders: [FolderStorageDto]? + /// Gets or sets the Library Id. + public var id: String? + /// Gets or sets the name of the library. + public var name: String? + + public init(folders: [FolderStorageDto]? = nil, id: String? = nil, name: String? = nil) { + self.folders = folders + self.id = id + self.name = name + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.folders = try values.decodeIfPresent([FolderStorageDto].self, forKey: "Folders") + self.id = try values.decodeIfPresent(String.self, forKey: "Id") + self.name = try values.decodeIfPresent(String.self, forKey: "Name") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(folders, forKey: "Folders") + try values.encodeIfPresent(id, forKey: "Id") + try values.encodeIfPresent(name, forKey: "Name") + } +} diff --git a/Sources/Entities/LyricLine.swift b/Sources/Entities/LyricLine.swift index b50fb0542..041a66394 100644 --- a/Sources/Entities/LyricLine.swift +++ b/Sources/Entities/LyricLine.swift @@ -10,24 +10,29 @@ import Foundation /// Lyric model. public struct LyricLine: Codable, Hashable { + /// Gets the time-aligned cues for the song's lyrics. + public var cues: [LyricLineCue]? /// Gets the start time in ticks. public var start: Int? /// Gets the text of this lyric line. public var text: String? - public init(start: Int? = nil, text: String? = nil) { + public init(cues: [LyricLineCue]? = nil, start: Int? = nil, text: String? = nil) { + self.cues = cues self.start = start self.text = text } public init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: StringCodingKey.self) + self.cues = try values.decodeIfPresent([LyricLineCue].self, forKey: "Cues") self.start = try values.decodeIfPresent(Int.self, forKey: "Start") self.text = try values.decodeIfPresent(String.self, forKey: "Text") } public func encode(to encoder: Encoder) throws { var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(cues, forKey: "Cues") try values.encodeIfPresent(start, forKey: "Start") try values.encodeIfPresent(text, forKey: "Text") } diff --git a/Sources/Entities/LyricLineCue.swift b/Sources/Entities/LyricLineCue.swift new file mode 100644 index 000000000..9e9e5b3b7 --- /dev/null +++ b/Sources/Entities/LyricLineCue.swift @@ -0,0 +1,44 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// LyricLineCue model, holds information about the timing of words within a LyricLine. +public struct LyricLineCue: Codable, Hashable { + /// Gets the end timestamp the lyric is synced to in ticks. + public var end: Int? + /// Gets the end character index of the cue. + public var endPosition: Int? + /// Gets the start character index of the cue. + public var position: Int? + /// Gets the timestamp the lyric is synced to in ticks. + public var start: Int? + + public init(end: Int? = nil, endPosition: Int? = nil, position: Int? = nil, start: Int? = nil) { + self.end = end + self.endPosition = endPosition + self.position = position + self.start = start + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.end = try values.decodeIfPresent(Int.self, forKey: "End") + self.endPosition = try values.decodeIfPresent(Int.self, forKey: "EndPosition") + self.position = try values.decodeIfPresent(Int.self, forKey: "Position") + self.start = try values.decodeIfPresent(Int.self, forKey: "Start") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(end, forKey: "End") + try values.encodeIfPresent(endPosition, forKey: "EndPosition") + try values.encodeIfPresent(position, forKey: "Position") + try values.encodeIfPresent(start, forKey: "Start") + } +} diff --git a/Sources/Entities/MediaSegmentDto.swift b/Sources/Entities/MediaSegmentDto.swift index 9dc29c902..22984bd8a 100644 --- a/Sources/Entities/MediaSegmentDto.swift +++ b/Sources/Entities/MediaSegmentDto.swift @@ -18,7 +18,7 @@ public struct MediaSegmentDto: Codable, Hashable, Identifiable { public var itemID: String? /// Gets or sets the start of the segment. public var startTicks: Int? - /// Gets or sets the type of content this segment defines. + /// Defines the types of content an individual Jellyfin.Database.Implementations.Entities.MediaSegment represents. public var type: MediaSegmentType? public init(endTicks: Int? = nil, id: String? = nil, itemID: String? = nil, startTicks: Int? = nil, type: MediaSegmentType? = nil) { diff --git a/Sources/Entities/MediaSegmentType.swift b/Sources/Entities/MediaSegmentType.swift index bf71c3533..60f4b98c4 100644 --- a/Sources/Entities/MediaSegmentType.swift +++ b/Sources/Entities/MediaSegmentType.swift @@ -8,7 +8,7 @@ import Foundation -/// Defines the types of content an individual Jellyfin.Data.Entities.MediaSegment represents. +/// Defines the types of content an individual Jellyfin.Database.Implementations.Entities.MediaSegment represents. public enum MediaSegmentType: String, Codable, CaseIterable { case unknown = "Unknown" case commercial = "Commercial" diff --git a/Sources/Entities/MediaStream.swift b/Sources/Entities/MediaStream.swift index b89e94208..21cdb86f8 100644 --- a/Sources/Entities/MediaStream.swift +++ b/Sources/Entities/MediaStream.swift @@ -12,7 +12,7 @@ import Foundation public struct MediaStream: Codable, Hashable { /// Gets or sets the aspect ratio. public var aspectRatio: String? - /// Gets the audio spatial format. + /// An enum representing formats of spatial audio. public var audioSpatialFormat: AudioSpatialFormat? /// Gets or sets the average frame rate. public var averageFrameRate: Float? @@ -59,6 +59,7 @@ public struct MediaStream: Codable, Hashable { public var dvVersionMinor: Int? /// Gets or sets the Dolby Vision el present flag. public var elPresentFlag: Int? + public var isHdr10PlusPresentFlag: Bool? /// Gets or sets the height. public var height: Int? /// Gets or sets the index. @@ -125,9 +126,9 @@ public struct MediaStream: Codable, Hashable { public var type: MediaStreamType? /// Gets the video dovi title. public var videoDoViTitle: String? - /// Gets the video range. + /// An enum representing video ranges. public var videoRange: VideoRange? - /// Gets the video range type. + /// An enum representing types of video ranges. public var videoRangeType: VideoRangeType? /// Gets or sets the width. public var width: Int? @@ -158,6 +159,7 @@ public struct MediaStream: Codable, Hashable { dvVersionMajor: Int? = nil, dvVersionMinor: Int? = nil, elPresentFlag: Int? = nil, + isHdr10PlusPresentFlag: Bool? = nil, height: Int? = nil, index: Int? = nil, isAVC: Bool? = nil, @@ -222,6 +224,7 @@ public struct MediaStream: Codable, Hashable { self.dvVersionMajor = dvVersionMajor self.dvVersionMinor = dvVersionMinor self.elPresentFlag = elPresentFlag + self.isHdr10PlusPresentFlag = isHdr10PlusPresentFlag self.height = height self.index = index self.isAVC = isAVC @@ -289,6 +292,7 @@ public struct MediaStream: Codable, Hashable { self.dvVersionMajor = try values.decodeIfPresent(Int.self, forKey: "DvVersionMajor") self.dvVersionMinor = try values.decodeIfPresent(Int.self, forKey: "DvVersionMinor") self.elPresentFlag = try values.decodeIfPresent(Int.self, forKey: "ElPresentFlag") + self.isHdr10PlusPresentFlag = try values.decodeIfPresent(Bool.self, forKey: "Hdr10PlusPresentFlag") self.height = try values.decodeIfPresent(Int.self, forKey: "Height") self.index = try values.decodeIfPresent(Int.self, forKey: "Index") self.isAVC = try values.decodeIfPresent(Bool.self, forKey: "IsAVC") @@ -356,6 +360,7 @@ public struct MediaStream: Codable, Hashable { try values.encodeIfPresent(dvVersionMajor, forKey: "DvVersionMajor") try values.encodeIfPresent(dvVersionMinor, forKey: "DvVersionMinor") try values.encodeIfPresent(elPresentFlag, forKey: "ElPresentFlag") + try values.encodeIfPresent(isHdr10PlusPresentFlag, forKey: "Hdr10PlusPresentFlag") try values.encodeIfPresent(height, forKey: "Height") try values.encodeIfPresent(index, forKey: "Index") try values.encodeIfPresent(isAVC, forKey: "IsAVC") diff --git a/Sources/Entities/MetadataEditorInfo.swift b/Sources/Entities/MetadataEditorInfo.swift index 02eae3bdc..0a6d19765 100644 --- a/Sources/Entities/MetadataEditorInfo.swift +++ b/Sources/Entities/MetadataEditorInfo.swift @@ -8,12 +8,19 @@ import Foundation +/// A class representing metadata editor information. public struct MetadataEditorInfo: Codable, Hashable { + /// Gets or sets the content type. public var contentType: CollectionType? + /// Gets or sets the content type options. public var contentTypeOptions: [NameValuePair]? + /// Gets or sets the countries. public var countries: [CountryInfo]? + /// Gets or sets the cultures. public var cultures: [CultureDto]? + /// Gets or sets the external id infos. public var externalIDInfos: [ExternalIDInfo]? + /// Gets or sets the parental rating options. public var parentalRatingOptions: [ParentalRating]? public init( diff --git a/Sources/Entities/NetworkConfiguration.swift b/Sources/Entities/NetworkConfiguration.swift index 7e5dadc76..c6586877c 100644 --- a/Sources/Entities/NetworkConfiguration.swift +++ b/Sources/Entities/NetworkConfiguration.swift @@ -30,6 +30,8 @@ public struct NetworkConfiguration: Codable, Hashable { /// Gets or sets a value indicating whether access from outside of the LAN is permitted. public var enableRemoteAccess: Bool? /// Gets or sets a value indicating whether to enable automatic port forwarding. + /// + /// - warning: Deprecated. public var enableUPnP: Bool? /// Gets or sets a value indicating whether address names that match MediaBrowser.Common.Net.NetworkConfiguration.VirtualInterfaceNames /// should be ignored for the purposes of binding. diff --git a/Sources/Entities/OpenLiveStreamDto.swift b/Sources/Entities/OpenLiveStreamDto.swift index aee3f536d..0ff1a0b29 100644 --- a/Sources/Entities/OpenLiveStreamDto.swift +++ b/Sources/Entities/OpenLiveStreamDto.swift @@ -33,7 +33,7 @@ public struct OpenLiveStreamDto: Codable, Hashable { public var directPlayProtocols: [MediaProtocol]? /// Gets or sets a value indicating whether to enable direct play. public var enableDirectPlay: Bool? - /// Gets or sets a value indicating whether to enale direct stream. + /// Gets or sets a value indicating whether to enable direct stream. public var enableDirectStream: Bool? /// Gets or sets the item id. public var itemID: String? diff --git a/Sources/Entities/OutboundWebSocketMessage.swift b/Sources/Entities/OutboundWebSocketMessage.swift index ab74df236..f87fe91a9 100644 --- a/Sources/Entities/OutboundWebSocketMessage.swift +++ b/Sources/Entities/OutboundWebSocketMessage.swift @@ -32,12 +32,12 @@ public enum OutboundWebSocketMessage: Codable, Hashable { case serverShuttingDownMessage(ServerShuttingDownMessage) case sessionsMessage(SessionsMessage) case syncPlayCommandMessage(SyncPlayCommandMessage) - case syncPlayGroupUpdateCommandMessage(SyncPlayGroupUpdateCommandMessage) case timerCancelledMessage(TimerCancelledMessage) case timerCreatedMessage(TimerCreatedMessage) case userDataChangedMessage(UserDataChangedMessage) case userDeletedMessage(UserDeletedMessage) case userUpdatedMessage(UserUpdatedMessage) + case syncPlayGroupUpdateMessage(SyncPlayGroupUpdateMessage) public init(from decoder: Decoder) throws { @@ -77,16 +77,16 @@ public enum OutboundWebSocketMessage: Codable, Hashable { case "ServerShuttingDown": self = try .serverShuttingDownMessage(container.decode(ServerShuttingDownMessage.self)) case "Sessions": self = try .sessionsMessage(container.decode(SessionsMessage.self)) case "SyncPlayCommand": self = try .syncPlayCommandMessage(container.decode(SyncPlayCommandMessage.self)) - case "SyncPlayGroupUpdate": self = try .syncPlayGroupUpdateCommandMessage(container.decode(SyncPlayGroupUpdateCommandMessage.self)) case "TimerCancelled": self = try .timerCancelledMessage(container.decode(TimerCancelledMessage.self)) case "TimerCreated": self = try .timerCreatedMessage(container.decode(TimerCreatedMessage.self)) case "UserDataChanged": self = try .userDataChangedMessage(container.decode(UserDataChangedMessage.self)) case "UserDeleted": self = try .userDeletedMessage(container.decode(UserDeletedMessage.self)) case "UserUpdated": self = try .userUpdatedMessage(container.decode(UserUpdatedMessage.self)) + case "SyncPlayGroupUpdate": self = try .syncPlayGroupUpdateMessage(container.decode(SyncPlayGroupUpdateMessage.self)) default: throw DecodingError.dataCorruptedError( in: container, - debugDescription: "Discriminator value '\(discriminatorValue)' does not match any expected values (ActivityLogEntry, ForceKeepAlive, GeneralCommand, LibraryChanged, KeepAlive, Play, Playstate, PackageInstallationCancelled, PackageInstallationCompleted, PackageInstallationFailed, PackageInstalling, PackageUninstalled, RefreshProgress, RestartRequired, ScheduledTaskEnded, ScheduledTasksInfo, SeriesTimerCancelled, SeriesTimerCreated, ServerRestarting, ServerShuttingDown, Sessions, SyncPlayCommand, SyncPlayGroupUpdate, TimerCancelled, TimerCreated, UserDataChanged, UserDeleted, UserUpdated)." + debugDescription: "Discriminator value '\(discriminatorValue)' does not match any expected values (ActivityLogEntry, ForceKeepAlive, GeneralCommand, LibraryChanged, KeepAlive, Play, Playstate, PackageInstallationCancelled, PackageInstallationCompleted, PackageInstallationFailed, PackageInstalling, PackageUninstalled, RefreshProgress, RestartRequired, ScheduledTaskEnded, ScheduledTasksInfo, SeriesTimerCancelled, SeriesTimerCreated, ServerRestarting, ServerShuttingDown, Sessions, SyncPlayCommand, TimerCancelled, TimerCreated, UserDataChanged, UserDeleted, UserUpdated, SyncPlayGroupUpdate)." ) } } @@ -116,12 +116,12 @@ public enum OutboundWebSocketMessage: Codable, Hashable { case let .serverShuttingDownMessage(value): try container.encode(value) case let .sessionsMessage(value): try container.encode(value) case let .syncPlayCommandMessage(value): try container.encode(value) - case let .syncPlayGroupUpdateCommandMessage(value): try container.encode(value) case let .timerCancelledMessage(value): try container.encode(value) case let .timerCreatedMessage(value): try container.encode(value) case let .userDataChangedMessage(value): try container.encode(value) case let .userDeletedMessage(value): try container.encode(value) case let .userUpdatedMessage(value): try container.encode(value) + case let .syncPlayGroupUpdateMessage(value): try container.encode(value) } } } diff --git a/Sources/Entities/ParentalRating.swift b/Sources/Entities/ParentalRating.swift index 79eef01ea..980ce9ed5 100644 --- a/Sources/Entities/ParentalRating.swift +++ b/Sources/Entities/ParentalRating.swift @@ -12,23 +12,28 @@ import Foundation public struct ParentalRating: Codable, Hashable { /// Gets or sets the name. public var name: String? + /// Gets or sets the rating score. + public var ratingScore: ParentalRatingScore? /// Gets or sets the value. public var value: Int? - public init(name: String? = nil, value: Int? = nil) { + public init(name: String? = nil, ratingScore: ParentalRatingScore? = nil, value: Int? = nil) { self.name = name + self.ratingScore = ratingScore self.value = value } public init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: StringCodingKey.self) self.name = try values.decodeIfPresent(String.self, forKey: "Name") + self.ratingScore = try values.decodeIfPresent(ParentalRatingScore.self, forKey: "RatingScore") self.value = try values.decodeIfPresent(Int.self, forKey: "Value") } public func encode(to encoder: Encoder) throws { var values = encoder.container(keyedBy: StringCodingKey.self) try values.encodeIfPresent(name, forKey: "Name") + try values.encodeIfPresent(ratingScore, forKey: "RatingScore") try values.encodeIfPresent(value, forKey: "Value") } } diff --git a/Sources/Entities/ParentalRatingScore.swift b/Sources/Entities/ParentalRatingScore.swift new file mode 100644 index 000000000..d02b760bb --- /dev/null +++ b/Sources/Entities/ParentalRatingScore.swift @@ -0,0 +1,34 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// A class representing an parental rating score. +public struct ParentalRatingScore: Codable, Hashable { + /// Gets or sets the score. + public var score: Int? + /// Gets or sets the sub score. + public var subScore: Int? + + public init(score: Int? = nil, subScore: Int? = nil) { + self.score = score + self.subScore = subScore + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.score = try values.decodeIfPresent(Int.self, forKey: "score") + self.subScore = try values.decodeIfPresent(Int.self, forKey: "subScore") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(score, forKey: "score") + try values.encodeIfPresent(subScore, forKey: "subScore") + } +} diff --git a/Sources/Entities/PlaybackInfoDto.swift b/Sources/Entities/PlaybackInfoDto.swift index ee6358b17..a0b45065b 100644 --- a/Sources/Entities/PlaybackInfoDto.swift +++ b/Sources/Entities/PlaybackInfoDto.swift @@ -8,7 +8,7 @@ import Foundation -/// Plabyback info dto. +/// Playback info dto. public struct PlaybackInfoDto: Codable, Hashable { /// Gets or sets a value indicating whether to allow audio stream copy. public var allowAudioStreamCopy: Bool? diff --git a/Sources/Entities/PluginStatus.swift b/Sources/Entities/PluginStatus.swift index 4f5e446a6..d972e4204 100644 --- a/Sources/Entities/PluginStatus.swift +++ b/Sources/Entities/PluginStatus.swift @@ -13,6 +13,7 @@ public enum PluginStatus: String, Codable, CaseIterable { case active = "Active" case restart = "Restart" case deleted = "Deleted" + case superseded = "Superseded" case superceded = "Superceded" case malfunctioned = "Malfunctioned" case notSupported = "NotSupported" diff --git a/Sources/Entities/ProfileConditionValue.swift b/Sources/Entities/ProfileConditionValue.swift index daa22b78f..5ef51bab8 100644 --- a/Sources/Entities/ProfileConditionValue.swift +++ b/Sources/Entities/ProfileConditionValue.swift @@ -33,4 +33,5 @@ public enum ProfileConditionValue: String, Codable, CaseIterable { case audioSampleRate = "AudioSampleRate" case audioBitDepth = "AudioBitDepth" case videoRangeType = "VideoRangeType" + case numStreams = "NumStreams" } diff --git a/Sources/Entities/SearchHint.swift b/Sources/Entities/SearchHint.swift index cf4ddf976..da359894d 100644 --- a/Sources/Entities/SearchHint.swift +++ b/Sources/Entities/SearchHint.swift @@ -42,7 +42,7 @@ public struct SearchHint: Codable, Hashable, Identifiable { public var itemID: String? /// Gets or sets the matched term. public var matchedTerm: String? - /// Gets or sets the type of the media. + /// Media types. public var mediaType: MediaType? /// Gets or sets the name. public var name: String? @@ -68,7 +68,7 @@ public struct SearchHint: Codable, Hashable, Identifiable { public var thumbImageItemID: String? /// Gets or sets the thumb image tag. public var thumbImageTag: String? - /// Gets or sets the type. + /// The base item kind. public var type: BaseItemKind? public init( diff --git a/Sources/Entities/ServerConfiguration.swift b/Sources/Entities/ServerConfiguration.swift index 48115a812..f338ea333 100644 --- a/Sources/Entities/ServerConfiguration.swift +++ b/Sources/Entities/ServerConfiguration.swift @@ -16,6 +16,8 @@ public struct ServerConfiguration: Codable, Hashable { public var allowClientLogUpload: Bool? /// Gets or sets the cache path. public var cachePath: String? + /// Gets or sets the maximum amount of items to cache. + public var cacheSize: Int? /// Gets or sets the list of cast receiver applications. public var castReceiverApplications: [CastReceiverApplication]? /// Gets or sets the chapter image resolution. @@ -26,13 +28,16 @@ public struct ServerConfiguration: Codable, Hashable { public var corsHosts: [String]? public var isDisableLiveTvChannelUserDataName: Bool? public var isDisplaySpecialsWithinSeasons: Bool? - /// Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation alltogether. + /// Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation altogether. public var dummyChapterDuration: Int? - /// Gets or sets a value indicating whether [enable case sensitive item ids]. + /// Gets or sets a value indicating whether [enable case-sensitive item ids]. public var enableCaseSensitiveItemIDs: Bool? public var enableExternalContentInSuggestions: Bool? public var enableFolderView: Bool? - public var enableGroupingIntoCollections: Bool? + public var enableGroupingMoviesIntoCollections: Bool? + public var enableGroupingShowsIntoCollections: Bool? + /// Gets or sets a value indicating whether old authorization methods are allowed. + public var enableLegacyAuthorization: Bool? /// Gets or sets a value indicating whether to enable prometheus metrics exporting. public var enableMetrics: Bool? public var enableNormalizedItemByNameIDs: Bool? @@ -96,8 +101,6 @@ public struct ServerConfiguration: Codable, Hashable { /// Gets or sets a value indicating whether quick connect is available for use on this server. public var isQuickConnectAvailable: Bool? public var remoteClientBitrateLimit: Int? - /// Gets or sets a value indicating whether older plugins should automatically be deleted from the plugin folder. - public var isRemoveOldPlugins: Bool? public var isSaveMetadataHidden: Bool? public var serverName: String? public var isSkipDeserializationForBasicTypes: Bool? @@ -117,6 +120,7 @@ public struct ServerConfiguration: Codable, Hashable { activityLogRetentionDays: Int? = nil, allowClientLogUpload: Bool? = nil, cachePath: String? = nil, + cacheSize: Int? = nil, castReceiverApplications: [CastReceiverApplication]? = nil, chapterImageResolution: ImageResolution? = nil, codecsUsed: [String]? = nil, @@ -128,7 +132,9 @@ public struct ServerConfiguration: Codable, Hashable { enableCaseSensitiveItemIDs: Bool? = nil, enableExternalContentInSuggestions: Bool? = nil, enableFolderView: Bool? = nil, - enableGroupingIntoCollections: Bool? = nil, + enableGroupingMoviesIntoCollections: Bool? = nil, + enableGroupingShowsIntoCollections: Bool? = nil, + enableLegacyAuthorization: Bool? = nil, enableMetrics: Bool? = nil, enableNormalizedItemByNameIDs: Bool? = nil, enableSlowResponseWarning: Bool? = nil, @@ -158,7 +164,6 @@ public struct ServerConfiguration: Codable, Hashable { previousVersionStr: String? = nil, isQuickConnectAvailable: Bool? = nil, remoteClientBitrateLimit: Int? = nil, - isRemoveOldPlugins: Bool? = nil, isSaveMetadataHidden: Bool? = nil, serverName: String? = nil, isSkipDeserializationForBasicTypes: Bool? = nil, @@ -172,6 +177,7 @@ public struct ServerConfiguration: Codable, Hashable { self.activityLogRetentionDays = activityLogRetentionDays self.allowClientLogUpload = allowClientLogUpload self.cachePath = cachePath + self.cacheSize = cacheSize self.castReceiverApplications = castReceiverApplications self.chapterImageResolution = chapterImageResolution self.codecsUsed = codecsUsed @@ -183,7 +189,9 @@ public struct ServerConfiguration: Codable, Hashable { self.enableCaseSensitiveItemIDs = enableCaseSensitiveItemIDs self.enableExternalContentInSuggestions = enableExternalContentInSuggestions self.enableFolderView = enableFolderView - self.enableGroupingIntoCollections = enableGroupingIntoCollections + self.enableGroupingMoviesIntoCollections = enableGroupingMoviesIntoCollections + self.enableGroupingShowsIntoCollections = enableGroupingShowsIntoCollections + self.enableLegacyAuthorization = enableLegacyAuthorization self.enableMetrics = enableMetrics self.enableNormalizedItemByNameIDs = enableNormalizedItemByNameIDs self.enableSlowResponseWarning = enableSlowResponseWarning @@ -213,7 +221,6 @@ public struct ServerConfiguration: Codable, Hashable { self.previousVersionStr = previousVersionStr self.isQuickConnectAvailable = isQuickConnectAvailable self.remoteClientBitrateLimit = remoteClientBitrateLimit - self.isRemoveOldPlugins = isRemoveOldPlugins self.isSaveMetadataHidden = isSaveMetadataHidden self.serverName = serverName self.isSkipDeserializationForBasicTypes = isSkipDeserializationForBasicTypes @@ -230,6 +237,7 @@ public struct ServerConfiguration: Codable, Hashable { self.activityLogRetentionDays = try values.decodeIfPresent(Int.self, forKey: "ActivityLogRetentionDays") self.allowClientLogUpload = try values.decodeIfPresent(Bool.self, forKey: "AllowClientLogUpload") self.cachePath = try values.decodeIfPresent(String.self, forKey: "CachePath") + self.cacheSize = try values.decodeIfPresent(Int.self, forKey: "CacheSize") self.castReceiverApplications = try values.decodeIfPresent([CastReceiverApplication].self, forKey: "CastReceiverApplications") self.chapterImageResolution = try values.decodeIfPresent(ImageResolution.self, forKey: "ChapterImageResolution") self.codecsUsed = try values.decodeIfPresent([String].self, forKey: "CodecsUsed") @@ -241,7 +249,9 @@ public struct ServerConfiguration: Codable, Hashable { self.enableCaseSensitiveItemIDs = try values.decodeIfPresent(Bool.self, forKey: "EnableCaseSensitiveItemIds") self.enableExternalContentInSuggestions = try values.decodeIfPresent(Bool.self, forKey: "EnableExternalContentInSuggestions") self.enableFolderView = try values.decodeIfPresent(Bool.self, forKey: "EnableFolderView") - self.enableGroupingIntoCollections = try values.decodeIfPresent(Bool.self, forKey: "EnableGroupingIntoCollections") + self.enableGroupingMoviesIntoCollections = try values.decodeIfPresent(Bool.self, forKey: "EnableGroupingMoviesIntoCollections") + self.enableGroupingShowsIntoCollections = try values.decodeIfPresent(Bool.self, forKey: "EnableGroupingShowsIntoCollections") + self.enableLegacyAuthorization = try values.decodeIfPresent(Bool.self, forKey: "EnableLegacyAuthorization") self.enableMetrics = try values.decodeIfPresent(Bool.self, forKey: "EnableMetrics") self.enableNormalizedItemByNameIDs = try values.decodeIfPresent(Bool.self, forKey: "EnableNormalizedItemByNameIds") self.enableSlowResponseWarning = try values.decodeIfPresent(Bool.self, forKey: "EnableSlowResponseWarning") @@ -271,7 +281,6 @@ public struct ServerConfiguration: Codable, Hashable { self.previousVersionStr = try values.decodeIfPresent(String.self, forKey: "PreviousVersionStr") self.isQuickConnectAvailable = try values.decodeIfPresent(Bool.self, forKey: "QuickConnectAvailable") self.remoteClientBitrateLimit = try values.decodeIfPresent(Int.self, forKey: "RemoteClientBitrateLimit") - self.isRemoveOldPlugins = try values.decodeIfPresent(Bool.self, forKey: "RemoveOldPlugins") self.isSaveMetadataHidden = try values.decodeIfPresent(Bool.self, forKey: "SaveMetadataHidden") self.serverName = try values.decodeIfPresent(String.self, forKey: "ServerName") self.isSkipDeserializationForBasicTypes = try values.decodeIfPresent(Bool.self, forKey: "SkipDeserializationForBasicTypes") @@ -288,6 +297,7 @@ public struct ServerConfiguration: Codable, Hashable { try values.encodeIfPresent(activityLogRetentionDays, forKey: "ActivityLogRetentionDays") try values.encodeIfPresent(allowClientLogUpload, forKey: "AllowClientLogUpload") try values.encodeIfPresent(cachePath, forKey: "CachePath") + try values.encodeIfPresent(cacheSize, forKey: "CacheSize") try values.encodeIfPresent(castReceiverApplications, forKey: "CastReceiverApplications") try values.encodeIfPresent(chapterImageResolution, forKey: "ChapterImageResolution") try values.encodeIfPresent(codecsUsed, forKey: "CodecsUsed") @@ -299,7 +309,9 @@ public struct ServerConfiguration: Codable, Hashable { try values.encodeIfPresent(enableCaseSensitiveItemIDs, forKey: "EnableCaseSensitiveItemIds") try values.encodeIfPresent(enableExternalContentInSuggestions, forKey: "EnableExternalContentInSuggestions") try values.encodeIfPresent(enableFolderView, forKey: "EnableFolderView") - try values.encodeIfPresent(enableGroupingIntoCollections, forKey: "EnableGroupingIntoCollections") + try values.encodeIfPresent(enableGroupingMoviesIntoCollections, forKey: "EnableGroupingMoviesIntoCollections") + try values.encodeIfPresent(enableGroupingShowsIntoCollections, forKey: "EnableGroupingShowsIntoCollections") + try values.encodeIfPresent(enableLegacyAuthorization, forKey: "EnableLegacyAuthorization") try values.encodeIfPresent(enableMetrics, forKey: "EnableMetrics") try values.encodeIfPresent(enableNormalizedItemByNameIDs, forKey: "EnableNormalizedItemByNameIds") try values.encodeIfPresent(enableSlowResponseWarning, forKey: "EnableSlowResponseWarning") @@ -329,7 +341,6 @@ public struct ServerConfiguration: Codable, Hashable { try values.encodeIfPresent(previousVersionStr, forKey: "PreviousVersionStr") try values.encodeIfPresent(isQuickConnectAvailable, forKey: "QuickConnectAvailable") try values.encodeIfPresent(remoteClientBitrateLimit, forKey: "RemoteClientBitrateLimit") - try values.encodeIfPresent(isRemoveOldPlugins, forKey: "RemoveOldPlugins") try values.encodeIfPresent(isSaveMetadataHidden, forKey: "SaveMetadataHidden") try values.encodeIfPresent(serverName, forKey: "ServerName") try values.encodeIfPresent(isSkipDeserializationForBasicTypes, forKey: "SkipDeserializationForBasicTypes") diff --git a/Sources/Entities/StartupConfigurationDto.swift b/Sources/Entities/StartupConfigurationDto.swift index b980f07bd..41a4dc0de 100644 --- a/Sources/Entities/StartupConfigurationDto.swift +++ b/Sources/Entities/StartupConfigurationDto.swift @@ -14,12 +14,20 @@ public struct StartupConfigurationDto: Codable, Hashable { public var metadataCountryCode: String? /// Gets or sets the preferred language for the metadata. public var preferredMetadataLanguage: String? + /// Gets or sets the server name. + public var serverName: String? /// Gets or sets UI language culture. public var uICulture: String? - public init(metadataCountryCode: String? = nil, preferredMetadataLanguage: String? = nil, uICulture: String? = nil) { + public init( + metadataCountryCode: String? = nil, + preferredMetadataLanguage: String? = nil, + serverName: String? = nil, + uICulture: String? = nil + ) { self.metadataCountryCode = metadataCountryCode self.preferredMetadataLanguage = preferredMetadataLanguage + self.serverName = serverName self.uICulture = uICulture } @@ -27,6 +35,7 @@ public struct StartupConfigurationDto: Codable, Hashable { let values = try decoder.container(keyedBy: StringCodingKey.self) self.metadataCountryCode = try values.decodeIfPresent(String.self, forKey: "MetadataCountryCode") self.preferredMetadataLanguage = try values.decodeIfPresent(String.self, forKey: "PreferredMetadataLanguage") + self.serverName = try values.decodeIfPresent(String.self, forKey: "ServerName") self.uICulture = try values.decodeIfPresent(String.self, forKey: "UICulture") } @@ -34,6 +43,7 @@ public struct StartupConfigurationDto: Codable, Hashable { var values = encoder.container(keyedBy: StringCodingKey.self) try values.encodeIfPresent(metadataCountryCode, forKey: "MetadataCountryCode") try values.encodeIfPresent(preferredMetadataLanguage, forKey: "PreferredMetadataLanguage") + try values.encodeIfPresent(serverName, forKey: "ServerName") try values.encodeIfPresent(uICulture, forKey: "UICulture") } } diff --git a/Sources/Entities/StartupRemoteAccessDto.swift b/Sources/Entities/StartupRemoteAccessDto.swift index cceab33e9..7a2ffd3e0 100644 --- a/Sources/Entities/StartupRemoteAccessDto.swift +++ b/Sources/Entities/StartupRemoteAccessDto.swift @@ -11,6 +11,8 @@ import Foundation /// Startup remote access dto. public struct StartupRemoteAccessDto: Codable, Hashable { /// Gets or sets a value indicating whether enable automatic port mapping. + /// + /// - warning: Deprecated. public var enableAutomaticPortMapping: Bool /// Gets or sets a value indicating whether enable remote access. public var enableRemoteAccess: Bool diff --git a/Sources/Entities/SyncPlayGroupDoesNotExistUpdate.swift b/Sources/Entities/SyncPlayGroupDoesNotExistUpdate.swift new file mode 100644 index 000000000..99e199386 --- /dev/null +++ b/Sources/Entities/SyncPlayGroupDoesNotExistUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayGroupDoesNotExistUpdate: Codable, Hashable { + /// Gets the update data. + public var data: String? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: String? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(String.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayGroupJoinedUpdate.swift b/Sources/Entities/SyncPlayGroupJoinedUpdate.swift new file mode 100644 index 000000000..a06861b05 --- /dev/null +++ b/Sources/Entities/SyncPlayGroupJoinedUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayGroupJoinedUpdate: Codable, Hashable { + /// Gets the update data. + public var data: GroupInfoDto? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: GroupInfoDto? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(GroupInfoDto.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayGroupLeftUpdate.swift b/Sources/Entities/SyncPlayGroupLeftUpdate.swift new file mode 100644 index 000000000..6f75d8820 --- /dev/null +++ b/Sources/Entities/SyncPlayGroupLeftUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayGroupLeftUpdate: Codable, Hashable { + /// Gets the update data. + public var data: String? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: String? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(String.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayGroupUpdateMessage.swift b/Sources/Entities/SyncPlayGroupUpdateMessage.swift new file mode 100644 index 000000000..87b272b9d --- /dev/null +++ b/Sources/Entities/SyncPlayGroupUpdateMessage.swift @@ -0,0 +1,39 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Untyped sync play command. +public struct SyncPlayGroupUpdateMessage: Codable, Hashable { + /// Group update data + public var data: GroupUpdate? + /// Gets or sets the message id. + public var messageID: String? + /// The different kinds of messages that are used in the WebSocket api. + public var messageType: SessionMessageType? + + public init(data: GroupUpdate? = nil, messageID: String? = nil, messageType: SessionMessageType? = nil) { + self.data = data + self.messageID = messageID + self.messageType = messageType + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(GroupUpdate.self, forKey: "Data") + self.messageID = try values.decodeIfPresent(String.self, forKey: "MessageId") + self.messageType = try values.decodeIfPresent(SessionMessageType.self, forKey: "MessageType") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(messageID, forKey: "MessageId") + try values.encodeIfPresent(messageType, forKey: "MessageType") + } +} diff --git a/Sources/Entities/SyncPlayLibraryAccessDeniedUpdate.swift b/Sources/Entities/SyncPlayLibraryAccessDeniedUpdate.swift new file mode 100644 index 000000000..38e185253 --- /dev/null +++ b/Sources/Entities/SyncPlayLibraryAccessDeniedUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayLibraryAccessDeniedUpdate: Codable, Hashable { + /// Gets the update data. + public var data: String? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: String? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(String.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayNotInGroupUpdate.swift b/Sources/Entities/SyncPlayNotInGroupUpdate.swift new file mode 100644 index 000000000..2f9b1f76a --- /dev/null +++ b/Sources/Entities/SyncPlayNotInGroupUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayNotInGroupUpdate: Codable, Hashable { + /// Gets the update data. + public var data: String? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: String? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(String.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayPlayQueueUpdate.swift b/Sources/Entities/SyncPlayPlayQueueUpdate.swift new file mode 100644 index 000000000..5882c0238 --- /dev/null +++ b/Sources/Entities/SyncPlayPlayQueueUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayPlayQueueUpdate: Codable, Hashable { + /// Gets the update data. + public var data: PlayQueueUpdate? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: PlayQueueUpdate? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(PlayQueueUpdate.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayStateUpdate.swift b/Sources/Entities/SyncPlayStateUpdate.swift new file mode 100644 index 000000000..0cc94566e --- /dev/null +++ b/Sources/Entities/SyncPlayStateUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayStateUpdate: Codable, Hashable { + /// Gets the update data. + public var data: GroupStateUpdate? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: GroupStateUpdate? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(GroupStateUpdate.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayUserJoinedUpdate.swift b/Sources/Entities/SyncPlayUserJoinedUpdate.swift new file mode 100644 index 000000000..884d9a5e7 --- /dev/null +++ b/Sources/Entities/SyncPlayUserJoinedUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayUserJoinedUpdate: Codable, Hashable { + /// Gets the update data. + public var data: String? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: String? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(String.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SyncPlayUserLeftUpdate.swift b/Sources/Entities/SyncPlayUserLeftUpdate.swift new file mode 100644 index 000000000..9e19805a9 --- /dev/null +++ b/Sources/Entities/SyncPlayUserLeftUpdate.swift @@ -0,0 +1,38 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +public struct SyncPlayUserLeftUpdate: Codable, Hashable { + /// Gets the update data. + public var data: String? + /// Gets the group identifier. + public var groupID: String? + /// Enum GroupUpdateType. + public var type: GroupUpdateType? + + public init(data: String? = nil, groupID: String? = nil, type: GroupUpdateType? = nil) { + self.data = data + self.groupID = groupID + self.type = type + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.data = try values.decodeIfPresent(String.self, forKey: "Data") + self.groupID = try values.decodeIfPresent(String.self, forKey: "GroupId") + self.type = try values.decodeIfPresent(GroupUpdateType.self, forKey: "Type") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(data, forKey: "Data") + try values.encodeIfPresent(groupID, forKey: "GroupId") + try values.encodeIfPresent(type, forKey: "Type") + } +} diff --git a/Sources/Entities/SystemInfo.swift b/Sources/Entities/SystemInfo.swift index 15d377217..984ce1682 100644 --- a/Sources/Entities/SystemInfo.swift +++ b/Sources/Entities/SystemInfo.swift @@ -11,6 +11,8 @@ import Foundation /// Class SystemInfo. public struct SystemInfo: Codable, Hashable, Identifiable { /// Gets or sets the cache path. + /// + /// - warning: Deprecated. public var cachePath: String? /// - warning: Deprecated. public var canLaunchWebBrowser: Bool @@ -33,13 +35,19 @@ public struct SystemInfo: Codable, Hashable, Identifiable { /// Gets or sets the id. public var id: String? /// Gets or sets the internal metadata path. + /// + /// - warning: Deprecated. public var internalMetadataPath: String? public var isShuttingDown: Bool? /// Gets or sets the items by name path. + /// + /// - warning: Deprecated. public var itemsByNamePath: String? /// Gets or sets the local address. public var localAddress: String? /// Gets or sets the log path. + /// + /// - warning: Deprecated. public var logPath: String? /// Gets or sets the operating system. /// @@ -54,6 +62,8 @@ public struct SystemInfo: Codable, Hashable, Identifiable { /// Gets or sets the product name. This is the AssemblyProduct name. public var productName: String? /// Gets or sets the program data path. + /// + /// - warning: Deprecated. public var programDataPath: String? /// Gets or sets the name of the server. public var serverName: String? @@ -64,10 +74,14 @@ public struct SystemInfo: Codable, Hashable, Identifiable { /// - warning: Deprecated. public var systemArchitecture: String? /// Gets or sets the transcode path. + /// + /// - warning: Deprecated. public var transcodingTempPath: String? /// Gets or sets the server version. public var version: String? /// Gets or sets the web UI resources path. + /// + /// - warning: Deprecated. public var webPath: String? /// Gets or sets the web socket port number. public var webSocketPortNumber: Int? diff --git a/Sources/Entities/SystemStorageDto.swift b/Sources/Entities/SystemStorageDto.swift new file mode 100644 index 000000000..b4c68f492 --- /dev/null +++ b/Sources/Entities/SystemStorageDto.swift @@ -0,0 +1,73 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Contains informations about the systems storage. +public struct SystemStorageDto: Codable, Hashable { + /// Gets or sets the Storage information of the cache folder. + public var cacheFolder: FolderStorageDto? + /// Gets or sets the Storage information of the folder where images are cached. + public var imageCacheFolder: FolderStorageDto? + /// Gets or sets the Storage information of the folder where metadata is stored. + public var internalMetadataFolder: FolderStorageDto? + /// Gets or sets the storage informations of all libraries. + public var libraries: [LibraryStorageDto]? + /// Gets or sets the Storage information of the folder where logfiles are saved to. + public var logFolder: FolderStorageDto? + /// Gets or sets the Storage information of the program data folder. + public var programDataFolder: FolderStorageDto? + /// Gets or sets the Storage information of the transcoding cache. + public var transcodingTempFolder: FolderStorageDto? + /// Gets or sets the Storage information of the web UI resources folder. + public var webFolder: FolderStorageDto? + + public init( + cacheFolder: FolderStorageDto? = nil, + imageCacheFolder: FolderStorageDto? = nil, + internalMetadataFolder: FolderStorageDto? = nil, + libraries: [LibraryStorageDto]? = nil, + logFolder: FolderStorageDto? = nil, + programDataFolder: FolderStorageDto? = nil, + transcodingTempFolder: FolderStorageDto? = nil, + webFolder: FolderStorageDto? = nil + ) { + self.cacheFolder = cacheFolder + self.imageCacheFolder = imageCacheFolder + self.internalMetadataFolder = internalMetadataFolder + self.libraries = libraries + self.logFolder = logFolder + self.programDataFolder = programDataFolder + self.transcodingTempFolder = transcodingTempFolder + self.webFolder = webFolder + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.cacheFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "CacheFolder") + self.imageCacheFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "ImageCacheFolder") + self.internalMetadataFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "InternalMetadataFolder") + self.libraries = try values.decodeIfPresent([LibraryStorageDto].self, forKey: "Libraries") + self.logFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "LogFolder") + self.programDataFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "ProgramDataFolder") + self.transcodingTempFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "TranscodingTempFolder") + self.webFolder = try values.decodeIfPresent(FolderStorageDto.self, forKey: "WebFolder") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(cacheFolder, forKey: "CacheFolder") + try values.encodeIfPresent(imageCacheFolder, forKey: "ImageCacheFolder") + try values.encodeIfPresent(internalMetadataFolder, forKey: "InternalMetadataFolder") + try values.encodeIfPresent(libraries, forKey: "Libraries") + try values.encodeIfPresent(logFolder, forKey: "LogFolder") + try values.encodeIfPresent(programDataFolder, forKey: "ProgramDataFolder") + try values.encodeIfPresent(transcodingTempFolder, forKey: "TranscodingTempFolder") + try values.encodeIfPresent(webFolder, forKey: "WebFolder") + } +} diff --git a/Sources/Entities/TaskTriggerInfoType.swift b/Sources/Entities/TaskTriggerInfoType.swift new file mode 100644 index 000000000..087d77e4a --- /dev/null +++ b/Sources/Entities/TaskTriggerInfoType.swift @@ -0,0 +1,17 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// Enum TaskTriggerInfoType. +public enum TaskTriggerInfoType: String, Codable, CaseIterable { + case dailyTrigger = "DailyTrigger" + case weeklyTrigger = "WeeklyTrigger" + case intervalTrigger = "IntervalTrigger" + case startupTrigger = "StartupTrigger" +} diff --git a/Sources/Entities/TranscodeReason.swift b/Sources/Entities/TranscodeReason.swift index b70078d6c..ee405f761 100644 --- a/Sources/Entities/TranscodeReason.swift +++ b/Sources/Entities/TranscodeReason.swift @@ -35,4 +35,5 @@ public enum TranscodeReason: String, Codable, CaseIterable { case directPlayError = "DirectPlayError" case videoRangeTypeNotSupported = "VideoRangeTypeNotSupported" case videoCodecTagNotSupported = "VideoCodecTagNotSupported" + case streamCountExceedsLimit = "StreamCountExceedsLimit" } diff --git a/Sources/Entities/TranscodingInfo.swift b/Sources/Entities/TranscodingInfo.swift index c07855c60..80e7866ce 100644 --- a/Sources/Entities/TranscodingInfo.swift +++ b/Sources/Entities/TranscodingInfo.swift @@ -8,7 +8,7 @@ import Foundation -/// Class holding information on a runnning transcode. +/// Class holding information on a running transcode. public struct TranscodingInfo: Codable, Hashable { /// Gets or sets the audio channels. public var audioChannels: Int? diff --git a/Sources/Entities/TranscodingProfile.swift b/Sources/Entities/TranscodingProfile.swift index f949c7cba..1556dfb37 100644 --- a/Sources/Entities/TranscodingProfile.swift +++ b/Sources/Entities/TranscodingProfile.swift @@ -37,7 +37,9 @@ public struct TranscodingProfile: Codable, Hashable { public var maxAudioChannels: String? /// Gets or sets the minimum amount of segments. public var minSegments: Int? - /// Gets or sets the protocol. + /// Media streaming protocol. + /// + /// Lowercase for backwards compatibility. public var `protocol`: MediaStreamProtocol? /// Gets or sets the segment length. public var segmentLength: Int? diff --git a/Sources/Entities/TrickplayInfoDto.swift b/Sources/Entities/TrickplayInfoDto.swift new file mode 100644 index 000000000..09e2d24a6 --- /dev/null +++ b/Sources/Entities/TrickplayInfoDto.swift @@ -0,0 +1,67 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation + +/// The trickplay api model. +public struct TrickplayInfoDto: Codable, Hashable { + /// Gets the peak bandwidth usage in bits per second. + public var bandwidth: Int? + /// Gets the height of an individual thumbnail. + public var height: Int? + /// Gets the interval in milliseconds between each trickplay thumbnail. + public var interval: Int? + /// Gets the total amount of non-black thumbnails. + public var thumbnailCount: Int? + /// Gets the amount of thumbnails per column. + public var tileHeight: Int? + /// Gets the amount of thumbnails per row. + public var tileWidth: Int? + /// Gets the width of an individual thumbnail. + public var width: Int? + + public init( + bandwidth: Int? = nil, + height: Int? = nil, + interval: Int? = nil, + thumbnailCount: Int? = nil, + tileHeight: Int? = nil, + tileWidth: Int? = nil, + width: Int? = nil + ) { + self.bandwidth = bandwidth + self.height = height + self.interval = interval + self.thumbnailCount = thumbnailCount + self.tileHeight = tileHeight + self.tileWidth = tileWidth + self.width = width + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: StringCodingKey.self) + self.bandwidth = try values.decodeIfPresent(Int.self, forKey: "Bandwidth") + self.height = try values.decodeIfPresent(Int.self, forKey: "Height") + self.interval = try values.decodeIfPresent(Int.self, forKey: "Interval") + self.thumbnailCount = try values.decodeIfPresent(Int.self, forKey: "ThumbnailCount") + self.tileHeight = try values.decodeIfPresent(Int.self, forKey: "TileHeight") + self.tileWidth = try values.decodeIfPresent(Int.self, forKey: "TileWidth") + self.width = try values.decodeIfPresent(Int.self, forKey: "Width") + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: StringCodingKey.self) + try values.encodeIfPresent(bandwidth, forKey: "Bandwidth") + try values.encodeIfPresent(height, forKey: "Height") + try values.encodeIfPresent(interval, forKey: "Interval") + try values.encodeIfPresent(thumbnailCount, forKey: "ThumbnailCount") + try values.encodeIfPresent(tileHeight, forKey: "TileHeight") + try values.encodeIfPresent(tileWidth, forKey: "TileWidth") + try values.encodeIfPresent(width, forKey: "Width") + } +} diff --git a/Sources/Entities/TunerHostInfo.swift b/Sources/Entities/TunerHostInfo.swift index fcb33b645..7a1678e66 100644 --- a/Sources/Entities/TunerHostInfo.swift +++ b/Sources/Entities/TunerHostInfo.swift @@ -19,6 +19,7 @@ public struct TunerHostInfo: Codable, Hashable, Identifiable { public var id: String? public var isIgnoreDts: Bool? public var isImportFavoritesOnly: Bool? + public var isReadAtNativeFramerate: Bool? public var source: String? public var tunerCount: Int? public var type: String? @@ -36,6 +37,7 @@ public struct TunerHostInfo: Codable, Hashable, Identifiable { id: String? = nil, isIgnoreDts: Bool? = nil, isImportFavoritesOnly: Bool? = nil, + isReadAtNativeFramerate: Bool? = nil, source: String? = nil, tunerCount: Int? = nil, type: String? = nil, @@ -52,6 +54,7 @@ public struct TunerHostInfo: Codable, Hashable, Identifiable { self.id = id self.isIgnoreDts = isIgnoreDts self.isImportFavoritesOnly = isImportFavoritesOnly + self.isReadAtNativeFramerate = isReadAtNativeFramerate self.source = source self.tunerCount = tunerCount self.type = type @@ -71,6 +74,7 @@ public struct TunerHostInfo: Codable, Hashable, Identifiable { self.id = try values.decodeIfPresent(String.self, forKey: "Id") self.isIgnoreDts = try values.decodeIfPresent(Bool.self, forKey: "IgnoreDts") self.isImportFavoritesOnly = try values.decodeIfPresent(Bool.self, forKey: "ImportFavoritesOnly") + self.isReadAtNativeFramerate = try values.decodeIfPresent(Bool.self, forKey: "ReadAtNativeFramerate") self.source = try values.decodeIfPresent(String.self, forKey: "Source") self.tunerCount = try values.decodeIfPresent(Int.self, forKey: "TunerCount") self.type = try values.decodeIfPresent(String.self, forKey: "Type") @@ -90,6 +94,7 @@ public struct TunerHostInfo: Codable, Hashable, Identifiable { try values.encodeIfPresent(id, forKey: "Id") try values.encodeIfPresent(isIgnoreDts, forKey: "IgnoreDts") try values.encodeIfPresent(isImportFavoritesOnly, forKey: "ImportFavoritesOnly") + try values.encodeIfPresent(isReadAtNativeFramerate, forKey: "ReadAtNativeFramerate") try values.encodeIfPresent(source, forKey: "Source") try values.encodeIfPresent(tunerCount, forKey: "TunerCount") try values.encodeIfPresent(type, forKey: "Type") diff --git a/Sources/Entities/UserPolicy.swift b/Sources/Entities/UserPolicy.swift index 091d7da5f..4c50e7104 100644 --- a/Sources/Entities/UserPolicy.swift +++ b/Sources/Entities/UserPolicy.swift @@ -57,9 +57,10 @@ public struct UserPolicy: Codable, Hashable { public var maxActiveSessions: Int? /// Gets or sets the max parental rating. public var maxParentalRating: Int? + public var maxParentalSubRating: Int? public var passwordResetProviderID: String public var remoteClientBitrateLimit: Int? - /// Gets or sets a value indicating what SyncPlay features the user can access. + /// Enum SyncPlayUserAccessType. public var syncPlayAccess: SyncPlayUserAccessType? public init( @@ -103,6 +104,7 @@ public struct UserPolicy: Codable, Hashable { loginAttemptsBeforeLockout: Int? = nil, maxActiveSessions: Int? = nil, maxParentalRating: Int? = nil, + maxParentalSubRating: Int? = nil, passwordResetProviderID: String, remoteClientBitrateLimit: Int? = nil, syncPlayAccess: SyncPlayUserAccessType? = nil @@ -147,6 +149,7 @@ public struct UserPolicy: Codable, Hashable { self.loginAttemptsBeforeLockout = loginAttemptsBeforeLockout self.maxActiveSessions = maxActiveSessions self.maxParentalRating = maxParentalRating + self.maxParentalSubRating = maxParentalSubRating self.passwordResetProviderID = passwordResetProviderID self.remoteClientBitrateLimit = remoteClientBitrateLimit self.syncPlayAccess = syncPlayAccess @@ -194,6 +197,7 @@ public struct UserPolicy: Codable, Hashable { self.loginAttemptsBeforeLockout = try values.decodeIfPresent(Int.self, forKey: "LoginAttemptsBeforeLockout") self.maxActiveSessions = try values.decodeIfPresent(Int.self, forKey: "MaxActiveSessions") self.maxParentalRating = try values.decodeIfPresent(Int.self, forKey: "MaxParentalRating") + self.maxParentalSubRating = try values.decodeIfPresent(Int.self, forKey: "MaxParentalSubRating") self.passwordResetProviderID = try values.decode(String.self, forKey: "PasswordResetProviderId") self.remoteClientBitrateLimit = try values.decodeIfPresent(Int.self, forKey: "RemoteClientBitrateLimit") self.syncPlayAccess = try values.decodeIfPresent(SyncPlayUserAccessType.self, forKey: "SyncPlayAccess") @@ -241,6 +245,7 @@ public struct UserPolicy: Codable, Hashable { try values.encodeIfPresent(loginAttemptsBeforeLockout, forKey: "LoginAttemptsBeforeLockout") try values.encodeIfPresent(maxActiveSessions, forKey: "MaxActiveSessions") try values.encodeIfPresent(maxParentalRating, forKey: "MaxParentalRating") + try values.encodeIfPresent(maxParentalSubRating, forKey: "MaxParentalSubRating") try values.encode(passwordResetProviderID, forKey: "PasswordResetProviderId") try values.encodeIfPresent(remoteClientBitrateLimit, forKey: "RemoteClientBitrateLimit") try values.encodeIfPresent(syncPlayAccess, forKey: "SyncPlayAccess") diff --git a/Sources/Entities/VideoRangeType.swift b/Sources/Entities/VideoRangeType.swift index 8c4fe3164..d6eb3ab51 100644 --- a/Sources/Entities/VideoRangeType.swift +++ b/Sources/Entities/VideoRangeType.swift @@ -18,5 +18,9 @@ public enum VideoRangeType: String, Codable, CaseIterable { case doviWithHDR10 = "DOVIWithHDR10" case doviWithHLG = "DOVIWithHLG" case doviWithSDR = "DOVIWithSDR" + case dOVIWithEL = "DOVIWithEL" + case dOVIWithHDR10Plus = "DOVIWithHDR10Plus" + case dOVIWithELHDR10Plus = "DOVIWithELHDR10Plus" + case dOVIInvalid = "DOVIInvalid" case hdr10Plus = "HDR10Plus" } diff --git a/Sources/Extensions/JellyfinClient+Version.swift b/Sources/Extensions/JellyfinClient+Version.swift index 21dc2101d..bcaba791d 100644 --- a/Sources/Extensions/JellyfinClient+Version.swift +++ b/Sources/Extensions/JellyfinClient+Version.swift @@ -8,7 +8,7 @@ public extension JellyfinClient { /// Version of Jellyfin used to generate the SDK - static let sdkVersion: Version = "10.10.7" + static let sdkVersion: Version = "10.11.0" } public extension JellyfinClient { diff --git a/Sources/Paths/CreateBackupAPI.swift b/Sources/Paths/CreateBackupAPI.swift new file mode 100644 index 000000000..c4db0c61d --- /dev/null +++ b/Sources/Paths/CreateBackupAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Creates a new Backup. + static func createBackup(_ body: JellyfinAPI.BackupOptionsDto? = nil) -> Request { + Request(path: "/Backup/Create", method: "POST", body: body, id: "CreateBackup") + } +} diff --git a/Sources/Paths/GetBackupAPI.swift b/Sources/Paths/GetBackupAPI.swift new file mode 100644 index 000000000..72cd84fd4 --- /dev/null +++ b/Sources/Paths/GetBackupAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Gets the descriptor from an existing archive is present. + static func getBackup(path: String) -> Request { + Request(path: "/Backup/Manifest", method: "GET", query: [("path", path)], id: "GetBackup") + } +} diff --git a/Sources/Paths/GetBrandingCss2API.swift b/Sources/Paths/GetBrandingCss2API.swift index 55f4bb1c7..8683ae23f 100644 --- a/Sources/Paths/GetBrandingCss2API.swift +++ b/Sources/Paths/GetBrandingCss2API.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Gets branding css. - static var getBrandingCss2: Request { + static var getBrandingCss2: Request { Request(path: "/Branding/Css.css", method: "GET", id: "GetBrandingCss_2") } } diff --git a/Sources/Paths/GetBrandingCssAPI.swift b/Sources/Paths/GetBrandingCssAPI.swift index aa40e2022..23c9c7cad 100644 --- a/Sources/Paths/GetBrandingCssAPI.swift +++ b/Sources/Paths/GetBrandingCssAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Gets branding css. - static var getBrandingCss: Request { + static var getBrandingCss: Request { Request(path: "/Branding/Css", method: "GET", id: "GetBrandingCss") } } diff --git a/Sources/Paths/GetBrandingOptionsAPI.swift b/Sources/Paths/GetBrandingOptionsAPI.swift index f56aa171e..b07bc49e3 100644 --- a/Sources/Paths/GetBrandingOptionsAPI.swift +++ b/Sources/Paths/GetBrandingOptionsAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Gets branding configuration. - static var getBrandingOptions: Request { + static var getBrandingOptions: Request { Request(path: "/Branding/Configuration", method: "GET", id: "GetBrandingOptions") } } diff --git a/Sources/Paths/GetGuideInfoAPI.swift b/Sources/Paths/GetGuideInfoAPI.swift index d4af3bab8..7647519b6 100644 --- a/Sources/Paths/GetGuideInfoAPI.swift +++ b/Sources/Paths/GetGuideInfoAPI.swift @@ -11,7 +11,7 @@ import Get import URLQueryEncoder public extension Paths { - /// Get guid info. + /// Get guide info. static var getGuideInfo: Request { Request(path: "/LiveTv/GuideInfo", method: "GET", id: "GetGuideInfo") } diff --git a/Sources/Paths/GetMusicAlbumRemoteSearchResultsAPI.swift b/Sources/Paths/GetMusicAlbumRemoteSearchResultsAPI.swift index ffc09be1d..14f9979ca 100644 --- a/Sources/Paths/GetMusicAlbumRemoteSearchResultsAPI.swift +++ b/Sources/Paths/GetMusicAlbumRemoteSearchResultsAPI.swift @@ -12,9 +12,8 @@ import URLQueryEncoder public extension Paths { /// Get music album remote search. - static func getMusicAlbumRemoteSearchResults( - _ body: JellyfinAPI - .AlbumInfoRemoteSearchQuery + static func getMusicAlbumRemoteSearchResults(_ body: JellyfinAPI + .AlbumInfoRemoteSearchQuery ) -> Request<[JellyfinAPI.RemoteSearchResult]> { Request(path: "/Items/RemoteSearch/MusicAlbum", method: "POST", body: body, id: "GetMusicAlbumRemoteSearchResults") } diff --git a/Sources/Paths/GetMusicArtistRemoteSearchResultsAPI.swift b/Sources/Paths/GetMusicArtistRemoteSearchResultsAPI.swift index b830da736..55d0eed7f 100644 --- a/Sources/Paths/GetMusicArtistRemoteSearchResultsAPI.swift +++ b/Sources/Paths/GetMusicArtistRemoteSearchResultsAPI.swift @@ -12,9 +12,8 @@ import URLQueryEncoder public extension Paths { /// Get music artist remote search. - static func getMusicArtistRemoteSearchResults( - _ body: JellyfinAPI - .ArtistInfoRemoteSearchQuery + static func getMusicArtistRemoteSearchResults(_ body: JellyfinAPI + .ArtistInfoRemoteSearchQuery ) -> Request<[JellyfinAPI.RemoteSearchResult]> { Request(path: "/Items/RemoteSearch/MusicArtist", method: "POST", body: body, id: "GetMusicArtistRemoteSearchResults") } diff --git a/Sources/Paths/GetMusicVideoRemoteSearchResultsAPI.swift b/Sources/Paths/GetMusicVideoRemoteSearchResultsAPI.swift index 454a256c6..d9d93f98e 100644 --- a/Sources/Paths/GetMusicVideoRemoteSearchResultsAPI.swift +++ b/Sources/Paths/GetMusicVideoRemoteSearchResultsAPI.swift @@ -12,9 +12,8 @@ import URLQueryEncoder public extension Paths { /// Get music video remote search. - static func getMusicVideoRemoteSearchResults( - _ body: JellyfinAPI - .MusicVideoInfoRemoteSearchQuery + static func getMusicVideoRemoteSearchResults(_ body: JellyfinAPI + .MusicVideoInfoRemoteSearchQuery ) -> Request<[JellyfinAPI.RemoteSearchResult]> { Request(path: "/Items/RemoteSearch/MusicVideo", method: "POST", body: body, id: "GetMusicVideoRemoteSearchResults") } diff --git a/Sources/Paths/GetPersonRemoteSearchResultsAPI.swift b/Sources/Paths/GetPersonRemoteSearchResultsAPI.swift index 8de003184..d06ce4261 100644 --- a/Sources/Paths/GetPersonRemoteSearchResultsAPI.swift +++ b/Sources/Paths/GetPersonRemoteSearchResultsAPI.swift @@ -12,9 +12,8 @@ import URLQueryEncoder public extension Paths { /// Get person remote search. - static func getPersonRemoteSearchResults( - _ body: JellyfinAPI - .PersonLookupInfoRemoteSearchQuery + static func getPersonRemoteSearchResults(_ body: JellyfinAPI + .PersonLookupInfoRemoteSearchQuery ) -> Request<[JellyfinAPI.RemoteSearchResult]> { Request(path: "/Items/RemoteSearch/Person", method: "POST", body: body, id: "GetPersonRemoteSearchResults") } diff --git a/Sources/Paths/GetRecommendedProgramsAPI.swift b/Sources/Paths/GetRecommendedProgramsAPI.swift index 3b3d6108a..17b63c393 100644 --- a/Sources/Paths/GetRecommendedProgramsAPI.swift +++ b/Sources/Paths/GetRecommendedProgramsAPI.swift @@ -18,6 +18,7 @@ public extension Paths { struct GetRecommendedProgramsParameters { public var userID: String? + public var startIndex: Int? public var limit: Int? public var isAiring: Bool? public var hasAired: Bool? @@ -36,6 +37,7 @@ public extension Paths { public init( userID: String? = nil, + startIndex: Int? = nil, limit: Int? = nil, isAiring: Bool? = nil, hasAired: Bool? = nil, @@ -53,6 +55,7 @@ public extension Paths { enableTotalRecordCount: Bool? = nil ) { self.userID = userID + self.startIndex = startIndex self.limit = limit self.isAiring = isAiring self.hasAired = hasAired @@ -73,6 +76,7 @@ public extension Paths { public var asQuery: [(String, String?)] { let encoder = URLQueryEncoder() encoder.encode(userID, forKey: "userId") + encoder.encode(startIndex, forKey: "startIndex") encoder.encode(limit, forKey: "limit") encoder.encode(isAiring, forKey: "isAiring") encoder.encode(hasAired, forKey: "hasAired") diff --git a/Sources/Paths/GetSplashscreenAPI.swift b/Sources/Paths/GetSplashscreenAPI.swift index 4b6447a3d..4fe762267 100644 --- a/Sources/Paths/GetSplashscreenAPI.swift +++ b/Sources/Paths/GetSplashscreenAPI.swift @@ -19,61 +19,18 @@ public extension Paths { struct GetSplashscreenParameters { public var tag: String? public var format: Format? - public var maxWidth: Int? - public var maxHeight: Int? - public var width: Int? - public var height: Int? - public var fillWidth: Int? - public var fillHeight: Int? - public var blur: Int? - public var backgroundColor: String? - public var foregroundLayer: String? - public var quality: Int? public typealias Format = JellyfinAPI.ImageFormat - public init( - tag: String? = nil, - format: Format? = nil, - maxWidth: Int? = nil, - maxHeight: Int? = nil, - width: Int? = nil, - height: Int? = nil, - fillWidth: Int? = nil, - fillHeight: Int? = nil, - blur: Int? = nil, - backgroundColor: String? = nil, - foregroundLayer: String? = nil, - quality: Int? = nil - ) { + public init(tag: String? = nil, format: Format? = nil) { self.tag = tag self.format = format - self.maxWidth = maxWidth - self.maxHeight = maxHeight - self.width = width - self.height = height - self.fillWidth = fillWidth - self.fillHeight = fillHeight - self.blur = blur - self.backgroundColor = backgroundColor - self.foregroundLayer = foregroundLayer - self.quality = quality } public var asQuery: [(String, String?)] { let encoder = URLQueryEncoder() encoder.encode(tag, forKey: "tag") encoder.encode(format, forKey: "format") - encoder.encode(maxWidth, forKey: "maxWidth") - encoder.encode(maxHeight, forKey: "maxHeight") - encoder.encode(width, forKey: "width") - encoder.encode(height, forKey: "height") - encoder.encode(fillWidth, forKey: "fillWidth") - encoder.encode(fillHeight, forKey: "fillHeight") - encoder.encode(blur, forKey: "blur") - encoder.encode(backgroundColor, forKey: "backgroundColor") - encoder.encode(foregroundLayer, forKey: "foregroundLayer") - encoder.encode(quality, forKey: "quality") return encoder.items } } diff --git a/Sources/Paths/GetSystemStorageAPI.swift b/Sources/Paths/GetSystemStorageAPI.swift new file mode 100644 index 000000000..5f289a707 --- /dev/null +++ b/Sources/Paths/GetSystemStorageAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Gets information about the server. + static var getSystemStorage: Request { + Request(path: "/System/Info/Storage", method: "GET", id: "GetSystemStorage") + } +} diff --git a/Sources/Paths/GetTrailerRemoteSearchResultsAPI.swift b/Sources/Paths/GetTrailerRemoteSearchResultsAPI.swift index 567d850fa..208985eb8 100644 --- a/Sources/Paths/GetTrailerRemoteSearchResultsAPI.swift +++ b/Sources/Paths/GetTrailerRemoteSearchResultsAPI.swift @@ -12,9 +12,8 @@ import URLQueryEncoder public extension Paths { /// Get trailer remote search. - static func getTrailerRemoteSearchResults( - _ body: JellyfinAPI - .TrailerInfoRemoteSearchQuery + static func getTrailerRemoteSearchResults(_ body: JellyfinAPI + .TrailerInfoRemoteSearchQuery ) -> Request<[JellyfinAPI.RemoteSearchResult]> { Request(path: "/Items/RemoteSearch/Trailer", method: "POST", body: body, id: "GetTrailerRemoteSearchResults") } diff --git a/Sources/Paths/GetUserImageAPI.swift b/Sources/Paths/GetUserImageAPI.swift index a783af0b1..f33403a60 100644 --- a/Sources/Paths/GetUserImageAPI.swift +++ b/Sources/Paths/GetUserImageAPI.swift @@ -20,56 +20,13 @@ public extension Paths { public var userID: String? public var tag: String? public var format: Format? - public var maxWidth: Int? - public var maxHeight: Int? - public var percentPlayed: Double? - public var unplayedCount: Int? - public var width: Int? - public var height: Int? - public var quality: Int? - public var fillWidth: Int? - public var fillHeight: Int? - public var blur: Int? - public var backgroundColor: String? - public var foregroundLayer: String? - public var imageIndex: Int? public typealias Format = JellyfinAPI.ImageFormat - public init( - userID: String? = nil, - tag: String? = nil, - format: Format? = nil, - maxWidth: Int? = nil, - maxHeight: Int? = nil, - percentPlayed: Double? = nil, - unplayedCount: Int? = nil, - width: Int? = nil, - height: Int? = nil, - quality: Int? = nil, - fillWidth: Int? = nil, - fillHeight: Int? = nil, - blur: Int? = nil, - backgroundColor: String? = nil, - foregroundLayer: String? = nil, - imageIndex: Int? = nil - ) { + public init(userID: String? = nil, tag: String? = nil, format: Format? = nil) { self.userID = userID self.tag = tag self.format = format - self.maxWidth = maxWidth - self.maxHeight = maxHeight - self.percentPlayed = percentPlayed - self.unplayedCount = unplayedCount - self.width = width - self.height = height - self.quality = quality - self.fillWidth = fillWidth - self.fillHeight = fillHeight - self.blur = blur - self.backgroundColor = backgroundColor - self.foregroundLayer = foregroundLayer - self.imageIndex = imageIndex } public var asQuery: [(String, String?)] { @@ -77,19 +34,6 @@ public extension Paths { encoder.encode(userID, forKey: "userId") encoder.encode(tag, forKey: "tag") encoder.encode(format, forKey: "format") - encoder.encode(maxWidth, forKey: "maxWidth") - encoder.encode(maxHeight, forKey: "maxHeight") - encoder.encode(percentPlayed, forKey: "percentPlayed") - encoder.encode(unplayedCount, forKey: "unplayedCount") - encoder.encode(width, forKey: "width") - encoder.encode(height, forKey: "height") - encoder.encode(quality, forKey: "quality") - encoder.encode(fillWidth, forKey: "fillWidth") - encoder.encode(fillHeight, forKey: "fillHeight") - encoder.encode(blur, forKey: "blur") - encoder.encode(backgroundColor, forKey: "backgroundColor") - encoder.encode(foregroundLayer, forKey: "foregroundLayer") - encoder.encode(imageIndex, forKey: "imageIndex") return encoder.items } } diff --git a/Sources/Paths/HeadUserImageAPI.swift b/Sources/Paths/HeadUserImageAPI.swift index 9486ad108..5f3e40197 100644 --- a/Sources/Paths/HeadUserImageAPI.swift +++ b/Sources/Paths/HeadUserImageAPI.swift @@ -20,56 +20,13 @@ public extension Paths { public var userID: String? public var tag: String? public var format: Format? - public var maxWidth: Int? - public var maxHeight: Int? - public var percentPlayed: Double? - public var unplayedCount: Int? - public var width: Int? - public var height: Int? - public var quality: Int? - public var fillWidth: Int? - public var fillHeight: Int? - public var blur: Int? - public var backgroundColor: String? - public var foregroundLayer: String? - public var imageIndex: Int? public typealias Format = JellyfinAPI.ImageFormat - public init( - userID: String? = nil, - tag: String? = nil, - format: Format? = nil, - maxWidth: Int? = nil, - maxHeight: Int? = nil, - percentPlayed: Double? = nil, - unplayedCount: Int? = nil, - width: Int? = nil, - height: Int? = nil, - quality: Int? = nil, - fillWidth: Int? = nil, - fillHeight: Int? = nil, - blur: Int? = nil, - backgroundColor: String? = nil, - foregroundLayer: String? = nil, - imageIndex: Int? = nil - ) { + public init(userID: String? = nil, tag: String? = nil, format: Format? = nil) { self.userID = userID self.tag = tag self.format = format - self.maxWidth = maxWidth - self.maxHeight = maxHeight - self.percentPlayed = percentPlayed - self.unplayedCount = unplayedCount - self.width = width - self.height = height - self.quality = quality - self.fillWidth = fillWidth - self.fillHeight = fillHeight - self.blur = blur - self.backgroundColor = backgroundColor - self.foregroundLayer = foregroundLayer - self.imageIndex = imageIndex } public var asQuery: [(String, String?)] { @@ -77,19 +34,6 @@ public extension Paths { encoder.encode(userID, forKey: "userId") encoder.encode(tag, forKey: "tag") encoder.encode(format, forKey: "format") - encoder.encode(maxWidth, forKey: "maxWidth") - encoder.encode(maxHeight, forKey: "maxHeight") - encoder.encode(percentPlayed, forKey: "percentPlayed") - encoder.encode(unplayedCount, forKey: "unplayedCount") - encoder.encode(width, forKey: "width") - encoder.encode(height, forKey: "height") - encoder.encode(quality, forKey: "quality") - encoder.encode(fillWidth, forKey: "fillWidth") - encoder.encode(fillHeight, forKey: "fillHeight") - encoder.encode(blur, forKey: "blur") - encoder.encode(backgroundColor, forKey: "backgroundColor") - encoder.encode(foregroundLayer, forKey: "foregroundLayer") - encoder.encode(imageIndex, forKey: "imageIndex") return encoder.items } } diff --git a/Sources/Paths/ListBackupsAPI.swift b/Sources/Paths/ListBackupsAPI.swift new file mode 100644 index 000000000..aa5e557c3 --- /dev/null +++ b/Sources/Paths/ListBackupsAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Gets a list of all currently present backups in the backup directory. + static var listBackups: Request<[JellyfinAPI.BackupManifestDto]> { + Request(path: "/Backup", method: "GET", id: "ListBackups") + } +} diff --git a/Sources/Paths/OnPlaybackProgressAPI.swift b/Sources/Paths/OnPlaybackProgressAPI.swift index 8cafc4aa7..a4cf60836 100644 --- a/Sources/Paths/OnPlaybackProgressAPI.swift +++ b/Sources/Paths/OnPlaybackProgressAPI.swift @@ -12,6 +12,7 @@ import URLQueryEncoder public extension Paths { /// Reports a session's playback progress. + @available(*, deprecated, message: "Deprecated") static func onPlaybackProgress(itemID: String, parameters: OnPlaybackProgressParameters? = nil) -> Request { Request(path: "/PlayingItems/\(itemID)/Progress", method: "POST", query: parameters?.asQuery, id: "OnPlaybackProgress") } diff --git a/Sources/Paths/OnPlaybackStartAPI.swift b/Sources/Paths/OnPlaybackStartAPI.swift index 49ddc0c9b..e88d2c3f2 100644 --- a/Sources/Paths/OnPlaybackStartAPI.swift +++ b/Sources/Paths/OnPlaybackStartAPI.swift @@ -12,6 +12,7 @@ import URLQueryEncoder public extension Paths { /// Reports that a session has begun playing an item. + @available(*, deprecated, message: "Deprecated") static func onPlaybackStart(itemID: String, parameters: OnPlaybackStartParameters? = nil) -> Request { Request(path: "/PlayingItems/\(itemID)", method: "POST", query: parameters?.asQuery, id: "OnPlaybackStart") } diff --git a/Sources/Paths/OnPlaybackStoppedAPI.swift b/Sources/Paths/OnPlaybackStoppedAPI.swift index f0cd4bfc9..d93a6fd33 100644 --- a/Sources/Paths/OnPlaybackStoppedAPI.swift +++ b/Sources/Paths/OnPlaybackStoppedAPI.swift @@ -12,6 +12,7 @@ import URLQueryEncoder public extension Paths { /// Reports that a session has stopped playing an item. + @available(*, deprecated, message: "Deprecated") static func onPlaybackStopped(itemID: String, parameters: OnPlaybackStoppedParameters? = nil) -> Request { Request(path: "/PlayingItems/\(itemID)", method: "DELETE", query: parameters?.asQuery, id: "OnPlaybackStopped") } diff --git a/Sources/Paths/StartRestoreBackupAPI.swift b/Sources/Paths/StartRestoreBackupAPI.swift new file mode 100644 index 000000000..69d971246 --- /dev/null +++ b/Sources/Paths/StartRestoreBackupAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Restores to a backup by restarting the server and applying the backup. + static func startRestoreBackup(_ body: JellyfinAPI.BackupRestoreRequestDto) -> Request { + Request(path: "/Backup/Restore", method: "POST", body: body, id: "StartRestoreBackup") + } +} diff --git a/Sources/Paths/SyncPlayCreateGroupAPI.swift b/Sources/Paths/SyncPlayCreateGroupAPI.swift index a0c830014..f51a5a74b 100644 --- a/Sources/Paths/SyncPlayCreateGroupAPI.swift +++ b/Sources/Paths/SyncPlayCreateGroupAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Create a new SyncPlay group. - static func syncPlayCreateGroup(_ body: JellyfinAPI.NewGroupRequestDto) -> Request { + static func syncPlayCreateGroup(_ body: JellyfinAPI.NewGroupRequestDto) -> Request { Request(path: "/SyncPlay/New", method: "POST", body: body, id: "SyncPlayCreateGroup") } } diff --git a/Sources/Paths/SyncPlayGetGroupAPI.swift b/Sources/Paths/SyncPlayGetGroupAPI.swift new file mode 100644 index 000000000..948e930cf --- /dev/null +++ b/Sources/Paths/SyncPlayGetGroupAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Gets a SyncPlay group by id. + static func syncPlayGetGroup(id: String) -> Request { + Request(path: "/SyncPlay/\(id)", method: "GET", id: "SyncPlayGetGroup") + } +} diff --git a/Sources/Paths/UpdateBrandingConfigurationAPI.swift b/Sources/Paths/UpdateBrandingConfigurationAPI.swift new file mode 100644 index 000000000..5c96a72f3 --- /dev/null +++ b/Sources/Paths/UpdateBrandingConfigurationAPI.swift @@ -0,0 +1,18 @@ +// +// jellyfin-sdk-swift is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Foundation +import Get +import URLQueryEncoder + +public extension Paths { + /// Updates branding configuration. + static func updateBrandingConfiguration(_ body: JellyfinAPI.BrandingOptionsDto) -> Request { + Request(path: "/System/Configuration/Branding", method: "POST", body: body, id: "UpdateBrandingConfiguration") + } +} diff --git a/Sources/jellyfin-openapi-stable.json b/Sources/jellyfin-openapi-stable.json index f616f500d..0fccd3d1e 100644 --- a/Sources/jellyfin-openapi-stable.json +++ b/Sources/jellyfin-openapi-stable.json @@ -2,8 +2,8 @@ "openapi": "3.0.1", "info": { "title": "Jellyfin API", - "version": "10.10.7", - "x-jellyfin-version": "10.10.7" + "version": "10.11.0", + "x-jellyfin-version": "10.11.0" }, "servers": [ { @@ -76,6 +76,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -120,6 +144,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -156,6 +204,30 @@ "204": { "description": "Api key created." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -194,6 +266,30 @@ "204": { "description": "Api key deleted." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -559,6 +655,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -623,6 +743,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -988,6 +1132,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -1477,6 +1645,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -1952,6 +2144,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -2298,7 +2514,7 @@ { "name": "requireNonAnamorphic", "in": "query", - "description": "Optional. Whether to require a non anamporphic stream.", + "description": "Optional. Whether to require a non anamorphic stream.", "schema": { "type": "boolean" } @@ -2430,6 +2646,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -2774,7 +3014,7 @@ { "name": "requireNonAnamorphic", "in": "query", - "description": "Optional. Whether to require a non anamporphic stream.", + "description": "Optional. Whether to require a non anamorphic stream.", "schema": { "type": "boolean" } @@ -2906,10 +3146,491 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } }, + "/Backup": { + "get": { + "tags": [ + "Backup" + ], + "summary": "Gets a list of all currently present backups in the backup directory.", + "operationId": "ListBackups", + "responses": { + "200": { + "description": "Backups available.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BackupManifestDto" + } + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BackupManifestDto" + } + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BackupManifestDto" + } + } + } + } + }, + "403": { + "description": "User does not have permission to retrieve information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + } + }, + "security": [ + { + "CustomAuthentication": [ + "RequiresElevation" + ] + } + ] + } + }, + "/Backup/Create": { + "post": { + "tags": [ + "Backup" + ], + "summary": "Creates a new Backup.", + "operationId": "CreateBackup", + "requestBody": { + "description": "The backup options.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupOptionsDto" + } + ], + "description": "Defines the optional contents of the backup archive." + } + }, + "text/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupOptionsDto" + } + ], + "description": "Defines the optional contents of the backup archive." + } + }, + "application/*+json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupOptionsDto" + } + ], + "description": "Defines the optional contents of the backup archive." + } + } + } + }, + "responses": { + "200": { + "description": "Backup created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupManifestDto" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/BackupManifestDto" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/BackupManifestDto" + } + } + } + }, + "403": { + "description": "User does not have permission to retrieve information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + } + }, + "security": [ + { + "CustomAuthentication": [ + "RequiresElevation" + ] + } + ] + } + }, + "/Backup/Manifest": { + "get": { + "tags": [ + "Backup" + ], + "summary": "Gets the descriptor from an existing archive is present.", + "operationId": "GetBackup", + "parameters": [ + { + "name": "path", + "in": "query", + "description": "The data to start a restore process.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Backup archive manifest.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupManifestDto" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/BackupManifestDto" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/BackupManifestDto" + } + } + } + }, + "204": { + "description": "Not a valid jellyfin Archive." + }, + "404": { + "description": "Not a valid path.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "User does not have permission to retrieve information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + } + }, + "security": [ + { + "CustomAuthentication": [ + "RequiresElevation" + ] + } + ] + } + }, + "/Backup/Restore": { + "post": { + "tags": [ + "Backup" + ], + "summary": "Restores to a backup by restarting the server and applying the backup.", + "operationId": "StartRestoreBackup", + "requestBody": { + "description": "The data to start a restore process.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupRestoreRequestDto" + } + ], + "description": "Defines properties used to start a restore process." + } + }, + "text/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupRestoreRequestDto" + } + ], + "description": "Defines properties used to start a restore process." + } + }, + "application/*+json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupRestoreRequestDto" + } + ], + "description": "Defines properties used to start a restore process." + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Backup restore started." + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "User does not have permission to retrieve information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + } + }, + "security": [ + { + "CustomAuthentication": [ + "RequiresElevation" + ] + } + ] + } + }, "/Branding/Configuration": { "get": { "tags": [ @@ -2923,20 +3644,44 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BrandingOptions" + "$ref": "#/components/schemas/BrandingOptionsDto" } }, "application/json; profile=\"CamelCase\"": { "schema": { - "$ref": "#/components/schemas/BrandingOptions" + "$ref": "#/components/schemas/BrandingOptionsDto" } }, "application/json; profile=\"PascalCase\"": { "schema": { - "$ref": "#/components/schemas/BrandingOptions" + "$ref": "#/components/schemas/BrandingOptionsDto" } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -2976,6 +3721,30 @@ }, "204": { "description": "No branding css configured." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -3015,6 +3784,30 @@ }, "204": { "description": "No branding css configured." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -3100,6 +3893,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3156,6 +3973,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3292,6 +4133,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3345,6 +4210,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3452,6 +4341,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3546,6 +4459,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -3626,6 +4563,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3679,6 +4640,30 @@ "204": { "description": "Items added to collection." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3730,6 +4715,30 @@ "204": { "description": "Items removed from collection." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3775,6 +4784,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3836,6 +4869,30 @@ "204": { "description": "Configuration updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3883,6 +4940,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3934,6 +5015,118 @@ "204": { "description": "Named configuration updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + }, + "security": [ + { + "CustomAuthentication": [ + "RequiresElevation", + "DefaultAuthorization" + ] + } + ] + } + }, + "/System/Configuration/Branding": { + "post": { + "tags": [ + "Configuration" + ], + "summary": "Updates branding configuration.", + "operationId": "UpdateBrandingConfiguration", + "requestBody": { + "description": "Branding configuration.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BrandingOptionsDto" + } + ], + "description": "The branding options DTO for API use.\r\nThis DTO excludes SplashscreenLocation to prevent it from being updated via API." + } + }, + "text/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BrandingOptionsDto" + } + ], + "description": "The branding options DTO for API use.\r\nThis DTO excludes SplashscreenLocation to prevent it from being updated via API." + } + }, + "application/*+json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/BrandingOptionsDto" + } + ], + "description": "The branding options DTO for API use.\r\nThis DTO excludes SplashscreenLocation to prevent it from being updated via API." + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Branding configuration updated." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -3979,6 +5172,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4050,6 +5267,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -4121,6 +5362,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4176,6 +5441,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4232,6 +5521,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4307,6 +5620,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4382,6 +5719,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4454,6 +5815,30 @@ "204": { "description": "Device options updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4527,6 +5912,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -4617,6 +6026,30 @@ "204": { "description": "Display preferences updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -5156,6 +6589,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -5646,6 +7103,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -6121,7 +7602,7 @@ "description": "Enable adaptive bitrate streaming.", "schema": { "type": "boolean", - "default": true + "default": false } }, { @@ -6146,6 +7627,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -6619,7 +8124,7 @@ "description": "Enable adaptive bitrate streaming.", "schema": { "type": "boolean", - "default": true + "default": false } }, { @@ -6644,6 +8149,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -7201,6 +8730,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -7726,6 +9279,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -8234,6 +9811,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -8718,7 +10319,7 @@ "description": "Enable adaptive bitrate streaming.", "schema": { "type": "boolean", - "default": true + "default": false } }, { @@ -8761,6 +10362,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9243,7 +10868,7 @@ "description": "Enable adaptive bitrate streaming.", "schema": { "type": "boolean", - "default": true + "default": false } }, { @@ -9286,6 +10911,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9330,6 +10979,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9413,6 +11086,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9467,6 +11164,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9521,6 +11242,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9578,6 +11323,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9662,6 +11431,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9749,6 +11542,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -9880,6 +11697,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -10095,6 +11936,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -10159,6 +12024,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -10213,6 +12102,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -10255,6 +12168,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -10335,6 +12272,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -10378,6 +12339,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -10425,6 +12410,30 @@ "204": { "description": "Encoding stopped successfully." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -10663,6 +12672,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -10887,6 +12920,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -10926,97 +12983,6 @@ } ] } - }, - { - "name": "maxWidth", - "in": "query", - "description": "The maximum image width to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "maxHeight", - "in": "query", - "description": "The maximum image height to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "width", - "in": "query", - "description": "The fixed image width to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "height", - "in": "query", - "description": "The fixed image height to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fillWidth", - "in": "query", - "description": "Width of box to fill.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fillHeight", - "in": "query", - "description": "Height of box to fill.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "blur", - "in": "query", - "description": "Blur image.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "backgroundColor", - "in": "query", - "description": "Apply a background color for transparent images.", - "schema": { - "type": "string" - } - }, - { - "name": "foregroundLayer", - "in": "query", - "description": "Apply a foreground layer on top of the image.", - "schema": { - "type": "string" - } - }, - { - "name": "quality", - "in": "query", - "description": "Quality setting, from 0-100.", - "schema": { - "maximum": 100, - "minimum": 0, - "type": "integer", - "format": "int32", - "default": 90 - } } ], "responses": { @@ -11030,6 +12996,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -11093,6 +13083,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -11118,6 +13132,30 @@ "403": { "description": "User does not have permission to delete splashscreen.." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -11352,6 +13390,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -11575,6 +13637,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -11801,6 +13887,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -12025,6 +14135,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -12098,6 +14232,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -12195,6 +14353,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -12311,6 +14493,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -12547,6 +14753,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -12771,6 +15001,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -12857,6 +15111,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -12983,6 +15261,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -13220,6 +15522,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -13445,6 +15771,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -13679,6 +16029,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -13911,6 +16285,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -14007,6 +16405,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -14244,6 +16666,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -14467,6 +16913,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -14693,6 +17163,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -14917,6 +17411,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -15142,6 +17660,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -15365,6 +17907,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -15591,6 +18157,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -15815,6 +18405,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -16040,6 +18654,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -16263,6 +18901,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -16489,6 +19151,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -16713,6 +19399,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -16809,6 +19519,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -16862,6 +19596,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -16917,121 +19675,6 @@ } ] } - }, - { - "name": "maxWidth", - "in": "query", - "description": "The maximum image width to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "maxHeight", - "in": "query", - "description": "The maximum image height to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "percentPlayed", - "in": "query", - "description": "Optional. Percent to render for the percent played overlay.", - "schema": { - "type": "number", - "format": "double" - } - }, - { - "name": "unplayedCount", - "in": "query", - "description": "Optional. Unplayed count overlay to render.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "width", - "in": "query", - "description": "The fixed image width to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "height", - "in": "query", - "description": "The fixed image height to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "quality", - "in": "query", - "description": "Optional. Quality setting, from 0-100. Defaults to 90 and should suffice in most cases.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fillWidth", - "in": "query", - "description": "Width of box to fill.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fillHeight", - "in": "query", - "description": "Height of box to fill.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "blur", - "in": "query", - "description": "Optional. Blur image.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "backgroundColor", - "in": "query", - "description": "Optional. Apply a background color for transparent images.", - "schema": { - "type": "string" - } - }, - { - "name": "foregroundLayer", - "in": "query", - "description": "Optional. Apply a foreground layer on top of the image.", - "schema": { - "type": "string" - } - }, - { - "name": "imageIndex", - "in": "query", - "description": "Image index.", - "schema": { - "type": "integer", - "format": "int32" - } } ], "responses": { @@ -17085,6 +19728,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -17131,151 +19798,188 @@ } ] } - }, - { - "name": "maxWidth", - "in": "query", - "description": "The maximum image width to return.", - "schema": { - "type": "integer", - "format": "int32" + } + ], + "responses": { + "200": { + "description": "Image stream returned.", + "content": { + "image/*": { + "schema": { + "type": "string", + "format": "binary" + } + } } }, - { - "name": "maxHeight", - "in": "query", - "description": "The maximum image height to return.", - "schema": { - "type": "integer", - "format": "int32" + "400": { + "description": "User id not provided.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } } }, - { - "name": "percentPlayed", - "in": "query", - "description": "Optional. Percent to render for the percent played overlay.", - "schema": { - "type": "number", - "format": "double" + "404": { + "description": "Item not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + } + } + } + }, + "/Albums/{itemId}/InstantMix": { + "get": { + "tags": [ + "InstantMix" + ], + "summary": "Creates an instant playlist based on a given album.", + "operationId": "GetInstantMixFromAlbum", + "parameters": [ { - "name": "unplayedCount", - "in": "query", - "description": "Optional. Unplayed count overlay to render.", + "name": "itemId", + "in": "path", + "description": "The item id.", + "required": true, "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" } }, { - "name": "width", + "name": "userId", "in": "query", - "description": "The fixed image width to return.", + "description": "Optional. Filter by user id, and attach user data.", "schema": { - "type": "integer", - "format": "int32" + "type": "string", + "format": "uuid" } }, { - "name": "height", + "name": "limit", "in": "query", - "description": "The fixed image height to return.", + "description": "Optional. The maximum number of records to return.", "schema": { "type": "integer", "format": "int32" } }, { - "name": "quality", + "name": "fields", "in": "query", - "description": "Optional. Quality setting, from 0-100. Defaults to 90 and should suffice in most cases.", + "description": "Optional. Specify additional fields of information to return in the output.", "schema": { - "type": "integer", - "format": "int32" + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemFields" + } } }, { - "name": "fillWidth", + "name": "enableImages", "in": "query", - "description": "Width of box to fill.", + "description": "Optional. Include image information in output.", "schema": { - "type": "integer", - "format": "int32" + "type": "boolean" } }, { - "name": "fillHeight", + "name": "enableUserData", "in": "query", - "description": "Height of box to fill.", + "description": "Optional. Include user data.", "schema": { - "type": "integer", - "format": "int32" + "type": "boolean" } }, { - "name": "blur", + "name": "imageTypeLimit", "in": "query", - "description": "Optional. Blur image.", + "description": "Optional. The max number of images to return, per image type.", "schema": { "type": "integer", "format": "int32" } }, { - "name": "backgroundColor", - "in": "query", - "description": "Optional. Apply a background color for transparent images.", - "schema": { - "type": "string" - } - }, - { - "name": "foregroundLayer", - "in": "query", - "description": "Optional. Apply a foreground layer on top of the image.", - "schema": { - "type": "string" - } - }, - { - "name": "imageIndex", + "name": "enableImageTypes", "in": "query", - "description": "Image index.", + "description": "Optional. The image types to include in the output.", "schema": { - "type": "integer", - "format": "int32" + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageType" + } } } ], "responses": { "200": { - "description": "Image stream returned.", - "content": { - "image/*": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "400": { - "description": "User id not provided.", + "description": "Instant playlist returned.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProblemDetails" + "$ref": "#/components/schemas/BaseItemDtoQueryResult" } }, "application/json; profile=\"CamelCase\"": { "schema": { - "$ref": "#/components/schemas/ProblemDetails" + "$ref": "#/components/schemas/BaseItemDtoQueryResult" } }, "application/json; profile=\"PascalCase\"": { "schema": { - "$ref": "#/components/schemas/ProblemDetails" + "$ref": "#/components/schemas/BaseItemDtoQueryResult" } } } @@ -17299,17 +20003,54 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" } - } + }, + "security": [ + { + "CustomAuthentication": [ + "DefaultAuthorization" + ] + } + ] } }, - "/Albums/{itemId}/InstantMix": { + "/Artists/{itemId}/InstantMix": { "get": { "tags": [ "InstantMix" ], - "summary": "Creates an instant playlist based on a given album.", - "operationId": "GetInstantMixFromAlbum", + "summary": "Creates an instant playlist based on a given artist.", + "operationId": "GetInstantMixFromArtists", "parameters": [ { "name": "itemId", @@ -17428,6 +20169,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -17444,17 +20209,17 @@ ] } }, - "/Artists/{itemId}/InstantMix": { + "/Artists/InstantMix": { "get": { "tags": [ "InstantMix" ], "summary": "Creates an instant playlist based on a given artist.", - "operationId": "GetInstantMixFromArtists", + "operationId": "GetInstantMixFromArtists2", "parameters": [ { - "name": "itemId", - "in": "path", + "name": "id", + "in": "query", "description": "The item id.", "required": true, "schema": { @@ -17569,145 +20334,28 @@ } } }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": [ - "DefaultAuthorization" - ] - } - ] - } - }, - "/Artists/InstantMix": { - "get": { - "tags": [ - "InstantMix" - ], - "summary": "Creates an instant playlist based on a given artist.", - "operationId": "GetInstantMixFromArtists2", - "parameters": [ - { - "name": "id", - "in": "query", - "description": "The item id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "userId", - "in": "query", - "description": "Optional. Filter by user id, and attach user data.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "limit", - "in": "query", - "description": "Optional. The maximum number of records to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "fields", - "in": "query", - "description": "Optional. Specify additional fields of information to return in the output.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ItemFields" - } - } - }, - { - "name": "enableImages", - "in": "query", - "description": "Optional. Include image information in output.", - "schema": { - "type": "boolean" - } - }, - { - "name": "enableUserData", - "in": "query", - "description": "Optional. Include user data.", - "schema": { - "type": "boolean" - } - }, - { - "name": "imageTypeLimit", - "in": "query", - "description": "Optional. The max number of images to return, per image type.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "enableImageTypes", - "in": "query", - "description": "Optional. The image types to include in the output.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ImageType" - } - } - } - ], - "responses": { - "200": { - "description": "Instant playlist returned.", - "content": { - "application/json": { + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, "schema": { - "$ref": "#/components/schemas/BaseItemDtoQueryResult" + "type": "integer", + "format": "int32" } }, - "application/json; profile=\"CamelCase\"": { + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, "schema": { - "$ref": "#/components/schemas/BaseItemDtoQueryResult" - } - }, - "application/json; profile=\"PascalCase\"": { - "schema": { - "$ref": "#/components/schemas/BaseItemDtoQueryResult" + "type": "string", + "format": "text" } } - } - }, - "404": { - "description": "Item not found.", + }, "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "application/json; profile=\"CamelCase\"": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "application/json; profile=\"PascalCase\"": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } + "text/html": { } } }, "401": { @@ -17852,6 +20500,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -17972,6 +20644,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18113,6 +20809,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18254,6 +20974,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18395,6 +21139,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18480,6 +21248,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18582,6 +21374,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18669,6 +21485,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18755,6 +21595,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18841,6 +21705,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -18927,6 +21815,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -19013,6 +21925,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -19099,6 +22035,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -19185,6 +22145,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -19272,6 +22256,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -19358,6 +22366,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -19482,6 +22514,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -20340,6 +23396,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -20419,6 +23499,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "403": { "description": "Forbidden" } @@ -20501,6 +23605,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -20620,6 +23748,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -20809,6 +23961,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -20904,6 +24080,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -20981,6 +24181,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "403": { "description": "Forbidden" } @@ -21041,6 +24265,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21108,6 +24356,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21184,6 +24456,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21281,6 +24577,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21378,6 +24698,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21472,6 +24816,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21526,6 +24894,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21600,6 +24992,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21674,6 +25090,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21771,6 +25211,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21870,6 +25334,30 @@ "404": { "description": "Item not found." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -21986,6 +25474,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22102,6 +25614,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22165,6 +25701,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22247,6 +25807,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22311,6 +25895,30 @@ "204": { "description": "Report success." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22365,6 +25973,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22410,6 +26042,30 @@ "204": { "description": "Report success." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22455,6 +26111,30 @@ "204": { "description": "Report success." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22508,6 +26188,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22535,6 +26239,30 @@ "204": { "description": "Library scan started." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22572,6 +26300,30 @@ "204": { "description": "Report success." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22609,6 +26361,30 @@ "204": { "description": "Report success." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22706,6 +26482,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22803,6 +26603,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22900,6 +26724,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -22953,6 +26801,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23066,6 +26938,30 @@ "204": { "description": "Folder added." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23111,6 +27007,33 @@ "204": { "description": "Folder removed." }, + "404": { + "description": "Folder not found." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23194,6 +27117,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23289,6 +27236,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23364,6 +27335,30 @@ "204": { "description": "Media path added." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23417,6 +27412,30 @@ "204": { "description": "Media path removed." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23481,6 +27500,30 @@ "204": { "description": "Media path updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23536,6 +27579,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23617,6 +27684,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23863,6 +27954,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23949,6 +28064,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -23971,11 +28110,11 @@ "tags": [ "LiveTv" ], - "summary": "Get guid info.", + "summary": "Get guide info.", "operationId": "GetGuideInfo", "responses": { "200": { - "description": "Guid info returned.", + "description": "Guide info returned.", "content": { "application/json": { "schema": { @@ -23994,6 +28133,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24039,6 +28202,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24144,6 +28331,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24180,6 +28391,30 @@ "204": { "description": "Listing provider deleted." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24225,6 +28460,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24313,6 +28572,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24349,6 +28632,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24415,6 +28722,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -24478,6 +28809,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -24761,6 +29116,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24839,6 +29218,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24904,6 +29307,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -24938,6 +29365,15 @@ "format": "uuid" } }, + { + "name": "startIndex", + "in": "query", + "description": "Optional. The record index to start at. All items with a lower index will be dropped from the results.", + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "limit", "in": "query", @@ -25093,6 +29529,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25316,6 +29776,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25402,6 +29886,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25460,6 +29968,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25516,6 +30048,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25572,6 +30128,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25630,6 +30210,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25814,6 +30418,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25886,6 +30514,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -25947,6 +30599,30 @@ "204": { "description": "Series timer info created." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26023,6 +30699,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26060,6 +30760,30 @@ "204": { "description": "Timer cancelled." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26132,6 +30856,30 @@ "204": { "description": "Series timer updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26211,6 +30959,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26269,6 +31041,30 @@ "204": { "description": "Timer created." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26325,6 +31121,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26362,6 +31182,30 @@ "204": { "description": "Timer deleted." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26431,6 +31275,30 @@ "204": { "description": "Timer updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26486,6 +31354,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26563,6 +31455,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26599,6 +31515,30 @@ "204": { "description": "Tuner host deleted." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26653,6 +31593,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26692,6 +31656,30 @@ "204": { "description": "Tuner reset." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26757,6 +31745,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26822,6 +31834,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26876,6 +31912,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26930,6 +31990,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -26984,6 +32068,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27038,6 +32146,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27115,6 +32247,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27228,6 +32384,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27286,6 +32466,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27372,6 +32576,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27458,6 +32686,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27534,6 +32786,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27620,6 +32896,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27796,7 +33096,7 @@ "$ref": "#/components/schemas/PlaybackInfoDto" } ], - "description": "Plabyback info dto." + "description": "Playback info dto." } }, "text/json": { @@ -27806,7 +33106,7 @@ "$ref": "#/components/schemas/PlaybackInfoDto" } ], - "description": "Plabyback info dto." + "description": "Playback info dto." } }, "application/*+json": { @@ -27816,7 +33116,7 @@ "$ref": "#/components/schemas/PlaybackInfoDto" } ], - "description": "Plabyback info dto." + "description": "Playback info dto." } } } @@ -27862,6 +33162,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -27900,6 +33224,30 @@ "204": { "description": "Livestream closed." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28084,6 +33432,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28133,6 +33505,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28220,6 +33616,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28324,6 +33744,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28539,6 +33983,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28604,6 +34072,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28657,6 +34149,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28721,6 +34237,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28804,6 +34344,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28843,6 +34407,30 @@ "204": { "description": "Installation cancelled." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28896,6 +34484,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -28951,6 +34563,30 @@ "204": { "description": "Package repositories saved." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -29121,6 +34757,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -29205,6 +34865,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -29339,6 +35023,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -29454,6 +35162,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -29525,6 +35257,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -29625,6 +35381,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -29709,6 +35489,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -29874,6 +35678,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -29968,6 +35796,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -30070,6 +35922,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -30173,6 +36049,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -30293,6 +36193,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -30379,6 +36303,30 @@ }, "401": { "description": "Unauthorized access." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } }, "security": [ @@ -30481,6 +36429,30 @@ "204": { "description": "Play start recorded." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -30488,6 +36460,7 @@ "description": "Forbidden" } }, + "deprecated": true, "security": [ { "CustomAuthentication": [ @@ -30559,6 +36532,30 @@ "204": { "description": "Playback stop recorded." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -30566,6 +36563,7 @@ "description": "Forbidden" } }, + "deprecated": true, "security": [ { "CustomAuthentication": [ @@ -30710,6 +36708,30 @@ "204": { "description": "Play progress recorded." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -30717,6 +36739,7 @@ "description": "Forbidden" } }, + "deprecated": true, "security": [ { "CustomAuthentication": [ @@ -30772,6 +36795,30 @@ "204": { "description": "Playback start recorded." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -30810,6 +36857,30 @@ "204": { "description": "Playback session pinged." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -30872,6 +36943,30 @@ "204": { "description": "Playback progress recorded." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -30934,6 +37029,30 @@ "204": { "description": "Playback stop recorded." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31028,6 +37147,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31111,6 +37254,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31164,6 +37331,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31223,6 +37414,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31292,6 +37507,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31360,6 +37599,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31428,6 +37691,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31504,6 +37791,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31580,6 +37891,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31638,6 +37973,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31697,6 +38056,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -31781,6 +38164,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -31852,6 +38259,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -31883,6 +38314,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -31917,6 +38372,30 @@ }, "401": { "description": "Quick connect is not active on this server." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -32043,6 +38522,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32139,6 +38642,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32224,6 +38751,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32295,6 +38846,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32370,6 +38945,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32458,6 +39057,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32516,6 +39139,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32572,6 +39219,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32781,6 +39452,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32834,6 +39529,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32887,6 +39606,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -32968,6 +39711,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33039,6 +39806,30 @@ "204": { "description": "Full general command sent to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33136,6 +39927,30 @@ "204": { "description": "General command sent to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33207,6 +40022,30 @@ "204": { "description": "Message sent." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33323,6 +40162,30 @@ "204": { "description": "Instruction sent to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33403,6 +40266,30 @@ "204": { "description": "Playstate command sent to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33500,6 +40387,30 @@ "204": { "description": "System command sent to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33548,6 +40459,30 @@ "204": { "description": "User added to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33594,6 +40529,30 @@ "204": { "description": "User removed from session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33703,6 +40662,30 @@ "204": { "description": "Instruction sent to session." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33780,6 +40763,30 @@ "204": { "description": "Capabilities posted." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33853,6 +40860,30 @@ "204": { "description": "Capabilities updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33880,6 +40911,30 @@ "204": { "description": "Session end reported to server." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33926,6 +40981,30 @@ "204": { "description": "Session reported to server." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33953,6 +41032,30 @@ "204": { "description": "Startup wizard completed." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -33998,6 +41101,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34060,6 +41187,30 @@ "204": { "description": "Configuration saved." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34105,6 +41256,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34169,6 +41344,30 @@ "204": { "description": "Configuration saved." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34214,6 +41413,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34275,6 +41498,30 @@ "204": { "description": "Updated user name and password." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34477,6 +41724,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34541,6 +41812,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34594,6 +41889,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34640,6 +41959,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34742,6 +42085,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34811,6 +42178,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34858,6 +42249,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -34955,6 +42370,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35050,6 +42489,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35120,6 +42583,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35279,6 +42766,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -35416,6 +42927,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -35508,6 +43043,130 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + }, + "security": [ + { + "CustomAuthentication": [ + "DefaultAuthorization" + ] + } + ] + } + }, + "/SyncPlay/{id}": { + "get": { + "tags": [ + "SyncPlay" + ], + "summary": "Gets a SyncPlay group by id.", + "operationId": "SyncPlayGetGroup", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The id of the group.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Group returned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupInfoDto" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/GroupInfoDto" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/GroupInfoDto" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35518,6 +43177,8 @@ "security": [ { "CustomAuthentication": [ + "SyncPlayJoinGroup", + "SyncPlayHasAccess", "DefaultAuthorization" ] } @@ -35571,6 +43232,30 @@ "204": { "description": "Group state update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35636,6 +43321,30 @@ "204": { "description": "Group join successful." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35665,6 +43374,30 @@ "204": { "description": "Group leave successful." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35720,6 +43453,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35785,6 +43542,30 @@ "204": { "description": "Queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35847,9 +43628,53 @@ "required": true }, "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupInfoDto" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/GroupInfoDto" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/GroupInfoDto" + } + } + } + }, "204": { "description": "New group created." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35915,6 +43740,30 @@ "204": { "description": "Next item update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -35944,6 +43793,30 @@ "204": { "description": "Pause update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36009,6 +43882,30 @@ "204": { "description": "Ping updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36073,6 +43970,30 @@ "204": { "description": "Previous item update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36138,6 +44059,30 @@ "204": { "description": "Queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36203,6 +44148,30 @@ "204": { "description": "Group state update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36268,6 +44237,30 @@ "204": { "description": "Queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36333,6 +44326,30 @@ "204": { "description": "Seek update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36398,6 +44415,30 @@ "204": { "description": "Member state updated." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36463,6 +44504,30 @@ "204": { "description": "Queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36528,6 +44593,30 @@ "204": { "description": "Queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36593,6 +44682,30 @@ "204": { "description": "Play queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36658,6 +44771,30 @@ "204": { "description": "Play queue update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36687,6 +44824,30 @@ "204": { "description": "Stop update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36716,6 +44877,30 @@ "204": { "description": "Unpause update sent to all group members." }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -36782,6 +44967,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -36843,6 +45052,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -36884,10 +45117,119 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } }, + "/System/Info/Storage": { + "get": { + "tags": [ + "System" + ], + "summary": "Gets information about the server.", + "operationId": "GetSystemStorage", + "responses": { + "200": { + "description": "Information retrieved.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemStorageDto" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/SystemStorageDto" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/SystemStorageDto" + } + } + } + }, + "403": { + "description": "User does not have permission to retrieve information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + } + }, + "security": [ + { + "CustomAuthentication": [ + "RequiresElevation" + ] + } + ] + } + }, "/System/Logs": { "get": { "tags": [ @@ -36945,6 +45287,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -37028,6 +45394,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -37068,6 +45458,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -37097,6 +45511,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -37132,6 +45570,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -37176,68 +45638,38 @@ } } }, - "401": { - "description": "Unauthorized" - } - }, - "security": [ - { - "CustomAuthentication": [ - "RequiresElevation" - ] - } - ] - } - }, - "/System/WakeOnLanInfo": { - "get": { - "tags": [ - "System" - ], - "summary": "Gets wake on lan information.", - "operationId": "GetWakeOnLanInfo", - "responses": { - "200": { - "description": "Information retrieved.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WakeOnLanInfo" - } - } - }, - "application/json; profile=\"CamelCase\"": { + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WakeOnLanInfo" - } + "type": "integer", + "format": "int32" } }, - "application/json; profile=\"PascalCase\"": { + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WakeOnLanInfo" - } + "type": "string", + "format": "text" } } + }, + "content": { + "text/html": { } } }, "401": { "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" } }, - "deprecated": true, "security": [ { "CustomAuthentication": [ - "DefaultAuthorization" + "RequiresElevation" ] } ] @@ -37270,6 +45702,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -37292,6 +45748,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -38130,6 +46610,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -38226,6 +46730,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -38312,6 +46840,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -38367,21 +46919,273 @@ } }, { - "name": "season", - "in": "query", - "description": "Optional filter by season number.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "seasonId", + "name": "season", + "in": "query", + "description": "Optional filter by season number.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "seasonId", + "in": "query", + "description": "Optional. Filter by season id.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "isMissing", + "in": "query", + "description": "Optional. Filter by items that are missing episodes or not.", + "schema": { + "type": "boolean" + } + }, + { + "name": "adjacentTo", + "in": "query", + "description": "Optional. Return items that are siblings of a supplied item.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "startItemId", + "in": "query", + "description": "Optional. Skip through the list until a given item is found.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "startIndex", + "in": "query", + "description": "Optional. The record index to start at. All items with a lower index will be dropped from the results.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "limit", + "in": "query", + "description": "Optional. The maximum number of records to return.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "enableImages", + "in": "query", + "description": "Optional, include image information in output.", + "schema": { + "type": "boolean" + } + }, + { + "name": "imageTypeLimit", + "in": "query", + "description": "Optional, the max number of images to return, per image type.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "enableImageTypes", + "in": "query", + "description": "Optional. The image types to include in the output.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageType" + } + } + }, + { + "name": "enableUserData", + "in": "query", + "description": "Optional. Include user data.", + "schema": { + "type": "boolean" + } + }, + { + "name": "sortBy", + "in": "query", + "description": "Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.", + "schema": { + "enum": [ + "Default", + "AiredEpisodeOrder", + "Album", + "AlbumArtist", + "Artist", + "DateCreated", + "OfficialRating", + "DatePlayed", + "PremiereDate", + "StartDate", + "SortName", + "Name", + "Random", + "Runtime", + "CommunityRating", + "ProductionYear", + "PlayCount", + "CriticRating", + "IsFolder", + "IsUnplayed", + "IsPlayed", + "SeriesSortName", + "VideoBitRate", + "AirTime", + "Studio", + "IsFavoriteOrLiked", + "DateLastContentAdded", + "SeriesDatePlayed", + "ParentIndexNumber", + "IndexNumber" + ], + "allOf": [ + { + "$ref": "#/components/schemas/ItemSortBy" + } + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseItemDtoQueryResult" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/BaseItemDtoQueryResult" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/BaseItemDtoQueryResult" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + }, + "security": [ + { + "CustomAuthentication": [ + "DefaultAuthorization" + ] + } + ] + } + }, + "/Shows/{seriesId}/Seasons": { + "get": { + "tags": [ + "TvShows" + ], + "summary": "Gets seasons for a tv series.", + "operationId": "GetSeasons", + "parameters": [ + { + "name": "seriesId", + "in": "path", + "description": "The series id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "The user id.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fields", + "in": "query", + "description": "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimited. Options: Budget, Chapters, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines, TrailerUrls.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemFields" + } + } + }, + { + "name": "isSpecialSeason", "in": "query", - "description": "Optional. Filter by season id.", + "description": "Optional. Filter by special season.", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean" } }, { @@ -38401,37 +47205,10 @@ "format": "uuid" } }, - { - "name": "startItemId", - "in": "query", - "description": "Optional. Skip through the list until a given item is found.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "startIndex", - "in": "query", - "description": "Optional. The record index to start at. All items with a lower index will be dropped from the results.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "limit", - "in": "query", - "description": "Optional. The maximum number of records to return.", - "schema": { - "type": "integer", - "format": "int32" - } - }, { "name": "enableImages", "in": "query", - "description": "Optional, include image information in output.", + "description": "Optional. Include image information in output.", "schema": { "type": "boolean" } @@ -38439,7 +47216,7 @@ { "name": "imageTypeLimit", "in": "query", - "description": "Optional, the max number of images to return, per image type.", + "description": "Optional. The max number of images to return, per image type.", "schema": { "type": "integer", "format": "int32" @@ -38463,52 +47240,6 @@ "schema": { "type": "boolean" } - }, - { - "name": "sortBy", - "in": "query", - "description": "Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.", - "schema": { - "enum": [ - "Default", - "AiredEpisodeOrder", - "Album", - "AlbumArtist", - "Artist", - "DateCreated", - "OfficialRating", - "DatePlayed", - "PremiereDate", - "StartDate", - "SortName", - "Name", - "Random", - "Runtime", - "CommunityRating", - "ProductionYear", - "PlayCount", - "CriticRating", - "IsFolder", - "IsUnplayed", - "IsPlayed", - "SeriesSortName", - "VideoBitRate", - "AirTime", - "Studio", - "IsFavoriteOrLiked", - "DateLastContentAdded", - "SeriesDatePlayed", - "ParentIndexNumber", - "IndexNumber", - "SimilarityScore", - "SearchScore" - ], - "allOf": [ - { - "$ref": "#/components/schemas/ItemSortBy" - } - ] - } } ], "responses": { @@ -38552,161 +47283,28 @@ } } }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": [ - "DefaultAuthorization" - ] - } - ] - } - }, - "/Shows/{seriesId}/Seasons": { - "get": { - "tags": [ - "TvShows" - ], - "summary": "Gets seasons for a tv series.", - "operationId": "GetSeasons", - "parameters": [ - { - "name": "seriesId", - "in": "path", - "description": "The series id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "userId", - "in": "query", - "description": "The user id.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "fields", - "in": "query", - "description": "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimited. Options: Budget, Chapters, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines, TrailerUrls.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ItemFields" - } - } - }, - { - "name": "isSpecialSeason", - "in": "query", - "description": "Optional. Filter by special season.", - "schema": { - "type": "boolean" - } - }, - { - "name": "isMissing", - "in": "query", - "description": "Optional. Filter by items that are missing episodes or not.", - "schema": { - "type": "boolean" - } - }, - { - "name": "adjacentTo", - "in": "query", - "description": "Optional. Return items that are siblings of a supplied item.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "enableImages", - "in": "query", - "description": "Optional. Include image information in output.", - "schema": { - "type": "boolean" - } - }, - { - "name": "imageTypeLimit", - "in": "query", - "description": "Optional. The max number of images to return, per image type.", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "enableImageTypes", - "in": "query", - "description": "Optional. The image types to include in the output.", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ImageType" - } - } - }, - { - "name": "enableUserData", - "in": "query", - "description": "Optional. Include user data.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, "schema": { - "$ref": "#/components/schemas/BaseItemDtoQueryResult" + "type": "integer", + "format": "int32" } }, - "application/json; profile=\"CamelCase\"": { + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, "schema": { - "$ref": "#/components/schemas/BaseItemDtoQueryResult" - } - }, - "application/json; profile=\"PascalCase\"": { - "schema": { - "$ref": "#/components/schemas/BaseItemDtoQueryResult" + "type": "string", + "format": "text" } } - } - }, - "404": { - "description": "Not Found", + }, "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "application/json; profile=\"CamelCase\"": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "application/json; profile=\"PascalCase\"": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } + "text/html": { } } }, "401": { @@ -38847,6 +47445,7 @@ "name": "disableFirstEpisode", "in": "query", "description": "Whether to disable sending the first episode in a series as next up.", + "deprecated": true, "schema": { "type": "boolean", "default": false @@ -38892,6 +47491,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39021,6 +47644,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39259,6 +47906,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39495,6 +48166,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39566,6 +48261,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39678,6 +48397,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -39751,6 +48494,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39809,6 +48576,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -39921,6 +48712,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -39997,6 +48812,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -40067,6 +48906,30 @@ }, "400": { "description": "Missing token." + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -40149,6 +49012,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -40225,6 +49112,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -40292,6 +49203,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -40344,6 +49279,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -40424,6 +49383,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -40538,6 +49521,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" } @@ -40587,6 +49594,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -40640,6 +49671,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -40686,7 +49741,105 @@ ], "responses": { "200": { - "description": "An Microsoft.AspNetCore.Mvc.OkResult containing the item's local trailers.", + "description": "An Microsoft.AspNetCore.Mvc.OkResult containing the item's local trailers.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseItemDto" + } + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseItemDto" + } + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BaseItemDto" + } + } + } + } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + }, + "security": [ + { + "CustomAuthentication": [ + "DefaultAuthorization" + ] + } + ] + } + }, + "/Items/{itemId}/SpecialFeatures": { + "get": { + "tags": [ + "UserLibrary" + ], + "summary": "Gets special features for an item.", + "operationId": "GetSpecialFeatures", + "parameters": [ + { + "name": "userId", + "in": "query", + "description": "User id.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "itemId", + "in": "path", + "description": "Item id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Special features returned.", "content": { "application/json": { "schema": { @@ -40714,78 +49867,28 @@ } } }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": [ - "DefaultAuthorization" - ] - } - ] - } - }, - "/Items/{itemId}/SpecialFeatures": { - "get": { - "tags": [ - "UserLibrary" - ], - "summary": "Gets special features for an item.", - "operationId": "GetSpecialFeatures", - "parameters": [ - { - "name": "userId", - "in": "query", - "description": "User id.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "itemId", - "in": "path", - "description": "Item id.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Special features returned.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseItemDto" - } - } - }, - "application/json; profile=\"CamelCase\"": { + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseItemDto" - } + "type": "integer", + "format": "int32" } }, - "application/json; profile=\"PascalCase\"": { + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BaseItemDto" - } + "type": "string", + "format": "text" } } + }, + "content": { + "text/html": { } } }, "401": { @@ -40946,6 +50049,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41001,6 +50128,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41066,6 +50217,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41129,6 +50304,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41194,6 +50393,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41265,6 +50488,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41348,6 +50595,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41432,6 +50703,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41517,6 +50812,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -41570,6 +50889,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -41629,6 +50972,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -42136,6 +51503,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -42629,6 +52020,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -43124,6 +52539,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } }, @@ -43617,6 +53056,30 @@ } } } + }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } } } } @@ -43667,6 +53130,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -43861,6 +53348,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -43946,6 +53457,30 @@ } } }, + "503": { + "description": "The server is currently starting or is temporarily not available.", + "headers": { + "Retry-After": { + "description": "A hint for when to retry the operation in full seconds.", + "allowEmptyValue": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Message": { + "description": "A short plain-text reason why the server is not available.", + "allowEmptyValue": true, + "schema": { + "type": "string", + "format": "text" + } + } + }, + "content": { + "text/html": { } + } + }, "401": { "description": "Unauthorized" }, @@ -44689,6 +54224,72 @@ "additionalProperties": false, "description": "A class representing an authentication result." }, + "BackupManifestDto": { + "type": "object", + "properties": { + "ServerVersion": { + "type": "string", + "description": "Gets or sets the jellyfin version this backup was created with." + }, + "BackupEngineVersion": { + "type": "string", + "description": "Gets or sets the backup engine version this backup was created with." + }, + "DateCreated": { + "type": "string", + "description": "Gets or sets the date this backup was created with.", + "format": "date-time" + }, + "Path": { + "type": "string", + "description": "Gets or sets the path to the backup on the system." + }, + "Options": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupOptionsDto" + } + ], + "description": "Gets or sets the contents of the backup archive." + } + }, + "additionalProperties": false, + "description": "Manifest type for backups internal structure." + }, + "BackupOptionsDto": { + "type": "object", + "properties": { + "Metadata": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the archive contains the Metadata contents." + }, + "Trickplay": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the archive contains the Trickplay contents." + }, + "Subtitles": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the archive contains the Subtitle contents." + }, + "Database": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the archive contains the Database contents." + } + }, + "additionalProperties": false, + "description": "Defines the optional contents of the backup archive." + }, + "BackupRestoreRequestDto": { + "type": "object", + "properties": { + "ArchiveFileName": { + "type": "string", + "description": "Gets or Sets the name of the backup archive to restore from. Must be present in MediaBrowser.Common.Configuration.IApplicationPaths.BackupPath." + } + }, + "additionalProperties": false, + "description": "Defines properties used to start a restore process." + }, "BaseItemDto": { "type": "object", "properties": { @@ -45064,7 +54665,7 @@ "$ref": "#/components/schemas/BaseItemKind" } ], - "description": "Gets or sets the type." + "description": "The base item kind." }, "People": { "type": "array", @@ -45463,6 +55064,7 @@ "ParentPrimaryImageItemId": { "type": "string", "description": "Gets or sets the parent primary image item identifier.", + "format": "uuid", "nullable": true }, "ParentPrimaryImageTag": { @@ -45483,7 +55085,7 @@ "additionalProperties": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/TrickplayInfo" + "$ref": "#/components/schemas/TrickplayInfoDto" } }, "description": "Gets or sets the trickplay manifest.", @@ -45530,7 +55132,7 @@ "$ref": "#/components/schemas/MediaType" } ], - "description": "Gets or sets the type of the media.", + "description": "Media types.", "default": "Unknown" }, "EndDate": { @@ -45928,7 +55530,7 @@ "$ref": "#/components/schemas/PersonKind" } ], - "description": "Gets or sets the type.", + "description": "The person kind.", "default": "Unknown" }, "PrimaryImageTag": { @@ -46216,7 +55818,7 @@ }, "additionalProperties": false }, - "BrandingOptions": { + "BrandingOptionsDto": { "type": "object", "properties": { "LoginDisclaimer": { @@ -46235,7 +55837,7 @@ } }, "additionalProperties": false, - "description": "The branding options." + "description": "The branding options DTO for API use.\r\nThis DTO excludes SplashscreenLocation to prevent it from being updated via API." }, "BufferRequestDto": { "type": "object", @@ -46862,6 +56464,89 @@ "additionalProperties": false, "description": "Class CultureDto." }, + "CustomDatabaseOption": { + "type": "object", + "properties": { + "Key": { + "type": "string", + "description": "Gets or sets the key of the value." + }, + "Value": { + "type": "string", + "description": "Gets or sets the value." + } + }, + "additionalProperties": false, + "description": "The custom value option for custom database providers." + }, + "CustomDatabaseOptions": { + "type": "object", + "properties": { + "PluginName": { + "type": "string", + "description": "Gets or sets the Plugin name to search for database providers." + }, + "PluginAssembly": { + "type": "string", + "description": "Gets or sets the plugin assembly to search for providers." + }, + "ConnectionString": { + "type": "string", + "description": "Gets or sets the connection string for the custom database provider." + }, + "Options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomDatabaseOption" + }, + "description": "Gets or sets the list of extra options for the custom provider." + } + }, + "additionalProperties": false, + "description": "Defines the options for a custom database connector." + }, + "DatabaseConfigurationOptions": { + "type": "object", + "properties": { + "DatabaseType": { + "type": "string", + "description": "Gets or Sets the type of database jellyfin should use." + }, + "CustomProviderOptions": { + "allOf": [ + { + "$ref": "#/components/schemas/CustomDatabaseOptions" + } + ], + "description": "Gets or sets the options required to use a custom database provider.", + "nullable": true + }, + "LockingBehavior": { + "enum": [ + "NoLock", + "Pessimistic", + "Optimistic" + ], + "allOf": [ + { + "$ref": "#/components/schemas/DatabaseLockingBehaviorTypes" + } + ], + "description": "Gets or Sets the kind of locking behavior jellyfin should perform. Possible options are \"NoLock\", \"Pessimistic\", \"Optimistic\".\r\nDefaults to \"NoLock\"." + } + }, + "additionalProperties": false, + "description": "Options to configure jellyfins managed database." + }, + "DatabaseLockingBehaviorTypes": { + "enum": [ + "NoLock", + "Pessimistic", + "Optimistic" + ], + "type": "string", + "description": "Defines all possible methods for locking database access for concurrent queries." + }, "DayOfWeek": { "enum": [ "Sunday", @@ -47183,7 +56868,7 @@ "$ref": "#/components/schemas/ScrollDirection" } ], - "description": "Gets or sets the scroll direction." + "description": "An enum representing the axis that should be scrolled." }, "ShowBackdrop": { "type": "boolean", @@ -47203,7 +56888,7 @@ "$ref": "#/components/schemas/SortOrder" } ], - "description": "Gets or sets the sort order." + "description": "An enum representing the sorting order." }, "ShowSidebar": { "type": "boolean", @@ -47632,7 +57317,8 @@ "Season", "Series", "Track", - "Book" + "Book", + "Recording" ], "allOf": [ { @@ -47641,12 +57327,6 @@ ], "description": "Gets or sets the specific media type for this id. This is used to distinguish between the different\r\nexternal id types for providers with multiple ids.\r\nA null value indicates there is no specific media type associated with the external id, or this is the\r\ndefault id for the external provider so there is no need to specify a type.", "nullable": true - }, - "UrlFormatString": { - "type": "string", - "description": "Gets or sets the URL format string.", - "nullable": true, - "deprecated": true } }, "additionalProperties": false, @@ -47666,7 +57346,8 @@ "Season", "Series", "Track", - "Book" + "Book", + "Recording" ], "type": "string", "description": "The specific media type of an MediaBrowser.Model.Providers.ExternalIdInfo." @@ -47743,6 +57424,37 @@ "type": "string", "description": "Enum FileSystemEntryType." }, + "FolderStorageDto": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Gets the path of the folder in question." + }, + "FreeSpace": { + "type": "integer", + "description": "Gets the free space of the underlying storage device of the Jellyfin.Api.Models.SystemInfoDtos.FolderStorageDto.Path.", + "format": "int64" + }, + "UsedSpace": { + "type": "integer", + "description": "Gets the used space of the underlying storage device of the Jellyfin.Api.Models.SystemInfoDtos.FolderStorageDto.Path.", + "format": "int64" + }, + "StorageType": { + "type": "string", + "description": "Gets the kind of storage device of the Jellyfin.Api.Models.SystemInfoDtos.FolderStorageDto.Path.", + "nullable": true + }, + "DeviceId": { + "type": "string", + "description": "Gets the Device Identifier.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Contains information about a specific folder." + }, "FontFile": { "type": "object", "properties": { @@ -48301,48 +58013,6 @@ "additionalProperties": false, "description": "Class GroupInfoDto." }, - "GroupInfoDtoGroupUpdate": { - "type": "object", - "properties": { - "GroupId": { - "type": "string", - "description": "Gets the group identifier.", - "format": "uuid", - "readOnly": true - }, - "Type": { - "enum": [ - "UserJoined", - "UserLeft", - "GroupJoined", - "GroupLeft", - "StateUpdate", - "PlayQueue", - "NotInGroup", - "GroupDoesNotExist", - "CreateGroupDenied", - "JoinGroupDenied", - "LibraryAccessDenied" - ], - "allOf": [ - { - "$ref": "#/components/schemas/GroupUpdateType" - } - ], - "description": "Gets the update type." - }, - "Data": { - "allOf": [ - { - "$ref": "#/components/schemas/GroupInfoDto" - } - ], - "description": "Gets the update data." - } - }, - "additionalProperties": false, - "description": "Class GroupUpdate." - }, "GroupQueueMode": { "enum": [ "Queue", @@ -48426,107 +58096,50 @@ "additionalProperties": false, "description": "Class GroupStateUpdate." }, - "GroupStateUpdateGroupUpdate": { - "type": "object", - "properties": { - "GroupId": { - "type": "string", - "description": "Gets the group identifier.", - "format": "uuid", - "readOnly": true - }, - "Type": { - "enum": [ - "UserJoined", - "UserLeft", - "GroupJoined", - "GroupLeft", - "StateUpdate", - "PlayQueue", - "NotInGroup", - "GroupDoesNotExist", - "CreateGroupDenied", - "JoinGroupDenied", - "LibraryAccessDenied" - ], - "allOf": [ - { - "$ref": "#/components/schemas/GroupUpdateType" - } - ], - "description": "Gets the update type." - }, - "Data": { - "allOf": [ - { - "$ref": "#/components/schemas/GroupStateUpdate" - } - ], - "description": "Gets the update data." - } - }, - "additionalProperties": false, - "description": "Class GroupUpdate." - }, "GroupUpdate": { "type": "object", "oneOf": [ { - "$ref": "#/components/schemas/GroupInfoDtoGroupUpdate" + "$ref": "#/components/schemas/SyncPlayGroupDoesNotExistUpdate" }, { - "$ref": "#/components/schemas/GroupStateUpdateGroupUpdate" + "$ref": "#/components/schemas/SyncPlayGroupJoinedUpdate" }, { - "$ref": "#/components/schemas/StringGroupUpdate" + "$ref": "#/components/schemas/SyncPlayGroupLeftUpdate" }, { - "$ref": "#/components/schemas/PlayQueueUpdateGroupUpdate" - } - ], - "properties": { - "GroupId": { - "type": "string", - "description": "Gets the group identifier.", - "format": "uuid", - "readOnly": true + "$ref": "#/components/schemas/SyncPlayLibraryAccessDeniedUpdate" }, - "Type": { - "enum": [ - "UserJoined", - "UserLeft", - "GroupJoined", - "GroupLeft", - "StateUpdate", - "PlayQueue", - "NotInGroup", - "GroupDoesNotExist", - "CreateGroupDenied", - "JoinGroupDenied", - "LibraryAccessDenied" - ], - "allOf": [ - { - "$ref": "#/components/schemas/GroupUpdateType" - } - ], - "description": "Gets the update type." + { + "$ref": "#/components/schemas/SyncPlayNotInGroupUpdate" + }, + { + "$ref": "#/components/schemas/SyncPlayPlayQueueUpdate" + }, + { + "$ref": "#/components/schemas/SyncPlayStateUpdate" + }, + { + "$ref": "#/components/schemas/SyncPlayUserJoinedUpdate" + }, + { + "$ref": "#/components/schemas/SyncPlayUserLeftUpdate" } - }, - "additionalProperties": false, - "description": "Group update without data.", + ], + "description": "Represents the list of possible group update types", "discriminator": { "propertyName": "Type", "mapping": { - "UserJoined": "#/components/schemas/StringGroupUpdate", - "UserLeft": "#/components/schemas/StringGroupUpdate", - "GroupJoined": "#/components/schemas/GroupInfoDtoGroupUpdate", - "GroupLeft": "#/components/schemas/StringGroupUpdate", - "StateUpdate": "#/components/schemas/GroupStateUpdateGroupUpdate", - "PlayQueue": "#/components/schemas/PlayQueueUpdateGroupUpdate", - "NotInGroup": "#/components/schemas/StringGroupUpdate", - "GroupDoesNotExist": "#/components/schemas/StringGroupUpdate", - "LibraryAccessDenied": "#/components/schemas/StringGroupUpdate" + "GroupDoesNotExist": "#/components/schemas/SyncPlayGroupDoesNotExistUpdate", + "GroupJoined": "#/components/schemas/SyncPlayGroupJoinedUpdate", + "GroupLeft": "#/components/schemas/SyncPlayGroupLeftUpdate", + "LibraryAccessDenied": "#/components/schemas/SyncPlayLibraryAccessDeniedUpdate", + "NotInGroup": "#/components/schemas/SyncPlayNotInGroupUpdate", + "PlayQueue": "#/components/schemas/SyncPlayPlayQueueUpdate", + "StateUpdate": "#/components/schemas/SyncPlayStateUpdate", + "UserJoined": "#/components/schemas/SyncPlayUserJoinedUpdate", + "UserLeft": "#/components/schemas/SyncPlayUserLeftUpdate" } } }, @@ -48540,8 +58153,6 @@ "PlayQueue", "NotInGroup", "GroupDoesNotExist", - "CreateGroupDenied", - "JoinGroupDenied", "LibraryAccessDenied" ], "type": "string", @@ -49057,7 +58668,6 @@ "Etag", "ExternalUrls", "Genres", - "HomePageUrl", "ItemCounts", "MediaSourceCount", "MediaSources", @@ -49072,8 +58682,6 @@ "PrimaryImageAspectRatio", "RecursiveItemCount", "Settings", - "ScreenshotImageTags", - "SeriesPrimaryImage", "SeriesStudio", "SortName", "SpecialEpisodeNumbers", @@ -49083,14 +58691,6 @@ "RemoteTrailers", "MediaStreams", "SeasonUserData", - "ServiceName", - "ThemeSongIds", - "ThemeVideoIds", - "ExternalEtag", - "PresentationUniqueKey", - "InheritedParentalRatingValue", - "ExternalSeriesId", - "SeriesPresentationUniqueKey", "DateLastRefreshed", "DateLastSaved", "RefreshState", @@ -49152,9 +58752,7 @@ "DateLastContentAdded", "SeriesDatePlayed", "ParentIndexNumber", - "IndexNumber", - "SimilarityScore", - "SearchScore" + "IndexNumber" ], "type": "string", "description": "These represent sort orders." @@ -49370,7 +58968,7 @@ "type": "string" } }, - "MediaSegmentProvideOrder": { + "MediaSegmentProviderOrder": { "type": "array", "items": { "type": "string" @@ -49492,6 +59090,13 @@ }, "description": "Gets or sets the list of lyric fetchers." }, + "MediaSegmentProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryOptionInfoDto" + }, + "description": "Gets or sets the list of MediaSegment Providers." + }, "TypeOptions": { "type": "array", "items": { @@ -49503,6 +59108,29 @@ "additionalProperties": false, "description": "Library options result dto." }, + "LibraryStorageDto": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "Gets or sets the Library Id.", + "format": "uuid" + }, + "Name": { + "type": "string", + "description": "Gets or sets the name of the library." + }, + "Folders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FolderStorageDto" + }, + "description": "Gets or sets the storage informations about the folders used in a library." + } + }, + "additionalProperties": false, + "description": "Contains informations about a libraries storage informations." + }, "LibraryTypeOptionsDto": { "type": "object", "properties": { @@ -49955,11 +59583,47 @@ "description": "Gets the start time in ticks.", "format": "int64", "nullable": true + }, + "Cues": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LyricLineCue" + }, + "description": "Gets the time-aligned cues for the song's lyrics.", + "nullable": true } }, "additionalProperties": false, "description": "Lyric model." }, + "LyricLineCue": { + "type": "object", + "properties": { + "Position": { + "type": "integer", + "description": "Gets the start character index of the cue.", + "format": "int32" + }, + "EndPosition": { + "type": "integer", + "description": "Gets the end character index of the cue.", + "format": "int32" + }, + "Start": { + "type": "integer", + "description": "Gets the timestamp the lyric is synced to in ticks.", + "format": "int64" + }, + "End": { + "type": "integer", + "description": "Gets the end timestamp the lyric is synced to in ticks.", + "format": "int64", + "nullable": true + } + }, + "additionalProperties": false, + "description": "LyricLineCue model, holds information about the timing of words within a LyricLine." + }, "LyricMetadata": { "type": "object", "properties": { @@ -50137,7 +59801,7 @@ "$ref": "#/components/schemas/MediaSegmentType" } ], - "description": "Gets or sets the type of content this segment defines.", + "description": "Defines the types of content an individual Jellyfin.Database.Implementations.Entities.MediaSegment represents.", "default": "Unknown" }, "StartTicks": { @@ -50188,7 +59852,7 @@ "Intro" ], "type": "string", - "description": "Defines the types of content an individual Jellyfin.Data.Entities.MediaSegment represents." + "description": "Defines the types of content an individual Jellyfin.Database.Implementations.Entities.MediaSegment represents." }, "MediaSourceInfo": { "type": "object", @@ -50583,6 +60247,10 @@ "description": "Gets or sets the title.", "nullable": true }, + "Hdr10PlusPresentFlag": { + "type": "boolean", + "nullable": true + }, "VideoRange": { "enum": [ "Unknown", @@ -50594,7 +60262,7 @@ "$ref": "#/components/schemas/VideoRange" } ], - "description": "Gets the video range.", + "description": "An enum representing video ranges.", "default": "Unknown", "readOnly": true }, @@ -50608,6 +60276,10 @@ "DOVIWithHDR10", "DOVIWithHLG", "DOVIWithSDR", + "DOVIWithEL", + "DOVIWithHDR10Plus", + "DOVIWithELHDR10Plus", + "DOVIInvalid", "HDR10Plus" ], "allOf": [ @@ -50615,7 +60287,7 @@ "$ref": "#/components/schemas/VideoRangeType" } ], - "description": "Gets the video range type.", + "description": "An enum representing types of video ranges.", "default": "Unknown", "readOnly": true }, @@ -50636,7 +60308,7 @@ "$ref": "#/components/schemas/AudioSpatialFormat" } ], - "description": "Gets the audio spatial format.", + "description": "An enum representing formats of spatial audio.", "default": "None", "readOnly": true }, @@ -50974,25 +60646,29 @@ "type": "array", "items": { "$ref": "#/components/schemas/ParentalRating" - } + }, + "description": "Gets or sets the parental rating options." }, "Countries": { "type": "array", "items": { "$ref": "#/components/schemas/CountryInfo" - } + }, + "description": "Gets or sets the countries." }, "Cultures": { "type": "array", "items": { "$ref": "#/components/schemas/CultureDto" - } + }, + "description": "Gets or sets the cultures." }, "ExternalIdInfos": { "type": "array", "items": { "$ref": "#/components/schemas/ExternalIdInfo" - } + }, + "description": "Gets or sets the external id infos." }, "ContentType": { "enum": [ @@ -51015,16 +60691,19 @@ "$ref": "#/components/schemas/CollectionType" } ], + "description": "Gets or sets the content type.", "nullable": true }, "ContentTypeOptions": { "type": "array", "items": { "$ref": "#/components/schemas/NameValuePair" - } + }, + "description": "Gets or sets the content type options." } }, - "additionalProperties": false + "additionalProperties": false, + "description": "A class representing metadata editor information." }, "MetadataField": { "enum": [ @@ -51404,7 +61083,8 @@ }, "EnableUPnP": { "type": "boolean", - "description": "Gets or sets a value indicating whether to enable automatic port forwarding." + "description": "Gets or sets a value indicating whether to enable automatic port forwarding.", + "deprecated": true }, "EnableIPv4": { "type": "boolean", @@ -51561,7 +61241,7 @@ }, "EnableDirectStream": { "type": "boolean", - "description": "Gets or sets a value indicating whether to enale direct stream.", + "description": "Gets or sets a value indicating whether to enable direct stream.", "nullable": true }, "AlwaysBurnInSubtitleWhenTranscoding": { @@ -51716,9 +61396,6 @@ { "$ref": "#/components/schemas/SyncPlayCommandMessage" }, - { - "$ref": "#/components/schemas/SyncPlayGroupUpdateCommandMessage" - }, { "$ref": "#/components/schemas/TimerCancelledMessage" }, @@ -51733,6 +61410,9 @@ }, { "$ref": "#/components/schemas/UserUpdatedMessage" + }, + { + "$ref": "#/components/schemas/SyncPlayGroupUpdateMessage" } ], "description": "Represents the list of possible outbound websocket types", @@ -51761,12 +61441,12 @@ "ServerShuttingDown": "#/components/schemas/ServerShuttingDownMessage", "Sessions": "#/components/schemas/SessionsMessage", "SyncPlayCommand": "#/components/schemas/SyncPlayCommandMessage", - "SyncPlayGroupUpdate": "#/components/schemas/SyncPlayGroupUpdateCommandMessage", "TimerCancelled": "#/components/schemas/TimerCancelledMessage", "TimerCreated": "#/components/schemas/TimerCreatedMessage", "UserDataChanged": "#/components/schemas/UserDataChangedMessage", "UserDeleted": "#/components/schemas/UserDeletedMessage", - "UserUpdated": "#/components/schemas/UserUpdatedMessage" + "UserUpdated": "#/components/schemas/UserUpdatedMessage", + "SyncPlayGroupUpdate": "#/components/schemas/SyncPlayGroupUpdateMessage" } } }, @@ -51819,19 +61499,45 @@ "properties": { "Name": { "type": "string", - "description": "Gets or sets the name.", - "nullable": true + "description": "Gets or sets the name." }, "Value": { "type": "integer", "description": "Gets or sets the value.", "format": "int32", "nullable": true + }, + "RatingScore": { + "allOf": [ + { + "$ref": "#/components/schemas/ParentalRatingScore" + } + ], + "description": "Gets or sets the rating score.", + "nullable": true } }, "additionalProperties": false, "description": "Class ParentalRating." }, + "ParentalRatingScore": { + "type": "object", + "properties": { + "score": { + "type": "integer", + "description": "Gets or sets the score.", + "format": "int32" + }, + "subScore": { + "type": "integer", + "description": "Gets or sets the sub score.", + "format": "int32", + "nullable": true + } + }, + "additionalProperties": false, + "description": "A class representing an parental rating score." + }, "PathSubstitution": { "type": "object", "properties": { @@ -52108,7 +61814,7 @@ } }, "additionalProperties": false, - "description": "Plabyback info dto." + "description": "Playback info dto." }, "PlaybackInfoResponse": { "type": "object", @@ -52826,48 +62532,6 @@ "additionalProperties": false, "description": "Class PlayQueueUpdate." }, - "PlayQueueUpdateGroupUpdate": { - "type": "object", - "properties": { - "GroupId": { - "type": "string", - "description": "Gets the group identifier.", - "format": "uuid", - "readOnly": true - }, - "Type": { - "enum": [ - "UserJoined", - "UserLeft", - "GroupJoined", - "GroupLeft", - "StateUpdate", - "PlayQueue", - "NotInGroup", - "GroupDoesNotExist", - "CreateGroupDenied", - "JoinGroupDenied", - "LibraryAccessDenied" - ], - "allOf": [ - { - "$ref": "#/components/schemas/GroupUpdateType" - } - ], - "description": "Gets the update type." - }, - "Data": { - "allOf": [ - { - "$ref": "#/components/schemas/PlayQueueUpdate" - } - ], - "description": "Gets the update data." - } - }, - "additionalProperties": false, - "description": "Class GroupUpdate." - }, "PlayQueueUpdateReason": { "enum": [ "NewPlaylist", @@ -53125,6 +62789,7 @@ "Active", "Restart", "Deleted", + "Superseded", "Superceded", "Malfunctioned", "NotSupported", @@ -53414,6 +63079,7 @@ "Active", "Restart", "Deleted", + "Superseded", "Superceded", "Malfunctioned", "NotSupported", @@ -53581,7 +63247,8 @@ "IsInterlaced", "AudioSampleRate", "AudioBitDepth", - "VideoRangeType" + "VideoRangeType", + "NumStreams" ], "allOf": [ { @@ -53634,7 +63301,8 @@ "IsInterlaced", "AudioSampleRate", "AudioBitDepth", - "VideoRangeType" + "VideoRangeType", + "NumStreams" ], "type": "string" }, @@ -54757,7 +64425,7 @@ "$ref": "#/components/schemas/BaseItemKind" } ], - "description": "Gets or sets the type." + "description": "The base item kind." }, "IsFolder": { "type": "boolean", @@ -54783,7 +64451,7 @@ "$ref": "#/components/schemas/MediaType" } ], - "description": "Gets or sets the type of the media.", + "description": "Media types.", "default": "Unknown" }, "StartDate": { @@ -55373,6 +65041,7 @@ "ParentPrimaryImageItemId": { "type": "string", "description": "Gets or sets the parent primary image item identifier.", + "format": "uuid", "nullable": true }, "ParentPrimaryImageTag": { @@ -55452,7 +65121,7 @@ }, "EnableCaseSensitiveItemIds": { "type": "boolean", - "description": "Gets or sets a value indicating whether [enable case sensitive item ids]." + "description": "Gets or sets a value indicating whether [enable case-sensitive item ids]." }, "DisableLiveTvChannelUserDataName": { "type": "boolean" @@ -55530,6 +65199,11 @@ "description": "Gets or sets the duration in seconds that we will wait after a library updated event before executing the library changed notification.", "format": "int32" }, + "CacheSize": { + "type": "integer", + "description": "Gets or sets the maximum amount of items to cache.", + "format": "int32" + }, "ImageSavingConvention": { "enum": [ "Legacy", @@ -55573,7 +65247,10 @@ "EnableFolderView": { "type": "boolean" }, - "EnableGroupingIntoCollections": { + "EnableGroupingMoviesIntoCollections": { + "type": "boolean" + }, + "EnableGroupingShowsIntoCollections": { "type": "boolean" }, "DisplaySpecialsWithinSeasons": { @@ -55636,17 +65313,13 @@ "description": "Gets or sets the how many metadata refreshes can run concurrently.", "format": "int32" }, - "RemoveOldPlugins": { - "type": "boolean", - "description": "Gets or sets a value indicating whether older plugins should automatically be deleted from the plugin folder." - }, "AllowClientLogUpload": { "type": "boolean", "description": "Gets or sets a value indicating whether clients should be allowed to upload logs." }, "DummyChapterDuration": { "type": "integer", - "description": "Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation alltogether.", + "description": "Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation altogether.", "format": "int32" }, "ChapterImageResolution": { @@ -55687,6 +65360,10 @@ } ], "description": "Gets or sets the trickplay options." + }, + "EnableLegacyAuthorization": { + "type": "boolean", + "description": "Gets or sets a value indicating whether old authorization methods are allowed." } }, "additionalProperties": false, @@ -56433,6 +66110,11 @@ "StartupConfigurationDto": { "type": "object", "properties": { + "ServerName": { + "type": "string", + "description": "Gets or sets the server name.", + "nullable": true + }, "UICulture": { "type": "string", "description": "Gets or sets UI language culture.", @@ -56465,7 +66147,8 @@ }, "EnableAutomaticPortMapping": { "type": "boolean", - "description": "Gets or sets a value indicating whether enable automatic port mapping." + "description": "Gets or sets a value indicating whether enable automatic port mapping.", + "deprecated": true } }, "additionalProperties": false, @@ -56488,44 +66171,6 @@ "additionalProperties": false, "description": "The startup user DTO." }, - "StringGroupUpdate": { - "type": "object", - "properties": { - "GroupId": { - "type": "string", - "description": "Gets the group identifier.", - "format": "uuid", - "readOnly": true - }, - "Type": { - "enum": [ - "UserJoined", - "UserLeft", - "GroupJoined", - "GroupLeft", - "StateUpdate", - "PlayQueue", - "NotInGroup", - "GroupDoesNotExist", - "CreateGroupDenied", - "JoinGroupDenied", - "LibraryAccessDenied" - ], - "allOf": [ - { - "$ref": "#/components/schemas/GroupUpdateType" - } - ], - "description": "Gets the update type." - }, - "Data": { - "type": "string", - "description": "Gets the update data." - } - }, - "additionalProperties": false, - "description": "Class GroupUpdate." - }, "SubtitleDeliveryMethod": { "enum": [ "Encode", @@ -56696,7 +66341,125 @@ "additionalProperties": false, "description": "Sync play command." }, - "SyncPlayGroupUpdateCommandMessage": { + "SyncPlayGroupDoesNotExistUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "type": "string", + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "GroupDoesNotExist", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SyncPlayGroupJoinedUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "allOf": [ + { + "$ref": "#/components/schemas/GroupInfoDto" + } + ], + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "GroupJoined", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SyncPlayGroupLeftUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "type": "string", + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "GroupLeft", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SyncPlayGroupUpdateMessage": { "type": "object", "properties": { "Data": { @@ -56705,8 +66468,7 @@ "$ref": "#/components/schemas/GroupUpdate" } ], - "description": "Gets or sets the data.", - "nullable": true + "description": "Group update data" }, "MessageId": { "type": "string", @@ -56763,6 +66525,124 @@ "additionalProperties": false, "description": "Untyped sync play command." }, + "SyncPlayLibraryAccessDeniedUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "type": "string", + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "LibraryAccessDenied", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SyncPlayNotInGroupUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "type": "string", + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "NotInGroup", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SyncPlayPlayQueueUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "allOf": [ + { + "$ref": "#/components/schemas/PlayQueueUpdate" + } + ], + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "PlayQueue", + "readOnly": true + } + }, + "additionalProperties": false + }, "SyncPlayQueueItem": { "type": "object", "properties": { @@ -56781,6 +66661,48 @@ "additionalProperties": false, "description": "Class QueueItem." }, + "SyncPlayStateUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "allOf": [ + { + "$ref": "#/components/schemas/GroupStateUpdate" + } + ], + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "StateUpdate", + "readOnly": true + } + }, + "additionalProperties": false + }, "SyncPlayUserAccessType": { "enum": [ "CreateAndJoinGroups", @@ -56790,6 +66712,82 @@ "type": "string", "description": "Enum SyncPlayUserAccessType." }, + "SyncPlayUserJoinedUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "type": "string", + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "UserJoined", + "readOnly": true + } + }, + "additionalProperties": false + }, + "SyncPlayUserLeftUpdate": { + "type": "object", + "properties": { + "GroupId": { + "type": "string", + "description": "Gets the group identifier.", + "format": "uuid", + "readOnly": true + }, + "Data": { + "type": "string", + "description": "Gets the update data.", + "readOnly": true + }, + "Type": { + "enum": [ + "UserJoined", + "UserLeft", + "GroupJoined", + "GroupLeft", + "StateUpdate", + "PlayQueue", + "NotInGroup", + "GroupDoesNotExist", + "LibraryAccessDenied" + ], + "allOf": [ + { + "$ref": "#/components/schemas/GroupUpdateType" + } + ], + "description": "Enum GroupUpdateType.", + "default": "UserLeft", + "readOnly": true + } + }, + "additionalProperties": false + }, "SystemInfo": { "type": "object", "properties": { @@ -56878,37 +66876,44 @@ "ProgramDataPath": { "type": "string", "description": "Gets or sets the program data path.", - "nullable": true + "nullable": true, + "deprecated": true }, "WebPath": { "type": "string", "description": "Gets or sets the web UI resources path.", - "nullable": true + "nullable": true, + "deprecated": true }, "ItemsByNamePath": { "type": "string", "description": "Gets or sets the items by name path.", - "nullable": true + "nullable": true, + "deprecated": true }, "CachePath": { "type": "string", "description": "Gets or sets the cache path.", - "nullable": true + "nullable": true, + "deprecated": true }, "LogPath": { "type": "string", "description": "Gets or sets the log path.", - "nullable": true + "nullable": true, + "deprecated": true }, "InternalMetadataPath": { "type": "string", "description": "Gets or sets the internal metadata path.", - "nullable": true + "nullable": true, + "deprecated": true }, "TranscodingTempPath": { "type": "string", "description": "Gets or sets the transcode path.", - "nullable": true + "nullable": true, + "deprecated": true }, "CastReceiverApplications": { "type": "array", @@ -56940,6 +66945,76 @@ "additionalProperties": false, "description": "Class SystemInfo." }, + "SystemStorageDto": { + "type": "object", + "properties": { + "ProgramDataFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the program data folder." + }, + "WebFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the web UI resources folder." + }, + "ImageCacheFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the folder where images are cached." + }, + "CacheFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the cache folder." + }, + "LogFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the folder where logfiles are saved to." + }, + "InternalMetadataFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the folder where metadata is stored." + }, + "TranscodingTempFolder": { + "allOf": [ + { + "$ref": "#/components/schemas/FolderStorageDto" + } + ], + "description": "Gets or sets the Storage information of the transcoding cache." + }, + "Libraries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryStorageDto" + }, + "description": "Gets or sets the storage informations of all libraries." + } + }, + "additionalProperties": false, + "description": "Contains informations about the systems storage." + }, "TaskCompletionStatus": { "enum": [ "Completed", @@ -57091,9 +67166,18 @@ "type": "object", "properties": { "Type": { - "type": "string", - "description": "Gets or sets the type.", - "nullable": true + "enum": [ + "DailyTrigger", + "WeeklyTrigger", + "IntervalTrigger", + "StartupTrigger" + ], + "allOf": [ + { + "$ref": "#/components/schemas/TaskTriggerInfoType" + } + ], + "description": "Gets or sets the type." }, "TimeOfDayTicks": { "type": "integer", @@ -57135,6 +67219,16 @@ "additionalProperties": false, "description": "Class TaskTriggerInfo." }, + "TaskTriggerInfoType": { + "enum": [ + "DailyTrigger", + "WeeklyTrigger", + "IntervalTrigger", + "StartupTrigger" + ], + "type": "string", + "description": "Enum TaskTriggerInfoType." + }, "ThemeMediaResult": { "type": "object", "properties": { @@ -57658,7 +67752,8 @@ "UnknownAudioStreamInfo", "DirectPlayError", "VideoRangeTypeNotSupported", - "VideoCodecTagNotSupported" + "VideoCodecTagNotSupported", + "StreamCountExceedsLimit" ], "type": "string" }, @@ -57777,7 +67872,8 @@ "UnknownAudioStreamInfo", "DirectPlayError", "VideoRangeTypeNotSupported", - "VideoCodecTagNotSupported" + "VideoCodecTagNotSupported", + "StreamCountExceedsLimit" ], "type": "array", "items": { @@ -57787,7 +67883,7 @@ } }, "additionalProperties": false, - "description": "Class holding information on a runnning transcode." + "description": "Class holding information on a running transcode." }, "TranscodingProfile": { "type": "object", @@ -57829,7 +67925,7 @@ "$ref": "#/components/schemas/MediaStreamProtocol" } ], - "description": "Gets or sets the protocol." + "description": "Media streaming protocol.\r\nLowercase for backwards compatibility." }, "EstimateContentLength": { "type": "boolean", @@ -57923,47 +68019,47 @@ ], "type": "string" }, - "TrickplayInfo": { + "TrickplayInfoDto": { "type": "object", "properties": { "Width": { "type": "integer", - "description": "Gets or sets width of an individual thumbnail.", + "description": "Gets the width of an individual thumbnail.", "format": "int32" }, "Height": { "type": "integer", - "description": "Gets or sets height of an individual thumbnail.", + "description": "Gets the height of an individual thumbnail.", "format": "int32" }, "TileWidth": { "type": "integer", - "description": "Gets or sets amount of thumbnails per row.", + "description": "Gets the amount of thumbnails per row.", "format": "int32" }, "TileHeight": { "type": "integer", - "description": "Gets or sets amount of thumbnails per column.", + "description": "Gets the amount of thumbnails per column.", "format": "int32" }, "ThumbnailCount": { "type": "integer", - "description": "Gets or sets total amount of non-black thumbnails.", + "description": "Gets the total amount of non-black thumbnails.", "format": "int32" }, "Interval": { "type": "integer", - "description": "Gets or sets interval in milliseconds between each trickplay thumbnail.", + "description": "Gets the interval in milliseconds between each trickplay thumbnail.", "format": "int32" }, "Bandwidth": { "type": "integer", - "description": "Gets or sets peak bandwith usage in bits per second.", + "description": "Gets the peak bandwidth usage in bits per second.", "format": "int32" } }, "additionalProperties": false, - "description": "An entity representing the metadata for a group of trickplay tiles." + "description": "The trickplay api model." }, "TrickplayOptions": { "type": "object", @@ -58136,6 +68232,9 @@ }, "IgnoreDts": { "type": "boolean" + }, + "ReadAtNativeFramerate": { + "type": "boolean" } }, "additionalProperties": false @@ -58846,6 +68945,11 @@ "format": "int32", "nullable": true }, + "MaxParentalSubRating": { + "type": "integer", + "format": "int32", + "nullable": true + }, "BlockedTags": { "type": "array", "items": { @@ -59011,7 +69115,7 @@ "$ref": "#/components/schemas/SyncPlayUserAccessType" } ], - "description": "Gets or sets a value indicating what SyncPlay features the user can access." + "description": "Enum SyncPlayUserAccessType." } }, "additionalProperties": false @@ -59199,6 +69303,10 @@ "DOVIWithHDR10", "DOVIWithHLG", "DOVIWithSDR", + "DOVIWithEL", + "DOVIWithHDR10Plus", + "DOVIWithELHDR10Plus", + "DOVIInvalid", "HDR10Plus" ], "type": "string", @@ -59280,23 +69388,6 @@ "additionalProperties": false, "description": "Used to hold information about a user's list of configured virtual folders." }, - "WakeOnLanInfo": { - "type": "object", - "properties": { - "MacAddress": { - "type": "string", - "description": "Gets the MAC address of the device.", - "nullable": true - }, - "Port": { - "type": "integer", - "description": "Gets or sets the wake-on-LAN port.", - "format": "int32" - } - }, - "additionalProperties": false, - "description": "Provides the MAC address and port for wake-on-LAN functionality." - }, "WebSocketMessage": { "type": "object", "oneOf": [ From 0eb8751ef7e5551d8fd6eb17b4d89aa8d34ec1e8 Mon Sep 17 00:00:00 2001 From: Joe Kribs Date: Mon, 20 Oct 2025 14:42:09 -0600 Subject: [PATCH 2/7] dovi vs dOVI --- Sources/Entities/VideoRangeType.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/Entities/VideoRangeType.swift b/Sources/Entities/VideoRangeType.swift index d6eb3ab51..9c222a0d8 100644 --- a/Sources/Entities/VideoRangeType.swift +++ b/Sources/Entities/VideoRangeType.swift @@ -18,9 +18,9 @@ public enum VideoRangeType: String, Codable, CaseIterable { case doviWithHDR10 = "DOVIWithHDR10" case doviWithHLG = "DOVIWithHLG" case doviWithSDR = "DOVIWithSDR" - case dOVIWithEL = "DOVIWithEL" - case dOVIWithHDR10Plus = "DOVIWithHDR10Plus" - case dOVIWithELHDR10Plus = "DOVIWithELHDR10Plus" - case dOVIInvalid = "DOVIInvalid" + case doviWithEL = "DOVIWithEL" + case doviWithHDR10Plus = "DOVIWithHDR10Plus" + case doviWithELHDR10Plus = "DOVIWithELHDR10Plus" + case doviInvalid = "DOVIInvalid" case hdr10Plus = "HDR10Plus" } From 491f67503bfc76dde0556327f7140b1d1f856b39 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 20 Oct 2025 15:54:19 -0600 Subject: [PATCH 3/7] Remove `TaskTriggerType` in favor of `TaskTriggerInfoType`. Comment out now unused Patchwork. --- Plugins/CreateAPI/GeneratePlugin.swift | 103 ++++++++---------- .../PatchFiles/TaskTriggerType.swift | 16 --- Sources/Entities/TaskTriggerInfo.swift | 6 +- Sources/create-api-config.yaml | 8 +- 4 files changed, 52 insertions(+), 81 deletions(-) delete mode 100644 Plugins/CreateAPI/PatchFiles/TaskTriggerType.swift diff --git a/Plugins/CreateAPI/GeneratePlugin.swift b/Plugins/CreateAPI/GeneratePlugin.swift index 20145a0ac..c7de8e71c 100644 --- a/Plugins/CreateAPI/GeneratePlugin.swift +++ b/Plugins/CreateAPI/GeneratePlugin.swift @@ -17,8 +17,9 @@ struct Plugin: CommandPlugin { func performCommand(context: PluginContext, arguments: [String]) async throws { + /// Not needed for 10.11. Put patchwork here if needed in the future. // Apply schema pre patches - try await patchTaskTriggerInfoSchema(context: context) + // try await patchTaskTriggerInfoSchema(context: context) try await generate(context: context) @@ -27,15 +28,13 @@ struct Plugin: CommandPlugin { try await patchAnyJSON(context: context) try await patchGroupUpdateDiscriminator(context: context) - // Move patch files - try await addTaskTriggerType(context: context) - // Create the version SDK try await generateVersionFile(context: context) try await lint(context: context) - try await deletePatchedSchema(context: context) + /// Not needed for 10.11. Put patchwork deletion here if needed in the future. + // try await deletePatchedSchema(context: context) } private func runProcess(_ commandLine: String, context: PluginContext, workingDirectory: String? = nil) throws { @@ -88,50 +87,54 @@ struct Plugin: CommandPlugin { return try decoder.decode(AnyJSON.self, from: data) } - private func savePatchedSchema(context: PluginContext, json: AnyJSON) async throws { - let filePath = context - .package - .directory - .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) + // MARK: Unused Patch File Functions - let encoder = JSONEncoder() - encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes] - let data = try encoder.encode(json) + /// Leaving this in place as an example to use if anything needs to be patched in the future. - try data.write(to: URL(fileURLWithPath: filePath.string)) - } + // private func savePatchedSchema(context: PluginContext, json: AnyJSON) async throws { + // let filePath = context + // .package + // .directory + // .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) - private func deletePatchedSchema(context: PluginContext) async throws { - let filePath = context - .package - .directory - .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) + // let encoder = JSONEncoder() + // encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes] + // let data = try encoder.encode(json) - try FileManager.default.removeItem(atPath: filePath.string) - } + // try data.write(to: URL(fileURLWithPath: filePath.string)) + // } - private func patchTaskTriggerInfoSchema(context: PluginContext) async throws { - let contents = try await parseOriginalSchema(context: context) + // private func deletePatchedSchema(context: PluginContext) async throws { + // let filePath = context + // .package + // .directory + // .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) - guard case var .object(file) = contents else { return } - guard case var .object(components) = file["components"] else { return } - guard case var .object(schemas) = components["schemas"] else { return } - guard case var .object(taskTriggerInfo) = schemas["TaskTriggerInfo"] else { return } - guard case var .object(properties) = taskTriggerInfo["properties"] else { return } + // try FileManager.default.removeItem(atPath: filePath.string) + // } - properties["Type"] = AnyJSON.object([ - "type": .string("string"), - "format": .string("TaskTriggerType"), - "nullable": .bool(true), - ]) + // private func patchTaskTriggerInfoSchema(context: PluginContext) async throws { + // let contents = try await parseOriginalSchema(context: context) - taskTriggerInfo["properties"] = .object(properties) - schemas["TaskTriggerInfo"] = .object(taskTriggerInfo) - components["schemas"] = .object(schemas) - file["components"] = .object(components) + // guard case var .object(file) = contents else { return } + // guard case var .object(components) = file["components"] else { return } + // guard case var .object(schemas) = components["schemas"] else { return } + // guard case var .object(taskTriggerInfo) = schemas["TaskTriggerInfo"] else { return } + // guard case var .object(properties) = taskTriggerInfo["properties"] else { return } - try await savePatchedSchema(context: context, json: .object(file)) - } + // properties["Type"] = AnyJSON.object([ + // "type": .string("string"), + // "format": .string("TaskTriggerType"), + // "nullable": .bool(true), + // ]) + + // taskTriggerInfo["properties"] = .object(properties) + // schemas["TaskTriggerInfo"] = .object(taskTriggerInfo) + // components["schemas"] = .object(schemas) + // file["components"] = .object(components) + + // try await savePatchedSchema(context: context, json: .object(file)) + // } // Entities/RemoteSearchResult.swift: remove `Hashable` private func patchRemoteSearchResult(context: PluginContext) async throws { @@ -173,26 +176,6 @@ struct Plugin: CommandPlugin { .write(to: URL(fileURLWithPath: filePath.string)) } - private func addTaskTriggerType(context: PluginContext) async throws { - let sourceFilePath = context - .package - .directory - .appending(["Plugins", "CreateAPI", "PatchFiles", "TaskTriggerType.swift"]) - - let destinationFilePath = context - .package - .directory - .appending(["Sources", "Entities", "TaskTriggerType.swift"]) - - let fileManager = FileManager.default - - if fileManager.fileExists(atPath: destinationFilePath.string) { - try fileManager.removeItem(atPath: destinationFilePath.string) - } - - try fileManager.copyItem(atPath: sourceFilePath.string, toPath: destinationFilePath.string) - } - // TODO: Remove if/when fixed within CreateAPI // Entities/GroupUpdate.swift: change generated `Type` name to `_Type` private func patchGroupUpdateDiscriminator(context: PluginContext) async throws { diff --git a/Plugins/CreateAPI/PatchFiles/TaskTriggerType.swift b/Plugins/CreateAPI/PatchFiles/TaskTriggerType.swift deleted file mode 100644 index d5c7ec979..000000000 --- a/Plugins/CreateAPI/PatchFiles/TaskTriggerType.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// jellyfin-sdk-swift is subject to the terms of the Mozilla Public -// License, v2.0. If a copy of the MPL was not distributed with this -// file, you can obtain one at https://mozilla.org/MPL/2.0/. -// -// Copyright (c) 2025 Jellyfin & Jellyfin Contributors -// - -import Foundation - -public enum TaskTriggerType: String, Codable, CaseIterable { - case daily = "DailyTrigger" - case weekly = "WeeklyTrigger" - case interval = "IntervalTrigger" - case startup = "StartupTrigger" -} diff --git a/Sources/Entities/TaskTriggerInfo.swift b/Sources/Entities/TaskTriggerInfo.swift index 6ce98a29c..b9a3e57c2 100644 --- a/Sources/Entities/TaskTriggerInfo.swift +++ b/Sources/Entities/TaskTriggerInfo.swift @@ -18,14 +18,14 @@ public struct TaskTriggerInfo: Codable, Hashable { public var maxRuntimeTicks: Int? /// Gets or sets the time of day. public var timeOfDayTicks: Int? - public var type: TaskTriggerType? + public var type: TaskTriggerInfoType? public init( dayOfWeek: DayOfWeek? = nil, intervalTicks: Int? = nil, maxRuntimeTicks: Int? = nil, timeOfDayTicks: Int? = nil, - type: TaskTriggerType? = nil + type: TaskTriggerInfoType? = nil ) { self.dayOfWeek = dayOfWeek self.intervalTicks = intervalTicks @@ -40,7 +40,7 @@ public struct TaskTriggerInfo: Codable, Hashable { self.intervalTicks = try values.decodeIfPresent(Int.self, forKey: "IntervalTicks") self.maxRuntimeTicks = try values.decodeIfPresent(Int.self, forKey: "MaxRuntimeTicks") self.timeOfDayTicks = try values.decodeIfPresent(Int.self, forKey: "TimeOfDayTicks") - self.type = try values.decodeIfPresent(TaskTriggerType.self, forKey: "Type") + self.type = try values.decodeIfPresent(TaskTriggerInfoType.self, forKey: "Type") } public func encode(to encoder: Encoder) throws { diff --git a/Sources/create-api-config.yaml b/Sources/create-api-config.yaml index e747a8cef..e4383b5c1 100644 --- a/Sources/create-api-config.yaml +++ b/Sources/create-api-config.yaml @@ -17,7 +17,6 @@ dataTypes: int64: Int string: uuid: String - TaskTriggerType: TaskTriggerType entities: protocols: ["Codable", "Hashable"] includeIdentifiableConformance: true @@ -30,7 +29,12 @@ paths: filenameTemplate: "%0API.swift" rename: enumCases: + VideoRangeType.DOVI: "dovi" VideoRangeType.DOVIWithHDR10: "doviWithHDR10" VideoRangeType.DOVIWithHLG: "doviWithHLG" VideoRangeType.DOVIWithSDR: "doviWithSDR" - VideoRangeType.HDR10Plus: "hdr10Plus" \ No newline at end of file + VideoRangeType.DOVIWithEL: "doviWithEL" + VideoRangeType.DOVIWithHDR10Plus: "doviWithHDR10Plus" + VideoRangeType.DOVIWithELHDR10Plus: "doviWithELHDR10Plus" + VideoRangeType.DOVIInvalid: "doviInvalid" + VideoRangeType,HDR10Plus: "hdr10Plus" From 0085d4f526a51e97c7ffdfd08a9227ad564a38f3 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 23 Oct 2025 00:19:28 -0600 Subject: [PATCH 4/7] Take 2 --- Plugins/CreateAPI/GeneratePlugin.swift | 84 +++++++++++----------- Sources/Entities/TaskTriggerInfo.swift | 1 + Sources/Paths/GetBackupAPI.swift | 2 +- Sources/Paths/SyncPlayCreateGroupAPI.swift | 2 +- 4 files changed, 46 insertions(+), 43 deletions(-) diff --git a/Plugins/CreateAPI/GeneratePlugin.swift b/Plugins/CreateAPI/GeneratePlugin.swift index c7de8e71c..b33811a0f 100644 --- a/Plugins/CreateAPI/GeneratePlugin.swift +++ b/Plugins/CreateAPI/GeneratePlugin.swift @@ -17,9 +17,8 @@ struct Plugin: CommandPlugin { func performCommand(context: PluginContext, arguments: [String]) async throws { - /// Not needed for 10.11. Put patchwork here if needed in the future. // Apply schema pre patches - // try await patchTaskTriggerInfoSchema(context: context) + try await patchTaskTriggerInfoSchema(context: context) try await generate(context: context) @@ -33,8 +32,7 @@ struct Plugin: CommandPlugin { try await lint(context: context) - /// Not needed for 10.11. Put patchwork deletion here if needed in the future. - // try await deletePatchedSchema(context: context) + try await deletePatchedSchema(context: context) } private func runProcess(_ commandLine: String, context: PluginContext, workingDirectory: String? = nil) throws { @@ -87,54 +85,58 @@ struct Plugin: CommandPlugin { return try decoder.decode(AnyJSON.self, from: data) } - // MARK: Unused Patch File Functions + private func savePatchedSchema(context: PluginContext, json: AnyJSON) async throws { + let filePath = context + .package + .directory + .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) + + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes] + let data = try encoder.encode(json) + + try data.write(to: URL(fileURLWithPath: filePath.string)) + } - /// Leaving this in place as an example to use if anything needs to be patched in the future. + private func deletePatchedSchema(context: PluginContext) async throws { + let filePath = context + .package + .directory + .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) - // private func savePatchedSchema(context: PluginContext, json: AnyJSON) async throws { - // let filePath = context - // .package - // .directory - // .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) + if FileManager.default.fileExists(atPath: filePath.string) { + try FileManager.default.removeItem(atPath: filePath.string) + } + } - // let encoder = JSONEncoder() - // encoder.outputFormatting = [.prettyPrinted, .withoutEscapingSlashes] - // let data = try encoder.encode(json) + private func patchTaskTriggerInfoSchema(context: PluginContext) async throws { + let contents = try await parseOriginalSchema(context: context) - // try data.write(to: URL(fileURLWithPath: filePath.string)) - // } + guard case var .object(file) = contents else { return } - // private func deletePatchedSchema(context: PluginContext) async throws { - // let filePath = context - // .package - // .directory - // .appending(["Sources", "jellyfin-openapi-stable-patched.json"]) + guard case var .object(components) = file["components"] else { return } + guard case var .object(schemas) = components["schemas"] else { return } - // try FileManager.default.removeItem(atPath: filePath.string) - // } + /// Leaving this in place as an example to use if anything needs to be patched in the future. + /// - This was used to replace TaskTriggerType Strings with a custom type in a Patch File - // private func patchTaskTriggerInfoSchema(context: PluginContext) async throws { - // let contents = try await parseOriginalSchema(context: context) + // guard case var .object(taskTriggerInfo) = schemas["TaskTriggerInfo"] else { return } + // guard case var .object(properties) = taskTriggerInfo["properties"] else { return } - // guard case var .object(file) = contents else { return } - // guard case var .object(components) = file["components"] else { return } - // guard case var .object(schemas) = components["schemas"] else { return } - // guard case var .object(taskTriggerInfo) = schemas["TaskTriggerInfo"] else { return } - // guard case var .object(properties) = taskTriggerInfo["properties"] else { return } + // properties["Type"] = AnyJSON.object([ + // "type": .string("string"), + // "format": .string("TaskTriggerType"), + // "nullable": .bool(true), + // ]) - // properties["Type"] = AnyJSON.object([ - // "type": .string("string"), - // "format": .string("TaskTriggerType"), - // "nullable": .bool(true), - // ]) + // taskTriggerInfo["properties"] = .object(properties) + // schemas["TaskTriggerInfo"] = .object(taskTriggerInfo) - // taskTriggerInfo["properties"] = .object(properties) - // schemas["TaskTriggerInfo"] = .object(taskTriggerInfo) - // components["schemas"] = .object(schemas) - // file["components"] = .object(components) + components["schemas"] = .object(schemas) + file["components"] = .object(components) - // try await savePatchedSchema(context: context, json: .object(file)) - // } + try await savePatchedSchema(context: context, json: .object(file)) + } // Entities/RemoteSearchResult.swift: remove `Hashable` private func patchRemoteSearchResult(context: PluginContext) async throws { diff --git a/Sources/Entities/TaskTriggerInfo.swift b/Sources/Entities/TaskTriggerInfo.swift index b9a3e57c2..423125c14 100644 --- a/Sources/Entities/TaskTriggerInfo.swift +++ b/Sources/Entities/TaskTriggerInfo.swift @@ -18,6 +18,7 @@ public struct TaskTriggerInfo: Codable, Hashable { public var maxRuntimeTicks: Int? /// Gets or sets the time of day. public var timeOfDayTicks: Int? + /// Gets or sets the type. public var type: TaskTriggerInfoType? public init( diff --git a/Sources/Paths/GetBackupAPI.swift b/Sources/Paths/GetBackupAPI.swift index 72cd84fd4..c43109dbe 100644 --- a/Sources/Paths/GetBackupAPI.swift +++ b/Sources/Paths/GetBackupAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Gets the descriptor from an existing archive is present. - static func getBackup(path: String) -> Request { + static func getBackup(path: String) -> Request { Request(path: "/Backup/Manifest", method: "GET", query: [("path", path)], id: "GetBackup") } } diff --git a/Sources/Paths/SyncPlayCreateGroupAPI.swift b/Sources/Paths/SyncPlayCreateGroupAPI.swift index f51a5a74b..a0c830014 100644 --- a/Sources/Paths/SyncPlayCreateGroupAPI.swift +++ b/Sources/Paths/SyncPlayCreateGroupAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Create a new SyncPlay group. - static func syncPlayCreateGroup(_ body: JellyfinAPI.NewGroupRequestDto) -> Request { + static func syncPlayCreateGroup(_ body: JellyfinAPI.NewGroupRequestDto) -> Request { Request(path: "/SyncPlay/New", method: "POST", body: body, id: "SyncPlayCreateGroup") } } From af9e4c58969b73f61be5bedb4a0bdd1bc7fe6790 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 23 Oct 2025 00:20:38 -0600 Subject: [PATCH 5/7] Typo --- Sources/create-api-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/create-api-config.yaml b/Sources/create-api-config.yaml index e4383b5c1..9848d2215 100644 --- a/Sources/create-api-config.yaml +++ b/Sources/create-api-config.yaml @@ -37,4 +37,4 @@ rename: VideoRangeType.DOVIWithHDR10Plus: "doviWithHDR10Plus" VideoRangeType.DOVIWithELHDR10Plus: "doviWithELHDR10Plus" VideoRangeType.DOVIInvalid: "doviInvalid" - VideoRangeType,HDR10Plus: "hdr10Plus" + VideoRangeType.HDR10Plus: "hdr10Plus" From d889a144a226f25130ba22c8726b4b8a0e03e8da Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 23 Oct 2025 00:21:41 -0600 Subject: [PATCH 6/7] Re-run with new hdr10Plus fix --- Sources/Paths/GetBackupAPI.swift | 2 +- Sources/Paths/SyncPlayCreateGroupAPI.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Paths/GetBackupAPI.swift b/Sources/Paths/GetBackupAPI.swift index c43109dbe..72cd84fd4 100644 --- a/Sources/Paths/GetBackupAPI.swift +++ b/Sources/Paths/GetBackupAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Gets the descriptor from an existing archive is present. - static func getBackup(path: String) -> Request { + static func getBackup(path: String) -> Request { Request(path: "/Backup/Manifest", method: "GET", query: [("path", path)], id: "GetBackup") } } diff --git a/Sources/Paths/SyncPlayCreateGroupAPI.swift b/Sources/Paths/SyncPlayCreateGroupAPI.swift index a0c830014..f51a5a74b 100644 --- a/Sources/Paths/SyncPlayCreateGroupAPI.swift +++ b/Sources/Paths/SyncPlayCreateGroupAPI.swift @@ -12,7 +12,7 @@ import URLQueryEncoder public extension Paths { /// Create a new SyncPlay group. - static func syncPlayCreateGroup(_ body: JellyfinAPI.NewGroupRequestDto) -> Request { + static func syncPlayCreateGroup(_ body: JellyfinAPI.NewGroupRequestDto) -> Request { Request(path: "/SyncPlay/New", method: "POST", body: body, id: "SyncPlayCreateGroup") } } From 312e76c08eebd204b6278bc48f907c9877ed0d18 Mon Sep 17 00:00:00 2001 From: Ethan Pippin Date: Thu, 23 Oct 2025 17:02:14 -0400 Subject: [PATCH 7/7] wip --- Plugins/CreateAPI/GeneratePlugin.swift | 30 -------------------------- 1 file changed, 30 deletions(-) diff --git a/Plugins/CreateAPI/GeneratePlugin.swift b/Plugins/CreateAPI/GeneratePlugin.swift index b33811a0f..11cf4d9b4 100644 --- a/Plugins/CreateAPI/GeneratePlugin.swift +++ b/Plugins/CreateAPI/GeneratePlugin.swift @@ -18,7 +18,6 @@ struct Plugin: CommandPlugin { func performCommand(context: PluginContext, arguments: [String]) async throws { // Apply schema pre patches - try await patchTaskTriggerInfoSchema(context: context) try await generate(context: context) @@ -109,35 +108,6 @@ struct Plugin: CommandPlugin { } } - private func patchTaskTriggerInfoSchema(context: PluginContext) async throws { - let contents = try await parseOriginalSchema(context: context) - - guard case var .object(file) = contents else { return } - - guard case var .object(components) = file["components"] else { return } - guard case var .object(schemas) = components["schemas"] else { return } - - /// Leaving this in place as an example to use if anything needs to be patched in the future. - /// - This was used to replace TaskTriggerType Strings with a custom type in a Patch File - - // guard case var .object(taskTriggerInfo) = schemas["TaskTriggerInfo"] else { return } - // guard case var .object(properties) = taskTriggerInfo["properties"] else { return } - - // properties["Type"] = AnyJSON.object([ - // "type": .string("string"), - // "format": .string("TaskTriggerType"), - // "nullable": .bool(true), - // ]) - - // taskTriggerInfo["properties"] = .object(properties) - // schemas["TaskTriggerInfo"] = .object(taskTriggerInfo) - - components["schemas"] = .object(schemas) - file["components"] = .object(components) - - try await savePatchedSchema(context: context, json: .object(file)) - } - // Entities/RemoteSearchResult.swift: remove `Hashable` private func patchRemoteSearchResult(context: PluginContext) async throws { let filePath = context