From 5c560e54b5b0510ec5a4f98d7516ea4988547946 Mon Sep 17 00:00:00 2001 From: PartyDonut <42371342+PartyDonut@users.noreply.github.com> Date: Sat, 9 Nov 2024 19:40:12 +0100 Subject: [PATCH] feature: Add support for mediaSegments (#138) Co-authored-by: PartyDonut --- .vscode/settings.json | 3 +- .../jellyfin_open_api.enums.swagger.dart | 248 +- .../jellyfin_open_api.swagger.chopper.dart | 656 +- lib/jellyfin/jellyfin_open_api.swagger.dart | 4617 ++++------- lib/jellyfin/jellyfin_open_api.swagger.g.dart | 817 +- lib/models/items/intro_skip_model.dart | 47 - .../items/intro_skip_model.freezed.dart | 595 -- lib/models/items/intro_skip_model.g.dart | 46 - lib/models/items/media_segments_model.dart | 79 + .../items/media_segments_model.freezed.dart | 363 + lib/models/items/media_segments_model.g.dart | 45 + .../playback/direct_playback_model.dart | 10 +- .../playback/offline_playback_model.dart | 28 +- lib/models/playback/playback_model.dart | 16 +- .../playback/transcode_playback_model.dart | 10 +- lib/models/syncing/i_synced_item.dart | 7 +- lib/models/syncing/i_synced_item.g.dart | 85 +- lib/models/syncing/sync_item.dart | 8 +- lib/models/syncing/sync_item.freezed.dart | 55 +- lib/models/video_stream_model.dart | 17 +- lib/providers/service_provider.dart | 19 +- lib/providers/sync_provider.dart | 4 +- .../video_player_controls_extras.dart | 10 +- .../components/video_player_next_wrapper.dart | 2 +- .../components/video_progress_bar.dart | 30 +- .../video_player/video_player_controls.dart | 36 +- lib/util/fladder_image.dart | 4 - swagger/jellyfin-open-api.json | 7278 ++++++++++------- 28 files changed, 6823 insertions(+), 8312 deletions(-) delete mode 100644 lib/models/items/intro_skip_model.dart delete mode 100644 lib/models/items/intro_skip_model.freezed.dart delete mode 100644 lib/models/items/intro_skip_model.g.dart create mode 100644 lib/models/items/media_segments_model.dart create mode 100644 lib/models/items/media_segments_model.freezed.dart create mode 100644 lib/models/items/media_segments_model.g.dart diff --git a/.vscode/settings.json b/.vscode/settings.json index 36fbd98..3559d7e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,8 @@ "jellyfin", "Jellyfin", "LTRB", - "LTWH" + "LTWH", + "outro" ], "dart.flutterSdkPath": ".fvm/versions/3.24.3", "search.exclude": { diff --git a/lib/jellyfin/jellyfin_open_api.enums.swagger.dart b/lib/jellyfin/jellyfin_open_api.enums.swagger.dart index 68809e0..dc86db7 100644 --- a/lib/jellyfin/jellyfin_open_api.enums.swagger.dart +++ b/lib/jellyfin/jellyfin_open_api.enums.swagger.dart @@ -1,20 +1,6 @@ import 'package:json_annotation/json_annotation.dart'; import 'package:collection/collection.dart'; -enum AnalysisMode { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Introduction') - introduction('Introduction'), - @JsonValue('Credits') - credits('Credits'); - - final String? value; - - const AnalysisMode(this.value); -} - enum AudioSpatialFormat { @JsonValue(null) swaggerGeneratedUnknown(null), @@ -313,6 +299,20 @@ enum DayPattern { const DayPattern(this.value); } +enum DeinterlaceMethod { + @JsonValue(null) + swaggerGeneratedUnknown(null), + + @JsonValue('yadif') + yadif('yadif'), + @JsonValue('bwdif') + bwdif('bwdif'); + + final String? value; + + const DeinterlaceMethod(this.value); +} + enum DlnaProfileType { @JsonValue(null) swaggerGeneratedUnknown(null), @@ -342,7 +342,11 @@ enum DownMixStereoAlgorithms { @JsonValue('Dave750') dave750('Dave750'), @JsonValue('NightmodeDialogue') - nightmodedialogue('NightmodeDialogue'); + nightmodedialogue('NightmodeDialogue'), + @JsonValue('Rfc7845') + rfc7845('Rfc7845'), + @JsonValue('Ac4') + ac4('Ac4'); final String? value; @@ -397,6 +401,38 @@ enum EmbeddedSubtitleOptions { const EmbeddedSubtitleOptions(this.value); } +enum EncoderPreset { + @JsonValue(null) + swaggerGeneratedUnknown(null), + + @JsonValue('auto') + auto('auto'), + @JsonValue('placebo') + placebo('placebo'), + @JsonValue('veryslow') + veryslow('veryslow'), + @JsonValue('slower') + slower('slower'), + @JsonValue('slow') + slow('slow'), + @JsonValue('medium') + medium('medium'), + @JsonValue('fast') + fast('fast'), + @JsonValue('faster') + faster('faster'), + @JsonValue('veryfast') + veryfast('veryfast'), + @JsonValue('superfast') + superfast('superfast'), + @JsonValue('ultrafast') + ultrafast('ultrafast'); + + final String? value; + + const EncoderPreset(this.value); +} + enum EncodingContext { @JsonValue(null) swaggerGeneratedUnknown(null), @@ -705,28 +741,30 @@ enum GroupUpdateType { const GroupUpdateType(this.value); } -enum HardwareEncodingType { +enum HardwareAccelerationType { @JsonValue(null) swaggerGeneratedUnknown(null), - @JsonValue('AMF') - amf('AMF'), - @JsonValue('QSV') - qsv('QSV'), - @JsonValue('NVENC') - nvenc('NVENC'), - @JsonValue('V4L2M2M') - v4l2m2m('V4L2M2M'), - @JsonValue('VAAPI') - vaapi('VAAPI'), - @JsonValue('VideoToolBox') - videotoolbox('VideoToolBox'), - @JsonValue('RKMPP') - rkmpp('RKMPP'); + @JsonValue('none') + none('none'), + @JsonValue('amf') + amf('amf'), + @JsonValue('qsv') + qsv('qsv'), + @JsonValue('nvenc') + nvenc('nvenc'), + @JsonValue('v4l2m2m') + v4l2m2m('v4l2m2m'), + @JsonValue('vaapi') + vaapi('vaapi'), + @JsonValue('videotoolbox') + videotoolbox('videotoolbox'), + @JsonValue('rkmpp') + rkmpp('rkmpp'); final String? value; - const HardwareEncodingType(this.value); + const HardwareAccelerationType(this.value); } enum ImageFormat { @@ -1199,6 +1237,28 @@ enum MediaProtocol { const MediaProtocol(this.value); } +enum MediaSegmentType { + @JsonValue(null) + swaggerGeneratedUnknown(null), + + @JsonValue('Unknown') + unknown('Unknown'), + @JsonValue('Commercial') + commercial('Commercial'), + @JsonValue('Preview') + preview('Preview'), + @JsonValue('Recap') + recap('Recap'), + @JsonValue('Outro') + outro('Outro'), + @JsonValue('Intro') + intro('Intro'); + + final String? value; + + const MediaSegmentType(this.value); +} + enum MediaSourceType { @JsonValue(null) swaggerGeneratedUnknown(null), @@ -2011,6 +2071,68 @@ enum TaskState { const TaskState(this.value); } +enum TonemappingAlgorithm { + @JsonValue(null) + swaggerGeneratedUnknown(null), + + @JsonValue('none') + none('none'), + @JsonValue('clip') + clip('clip'), + @JsonValue('linear') + linear('linear'), + @JsonValue('gamma') + gamma('gamma'), + @JsonValue('reinhard') + reinhard('reinhard'), + @JsonValue('hable') + hable('hable'), + @JsonValue('mobius') + mobius('mobius'), + @JsonValue('bt2390') + bt2390('bt2390'); + + final String? value; + + const TonemappingAlgorithm(this.value); +} + +enum TonemappingMode { + @JsonValue(null) + swaggerGeneratedUnknown(null), + + @JsonValue('auto') + auto('auto'), + @JsonValue('max') + max('max'), + @JsonValue('rgb') + rgb('rgb'), + @JsonValue('lum') + lum('lum'), + @JsonValue('itp') + itp('itp'); + + final String? value; + + const TonemappingMode(this.value); +} + +enum TonemappingRange { + @JsonValue(null) + swaggerGeneratedUnknown(null), + + @JsonValue('auto') + auto('auto'), + @JsonValue('tv') + tv('tv'), + @JsonValue('pc') + pc('pc'); + + final String? value; + + const TonemappingRange(this.value); +} + enum TranscodeReason { @JsonValue(null) swaggerGeneratedUnknown(null), @@ -2064,7 +2186,9 @@ enum TranscodeReason { @JsonValue('DirectPlayError') directplayerror('DirectPlayError'), @JsonValue('VideoRangeTypeNotSupported') - videorangetypenotsupported('VideoRangeTypeNotSupported'); + videorangetypenotsupported('VideoRangeTypeNotSupported'), + @JsonValue('VideoCodecTagNotSupported') + videocodectagnotsupported('VideoCodecTagNotSupported'); final String? value; @@ -2138,7 +2262,9 @@ enum TranscodingInfoTranscodeReasons { @JsonValue('DirectPlayError') directplayerror('DirectPlayError'), @JsonValue('VideoRangeTypeNotSupported') - videorangetypenotsupported('VideoRangeTypeNotSupported'); + videorangetypenotsupported('VideoRangeTypeNotSupported'), + @JsonValue('VideoCodecTagNotSupported') + videocodectagnotsupported('VideoCodecTagNotSupported'); final String? value; @@ -5023,62 +5149,6 @@ enum SessionsSessionIdViewingPostItemType { const SessionsSessionIdViewingPostItemType(this.value); } -enum EpisodeIdIntroTimestampsGetMode { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Introduction') - introduction('Introduction'), - @JsonValue('Credits') - credits('Credits'); - - final String? value; - - const EpisodeIdIntroTimestampsGetMode(this.value); -} - -enum EpisodeIdIntroTimestampsV1GetMode { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Introduction') - introduction('Introduction'), - @JsonValue('Credits') - credits('Credits'); - - final String? value; - - const EpisodeIdIntroTimestampsV1GetMode(this.value); -} - -enum IntrosAllGetMode { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Introduction') - introduction('Introduction'), - @JsonValue('Credits') - credits('Credits'); - - final String? value; - - const IntrosAllGetMode(this.value); -} - -enum IntrosEraseTimestampsPostMode { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Introduction') - introduction('Introduction'), - @JsonValue('Credits') - credits('Credits'); - - final String? value; - - const IntrosEraseTimestampsPostMode(this.value); -} - enum ShowsSeriesIdEpisodesGetSortBy { @JsonValue(null) swaggerGeneratedUnknown(null), diff --git a/lib/jellyfin/jellyfin_open_api.swagger.chopper.dart b/lib/jellyfin/jellyfin_open_api.swagger.chopper.dart index 46037a2..0f8f69d 100644 --- a/lib/jellyfin/jellyfin_open_api.swagger.chopper.dart +++ b/lib/jellyfin/jellyfin_open_api.swagger.chopper.dart @@ -304,6 +304,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/stream'); final Map $params = { @@ -355,6 +356,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -416,6 +418,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/stream'); final Map $params = { @@ -467,6 +470,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'HEAD', @@ -528,6 +532,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/stream.${container}'); final Map $params = { @@ -578,6 +583,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -639,6 +645,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/stream.${container}'); final Map $params = { @@ -689,6 +696,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'HEAD', @@ -1010,7 +1018,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { } @override - Future> _devicesGet({String? userId}) { + Future> _devicesGet({String? userId}) { final Uri $url = Uri.parse('/Devices'); final Map $params = {'userId': userId}; final Request $request = Request( @@ -1019,7 +1027,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { client.baseUrl, parameters: $params, ); - return client.send($request); + return client + .send($request); } @override @@ -1036,7 +1045,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { } @override - Future> _devicesInfoGet({required String? id}) { + Future> _devicesInfoGet({required String? id}) { final Uri $url = Uri.parse('/Devices/Info'); final Map $params = {'id': id}; final Request $request = Request( @@ -1045,11 +1054,11 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { client.baseUrl, parameters: $params, ); - return client.send($request); + return client.send($request); } @override - Future> _devicesOptionsGet({required String? id}) { + Future> _devicesOptionsGet({required String? id}) { final Uri $url = Uri.parse('/Devices/Options'); final Map $params = {'id': id}; final Request $request = Request( @@ -1058,7 +1067,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { client.baseUrl, parameters: $params, ); - return client.send($request); + return client.send($request); } @override @@ -1179,6 +1188,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse( '/Audio/${itemId}/hls1/${playlistId}/${segmentId}.${container}'); @@ -1233,6 +1243,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -1294,6 +1305,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/main.m3u8'); final Map $params = { @@ -1345,6 +1357,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -1407,6 +1420,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { String? context, Object? streamOptions, bool? enableAdaptiveBitrateStreaming, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/master.m3u8'); final Map $params = { @@ -1459,6 +1473,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'context': context, 'streamOptions': streamOptions, 'enableAdaptiveBitrateStreaming': enableAdaptiveBitrateStreaming, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -1521,6 +1536,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { String? context, Object? streamOptions, bool? enableAdaptiveBitrateStreaming, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Audio/${itemId}/master.m3u8'); final Map $params = { @@ -1573,6 +1589,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'context': context, 'streamOptions': streamOptions, 'enableAdaptiveBitrateStreaming': enableAdaptiveBitrateStreaming, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'HEAD', @@ -1640,6 +1657,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { final Uri $url = Uri.parse( '/Videos/${itemId}/hls1/${playlistId}/${segmentId}.${container}'); @@ -1695,6 +1714,9 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, + 'alwaysBurnInSubtitleWhenTranscoding': + alwaysBurnInSubtitleWhenTranscoding, }; final Request $request = Request( 'GET', @@ -1759,6 +1781,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? maxWidth, int? maxHeight, bool? enableSubtitlesInManifest, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/live.m3u8'); final Map $params = { @@ -1813,6 +1837,9 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'maxWidth': maxWidth, 'maxHeight': maxHeight, 'enableSubtitlesInManifest': enableSubtitlesInManifest, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, + 'alwaysBurnInSubtitleWhenTranscoding': + alwaysBurnInSubtitleWhenTranscoding, }; final Request $request = Request( 'GET', @@ -1875,6 +1902,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/main.m3u8'); final Map $params = { @@ -1927,6 +1956,9 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, + 'alwaysBurnInSubtitleWhenTranscoding': + alwaysBurnInSubtitleWhenTranscoding, }; final Request $request = Request( 'GET', @@ -1991,6 +2023,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { Object? streamOptions, bool? enableAdaptiveBitrateStreaming, bool? enableTrickplay, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/master.m3u8'); final Map $params = { @@ -2045,6 +2079,9 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'streamOptions': streamOptions, 'enableAdaptiveBitrateStreaming': enableAdaptiveBitrateStreaming, 'enableTrickplay': enableTrickplay, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, + 'alwaysBurnInSubtitleWhenTranscoding': + alwaysBurnInSubtitleWhenTranscoding, }; final Request $request = Request( 'GET', @@ -2109,6 +2146,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { Object? streamOptions, bool? enableAdaptiveBitrateStreaming, bool? enableTrickplay, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/master.m3u8'); final Map $params = { @@ -2163,6 +2202,9 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'streamOptions': streamOptions, 'enableAdaptiveBitrateStreaming': enableAdaptiveBitrateStreaming, 'enableTrickplay': enableTrickplay, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, + 'alwaysBurnInSubtitleWhenTranscoding': + alwaysBurnInSubtitleWhenTranscoding, }; final Request $request = Request( 'HEAD', @@ -4318,6 +4360,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { bool? hasSpecialFeature, bool? hasTrailer, String? adjacentTo, + int? indexNumber, int? parentIndexNumber, bool? hasParentalRating, bool? isHd, @@ -4406,6 +4449,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'hasSpecialFeature': hasSpecialFeature, 'hasTrailer': hasTrailer, 'adjacentTo': adjacentTo, + 'indexNumber': indexNumber, 'parentIndexNumber': parentIndexNumber, 'hasParentalRating': hasParentalRating, 'isHd': isHd, @@ -4792,11 +4836,15 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { required String? itemId, String? userId, bool? inheritFromParent, + List? sortBy, + List? sortOrder, }) { final Uri $url = Uri.parse('/Items/${itemId}/ThemeMedia'); final Map $params = { 'userId': userId, 'inheritFromParent': inheritFromParent, + 'sortBy': sortBy, + 'sortOrder': sortOrder, }; final Request $request = Request( 'GET', @@ -4812,11 +4860,15 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { required String? itemId, String? userId, bool? inheritFromParent, + List? sortBy, + List? sortOrder, }) { final Uri $url = Uri.parse('/Items/${itemId}/ThemeSongs'); final Map $params = { 'userId': userId, 'inheritFromParent': inheritFromParent, + 'sortBy': sortBy, + 'sortOrder': sortOrder, }; final Request $request = Request( 'GET', @@ -4832,11 +4884,15 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { required String? itemId, String? userId, bool? inheritFromParent, + List? sortBy, + List? sortOrder, }) { final Uri $url = Uri.parse('/Items/${itemId}/ThemeVideos'); final Map $params = { 'userId': userId, 'inheritFromParent': inheritFromParent, + 'sortBy': sortBy, + 'sortOrder': sortOrder, }; final Request $request = Request( 'GET', @@ -6247,6 +6303,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { String? itemId, bool? enableDirectPlay, bool? enableDirectStream, + bool? alwaysBurnInSubtitleWhenTranscoding, required OpenLiveStreamDto? body, }) { final Uri $url = Uri.parse('/LiveStreams/Open'); @@ -6262,6 +6319,8 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'itemId': itemId, 'enableDirectPlay': enableDirectPlay, 'enableDirectStream': enableDirectStream, + 'alwaysBurnInSubtitleWhenTranscoding': + alwaysBurnInSubtitleWhenTranscoding, }; final $body = body; final Request $request = Request( @@ -6287,6 +6346,25 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } + @override + Future> _mediaSegmentsItemIdGet({ + required String? itemId, + List? includeSegmentTypes, + }) { + final Uri $url = Uri.parse('/MediaSegments/${itemId}'); + final Map $params = { + 'includeSegmentTypes': includeSegmentTypes + }; + final Request $request = Request( + 'GET', + $url, + client.baseUrl, + parameters: $params, + ); + return client + .send($request); + } + @override Future>> _moviesRecommendationsGet({ String? userId, @@ -6526,282 +6604,6 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } - @override - Future> _userUsageStatsBreakdownTypeBreakdownReportGet({ - required String? breakdownType, - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - final Uri $url = - Uri.parse('/user_usage_stats/${breakdownType}/BreakdownReport'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsUserIdDateGetItemsGet({ - required String? userId, - required String? date, - String? filter, - num? timezoneOffset, - }) { - final Uri $url = Uri.parse('/user_usage_stats/${userId}/${date}/GetItems'); - final Map $params = { - 'filter': filter, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsDurationHistogramReportGet({ - int? days, - DateTime? endDate, - String? filter, - }) { - final Uri $url = Uri.parse('/user_usage_stats/DurationHistogramReport'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'filter': filter, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsGetTvShowsReportGet({ - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - final Uri $url = Uri.parse('/user_usage_stats/GetTvShowsReport'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsHourlyReportGet({ - int? days, - DateTime? endDate, - String? filter, - num? timezoneOffset, - }) { - final Uri $url = Uri.parse('/user_usage_stats/HourlyReport'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'filter': filter, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future>> _userUsageStatsLoadBackupGet( - {String? backupFilePath}) { - final Uri $url = Uri.parse('/user_usage_stats/load_backup'); - final Map $params = { - 'backupFilePath': backupFilePath - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send, String>($request); - } - - @override - Future> _userUsageStatsMoviesReportGet({ - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - final Uri $url = Uri.parse('/user_usage_stats/MoviesReport'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsPlayActivityGet({ - int? days, - DateTime? endDate, - String? filter, - String? dataType, - num? timezoneOffset, - }) { - final Uri $url = Uri.parse('/user_usage_stats/PlayActivity'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'filter': filter, - 'dataType': dataType, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future>> _userUsageStatsSaveBackupGet() { - final Uri $url = Uri.parse('/user_usage_stats/save_backup'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send, String>($request); - } - - @override - Future> _userUsageStatsSubmitCustomQueryPost( - {required CustomQueryData? body}) { - final Uri $url = Uri.parse('/user_usage_stats/submit_custom_query'); - final $body = body; - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - body: $body, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsTypeFilterListGet() { - final Uri $url = Uri.parse('/user_usage_stats/type_filter_list'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsUserActivityGet({ - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - final Uri $url = Uri.parse('/user_usage_stats/user_activity'); - final Map $params = { - 'days': days, - 'endDate': endDate, - 'timezoneOffset': timezoneOffset, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsUserListGet() { - final Uri $url = Uri.parse('/user_usage_stats/user_list'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsUserManageAddGet({String? id}) { - final Uri $url = Uri.parse('/user_usage_stats/user_manage/add'); - final Map $params = {'id': id}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsUserManagePruneGet() { - final Uri $url = Uri.parse('/user_usage_stats/user_manage/prune'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _userUsageStatsUserManageRemoveGet({String? id}) { - final Uri $url = Uri.parse('/user_usage_stats/user_manage/remove'); - final Map $params = {'id': id}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - @override Future> _playlistsPost({ String? name, @@ -6845,6 +6647,18 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } + @override + Future> _playlistsPlaylistIdGet( + {required String? playlistId}) { + final Uri $url = Uri.parse('/Playlists/${playlistId}'); + final Request $request = Request( + 'GET', + $url, + client.baseUrl, + ); + return client.send($request); + } + @override Future> _playlistsPlaylistIdItemsPost({ required String? playlistId, @@ -7553,7 +7367,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { } @override - Future>> _sessionsGet({ + Future>> _sessionsGet({ String? controllableByUserId, String? deviceId, int? activeWithinSeconds, @@ -7570,7 +7384,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { client.baseUrl, parameters: $params, ); - return client.send, SessionInfo>($request); + return client.send, SessionInfoDto>($request); } @override @@ -7807,95 +7621,6 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } - @override - Future> _episodeIdIntroSkipperSegmentsGet( - {required String? id}) { - final Uri $url = Uri.parse('/Episode/${id}/IntroSkipperSegments'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _episodeIdIntroTimestampsGet({ - required String? id, - String? mode, - }) { - final Uri $url = Uri.parse('/Episode/${id}/IntroTimestamps'); - final Map $params = {'mode': mode}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _episodeIdIntroTimestampsV1Get({ - required String? id, - String? mode, - }) { - final Uri $url = Uri.parse('/Episode/${id}/IntroTimestamps/v1'); - final Map $params = {'mode': mode}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future>> _introsAllGet({String? mode}) { - final Uri $url = Uri.parse('/Intros/All'); - final Map $params = {'mode': mode}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send, IntroWithMetadata>($request); - } - - @override - Future> _introsEraseTimestampsPost({ - String? mode, - bool? eraseCache, - }) { - final Uri $url = Uri.parse('/Intros/EraseTimestamps'); - final Map $params = { - 'mode': mode, - 'eraseCache': eraseCache, - }; - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> - _introsUserInterfaceConfigurationGet() { - final Uri $url = Uri.parse('/Intros/UserInterfaceConfiguration'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client - .send($request); - } - @override Future> _startupCompletePost() { final Uri $url = Uri.parse('/Startup/Complete'); @@ -8684,17 +8409,6 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } - @override - Future> _tMDbBoxSetsRefreshPost() { - final Uri $url = Uri.parse('/TMDbBoxSets/Refresh'); - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - ); - return client.send($request); - } - @override Future> _trailersGet({ String? userId, @@ -8879,84 +8593,6 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { .send($request); } - @override - Future> _traktUsersUserGuidAuthorizePost( - {required String? userGuid}) { - final Uri $url = Uri.parse('/Trakt/Users/${userGuid}/Authorize'); - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _traktUsersUserGuidDeauthorizePost( - {required String? userGuid}) { - final Uri $url = Uri.parse('/Trakt/Users/${userGuid}/Deauthorize'); - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _traktUsersUserGuidItemsItemIdRatePost({ - required String? userGuid, - required String? itemId, - int? rating, - }) { - final Uri $url = Uri.parse('/Trakt/Users/${userGuid}/Items/${itemId}/Rate'); - final Map $params = {'rating': rating}; - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _traktUsersUserGuidPollAuthorizationStatusGet( - {required String? userGuid}) { - final Uri $url = - Uri.parse('/Trakt/Users/${userGuid}/PollAuthorizationStatus'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future>> _traktUsersUserGuidRecommendedMoviesPost( - {required String? userGuid}) { - final Uri $url = Uri.parse('/Trakt/Users/${userGuid}/RecommendedMovies'); - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - ); - return client.send, TraktMovie>($request); - } - - @override - Future>> _traktUsersUserGuidRecommendedShowsPost( - {required String? userGuid}) { - final Uri $url = Uri.parse('/Trakt/Users/${userGuid}/RecommendedShows'); - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - ); - return client.send, TraktShow>($request); - } - @override Future> _videosItemIdTrickplayWidthIndexJpgGet({ required String? itemId, @@ -8998,17 +8634,6 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } - @override - Future> _introSkipperSupportBundleGet() { - final Uri $url = Uri.parse('/IntroSkipper/SupportBundle'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - @override Future> _showsSeriesIdEpisodesGet({ required String? seriesId, @@ -9187,6 +8812,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? maxAudioSampleRate, int? maxAudioBitDepth, bool? enableRemoteMedia, + bool? enableAudioVbrEncoding, bool? breakOnNonKeyFrames, bool? enableRedirection, }) { @@ -9207,6 +8833,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'maxAudioSampleRate': maxAudioSampleRate, 'maxAudioBitDepth': maxAudioBitDepth, 'enableRemoteMedia': enableRemoteMedia, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, 'breakOnNonKeyFrames': breakOnNonKeyFrames, 'enableRedirection': enableRedirection, }; @@ -9237,6 +8864,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? maxAudioSampleRate, int? maxAudioBitDepth, bool? enableRemoteMedia, + bool? enableAudioVbrEncoding, bool? breakOnNonKeyFrames, bool? enableRedirection, }) { @@ -9257,6 +8885,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'maxAudioSampleRate': maxAudioSampleRate, 'maxAudioBitDepth': maxAudioBitDepth, 'enableRemoteMedia': enableRemoteMedia, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, 'breakOnNonKeyFrames': breakOnNonKeyFrames, 'enableRedirection': enableRedirection, }; @@ -9775,6 +9404,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/stream'); final Map $params = { @@ -9828,6 +9458,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -9891,6 +9522,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/stream'); final Map $params = { @@ -9944,6 +9576,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'HEAD', @@ -10007,6 +9640,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/stream.${container}'); final Map $params = { @@ -10059,6 +9693,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'GET', @@ -10122,6 +9757,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { int? videoStreamIndex, String? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { final Uri $url = Uri.parse('/Videos/${itemId}/stream.${container}'); final Map $params = { @@ -10174,6 +9810,7 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { 'videoStreamIndex': videoStreamIndex, 'context': context, 'streamOptions': streamOptions, + 'enableAudioVbrEncoding': enableAudioVbrEncoding, }; final Request $request = Request( 'HEAD', @@ -10198,79 +9835,6 @@ final class _$JellyfinOpenApi extends JellyfinOpenApi { return client.send($request); } - @override - Future>> _introsEpisodeIdChromaprintGet( - {required String? id}) { - final Uri $url = Uri.parse('/Intros/Episode/{Id}/Chromaprint'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send, int>($request); - } - - @override - Future> _introsEpisodeIdUpdateIntroTimestampsPost({ - required String? id, - required Intro? body, - }) { - final Uri $url = Uri.parse('/Intros/Episode/{Id}/UpdateIntroTimestamps'); - final $body = body; - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - body: $body, - ); - return client.send($request); - } - - @override - Future>> _introsShowSeriesSeasonGet({ - required String? series, - required String? season, - }) { - final Uri $url = Uri.parse('/Intros/Show/{Series}/{Season}'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client - .send, EpisodeVisualization>($request); - } - - @override - Future> _introsShowSeriesSeasonDelete({ - required String? series, - required String? season, - bool? eraseCache, - }) { - final Uri $url = Uri.parse('/Intros/Show/{Series}/{Season}'); - final Map $params = { - 'eraseCache': eraseCache - }; - final Request $request = Request( - 'DELETE', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _introsShowsGet() { - final Uri $url = Uri.parse('/Intros/Shows'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - @override Future> _yearsGet({ int? startIndex, diff --git a/lib/jellyfin/jellyfin_open_api.swagger.dart b/lib/jellyfin/jellyfin_open_api.swagger.dart index c2396f5..1265503 100644 --- a/lib/jellyfin/jellyfin_open_api.swagger.dart +++ b/lib/jellyfin/jellyfin_open_api.swagger.dart @@ -504,7 +504,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -534,13 +534,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdStreamGet({ required String? itemId, String? container, @@ -591,6 +592,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.AudioItemIdStreamGetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _audioItemIdStreamGet( itemId: itemId, @@ -641,7 +643,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio stream. @@ -657,7 +660,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -687,13 +690,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Audio/{itemId}/stream') Future> _audioItemIdStreamGet({ @Path('itemId') required String? itemId, @@ -745,6 +749,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets an audio stream. @@ -760,7 +765,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -790,13 +795,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdStreamHead({ required String? itemId, String? container, @@ -847,6 +853,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.AudioItemIdStreamHeadContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _audioItemIdStreamHead( itemId: itemId, @@ -897,7 +904,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio stream. @@ -913,7 +921,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -943,13 +951,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Head(path: '/Audio/{itemId}/stream') Future> _audioItemIdStreamHead({ @Path('itemId') required String? itemId, @@ -1001,6 +1010,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets an audio stream. @@ -1016,7 +1026,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -1046,13 +1056,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdStreamContainerGet({ required String? itemId, required String? container, @@ -1103,6 +1114,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.AudioItemIdStreamContainerGetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _audioItemIdStreamContainerGet( itemId: itemId, @@ -1153,7 +1165,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio stream. @@ -1169,7 +1182,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -1199,13 +1212,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Audio/{itemId}/stream.{container}') Future> _audioItemIdStreamContainerGet({ @Path('itemId') required String? itemId, @@ -1257,6 +1271,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets an audio stream. @@ -1272,7 +1287,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -1302,13 +1317,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdStreamContainerHead({ required String? itemId, required String? container, @@ -1359,6 +1375,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.AudioItemIdStreamContainerHeadContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _audioItemIdStreamContainerHead( itemId: itemId, @@ -1409,7 +1426,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio stream. @@ -1425,7 +1443,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -1455,13 +1473,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Head(path: '/Audio/{itemId}/stream.{container}') Future> _audioItemIdStreamContainerHead({ @Path('itemId') required String? itemId, @@ -1513,6 +1532,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets branding configuration. @@ -1918,9 +1938,10 @@ abstract class JellyfinOpenApi extends ChopperService { ///Get Devices. ///@param userId Gets or sets the user identifier. - Future> devicesGet({String? userId}) { - generatedMapping.putIfAbsent( - DeviceInfoQueryResult, () => DeviceInfoQueryResult.fromJsonFactory); + Future> devicesGet( + {String? userId}) { + generatedMapping.putIfAbsent(DeviceInfoDtoQueryResult, + () => DeviceInfoDtoQueryResult.fromJsonFactory); return _devicesGet(userId: userId); } @@ -1928,7 +1949,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///Get Devices. ///@param userId Gets or sets the user identifier. @Get(path: '/Devices') - Future> _devicesGet( + Future> _devicesGet( {@Query('userId') String? userId}); ///Deletes a device. @@ -1944,8 +1965,10 @@ abstract class JellyfinOpenApi extends ChopperService { ///Get info for a device. ///@param id Device Id. - Future> devicesInfoGet({required String? id}) { - generatedMapping.putIfAbsent(DeviceInfo, () => DeviceInfo.fromJsonFactory); + Future> devicesInfoGet( + {required String? id}) { + generatedMapping.putIfAbsent( + DeviceInfoDto, () => DeviceInfoDto.fromJsonFactory); return _devicesInfoGet(id: id); } @@ -1953,15 +1976,15 @@ abstract class JellyfinOpenApi extends ChopperService { ///Get info for a device. ///@param id Device Id. @Get(path: '/Devices/Info') - Future> _devicesInfoGet( + Future> _devicesInfoGet( {@Query('id') required String? id}); ///Get options for a device. ///@param id Device Id. - Future> devicesOptionsGet( + Future> devicesOptionsGet( {required String? id}) { generatedMapping.putIfAbsent( - DeviceOptions, () => DeviceOptions.fromJsonFactory); + DeviceOptionsDto, () => DeviceOptionsDto.fromJsonFactory); return _devicesOptionsGet(id: id); } @@ -1969,7 +1992,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///Get options for a device. ///@param id Device Id. @Get(path: '/Devices/Options') - Future> _devicesOptionsGet( + Future> _devicesOptionsGet( {@Query('id') required String? id}); ///Update device options. @@ -2072,7 +2095,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2103,13 +2126,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdHls1PlaylistIdSegmentIdContainerGet({ required String? itemId, @@ -2167,6 +2191,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.AudioItemIdHls1PlaylistIdSegmentIdContainerGetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _audioItemIdHls1PlaylistIdSegmentIdContainerGet( itemId: itemId, @@ -2222,7 +2247,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets a video stream using HTTP live streaming. @@ -2242,7 +2268,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2273,13 +2299,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Audio/{itemId}/hls1/{playlistId}/{segmentId}.{container}') Future> _audioItemIdHls1PlaylistIdSegmentIdContainerGet({ @@ -2337,6 +2364,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets an audio stream using HTTP live streaming. @@ -2351,7 +2379,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2382,13 +2410,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdMainM3u8Get({ required String? itemId, bool? $static, @@ -2439,6 +2468,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.AudioItemIdMainM3u8GetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _audioItemIdMainM3u8Get( itemId: itemId, @@ -2489,7 +2519,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio stream using HTTP live streaming. @@ -2504,7 +2535,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2535,13 +2566,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Audio/{itemId}/main.m3u8') Future> _audioItemIdMainM3u8Get({ @Path('itemId') required String? itemId, @@ -2593,6 +2625,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets an audio hls playlist stream. @@ -2607,7 +2640,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2638,7 +2671,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -2646,6 +2679,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdMasterM3u8Get({ required String? itemId, bool? $static, @@ -2697,6 +2731,7 @@ abstract class JellyfinOpenApi extends ChopperService { enums.AudioItemIdMasterM3u8GetContext? context, Object? streamOptions, bool? enableAdaptiveBitrateStreaming, + bool? enableAudioVbrEncoding, }) { return _audioItemIdMasterM3u8Get( itemId: itemId, @@ -2748,7 +2783,8 @@ abstract class JellyfinOpenApi extends ChopperService { videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), streamOptions: streamOptions, - enableAdaptiveBitrateStreaming: enableAdaptiveBitrateStreaming); + enableAdaptiveBitrateStreaming: enableAdaptiveBitrateStreaming, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio hls playlist stream. @@ -2763,7 +2799,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2794,7 +2830,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -2802,6 +2838,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Audio/{itemId}/master.m3u8') Future> _audioItemIdMasterM3u8Get({ @Path('itemId') required String? itemId, @@ -2855,6 +2892,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('streamOptions') Object? streamOptions, @Query('enableAdaptiveBitrateStreaming') bool? enableAdaptiveBitrateStreaming, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets an audio hls playlist stream. @@ -2869,7 +2907,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -2900,7 +2938,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -2908,6 +2946,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> audioItemIdMasterM3u8Head({ required String? itemId, bool? $static, @@ -2959,6 +2998,7 @@ abstract class JellyfinOpenApi extends ChopperService { enums.AudioItemIdMasterM3u8HeadContext? context, Object? streamOptions, bool? enableAdaptiveBitrateStreaming, + bool? enableAudioVbrEncoding, }) { return _audioItemIdMasterM3u8Head( itemId: itemId, @@ -3010,7 +3050,8 @@ abstract class JellyfinOpenApi extends ChopperService { videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), streamOptions: streamOptions, - enableAdaptiveBitrateStreaming: enableAdaptiveBitrateStreaming); + enableAdaptiveBitrateStreaming: enableAdaptiveBitrateStreaming, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets an audio hls playlist stream. @@ -3025,7 +3066,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3056,7 +3097,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -3064,6 +3105,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Head(path: '/Audio/{itemId}/master.m3u8') Future> _audioItemIdMasterM3u8Head({ @Path('itemId') required String? itemId, @@ -3117,6 +3159,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('streamOptions') Object? streamOptions, @Query('enableAdaptiveBitrateStreaming') bool? enableAdaptiveBitrateStreaming, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets a video stream using HTTP live streaming. @@ -3136,7 +3179,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3168,13 +3211,15 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. Future> videosItemIdHls1PlaylistIdSegmentIdContainerGet({ required String? itemId, @@ -3233,6 +3278,8 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.VideosItemIdHls1PlaylistIdSegmentIdContainerGetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { return _videosItemIdHls1PlaylistIdSegmentIdContainerGet( itemId: itemId, @@ -3289,7 +3336,10 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding); } ///Gets a video stream using HTTP live streaming. @@ -3309,7 +3359,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3341,13 +3391,15 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. @Get(path: '/Videos/{itemId}/hls1/{playlistId}/{segmentId}.{container}') Future> _videosItemIdHls1PlaylistIdSegmentIdContainerGet({ @@ -3406,6 +3458,9 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, + @Query('alwaysBurnInSubtitleWhenTranscoding') + bool? alwaysBurnInSubtitleWhenTranscoding, }); ///Gets a hls live stream. @@ -3421,7 +3476,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3451,7 +3506,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -3461,6 +3516,8 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param maxWidth Optional. The max width. ///@param maxHeight Optional. The max height. ///@param enableSubtitlesInManifest Optional. Whether to enable subtitles in the manifest. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. Future> videosItemIdLiveM3u8Get({ required String? itemId, String? container, @@ -3514,6 +3571,8 @@ abstract class JellyfinOpenApi extends ChopperService { int? maxWidth, int? maxHeight, bool? enableSubtitlesInManifest, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { return _videosItemIdLiveM3u8Get( itemId: itemId, @@ -3567,7 +3626,10 @@ abstract class JellyfinOpenApi extends ChopperService { streamOptions: streamOptions, maxWidth: maxWidth, maxHeight: maxHeight, - enableSubtitlesInManifest: enableSubtitlesInManifest); + enableSubtitlesInManifest: enableSubtitlesInManifest, + enableAudioVbrEncoding: enableAudioVbrEncoding, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding); } ///Gets a hls live stream. @@ -3583,7 +3645,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3613,7 +3675,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -3623,6 +3685,8 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param maxWidth Optional. The max width. ///@param maxHeight Optional. The max height. ///@param enableSubtitlesInManifest Optional. Whether to enable subtitles in the manifest. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. @Get(path: '/Videos/{itemId}/live.m3u8') Future> _videosItemIdLiveM3u8Get({ @Path('itemId') required String? itemId, @@ -3677,6 +3741,9 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('maxWidth') int? maxWidth, @Query('maxHeight') int? maxHeight, @Query('enableSubtitlesInManifest') bool? enableSubtitlesInManifest, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, + @Query('alwaysBurnInSubtitleWhenTranscoding') + bool? alwaysBurnInSubtitleWhenTranscoding, }); ///Gets a video stream using HTTP live streaming. @@ -3691,7 +3758,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3723,13 +3790,15 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. Future> videosItemIdMainM3u8Get({ required String? itemId, bool? $static, @@ -3781,6 +3850,8 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.VideosItemIdMainM3u8GetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { return _videosItemIdMainM3u8Get( itemId: itemId, @@ -3832,7 +3903,10 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding); } ///Gets a video stream using HTTP live streaming. @@ -3847,7 +3921,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3879,13 +3953,15 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. @Get(path: '/Videos/{itemId}/main.m3u8') Future> _videosItemIdMainM3u8Get({ @Path('itemId') required String? itemId, @@ -3938,6 +4014,9 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, + @Query('alwaysBurnInSubtitleWhenTranscoding') + bool? alwaysBurnInSubtitleWhenTranscoding, }); ///Gets a video hls playlist stream. @@ -3952,7 +4031,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -3984,7 +4063,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -3993,6 +4072,8 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. ///@param enableTrickplay Enable trickplay image playlists being added to master playlist. + ///@param enableAudioVbrEncoding Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. Future> videosItemIdMasterM3u8Get({ required String? itemId, bool? $static, @@ -4046,6 +4127,8 @@ abstract class JellyfinOpenApi extends ChopperService { Object? streamOptions, bool? enableAdaptiveBitrateStreaming, bool? enableTrickplay, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { return _videosItemIdMasterM3u8Get( itemId: itemId, @@ -4099,7 +4182,10 @@ abstract class JellyfinOpenApi extends ChopperService { context: context?.value?.toString(), streamOptions: streamOptions, enableAdaptiveBitrateStreaming: enableAdaptiveBitrateStreaming, - enableTrickplay: enableTrickplay); + enableTrickplay: enableTrickplay, + enableAudioVbrEncoding: enableAudioVbrEncoding, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding); } ///Gets a video hls playlist stream. @@ -4114,7 +4200,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -4146,7 +4232,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -4155,6 +4241,8 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. ///@param enableTrickplay Enable trickplay image playlists being added to master playlist. + ///@param enableAudioVbrEncoding Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. @Get(path: '/Videos/{itemId}/master.m3u8') Future> _videosItemIdMasterM3u8Get({ @Path('itemId') required String? itemId, @@ -4210,6 +4298,9 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('enableAdaptiveBitrateStreaming') bool? enableAdaptiveBitrateStreaming, @Query('enableTrickplay') bool? enableTrickplay, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, + @Query('alwaysBurnInSubtitleWhenTranscoding') + bool? alwaysBurnInSubtitleWhenTranscoding, }); ///Gets a video hls playlist stream. @@ -4224,7 +4315,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -4256,7 +4347,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -4265,6 +4356,8 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. ///@param enableTrickplay Enable trickplay image playlists being added to master playlist. + ///@param enableAudioVbrEncoding Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. Future> videosItemIdMasterM3u8Head({ required String? itemId, bool? $static, @@ -4318,6 +4411,8 @@ abstract class JellyfinOpenApi extends ChopperService { Object? streamOptions, bool? enableAdaptiveBitrateStreaming, bool? enableTrickplay, + bool? enableAudioVbrEncoding, + bool? alwaysBurnInSubtitleWhenTranscoding, }) { return _videosItemIdMasterM3u8Head( itemId: itemId, @@ -4371,7 +4466,10 @@ abstract class JellyfinOpenApi extends ChopperService { context: context?.value?.toString(), streamOptions: streamOptions, enableAdaptiveBitrateStreaming: enableAdaptiveBitrateStreaming, - enableTrickplay: enableTrickplay); + enableTrickplay: enableTrickplay, + enableAudioVbrEncoding: enableAudioVbrEncoding, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding); } ///Gets a video hls playlist stream. @@ -4386,7 +4484,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -4418,7 +4516,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. @@ -4427,6 +4525,8 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param streamOptions Optional. The streaming options. ///@param enableAdaptiveBitrateStreaming Enable adaptive bitrate streaming. ///@param enableTrickplay Enable trickplay image playlists being added to master playlist. + ///@param enableAudioVbrEncoding Whether to enable Audio Encoding. + ///@param alwaysBurnInSubtitleWhenTranscoding Whether to always burn in subtitles when transcoding. @Head(path: '/Videos/{itemId}/master.m3u8') Future> _videosItemIdMasterM3u8Head({ @Path('itemId') required String? itemId, @@ -4482,6 +4582,9 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('enableAdaptiveBitrateStreaming') bool? enableAdaptiveBitrateStreaming, @Query('enableTrickplay') bool? enableTrickplay, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, + @Query('alwaysBurnInSubtitleWhenTranscoding') + bool? alwaysBurnInSubtitleWhenTranscoding, }); ///Get Default directory browser. @@ -8409,6 +8512,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param hasSpecialFeature Optional filter by items with special features. ///@param hasTrailer Optional filter by items with trailers. ///@param adjacentTo Optional. Return items that are siblings of a supplied item. + ///@param indexNumber Optional filter by index number. ///@param parentIndexNumber Optional filter by parent index number. ///@param hasParentalRating Optional filter by items that have or do not have a parental rating. ///@param isHd Optional filter by items that are HD or not. @@ -8495,6 +8599,7 @@ abstract class JellyfinOpenApi extends ChopperService { bool? hasSpecialFeature, bool? hasTrailer, String? adjacentTo, + int? indexNumber, int? parentIndexNumber, bool? hasParentalRating, bool? isHd, @@ -8585,6 +8690,7 @@ abstract class JellyfinOpenApi extends ChopperService { hasSpecialFeature: hasSpecialFeature, hasTrailer: hasTrailer, adjacentTo: adjacentTo, + indexNumber: indexNumber, parentIndexNumber: parentIndexNumber, hasParentalRating: hasParentalRating, isHd: isHd, @@ -8673,6 +8779,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param hasSpecialFeature Optional filter by items with special features. ///@param hasTrailer Optional filter by items with trailers. ///@param adjacentTo Optional. Return items that are siblings of a supplied item. + ///@param indexNumber Optional filter by index number. ///@param parentIndexNumber Optional filter by parent index number. ///@param hasParentalRating Optional filter by items that have or do not have a parental rating. ///@param isHd Optional filter by items that are HD or not. @@ -8760,6 +8867,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('hasSpecialFeature') bool? hasSpecialFeature, @Query('hasTrailer') bool? hasTrailer, @Query('adjacentTo') String? adjacentTo, + @Query('indexNumber') int? indexNumber, @Query('parentIndexNumber') int? parentIndexNumber, @Query('hasParentalRating') bool? hasParentalRating, @Query('isHd') bool? isHd, @@ -9269,81 +9377,117 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param itemId The item id. ///@param userId Optional. Filter by user id, and attach user data. ///@param inheritFromParent Optional. Determines whether or not parent items should be searched for theme media. + ///@param sortBy 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. + ///@param sortOrder Optional. Sort Order - Ascending, Descending. Future> itemsItemIdThemeMediaGet({ required String? itemId, String? userId, bool? inheritFromParent, + List? sortBy, + List? sortOrder, }) { generatedMapping.putIfAbsent( AllThemeMediaResult, () => AllThemeMediaResult.fromJsonFactory); return _itemsItemIdThemeMediaGet( - itemId: itemId, userId: userId, inheritFromParent: inheritFromParent); + itemId: itemId, + userId: userId, + inheritFromParent: inheritFromParent, + sortBy: itemSortByListToJson(sortBy), + sortOrder: sortOrderListToJson(sortOrder)); } ///Get theme songs and videos for an item. ///@param itemId The item id. ///@param userId Optional. Filter by user id, and attach user data. ///@param inheritFromParent Optional. Determines whether or not parent items should be searched for theme media. + ///@param sortBy 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. + ///@param sortOrder Optional. Sort Order - Ascending, Descending. @Get(path: '/Items/{itemId}/ThemeMedia') Future> _itemsItemIdThemeMediaGet({ @Path('itemId') required String? itemId, @Query('userId') String? userId, @Query('inheritFromParent') bool? inheritFromParent, + @Query('sortBy') List? sortBy, + @Query('sortOrder') List? sortOrder, }); ///Get theme songs for an item. ///@param itemId The item id. ///@param userId Optional. Filter by user id, and attach user data. ///@param inheritFromParent Optional. Determines whether or not parent items should be searched for theme media. + ///@param sortBy 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. + ///@param sortOrder Optional. Sort Order - Ascending, Descending. Future> itemsItemIdThemeSongsGet({ required String? itemId, String? userId, bool? inheritFromParent, + List? sortBy, + List? sortOrder, }) { generatedMapping.putIfAbsent( ThemeMediaResult, () => ThemeMediaResult.fromJsonFactory); return _itemsItemIdThemeSongsGet( - itemId: itemId, userId: userId, inheritFromParent: inheritFromParent); + itemId: itemId, + userId: userId, + inheritFromParent: inheritFromParent, + sortBy: itemSortByListToJson(sortBy), + sortOrder: sortOrderListToJson(sortOrder)); } ///Get theme songs for an item. ///@param itemId The item id. ///@param userId Optional. Filter by user id, and attach user data. ///@param inheritFromParent Optional. Determines whether or not parent items should be searched for theme media. + ///@param sortBy 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. + ///@param sortOrder Optional. Sort Order - Ascending, Descending. @Get(path: '/Items/{itemId}/ThemeSongs') Future> _itemsItemIdThemeSongsGet({ @Path('itemId') required String? itemId, @Query('userId') String? userId, @Query('inheritFromParent') bool? inheritFromParent, + @Query('sortBy') List? sortBy, + @Query('sortOrder') List? sortOrder, }); ///Get theme videos for an item. ///@param itemId The item id. ///@param userId Optional. Filter by user id, and attach user data. ///@param inheritFromParent Optional. Determines whether or not parent items should be searched for theme media. + ///@param sortBy 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. + ///@param sortOrder Optional. Sort Order - Ascending, Descending. Future> itemsItemIdThemeVideosGet({ required String? itemId, String? userId, bool? inheritFromParent, + List? sortBy, + List? sortOrder, }) { generatedMapping.putIfAbsent( ThemeMediaResult, () => ThemeMediaResult.fromJsonFactory); return _itemsItemIdThemeVideosGet( - itemId: itemId, userId: userId, inheritFromParent: inheritFromParent); + itemId: itemId, + userId: userId, + inheritFromParent: inheritFromParent, + sortBy: itemSortByListToJson(sortBy), + sortOrder: sortOrderListToJson(sortOrder)); } ///Get theme videos for an item. ///@param itemId The item id. ///@param userId Optional. Filter by user id, and attach user data. ///@param inheritFromParent Optional. Determines whether or not parent items should be searched for theme media. + ///@param sortBy 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. + ///@param sortOrder Optional. Sort Order - Ascending, Descending. @Get(path: '/Items/{itemId}/ThemeVideos') Future> _itemsItemIdThemeVideosGet({ @Path('itemId') required String? itemId, @Query('userId') String? userId, @Query('inheritFromParent') bool? inheritFromParent, + @Query('sortBy') List? sortBy, + @Query('sortOrder') List? sortOrder, }); ///Get item counts. @@ -11294,6 +11438,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param itemId The item id. ///@param enableDirectPlay Whether to enable direct play. Default: true. ///@param enableDirectStream Whether to enable direct stream. Default: true. + ///@param alwaysBurnInSubtitleWhenTranscoding Always burn-in subtitle when transcoding. Future> liveStreamsOpenPost({ String? openToken, String? userId, @@ -11306,6 +11451,7 @@ abstract class JellyfinOpenApi extends ChopperService { String? itemId, bool? enableDirectPlay, bool? enableDirectStream, + bool? alwaysBurnInSubtitleWhenTranscoding, required OpenLiveStreamDto? body, }) { generatedMapping.putIfAbsent( @@ -11323,6 +11469,8 @@ abstract class JellyfinOpenApi extends ChopperService { itemId: itemId, enableDirectPlay: enableDirectPlay, enableDirectStream: enableDirectStream, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding, body: body); } @@ -11338,6 +11486,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param itemId The item id. ///@param enableDirectPlay Whether to enable direct play. Default: true. ///@param enableDirectStream Whether to enable direct stream. Default: true. + ///@param alwaysBurnInSubtitleWhenTranscoding Always burn-in subtitle when transcoding. @Post( path: '/LiveStreams/Open', optionalBody: true, @@ -11354,6 +11503,8 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('itemId') String? itemId, @Query('enableDirectPlay') bool? enableDirectPlay, @Query('enableDirectStream') bool? enableDirectStream, + @Query('alwaysBurnInSubtitleWhenTranscoding') + bool? alwaysBurnInSubtitleWhenTranscoding, @Body() required OpenLiveStreamDto? body, }); @@ -11369,6 +11520,30 @@ abstract class JellyfinOpenApi extends ChopperService { Future> _playbackBitrateTestGet( {@Query('size') int? size}); + ///Gets all media segments based on an itemId. + ///@param itemId The ItemId. + ///@param includeSegmentTypes Optional filter of requested segment types. + Future> mediaSegmentsItemIdGet({ + required String? itemId, + List? includeSegmentTypes, + }) { + generatedMapping.putIfAbsent(MediaSegmentDtoQueryResult, + () => MediaSegmentDtoQueryResult.fromJsonFactory); + + return _mediaSegmentsItemIdGet( + itemId: itemId, + includeSegmentTypes: mediaSegmentTypeListToJson(includeSegmentTypes)); + } + + ///Gets all media segments based on an itemId. + ///@param itemId The ItemId. + ///@param includeSegmentTypes Optional filter of requested segment types. + @Get(path: '/MediaSegments/{itemId}') + Future> _mediaSegmentsItemIdGet({ + @Path('itemId') required String? itemId, + @Query('includeSegmentTypes') List? includeSegmentTypes, + }); + ///Gets movie recommendations. ///@param userId Optional. Filter by user id, and attach user data. ///@param parentId Specify this to localize the search to a specific item or folder. Omit to use the root. @@ -11744,319 +11919,6 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('userId') String? userId, }); - /// - ///@param breakdownType - ///@param days - ///@param endDate - ///@param timezoneOffset - Future userUsageStatsBreakdownTypeBreakdownReportGet({ - required String? breakdownType, - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - return _userUsageStatsBreakdownTypeBreakdownReportGet( - breakdownType: breakdownType, - days: days, - endDate: endDate, - timezoneOffset: timezoneOffset); - } - - /// - ///@param breakdownType - ///@param days - ///@param endDate - ///@param timezoneOffset - @Get(path: '/user_usage_stats/{breakdownType}/BreakdownReport') - Future _userUsageStatsBreakdownTypeBreakdownReportGet({ - @Path('breakdownType') required String? breakdownType, - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - ///@param userId - ///@param date - ///@param filter - ///@param timezoneOffset - Future userUsageStatsUserIdDateGetItemsGet({ - required String? userId, - required String? date, - String? filter, - num? timezoneOffset, - }) { - return _userUsageStatsUserIdDateGetItemsGet( - userId: userId, - date: date, - filter: filter, - timezoneOffset: timezoneOffset); - } - - /// - ///@param userId - ///@param date - ///@param filter - ///@param timezoneOffset - @Get(path: '/user_usage_stats/{userId}/{date}/GetItems') - Future _userUsageStatsUserIdDateGetItemsGet({ - @Path('userId') required String? userId, - @Path('date') required String? date, - @Query('filter') String? filter, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - ///@param days - ///@param endDate - ///@param filter - Future userUsageStatsDurationHistogramReportGet({ - int? days, - DateTime? endDate, - String? filter, - }) { - return _userUsageStatsDurationHistogramReportGet( - days: days, endDate: endDate, filter: filter); - } - - /// - ///@param days - ///@param endDate - ///@param filter - @Get(path: '/user_usage_stats/DurationHistogramReport') - Future _userUsageStatsDurationHistogramReportGet({ - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('filter') String? filter, - }); - - /// - ///@param days - ///@param endDate - ///@param timezoneOffset - Future userUsageStatsGetTvShowsReportGet({ - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - return _userUsageStatsGetTvShowsReportGet( - days: days, endDate: endDate, timezoneOffset: timezoneOffset); - } - - /// - ///@param days - ///@param endDate - ///@param timezoneOffset - @Get(path: '/user_usage_stats/GetTvShowsReport') - Future _userUsageStatsGetTvShowsReportGet({ - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - ///@param days - ///@param endDate - ///@param filter - ///@param timezoneOffset - Future userUsageStatsHourlyReportGet({ - int? days, - DateTime? endDate, - String? filter, - num? timezoneOffset, - }) { - return _userUsageStatsHourlyReportGet( - days: days, - endDate: endDate, - filter: filter, - timezoneOffset: timezoneOffset); - } - - /// - ///@param days - ///@param endDate - ///@param filter - ///@param timezoneOffset - @Get(path: '/user_usage_stats/HourlyReport') - Future _userUsageStatsHourlyReportGet({ - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('filter') String? filter, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - ///@param backupFilePath - Future>> userUsageStatsLoadBackupGet( - {String? backupFilePath}) { - return _userUsageStatsLoadBackupGet(backupFilePath: backupFilePath); - } - - /// - ///@param backupFilePath - @Get(path: '/user_usage_stats/load_backup') - Future>> _userUsageStatsLoadBackupGet( - {@Query('backupFilePath') String? backupFilePath}); - - /// - ///@param days - ///@param endDate - ///@param timezoneOffset - Future userUsageStatsMoviesReportGet({ - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - return _userUsageStatsMoviesReportGet( - days: days, endDate: endDate, timezoneOffset: timezoneOffset); - } - - /// - ///@param days - ///@param endDate - ///@param timezoneOffset - @Get(path: '/user_usage_stats/MoviesReport') - Future _userUsageStatsMoviesReportGet({ - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - ///@param days - ///@param endDate - ///@param filter - ///@param dataType - ///@param timezoneOffset - Future userUsageStatsPlayActivityGet({ - int? days, - DateTime? endDate, - String? filter, - String? dataType, - num? timezoneOffset, - }) { - return _userUsageStatsPlayActivityGet( - days: days, - endDate: endDate, - filter: filter, - dataType: dataType, - timezoneOffset: timezoneOffset); - } - - /// - ///@param days - ///@param endDate - ///@param filter - ///@param dataType - ///@param timezoneOffset - @Get(path: '/user_usage_stats/PlayActivity') - Future _userUsageStatsPlayActivityGet({ - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('filter') String? filter, - @Query('dataType') String? dataType, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - Future>> userUsageStatsSaveBackupGet() { - return _userUsageStatsSaveBackupGet(); - } - - /// - @Get(path: '/user_usage_stats/save_backup') - Future>> _userUsageStatsSaveBackupGet(); - - /// - Future> userUsageStatsSubmitCustomQueryPost( - {required CustomQueryData? body}) { - return _userUsageStatsSubmitCustomQueryPost(body: body); - } - - /// - @Post( - path: '/user_usage_stats/submit_custom_query', - optionalBody: true, - ) - Future> _userUsageStatsSubmitCustomQueryPost( - {@Body() required CustomQueryData? body}); - - /// - Future userUsageStatsTypeFilterListGet() { - return _userUsageStatsTypeFilterListGet(); - } - - /// - @Get(path: '/user_usage_stats/type_filter_list') - Future _userUsageStatsTypeFilterListGet(); - - /// - ///@param days - ///@param endDate - ///@param timezoneOffset - Future userUsageStatsUserActivityGet({ - int? days, - DateTime? endDate, - num? timezoneOffset, - }) { - return _userUsageStatsUserActivityGet( - days: days, endDate: endDate, timezoneOffset: timezoneOffset); - } - - /// - ///@param days - ///@param endDate - ///@param timezoneOffset - @Get(path: '/user_usage_stats/user_activity') - Future _userUsageStatsUserActivityGet({ - @Query('days') int? days, - @Query('endDate') DateTime? endDate, - @Query('timezoneOffset') num? timezoneOffset, - }); - - /// - Future userUsageStatsUserListGet() { - return _userUsageStatsUserListGet(); - } - - /// - @Get(path: '/user_usage_stats/user_list') - Future _userUsageStatsUserListGet(); - - /// - ///@param id - Future> userUsageStatsUserManageAddGet({String? id}) { - return _userUsageStatsUserManageAddGet(id: id); - } - - /// - ///@param id - @Get(path: '/user_usage_stats/user_manage/add') - Future> _userUsageStatsUserManageAddGet( - {@Query('id') String? id}); - - /// - Future> userUsageStatsUserManagePruneGet() { - return _userUsageStatsUserManagePruneGet(); - } - - /// - @Get(path: '/user_usage_stats/user_manage/prune') - Future> _userUsageStatsUserManagePruneGet(); - - /// - ///@param id - Future> userUsageStatsUserManageRemoveGet( - {String? id}) { - return _userUsageStatsUserManageRemoveGet(id: id); - } - - /// - ///@param id - @Get(path: '/user_usage_stats/user_manage/remove') - Future> _userUsageStatsUserManageRemoveGet( - {@Query('id') String? id}); - ///Creates a new playlist. ///@param name The playlist name. ///@param ids The item ids. @@ -12117,6 +11979,22 @@ abstract class JellyfinOpenApi extends ChopperService { @Body() required UpdatePlaylistDto? body, }); + ///Get a playlist. + ///@param playlistId The playlist id. + Future> playlistsPlaylistIdGet( + {required String? playlistId}) { + generatedMapping.putIfAbsent( + PlaylistDto, () => PlaylistDto.fromJsonFactory); + + return _playlistsPlaylistIdGet(playlistId: playlistId); + } + + ///Get a playlist. + ///@param playlistId The playlist id. + @Get(path: '/Playlists/{playlistId}') + Future> _playlistsPlaylistIdGet( + {@Path('playlistId') required String? playlistId}); + ///Adds items to a playlist. ///@param playlistId The playlist id. ///@param ids Item id, comma delimited. @@ -13141,13 +13019,13 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param controllableByUserId Filter by sessions that a given user is allowed to remote control. ///@param deviceId Filter by device Id. ///@param activeWithinSeconds Optional. Filter by sessions that were active in the last n seconds. - Future>> sessionsGet({ + Future>> sessionsGet({ String? controllableByUserId, String? deviceId, int? activeWithinSeconds, }) { generatedMapping.putIfAbsent( - SessionInfo, () => SessionInfo.fromJsonFactory); + SessionInfoDto, () => SessionInfoDto.fromJsonFactory); return _sessionsGet( controllableByUserId: controllableByUserId, @@ -13160,7 +13038,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param deviceId Filter by device Id. ///@param activeWithinSeconds Optional. Filter by sessions that were active in the last n seconds. @Get(path: '/Sessions') - Future>> _sessionsGet({ + Future>> _sessionsGet({ @Query('controllableByUserId') String? controllableByUserId, @Query('deviceId') String? deviceId, @Query('activeWithinSeconds') int? activeWithinSeconds, @@ -13510,115 +13388,6 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('itemId') required String? itemId, }); - /// - ///@param id - Future> episodeIdIntroSkipperSegmentsGet( - {required String? id}) { - return _episodeIdIntroSkipperSegmentsGet(id: id); - } - - /// - ///@param id - @Get(path: '/Episode/{id}/IntroSkipperSegments') - Future> _episodeIdIntroSkipperSegmentsGet( - {@Path('id') required String? id}); - - /// - ///@param id - ///@param mode - Future> episodeIdIntroTimestampsGet({ - required String? id, - enums.EpisodeIdIntroTimestampsGetMode? mode, - }) { - generatedMapping.putIfAbsent(Intro, () => Intro.fromJsonFactory); - - return _episodeIdIntroTimestampsGet(id: id, mode: mode?.value?.toString()); - } - - /// - ///@param id - ///@param mode - @Get(path: '/Episode/{id}/IntroTimestamps') - Future> _episodeIdIntroTimestampsGet({ - @Path('id') required String? id, - @Query('mode') String? mode, - }); - - /// - ///@param id - ///@param mode - Future> episodeIdIntroTimestampsV1Get({ - required String? id, - enums.EpisodeIdIntroTimestampsV1GetMode? mode, - }) { - generatedMapping.putIfAbsent(Intro, () => Intro.fromJsonFactory); - - return _episodeIdIntroTimestampsV1Get( - id: id, mode: mode?.value?.toString()); - } - - /// - ///@param id - ///@param mode - @Get(path: '/Episode/{id}/IntroTimestamps/v1') - Future> _episodeIdIntroTimestampsV1Get({ - @Path('id') required String? id, - @Query('mode') String? mode, - }); - - /// - ///@param mode - Future>> introsAllGet( - {enums.IntrosAllGetMode? mode}) { - generatedMapping.putIfAbsent( - IntroWithMetadata, () => IntroWithMetadata.fromJsonFactory); - - return _introsAllGet(mode: mode?.value?.toString()); - } - - /// - ///@param mode - @Get(path: '/Intros/All') - Future>> _introsAllGet( - {@Query('mode') String? mode}); - - /// - ///@param mode - ///@param eraseCache - Future introsEraseTimestampsPost({ - enums.IntrosEraseTimestampsPostMode? mode, - bool? eraseCache, - }) { - return _introsEraseTimestampsPost( - mode: mode?.value?.toString(), eraseCache: eraseCache); - } - - /// - ///@param mode - ///@param eraseCache - @Post( - path: '/Intros/EraseTimestamps', - optionalBody: true, - ) - Future _introsEraseTimestampsPost({ - @Query('mode') String? mode, - @Query('eraseCache') bool? eraseCache, - }); - - /// - Future> - introsUserInterfaceConfigurationGet() { - generatedMapping.putIfAbsent(UserInterfaceConfiguration, - () => UserInterfaceConfiguration.fromJsonFactory); - - return _introsUserInterfaceConfigurationGet(); - } - - /// - @Get(path: '/Intros/UserInterfaceConfiguration') - Future> - _introsUserInterfaceConfigurationGet(); - ///Completes the startup wizard. Future startupCompletePost() { return _startupCompletePost(); @@ -14611,18 +14380,6 @@ abstract class JellyfinOpenApi extends ChopperService { @Get(path: '/Tmdb/ClientConfiguration') Future> _tmdbClientConfigurationGet(); - /// - Future tMDbBoxSetsRefreshPost() { - return _tMDbBoxSetsRefreshPost(); - } - - /// - @Post( - path: '/TMDbBoxSets/Refresh', - optionalBody: true, - ) - Future _tMDbBoxSetsRefreshPost(); - ///Finds movies and trailers similar to a given trailer. ///@param userId The user id supplied as query parameter; this is required when not using an API key. ///@param maxOfficialRating Optional filter by maximum official rating (PG, PG-13, TV-MA, etc). @@ -15057,121 +14814,6 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('enableImages') bool? enableImages, }); - /// - ///@param userGuid - Future traktUsersUserGuidAuthorizePost( - {required String? userGuid}) { - return _traktUsersUserGuidAuthorizePost(userGuid: userGuid); - } - - /// - ///@param userGuid - @Post( - path: '/Trakt/Users/{userGuid}/Authorize', - optionalBody: true, - ) - Future _traktUsersUserGuidAuthorizePost( - {@Path('userGuid') required String? userGuid}); - - /// - ///@param userGuid - Future> traktUsersUserGuidDeauthorizePost( - {required String? userGuid}) { - return _traktUsersUserGuidDeauthorizePost(userGuid: userGuid); - } - - /// - ///@param userGuid - @Post( - path: '/Trakt/Users/{userGuid}/Deauthorize', - optionalBody: true, - ) - Future> _traktUsersUserGuidDeauthorizePost( - {@Path('userGuid') required String? userGuid}); - - /// - ///@param userGuid - ///@param itemId - ///@param rating - Future> - traktUsersUserGuidItemsItemIdRatePost({ - required String? userGuid, - required String? itemId, - int? rating, - }) { - generatedMapping.putIfAbsent( - TraktSyncResponse, () => TraktSyncResponse.fromJsonFactory); - - return _traktUsersUserGuidItemsItemIdRatePost( - userGuid: userGuid, itemId: itemId, rating: rating); - } - - /// - ///@param userGuid - ///@param itemId - ///@param rating - @Post( - path: '/Trakt/Users/{userGuid}/Items/{itemId}/Rate', - optionalBody: true, - ) - Future> - _traktUsersUserGuidItemsItemIdRatePost({ - @Path('userGuid') required String? userGuid, - @Path('itemId') required String? itemId, - @Query('rating') int? rating, - }); - - /// - ///@param userGuid - Future traktUsersUserGuidPollAuthorizationStatusGet( - {required String? userGuid}) { - return _traktUsersUserGuidPollAuthorizationStatusGet(userGuid: userGuid); - } - - /// - ///@param userGuid - @Get(path: '/Trakt/Users/{userGuid}/PollAuthorizationStatus') - Future _traktUsersUserGuidPollAuthorizationStatusGet( - {@Path('userGuid') required String? userGuid}); - - /// - ///@param userGuid - Future>> - traktUsersUserGuidRecommendedMoviesPost({required String? userGuid}) { - generatedMapping.putIfAbsent(TraktMovie, () => TraktMovie.fromJsonFactory); - - return _traktUsersUserGuidRecommendedMoviesPost(userGuid: userGuid); - } - - /// - ///@param userGuid - @Post( - path: '/Trakt/Users/{userGuid}/RecommendedMovies', - optionalBody: true, - ) - Future>> - _traktUsersUserGuidRecommendedMoviesPost( - {@Path('userGuid') required String? userGuid}); - - /// - ///@param userGuid - Future>> - traktUsersUserGuidRecommendedShowsPost({required String? userGuid}) { - generatedMapping.putIfAbsent(TraktShow, () => TraktShow.fromJsonFactory); - - return _traktUsersUserGuidRecommendedShowsPost(userGuid: userGuid); - } - - /// - ///@param userGuid - @Post( - path: '/Trakt/Users/{userGuid}/RecommendedShows', - optionalBody: true, - ) - Future>> - _traktUsersUserGuidRecommendedShowsPost( - {@Path('userGuid') required String? userGuid}); - ///Gets a trickplay tile image. ///@param itemId The item id. ///@param width The width of a single tile. @@ -15227,15 +14869,6 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('mediaSourceId') String? mediaSourceId, }); - /// - Future> introSkipperSupportBundleGet() { - return _introSkipperSupportBundleGet(); - } - - /// - @Get(path: '/IntroSkipper/SupportBundle') - Future> _introSkipperSupportBundleGet(); - ///Gets episodes for a tv season. ///@param seriesId The series id. ///@param userId The user id. @@ -15554,6 +15187,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param maxAudioSampleRate Optional. The maximum audio sample rate. ///@param maxAudioBitDepth Optional. The maximum audio bit depth. ///@param enableRemoteMedia Optional. Whether to enable remote media. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. ///@param breakOnNonKeyFrames Optional. Whether to break on non key frames. ///@param enableRedirection Whether to enable redirection. Defaults to true. Future> audioItemIdUniversalGet({ @@ -15573,6 +15207,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? maxAudioSampleRate, int? maxAudioBitDepth, bool? enableRemoteMedia, + bool? enableAudioVbrEncoding, bool? breakOnNonKeyFrames, bool? enableRedirection, }) { @@ -15593,6 +15228,7 @@ abstract class JellyfinOpenApi extends ChopperService { maxAudioSampleRate: maxAudioSampleRate, maxAudioBitDepth: maxAudioBitDepth, enableRemoteMedia: enableRemoteMedia, + enableAudioVbrEncoding: enableAudioVbrEncoding, breakOnNonKeyFrames: breakOnNonKeyFrames, enableRedirection: enableRedirection); } @@ -15614,6 +15250,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param maxAudioSampleRate Optional. The maximum audio sample rate. ///@param maxAudioBitDepth Optional. The maximum audio bit depth. ///@param enableRemoteMedia Optional. Whether to enable remote media. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. ///@param breakOnNonKeyFrames Optional. Whether to break on non key frames. ///@param enableRedirection Whether to enable redirection. Defaults to true. @Get(path: '/Audio/{itemId}/universal') @@ -15634,6 +15271,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('maxAudioSampleRate') int? maxAudioSampleRate, @Query('maxAudioBitDepth') int? maxAudioBitDepth, @Query('enableRemoteMedia') bool? enableRemoteMedia, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, @Query('breakOnNonKeyFrames') bool? breakOnNonKeyFrames, @Query('enableRedirection') bool? enableRedirection, }); @@ -15655,6 +15293,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param maxAudioSampleRate Optional. The maximum audio sample rate. ///@param maxAudioBitDepth Optional. The maximum audio bit depth. ///@param enableRemoteMedia Optional. Whether to enable remote media. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. ///@param breakOnNonKeyFrames Optional. Whether to break on non key frames. ///@param enableRedirection Whether to enable redirection. Defaults to true. Future> audioItemIdUniversalHead({ @@ -15674,6 +15313,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? maxAudioSampleRate, int? maxAudioBitDepth, bool? enableRemoteMedia, + bool? enableAudioVbrEncoding, bool? breakOnNonKeyFrames, bool? enableRedirection, }) { @@ -15694,6 +15334,7 @@ abstract class JellyfinOpenApi extends ChopperService { maxAudioSampleRate: maxAudioSampleRate, maxAudioBitDepth: maxAudioBitDepth, enableRemoteMedia: enableRemoteMedia, + enableAudioVbrEncoding: enableAudioVbrEncoding, breakOnNonKeyFrames: breakOnNonKeyFrames, enableRedirection: enableRedirection); } @@ -15715,6 +15356,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param maxAudioSampleRate Optional. The maximum audio sample rate. ///@param maxAudioBitDepth Optional. The maximum audio bit depth. ///@param enableRemoteMedia Optional. Whether to enable remote media. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. ///@param breakOnNonKeyFrames Optional. Whether to break on non key frames. ///@param enableRedirection Whether to enable redirection. Defaults to true. @Head(path: '/Audio/{itemId}/universal') @@ -15735,6 +15377,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('maxAudioSampleRate') int? maxAudioSampleRate, @Query('maxAudioBitDepth') int? maxAudioBitDepth, @Query('enableRemoteMedia') bool? enableRemoteMedia, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, @Query('breakOnNonKeyFrames') bool? breakOnNonKeyFrames, @Query('enableRedirection') bool? enableRedirection, }); @@ -16348,7 +15991,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -16380,13 +16023,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> videosItemIdStreamGet({ required String? itemId, String? container, @@ -16439,6 +16083,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.VideosItemIdStreamGetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _videosItemIdStreamGet( itemId: itemId, @@ -16491,7 +16136,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets a video stream. @@ -16507,7 +16153,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -16539,13 +16185,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Videos/{itemId}/stream') Future> _videosItemIdStreamGet({ @Path('itemId') required String? itemId, @@ -16599,6 +16246,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets a video stream. @@ -16614,7 +16262,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -16646,13 +16294,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> videosItemIdStreamHead({ required String? itemId, String? container, @@ -16705,6 +16354,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.VideosItemIdStreamHeadContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _videosItemIdStreamHead( itemId: itemId, @@ -16757,7 +16407,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets a video stream. @@ -16773,7 +16424,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -16805,13 +16456,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Head(path: '/Videos/{itemId}/stream') Future> _videosItemIdStreamHead({ @Path('itemId') required String? itemId, @@ -16865,6 +16517,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets a video stream. @@ -16880,7 +16533,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -16912,13 +16565,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> videosItemIdStreamContainerGet({ required String? itemId, required String? container, @@ -16971,6 +16625,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.VideosItemIdStreamContainerGetContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _videosItemIdStreamContainerGet( itemId: itemId, @@ -17023,7 +16678,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets a video stream. @@ -17039,7 +16695,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -17071,13 +16727,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Get(path: '/Videos/{itemId}/stream.{container}') Future> _videosItemIdStreamContainerGet({ @Path('itemId') required String? itemId, @@ -17131,6 +16788,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Gets a video stream. @@ -17146,7 +16804,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -17178,13 +16836,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. Future> videosItemIdStreamContainerHead({ required String? itemId, required String? container, @@ -17237,6 +16896,7 @@ abstract class JellyfinOpenApi extends ChopperService { int? videoStreamIndex, enums.VideosItemIdStreamContainerHeadContext? context, Object? streamOptions, + bool? enableAudioVbrEncoding, }) { return _videosItemIdStreamContainerHead( itemId: itemId, @@ -17289,7 +16949,8 @@ abstract class JellyfinOpenApi extends ChopperService { audioStreamIndex: audioStreamIndex, videoStreamIndex: videoStreamIndex, context: context?.value?.toString(), - streamOptions: streamOptions); + streamOptions: streamOptions, + enableAudioVbrEncoding: enableAudioVbrEncoding); } ///Gets a video stream. @@ -17305,7 +16966,7 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param minSegments The minimum number of segments. ///@param mediaSourceId The media version id, if playing an alternate version. ///@param deviceId The device id of the client requesting. Used to stop encoding processes when needed. - ///@param audioCodec Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma. + ///@param audioCodec Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. ///@param enableAutoStreamCopy Whether or not to allow automatic stream copy if requested values match the original source. Defaults to true. ///@param allowVideoStreamCopy Whether or not to allow copying of the video stream url. ///@param allowAudioStreamCopy Whether or not to allow copying of the audio stream url. @@ -17337,13 +16998,14 @@ abstract class JellyfinOpenApi extends ChopperService { ///@param cpuCoreLimit Optional. The limit of how many cpu cores to use. ///@param liveStreamId The live stream id. ///@param enableMpegtsM2TsMode Optional. Whether to enable the MpegtsM2Ts mode. - ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv. + ///@param videoCodec Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. ///@param subtitleCodec Optional. Specify a subtitle codec to encode to. ///@param transcodeReasons Optional. The transcoding reason. ///@param audioStreamIndex Optional. The index of the audio stream to use. If omitted the first audio stream will be used. ///@param videoStreamIndex Optional. The index of the video stream to use. If omitted the first video stream will be used. ///@param context Optional. The MediaBrowser.Model.Dlna.EncodingContext. ///@param streamOptions Optional. The streaming options. + ///@param enableAudioVbrEncoding Optional. Whether to enable Audio Encoding. @Head(path: '/Videos/{itemId}/stream.{container}') Future> _videosItemIdStreamContainerHead({ @Path('itemId') required String? itemId, @@ -17397,6 +17059,7 @@ abstract class JellyfinOpenApi extends ChopperService { @Query('videoStreamIndex') int? videoStreamIndex, @Query('context') String? context, @Query('streamOptions') Object? streamOptions, + @Query('enableAudioVbrEncoding') bool? enableAudioVbrEncoding, }); ///Merges videos into a single record. @@ -17415,96 +17078,6 @@ abstract class JellyfinOpenApi extends ChopperService { Future _videosMergeVersionsPost( {@Query('ids') required List? ids}); - /// - ///@param id - Future>> introsEpisodeIdChromaprintGet( - {required String? id}) { - return _introsEpisodeIdChromaprintGet(id: id); - } - - /// - ///@param id - @Get(path: '/Intros/Episode/{Id}/Chromaprint') - Future>> _introsEpisodeIdChromaprintGet( - {@Path('id') required String? id}); - - /// - ///@param id - Future introsEpisodeIdUpdateIntroTimestampsPost({ - required String? id, - required Intro? body, - }) { - return _introsEpisodeIdUpdateIntroTimestampsPost(id: id, body: body); - } - - /// - ///@param id - @Post( - path: '/Intros/Episode/{Id}/UpdateIntroTimestamps', - optionalBody: true, - ) - Future _introsEpisodeIdUpdateIntroTimestampsPost({ - @Path('id') required String? id, - @Body() required Intro? body, - }); - - /// - ///@param series - ///@param season - Future>> - introsShowSeriesSeasonGet({ - required String? series, - required String? season, - }) { - generatedMapping.putIfAbsent( - EpisodeVisualization, () => EpisodeVisualization.fromJsonFactory); - - return _introsShowSeriesSeasonGet(series: series, season: season); - } - - /// - ///@param series - ///@param season - @Get(path: '/Intros/Show/{Series}/{Season}') - Future>> - _introsShowSeriesSeasonGet({ - @Path('series') required String? series, - @Path('season') required String? season, - }); - - /// - ///@param series - ///@param season - ///@param eraseCache - Future introsShowSeriesSeasonDelete({ - required String? series, - required String? season, - bool? eraseCache, - }) { - return _introsShowSeriesSeasonDelete( - series: series, season: season, eraseCache: eraseCache); - } - - /// - ///@param series - ///@param season - ///@param eraseCache - @Delete(path: '/Intros/Show/{Series}/{Season}') - Future _introsShowSeriesSeasonDelete({ - @Path('series') required String? series, - @Path('season') required String? season, - @Query('eraseCache') bool? eraseCache, - }); - - /// - Future> introsShowsGet() { - return _introsShowsGet(); - } - - /// - @Get(path: '/Intros/Shows') - Future> _introsShowsGet(); - ///Get years. ///@param startIndex Skips over a given number of items within the results. Use for paging. ///@param limit Optional. The maximum number of records to return. @@ -19132,7 +18705,7 @@ class AuthenticationResult { @JsonKey(name: 'User', includeIfNull: false) final UserDto? user; @JsonKey(name: 'SessionInfo', includeIfNull: false) - final SessionInfo? sessionInfo; + final SessionInfoDto? sessionInfo; @JsonKey(name: 'AccessToken', includeIfNull: false) final String? accessToken; @JsonKey(name: 'ServerId', includeIfNull: false) @@ -19171,7 +18744,7 @@ class AuthenticationResult { extension $AuthenticationResultExtension on AuthenticationResult { AuthenticationResult copyWith( {UserDto? user, - SessionInfo? sessionInfo, + SessionInfoDto? sessionInfo, String? accessToken, String? serverId}) { return AuthenticationResult( @@ -19183,7 +18756,7 @@ extension $AuthenticationResultExtension on AuthenticationResult { AuthenticationResult copyWithWrapped( {Wrapped? user, - Wrapped? sessionInfo, + Wrapped? sessionInfo, Wrapped? accessToken, Wrapped? serverId}) { return AuthenticationResult( @@ -22153,176 +21726,6 @@ extension $ChapterInfoExtension on ChapterInfo { } } -@JsonSerializable(explicitToJson: true) -class ClientCapabilities { - const ClientCapabilities({ - this.playableMediaTypes, - this.supportedCommands, - this.supportsMediaControl, - this.supportsPersistentIdentifier, - this.deviceProfile, - this.appStoreUrl, - this.iconUrl, - this.supportsContentUploading, - this.supportsSync, - }); - - factory ClientCapabilities.fromJson(Map json) => - _$ClientCapabilitiesFromJson(json); - - static const toJsonFactory = _$ClientCapabilitiesToJson; - Map toJson() => _$ClientCapabilitiesToJson(this); - - @JsonKey( - name: 'PlayableMediaTypes', - includeIfNull: false, - toJson: mediaTypeListToJson, - fromJson: mediaTypeListFromJson, - ) - final List? playableMediaTypes; - @JsonKey( - name: 'SupportedCommands', - includeIfNull: false, - toJson: generalCommandTypeListToJson, - fromJson: generalCommandTypeListFromJson, - ) - final List? supportedCommands; - @JsonKey(name: 'SupportsMediaControl', includeIfNull: false) - final bool? supportsMediaControl; - @JsonKey(name: 'SupportsPersistentIdentifier', includeIfNull: false) - final bool? supportsPersistentIdentifier; - @JsonKey(name: 'DeviceProfile', includeIfNull: false) - final DeviceProfile? deviceProfile; - @JsonKey(name: 'AppStoreUrl', includeIfNull: false) - final String? appStoreUrl; - @JsonKey(name: 'IconUrl', includeIfNull: false) - final String? iconUrl; - @JsonKey( - name: 'SupportsContentUploading', - includeIfNull: false, - defaultValue: false) - @deprecated - final bool? supportsContentUploading; - @JsonKey(name: 'SupportsSync', includeIfNull: false, defaultValue: false) - @deprecated - final bool? supportsSync; - static const fromJsonFactory = _$ClientCapabilitiesFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is ClientCapabilities && - (identical(other.playableMediaTypes, playableMediaTypes) || - const DeepCollectionEquality() - .equals(other.playableMediaTypes, playableMediaTypes)) && - (identical(other.supportedCommands, supportedCommands) || - const DeepCollectionEquality() - .equals(other.supportedCommands, supportedCommands)) && - (identical(other.supportsMediaControl, supportsMediaControl) || - const DeepCollectionEquality().equals( - other.supportsMediaControl, supportsMediaControl)) && - (identical(other.supportsPersistentIdentifier, - supportsPersistentIdentifier) || - const DeepCollectionEquality().equals( - other.supportsPersistentIdentifier, - supportsPersistentIdentifier)) && - (identical(other.deviceProfile, deviceProfile) || - const DeepCollectionEquality() - .equals(other.deviceProfile, deviceProfile)) && - (identical(other.appStoreUrl, appStoreUrl) || - const DeepCollectionEquality() - .equals(other.appStoreUrl, appStoreUrl)) && - (identical(other.iconUrl, iconUrl) || - const DeepCollectionEquality() - .equals(other.iconUrl, iconUrl)) && - (identical( - other.supportsContentUploading, supportsContentUploading) || - const DeepCollectionEquality().equals( - other.supportsContentUploading, - supportsContentUploading)) && - (identical(other.supportsSync, supportsSync) || - const DeepCollectionEquality() - .equals(other.supportsSync, supportsSync))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(playableMediaTypes) ^ - const DeepCollectionEquality().hash(supportedCommands) ^ - const DeepCollectionEquality().hash(supportsMediaControl) ^ - const DeepCollectionEquality().hash(supportsPersistentIdentifier) ^ - const DeepCollectionEquality().hash(deviceProfile) ^ - const DeepCollectionEquality().hash(appStoreUrl) ^ - const DeepCollectionEquality().hash(iconUrl) ^ - const DeepCollectionEquality().hash(supportsContentUploading) ^ - const DeepCollectionEquality().hash(supportsSync) ^ - runtimeType.hashCode; -} - -extension $ClientCapabilitiesExtension on ClientCapabilities { - ClientCapabilities copyWith( - {List? playableMediaTypes, - List? supportedCommands, - bool? supportsMediaControl, - bool? supportsPersistentIdentifier, - DeviceProfile? deviceProfile, - String? appStoreUrl, - String? iconUrl, - bool? supportsContentUploading, - bool? supportsSync}) { - return ClientCapabilities( - playableMediaTypes: playableMediaTypes ?? this.playableMediaTypes, - supportedCommands: supportedCommands ?? this.supportedCommands, - supportsMediaControl: supportsMediaControl ?? this.supportsMediaControl, - supportsPersistentIdentifier: - supportsPersistentIdentifier ?? this.supportsPersistentIdentifier, - deviceProfile: deviceProfile ?? this.deviceProfile, - appStoreUrl: appStoreUrl ?? this.appStoreUrl, - iconUrl: iconUrl ?? this.iconUrl, - supportsContentUploading: - supportsContentUploading ?? this.supportsContentUploading, - supportsSync: supportsSync ?? this.supportsSync); - } - - ClientCapabilities copyWithWrapped( - {Wrapped?>? playableMediaTypes, - Wrapped?>? supportedCommands, - Wrapped? supportsMediaControl, - Wrapped? supportsPersistentIdentifier, - Wrapped? deviceProfile, - Wrapped? appStoreUrl, - Wrapped? iconUrl, - Wrapped? supportsContentUploading, - Wrapped? supportsSync}) { - return ClientCapabilities( - playableMediaTypes: (playableMediaTypes != null - ? playableMediaTypes.value - : this.playableMediaTypes), - supportedCommands: (supportedCommands != null - ? supportedCommands.value - : this.supportedCommands), - supportsMediaControl: (supportsMediaControl != null - ? supportsMediaControl.value - : this.supportsMediaControl), - supportsPersistentIdentifier: (supportsPersistentIdentifier != null - ? supportsPersistentIdentifier.value - : this.supportsPersistentIdentifier), - deviceProfile: - (deviceProfile != null ? deviceProfile.value : this.deviceProfile), - appStoreUrl: - (appStoreUrl != null ? appStoreUrl.value : this.appStoreUrl), - iconUrl: (iconUrl != null ? iconUrl.value : this.iconUrl), - supportsContentUploading: (supportsContentUploading != null - ? supportsContentUploading.value - : this.supportsContentUploading), - supportsSync: - (supportsSync != null ? supportsSync.value : this.supportsSync)); - } -} - @JsonSerializable(explicitToJson: true) class ClientCapabilitiesDto { const ClientCapabilitiesDto({ @@ -22333,8 +21736,6 @@ class ClientCapabilitiesDto { this.deviceProfile, this.appStoreUrl, this.iconUrl, - this.supportsContentUploading, - this.supportsSync, }); factory ClientCapabilitiesDto.fromJson(Map json) => @@ -22367,15 +21768,6 @@ class ClientCapabilitiesDto { final String? appStoreUrl; @JsonKey(name: 'IconUrl', includeIfNull: false) final String? iconUrl; - @JsonKey( - name: 'SupportsContentUploading', - includeIfNull: false, - defaultValue: false) - @deprecated - final bool? supportsContentUploading; - @JsonKey(name: 'SupportsSync', includeIfNull: false, defaultValue: false) - @deprecated - final bool? supportsSync; static const fromJsonFactory = _$ClientCapabilitiesDtoFromJson; @override @@ -22403,16 +21795,7 @@ class ClientCapabilitiesDto { const DeepCollectionEquality() .equals(other.appStoreUrl, appStoreUrl)) && (identical(other.iconUrl, iconUrl) || - const DeepCollectionEquality() - .equals(other.iconUrl, iconUrl)) && - (identical( - other.supportsContentUploading, supportsContentUploading) || - const DeepCollectionEquality().equals( - other.supportsContentUploading, - supportsContentUploading)) && - (identical(other.supportsSync, supportsSync) || - const DeepCollectionEquality() - .equals(other.supportsSync, supportsSync))); + const DeepCollectionEquality().equals(other.iconUrl, iconUrl))); } @override @@ -22427,8 +21810,6 @@ class ClientCapabilitiesDto { const DeepCollectionEquality().hash(deviceProfile) ^ const DeepCollectionEquality().hash(appStoreUrl) ^ const DeepCollectionEquality().hash(iconUrl) ^ - const DeepCollectionEquality().hash(supportsContentUploading) ^ - const DeepCollectionEquality().hash(supportsSync) ^ runtimeType.hashCode; } @@ -22440,9 +21821,7 @@ extension $ClientCapabilitiesDtoExtension on ClientCapabilitiesDto { bool? supportsPersistentIdentifier, DeviceProfile? deviceProfile, String? appStoreUrl, - String? iconUrl, - bool? supportsContentUploading, - bool? supportsSync}) { + String? iconUrl}) { return ClientCapabilitiesDto( playableMediaTypes: playableMediaTypes ?? this.playableMediaTypes, supportedCommands: supportedCommands ?? this.supportedCommands, @@ -22451,10 +21830,7 @@ extension $ClientCapabilitiesDtoExtension on ClientCapabilitiesDto { supportsPersistentIdentifier ?? this.supportsPersistentIdentifier, deviceProfile: deviceProfile ?? this.deviceProfile, appStoreUrl: appStoreUrl ?? this.appStoreUrl, - iconUrl: iconUrl ?? this.iconUrl, - supportsContentUploading: - supportsContentUploading ?? this.supportsContentUploading, - supportsSync: supportsSync ?? this.supportsSync); + iconUrl: iconUrl ?? this.iconUrl); } ClientCapabilitiesDto copyWithWrapped( @@ -22464,9 +21840,7 @@ extension $ClientCapabilitiesDtoExtension on ClientCapabilitiesDto { Wrapped? supportsPersistentIdentifier, Wrapped? deviceProfile, Wrapped? appStoreUrl, - Wrapped? iconUrl, - Wrapped? supportsContentUploading, - Wrapped? supportsSync}) { + Wrapped? iconUrl}) { return ClientCapabilitiesDto( playableMediaTypes: (playableMediaTypes != null ? playableMediaTypes.value @@ -22484,12 +21858,7 @@ extension $ClientCapabilitiesDtoExtension on ClientCapabilitiesDto { (deviceProfile != null ? deviceProfile.value : this.deviceProfile), appStoreUrl: (appStoreUrl != null ? appStoreUrl.value : this.appStoreUrl), - iconUrl: (iconUrl != null ? iconUrl.value : this.iconUrl), - supportsContentUploading: (supportsContentUploading != null - ? supportsContentUploading.value - : this.supportsContentUploading), - supportsSync: - (supportsSync != null ? supportsSync.value : this.supportsSync)); + iconUrl: (iconUrl != null ? iconUrl.value : this.iconUrl)); } } @@ -22546,6 +21915,7 @@ class CodecProfile { this.applyConditions, this.codec, this.container, + this.subContainer, }); factory CodecProfile.fromJson(Map json) => @@ -22575,6 +21945,8 @@ class CodecProfile { final String? codec; @JsonKey(name: 'Container', includeIfNull: false) final String? container; + @JsonKey(name: 'SubContainer', includeIfNull: false) + final String? subContainer; static const fromJsonFactory = _$CodecProfileFromJson; @override @@ -22593,7 +21965,10 @@ class CodecProfile { const DeepCollectionEquality().equals(other.codec, codec)) && (identical(other.container, container) || const DeepCollectionEquality() - .equals(other.container, container))); + .equals(other.container, container)) && + (identical(other.subContainer, subContainer) || + const DeepCollectionEquality() + .equals(other.subContainer, subContainer))); } @override @@ -22606,6 +21981,7 @@ class CodecProfile { const DeepCollectionEquality().hash(applyConditions) ^ const DeepCollectionEquality().hash(codec) ^ const DeepCollectionEquality().hash(container) ^ + const DeepCollectionEquality().hash(subContainer) ^ runtimeType.hashCode; } @@ -22615,13 +21991,15 @@ extension $CodecProfileExtension on CodecProfile { List? conditions, List? applyConditions, String? codec, - String? container}) { + String? container, + String? subContainer}) { return CodecProfile( type: type ?? this.type, conditions: conditions ?? this.conditions, applyConditions: applyConditions ?? this.applyConditions, codec: codec ?? this.codec, - container: container ?? this.container); + container: container ?? this.container, + subContainer: subContainer ?? this.subContainer); } CodecProfile copyWithWrapped( @@ -22629,7 +22007,8 @@ extension $CodecProfileExtension on CodecProfile { Wrapped?>? conditions, Wrapped?>? applyConditions, Wrapped? codec, - Wrapped? container}) { + Wrapped? container, + Wrapped? subContainer}) { return CodecProfile( type: (type != null ? type.value : this.type), conditions: (conditions != null ? conditions.value : this.conditions), @@ -22637,7 +22016,9 @@ extension $CodecProfileExtension on CodecProfile { ? applyConditions.value : this.applyConditions), codec: (codec != null ? codec.value : this.codec), - container: (container != null ? container.value : this.container)); + container: (container != null ? container.value : this.container), + subContainer: + (subContainer != null ? subContainer.value : this.subContainer)); } } @@ -22914,6 +22295,7 @@ class ContainerProfile { this.type, this.conditions, this.container, + this.subContainer, }); factory ContainerProfile.fromJson(Map json) => @@ -22936,6 +22318,8 @@ class ContainerProfile { final List? conditions; @JsonKey(name: 'Container', includeIfNull: false) final String? container; + @JsonKey(name: 'SubContainer', includeIfNull: false) + final String? subContainer; static const fromJsonFactory = _$ContainerProfileFromJson; @override @@ -22949,7 +22333,10 @@ class ContainerProfile { .equals(other.conditions, conditions)) && (identical(other.container, container) || const DeepCollectionEquality() - .equals(other.container, container))); + .equals(other.container, container)) && + (identical(other.subContainer, subContainer) || + const DeepCollectionEquality() + .equals(other.subContainer, subContainer))); } @override @@ -22960,6 +22347,7 @@ class ContainerProfile { const DeepCollectionEquality().hash(type) ^ const DeepCollectionEquality().hash(conditions) ^ const DeepCollectionEquality().hash(container) ^ + const DeepCollectionEquality().hash(subContainer) ^ runtimeType.hashCode; } @@ -22967,21 +22355,26 @@ extension $ContainerProfileExtension on ContainerProfile { ContainerProfile copyWith( {enums.DlnaProfileType? type, List? conditions, - String? container}) { + String? container, + String? subContainer}) { return ContainerProfile( type: type ?? this.type, conditions: conditions ?? this.conditions, - container: container ?? this.container); + container: container ?? this.container, + subContainer: subContainer ?? this.subContainer); } ContainerProfile copyWithWrapped( {Wrapped? type, Wrapped?>? conditions, - Wrapped? container}) { + Wrapped? container, + Wrapped? subContainer}) { return ContainerProfile( type: (type != null ? type.value : this.type), conditions: (conditions != null ? conditions.value : this.conditions), - container: (container != null ? container.value : this.container)); + container: (container != null ? container.value : this.container), + subContainer: + (subContainer != null ? subContainer.value : this.subContainer)); } } @@ -23344,65 +22737,6 @@ extension $CultureDtoExtension on CultureDto { } } -@JsonSerializable(explicitToJson: true) -class CustomQueryData { - const CustomQueryData({ - this.customQueryString, - this.replaceUserId, - }); - - factory CustomQueryData.fromJson(Map json) => - _$CustomQueryDataFromJson(json); - - static const toJsonFactory = _$CustomQueryDataToJson; - Map toJson() => _$CustomQueryDataToJson(this); - - @JsonKey(name: 'CustomQueryString', includeIfNull: false) - final String? customQueryString; - @JsonKey(name: 'ReplaceUserId', includeIfNull: false) - final bool? replaceUserId; - static const fromJsonFactory = _$CustomQueryDataFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is CustomQueryData && - (identical(other.customQueryString, customQueryString) || - const DeepCollectionEquality() - .equals(other.customQueryString, customQueryString)) && - (identical(other.replaceUserId, replaceUserId) || - const DeepCollectionEquality() - .equals(other.replaceUserId, replaceUserId))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(customQueryString) ^ - const DeepCollectionEquality().hash(replaceUserId) ^ - runtimeType.hashCode; -} - -extension $CustomQueryDataExtension on CustomQueryData { - CustomQueryData copyWith({String? customQueryString, bool? replaceUserId}) { - return CustomQueryData( - customQueryString: customQueryString ?? this.customQueryString, - replaceUserId: replaceUserId ?? this.replaceUserId); - } - - CustomQueryData copyWithWrapped( - {Wrapped? customQueryString, Wrapped? replaceUserId}) { - return CustomQueryData( - customQueryString: (customQueryString != null - ? customQueryString.value - : this.customQueryString), - replaceUserId: - (replaceUserId != null ? replaceUserId.value : this.replaceUserId)); - } -} - @JsonSerializable(explicitToJson: true) class DefaultDirectoryBrowserInfoDto { const DefaultDirectoryBrowserInfoDto({ @@ -23448,8 +22782,8 @@ extension $DefaultDirectoryBrowserInfoDtoExtension } @JsonSerializable(explicitToJson: true) -class DeviceInfo { - const DeviceInfo({ +class DeviceInfoDto { + const DeviceInfoDto({ this.name, this.customName, this.accessToken, @@ -23463,11 +22797,11 @@ class DeviceInfo { this.iconUrl, }); - factory DeviceInfo.fromJson(Map json) => - _$DeviceInfoFromJson(json); + factory DeviceInfoDto.fromJson(Map json) => + _$DeviceInfoDtoFromJson(json); - static const toJsonFactory = _$DeviceInfoToJson; - Map toJson() => _$DeviceInfoToJson(this); + static const toJsonFactory = _$DeviceInfoDtoToJson; + Map toJson() => _$DeviceInfoDtoToJson(this); @JsonKey(name: 'Name', includeIfNull: false) final String? name; @@ -23488,15 +22822,15 @@ class DeviceInfo { @JsonKey(name: 'DateLastActivity', includeIfNull: false) final DateTime? dateLastActivity; @JsonKey(name: 'Capabilities', includeIfNull: false) - final ClientCapabilities? capabilities; + final ClientCapabilitiesDto? capabilities; @JsonKey(name: 'IconUrl', includeIfNull: false) final String? iconUrl; - static const fromJsonFactory = _$DeviceInfoFromJson; + static const fromJsonFactory = _$DeviceInfoDtoFromJson; @override bool operator ==(Object other) { return identical(this, other) || - (other is DeviceInfo && + (other is DeviceInfoDto && (identical(other.name, name) || const DeepCollectionEquality().equals(other.name, name)) && (identical(other.customName, customName) || @@ -23548,8 +22882,8 @@ class DeviceInfo { runtimeType.hashCode; } -extension $DeviceInfoExtension on DeviceInfo { - DeviceInfo copyWith( +extension $DeviceInfoDtoExtension on DeviceInfoDto { + DeviceInfoDto copyWith( {String? name, String? customName, String? accessToken, @@ -23559,9 +22893,9 @@ extension $DeviceInfoExtension on DeviceInfo { String? appVersion, String? lastUserId, DateTime? dateLastActivity, - ClientCapabilities? capabilities, + ClientCapabilitiesDto? capabilities, String? iconUrl}) { - return DeviceInfo( + return DeviceInfoDto( name: name ?? this.name, customName: customName ?? this.customName, accessToken: accessToken ?? this.accessToken, @@ -23575,7 +22909,7 @@ extension $DeviceInfoExtension on DeviceInfo { iconUrl: iconUrl ?? this.iconUrl); } - DeviceInfo copyWithWrapped( + DeviceInfoDto copyWithWrapped( {Wrapped? name, Wrapped? customName, Wrapped? accessToken, @@ -23585,9 +22919,9 @@ extension $DeviceInfoExtension on DeviceInfo { Wrapped? appVersion, Wrapped? lastUserId, Wrapped? dateLastActivity, - Wrapped? capabilities, + Wrapped? capabilities, Wrapped? iconUrl}) { - return DeviceInfo( + return DeviceInfoDto( name: (name != null ? name.value : this.name), customName: (customName != null ? customName.value : this.customName), accessToken: @@ -23608,31 +22942,31 @@ extension $DeviceInfoExtension on DeviceInfo { } @JsonSerializable(explicitToJson: true) -class DeviceInfoQueryResult { - const DeviceInfoQueryResult({ +class DeviceInfoDtoQueryResult { + const DeviceInfoDtoQueryResult({ this.items, this.totalRecordCount, this.startIndex, }); - factory DeviceInfoQueryResult.fromJson(Map json) => - _$DeviceInfoQueryResultFromJson(json); + factory DeviceInfoDtoQueryResult.fromJson(Map json) => + _$DeviceInfoDtoQueryResultFromJson(json); - static const toJsonFactory = _$DeviceInfoQueryResultToJson; - Map toJson() => _$DeviceInfoQueryResultToJson(this); + static const toJsonFactory = _$DeviceInfoDtoQueryResultToJson; + Map toJson() => _$DeviceInfoDtoQueryResultToJson(this); - @JsonKey(name: 'Items', includeIfNull: false, defaultValue: []) - final List? items; + @JsonKey(name: 'Items', includeIfNull: false, defaultValue: []) + final List? items; @JsonKey(name: 'TotalRecordCount', includeIfNull: false) final int? totalRecordCount; @JsonKey(name: 'StartIndex', includeIfNull: false) final int? startIndex; - static const fromJsonFactory = _$DeviceInfoQueryResultFromJson; + static const fromJsonFactory = _$DeviceInfoDtoQueryResultFromJson; @override bool operator ==(Object other) { return identical(this, other) || - (other is DeviceInfoQueryResult && + (other is DeviceInfoDtoQueryResult && (identical(other.items, items) || const DeepCollectionEquality().equals(other.items, items)) && (identical(other.totalRecordCount, totalRecordCount) || @@ -23654,20 +22988,20 @@ class DeviceInfoQueryResult { runtimeType.hashCode; } -extension $DeviceInfoQueryResultExtension on DeviceInfoQueryResult { - DeviceInfoQueryResult copyWith( - {List? items, int? totalRecordCount, int? startIndex}) { - return DeviceInfoQueryResult( +extension $DeviceInfoDtoQueryResultExtension on DeviceInfoDtoQueryResult { + DeviceInfoDtoQueryResult copyWith( + {List? items, int? totalRecordCount, int? startIndex}) { + return DeviceInfoDtoQueryResult( items: items ?? this.items, totalRecordCount: totalRecordCount ?? this.totalRecordCount, startIndex: startIndex ?? this.startIndex); } - DeviceInfoQueryResult copyWithWrapped( - {Wrapped?>? items, + DeviceInfoDtoQueryResult copyWithWrapped( + {Wrapped?>? items, Wrapped? totalRecordCount, Wrapped? startIndex}) { - return DeviceInfoQueryResult( + return DeviceInfoDtoQueryResult( items: (items != null ? items.value : this.items), totalRecordCount: (totalRecordCount != null ? totalRecordCount.value @@ -23676,72 +23010,6 @@ extension $DeviceInfoQueryResultExtension on DeviceInfoQueryResult { } } -@JsonSerializable(explicitToJson: true) -class DeviceOptions { - const DeviceOptions({ - this.id, - this.deviceId, - this.customName, - }); - - factory DeviceOptions.fromJson(Map json) => - _$DeviceOptionsFromJson(json); - - static const toJsonFactory = _$DeviceOptionsToJson; - Map toJson() => _$DeviceOptionsToJson(this); - - @JsonKey(name: 'Id', includeIfNull: false) - final int? id; - @JsonKey(name: 'DeviceId', includeIfNull: false) - final String? deviceId; - @JsonKey(name: 'CustomName', includeIfNull: false) - final String? customName; - static const fromJsonFactory = _$DeviceOptionsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is DeviceOptions && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.deviceId, deviceId) || - const DeepCollectionEquality() - .equals(other.deviceId, deviceId)) && - (identical(other.customName, customName) || - const DeepCollectionEquality() - .equals(other.customName, customName))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(deviceId) ^ - const DeepCollectionEquality().hash(customName) ^ - runtimeType.hashCode; -} - -extension $DeviceOptionsExtension on DeviceOptions { - DeviceOptions copyWith({int? id, String? deviceId, String? customName}) { - return DeviceOptions( - id: id ?? this.id, - deviceId: deviceId ?? this.deviceId, - customName: customName ?? this.customName); - } - - DeviceOptions copyWithWrapped( - {Wrapped? id, - Wrapped? deviceId, - Wrapped? customName}) { - return DeviceOptions( - id: (id != null ? id.value : this.id), - deviceId: (deviceId != null ? deviceId.value : this.deviceId), - customName: (customName != null ? customName.value : this.customName)); - } -} - @JsonSerializable(explicitToJson: true) class DeviceOptionsDto { const DeviceOptionsDto({ @@ -24316,6 +23584,7 @@ class EncodingOptions { this.encoderAppPath, this.encoderAppPathDisplay, this.vaapiDevice, + this.qsvDevice, this.enableTonemapping, this.enableVppTonemapping, this.enableVideoToolboxTonemapping, @@ -24334,6 +23603,8 @@ class EncodingOptions { this.deinterlaceMethod, this.enableDecodingColorDepth10Hevc, this.enableDecodingColorDepth10Vp9, + this.enableDecodingColorDepth10HevcRext, + this.enableDecodingColorDepth12HevcRext, this.enableEnhancedNvdecDecoder, this.preferSystemNativeHwDecoder, this.enableIntelLowPowerH264HwEncoder, @@ -24381,26 +23652,48 @@ class EncodingOptions { final bool? enableSegmentDeletion; @JsonKey(name: 'SegmentKeepSeconds', includeIfNull: false) final int? segmentKeepSeconds; - @JsonKey(name: 'HardwareAccelerationType', includeIfNull: false) - final String? hardwareAccelerationType; + @JsonKey( + name: 'HardwareAccelerationType', + includeIfNull: false, + toJson: hardwareAccelerationTypeNullableToJson, + fromJson: hardwareAccelerationTypeNullableFromJson, + ) + final enums.HardwareAccelerationType? hardwareAccelerationType; @JsonKey(name: 'EncoderAppPath', includeIfNull: false) final String? encoderAppPath; @JsonKey(name: 'EncoderAppPathDisplay', includeIfNull: false) final String? encoderAppPathDisplay; @JsonKey(name: 'VaapiDevice', includeIfNull: false) final String? vaapiDevice; + @JsonKey(name: 'QsvDevice', includeIfNull: false) + final String? qsvDevice; @JsonKey(name: 'EnableTonemapping', includeIfNull: false) final bool? enableTonemapping; @JsonKey(name: 'EnableVppTonemapping', includeIfNull: false) final bool? enableVppTonemapping; @JsonKey(name: 'EnableVideoToolboxTonemapping', includeIfNull: false) final bool? enableVideoToolboxTonemapping; - @JsonKey(name: 'TonemappingAlgorithm', includeIfNull: false) - final String? tonemappingAlgorithm; - @JsonKey(name: 'TonemappingMode', includeIfNull: false) - final String? tonemappingMode; - @JsonKey(name: 'TonemappingRange', includeIfNull: false) - final String? tonemappingRange; + @JsonKey( + name: 'TonemappingAlgorithm', + includeIfNull: false, + toJson: tonemappingAlgorithmNullableToJson, + fromJson: tonemappingAlgorithmNullableFromJson, + ) + final enums.TonemappingAlgorithm? tonemappingAlgorithm; + @JsonKey( + name: 'TonemappingMode', + includeIfNull: false, + toJson: tonemappingModeNullableToJson, + fromJson: tonemappingModeNullableFromJson, + ) + final enums.TonemappingMode? tonemappingMode; + @JsonKey( + name: 'TonemappingRange', + includeIfNull: false, + toJson: tonemappingRangeNullableToJson, + fromJson: tonemappingRangeNullableFromJson, + ) + final enums.TonemappingRange? tonemappingRange; @JsonKey(name: 'TonemappingDesat', includeIfNull: false) final double? tonemappingDesat; @JsonKey(name: 'TonemappingPeak', includeIfNull: false) @@ -24415,16 +23708,30 @@ class EncodingOptions { final int? h264Crf; @JsonKey(name: 'H265Crf', includeIfNull: false) final int? h265Crf; - @JsonKey(name: 'EncoderPreset', includeIfNull: false) - final String? encoderPreset; + @JsonKey( + name: 'EncoderPreset', + includeIfNull: false, + toJson: encoderPresetNullableToJson, + fromJson: encoderPresetNullableFromJson, + ) + final enums.EncoderPreset? encoderPreset; @JsonKey(name: 'DeinterlaceDoubleRate', includeIfNull: false) final bool? deinterlaceDoubleRate; - @JsonKey(name: 'DeinterlaceMethod', includeIfNull: false) - final String? deinterlaceMethod; + @JsonKey( + name: 'DeinterlaceMethod', + includeIfNull: false, + toJson: deinterlaceMethodNullableToJson, + fromJson: deinterlaceMethodNullableFromJson, + ) + final enums.DeinterlaceMethod? deinterlaceMethod; @JsonKey(name: 'EnableDecodingColorDepth10Hevc', includeIfNull: false) final bool? enableDecodingColorDepth10Hevc; @JsonKey(name: 'EnableDecodingColorDepth10Vp9', includeIfNull: false) final bool? enableDecodingColorDepth10Vp9; + @JsonKey(name: 'EnableDecodingColorDepth10HevcRext', includeIfNull: false) + final bool? enableDecodingColorDepth10HevcRext; + @JsonKey(name: 'EnableDecodingColorDepth12HevcRext', includeIfNull: false) + final bool? enableDecodingColorDepth12HevcRext; @JsonKey(name: 'EnableEnhancedNvdecDecoder', includeIfNull: false) final bool? enableEnhancedNvdecDecoder; @JsonKey(name: 'PreferSystemNativeHwDecoder', includeIfNull: false) @@ -24506,15 +23813,16 @@ class EncodingOptions { (identical(other.vaapiDevice, vaapiDevice) || const DeepCollectionEquality() .equals(other.vaapiDevice, vaapiDevice)) && + (identical(other.qsvDevice, qsvDevice) || + const DeepCollectionEquality() + .equals(other.qsvDevice, qsvDevice)) && (identical(other.enableTonemapping, enableTonemapping) || const DeepCollectionEquality() .equals(other.enableTonemapping, enableTonemapping)) && (identical(other.enableVppTonemapping, enableVppTonemapping) || const DeepCollectionEquality().equals( other.enableVppTonemapping, enableVppTonemapping)) && - (identical(other.enableVideoToolboxTonemapping, enableVideoToolboxTonemapping) || - const DeepCollectionEquality() - .equals(other.enableVideoToolboxTonemapping, enableVideoToolboxTonemapping)) && + (identical(other.enableVideoToolboxTonemapping, enableVideoToolboxTonemapping) || const DeepCollectionEquality().equals(other.enableVideoToolboxTonemapping, enableVideoToolboxTonemapping)) && (identical(other.tonemappingAlgorithm, tonemappingAlgorithm) || const DeepCollectionEquality().equals(other.tonemappingAlgorithm, tonemappingAlgorithm)) && (identical(other.tonemappingMode, tonemappingMode) || const DeepCollectionEquality().equals(other.tonemappingMode, tonemappingMode)) && (identical(other.tonemappingRange, tonemappingRange) || const DeepCollectionEquality().equals(other.tonemappingRange, tonemappingRange)) && @@ -24530,6 +23838,8 @@ class EncodingOptions { (identical(other.deinterlaceMethod, deinterlaceMethod) || const DeepCollectionEquality().equals(other.deinterlaceMethod, deinterlaceMethod)) && (identical(other.enableDecodingColorDepth10Hevc, enableDecodingColorDepth10Hevc) || const DeepCollectionEquality().equals(other.enableDecodingColorDepth10Hevc, enableDecodingColorDepth10Hevc)) && (identical(other.enableDecodingColorDepth10Vp9, enableDecodingColorDepth10Vp9) || const DeepCollectionEquality().equals(other.enableDecodingColorDepth10Vp9, enableDecodingColorDepth10Vp9)) && + (identical(other.enableDecodingColorDepth10HevcRext, enableDecodingColorDepth10HevcRext) || const DeepCollectionEquality().equals(other.enableDecodingColorDepth10HevcRext, enableDecodingColorDepth10HevcRext)) && + (identical(other.enableDecodingColorDepth12HevcRext, enableDecodingColorDepth12HevcRext) || const DeepCollectionEquality().equals(other.enableDecodingColorDepth12HevcRext, enableDecodingColorDepth12HevcRext)) && (identical(other.enableEnhancedNvdecDecoder, enableEnhancedNvdecDecoder) || const DeepCollectionEquality().equals(other.enableEnhancedNvdecDecoder, enableEnhancedNvdecDecoder)) && (identical(other.preferSystemNativeHwDecoder, preferSystemNativeHwDecoder) || const DeepCollectionEquality().equals(other.preferSystemNativeHwDecoder, preferSystemNativeHwDecoder)) && (identical(other.enableIntelLowPowerH264HwEncoder, enableIntelLowPowerH264HwEncoder) || const DeepCollectionEquality().equals(other.enableIntelLowPowerH264HwEncoder, enableIntelLowPowerH264HwEncoder)) && @@ -24563,6 +23873,7 @@ class EncodingOptions { const DeepCollectionEquality().hash(encoderAppPath) ^ const DeepCollectionEquality().hash(encoderAppPathDisplay) ^ const DeepCollectionEquality().hash(vaapiDevice) ^ + const DeepCollectionEquality().hash(qsvDevice) ^ const DeepCollectionEquality().hash(enableTonemapping) ^ const DeepCollectionEquality().hash(enableVppTonemapping) ^ const DeepCollectionEquality().hash(enableVideoToolboxTonemapping) ^ @@ -24581,6 +23892,8 @@ class EncodingOptions { const DeepCollectionEquality().hash(deinterlaceMethod) ^ const DeepCollectionEquality().hash(enableDecodingColorDepth10Hevc) ^ const DeepCollectionEquality().hash(enableDecodingColorDepth10Vp9) ^ + const DeepCollectionEquality().hash(enableDecodingColorDepth10HevcRext) ^ + const DeepCollectionEquality().hash(enableDecodingColorDepth12HevcRext) ^ const DeepCollectionEquality().hash(enableEnhancedNvdecDecoder) ^ const DeepCollectionEquality().hash(preferSystemNativeHwDecoder) ^ const DeepCollectionEquality().hash(enableIntelLowPowerH264HwEncoder) ^ @@ -24609,16 +23922,17 @@ extension $EncodingOptionsExtension on EncodingOptions { int? throttleDelaySeconds, bool? enableSegmentDeletion, int? segmentKeepSeconds, - String? hardwareAccelerationType, + enums.HardwareAccelerationType? hardwareAccelerationType, String? encoderAppPath, String? encoderAppPathDisplay, String? vaapiDevice, + String? qsvDevice, bool? enableTonemapping, bool? enableVppTonemapping, bool? enableVideoToolboxTonemapping, - String? tonemappingAlgorithm, - String? tonemappingMode, - String? tonemappingRange, + enums.TonemappingAlgorithm? tonemappingAlgorithm, + enums.TonemappingMode? tonemappingMode, + enums.TonemappingRange? tonemappingRange, double? tonemappingDesat, double? tonemappingPeak, double? tonemappingParam, @@ -24626,11 +23940,13 @@ extension $EncodingOptionsExtension on EncodingOptions { double? vppTonemappingContrast, int? h264Crf, int? h265Crf, - String? encoderPreset, + enums.EncoderPreset? encoderPreset, bool? deinterlaceDoubleRate, - String? deinterlaceMethod, + enums.DeinterlaceMethod? deinterlaceMethod, bool? enableDecodingColorDepth10Hevc, bool? enableDecodingColorDepth10Vp9, + bool? enableDecodingColorDepth10HevcRext, + bool? enableDecodingColorDepth12HevcRext, bool? enableEnhancedNvdecDecoder, bool? preferSystemNativeHwDecoder, bool? enableIntelLowPowerH264HwEncoder, @@ -24663,6 +23979,7 @@ extension $EncodingOptionsExtension on EncodingOptions { encoderAppPathDisplay: encoderAppPathDisplay ?? this.encoderAppPathDisplay, vaapiDevice: vaapiDevice ?? this.vaapiDevice, + qsvDevice: qsvDevice ?? this.qsvDevice, enableTonemapping: enableTonemapping ?? this.enableTonemapping, enableVppTonemapping: enableVppTonemapping ?? this.enableVppTonemapping, enableVideoToolboxTonemapping: @@ -24687,6 +24004,12 @@ extension $EncodingOptionsExtension on EncodingOptions { this.enableDecodingColorDepth10Hevc, enableDecodingColorDepth10Vp9: enableDecodingColorDepth10Vp9 ?? this.enableDecodingColorDepth10Vp9, + enableDecodingColorDepth10HevcRext: + enableDecodingColorDepth10HevcRext ?? + this.enableDecodingColorDepth10HevcRext, + enableDecodingColorDepth12HevcRext: + enableDecodingColorDepth12HevcRext ?? + this.enableDecodingColorDepth12HevcRext, enableEnhancedNvdecDecoder: enableEnhancedNvdecDecoder ?? this.enableEnhancedNvdecDecoder, preferSystemNativeHwDecoder: @@ -24721,16 +24044,17 @@ extension $EncodingOptionsExtension on EncodingOptions { Wrapped? throttleDelaySeconds, Wrapped? enableSegmentDeletion, Wrapped? segmentKeepSeconds, - Wrapped? hardwareAccelerationType, + Wrapped? hardwareAccelerationType, Wrapped? encoderAppPath, Wrapped? encoderAppPathDisplay, Wrapped? vaapiDevice, + Wrapped? qsvDevice, Wrapped? enableTonemapping, Wrapped? enableVppTonemapping, Wrapped? enableVideoToolboxTonemapping, - Wrapped? tonemappingAlgorithm, - Wrapped? tonemappingMode, - Wrapped? tonemappingRange, + Wrapped? tonemappingAlgorithm, + Wrapped? tonemappingMode, + Wrapped? tonemappingRange, Wrapped? tonemappingDesat, Wrapped? tonemappingPeak, Wrapped? tonemappingParam, @@ -24738,11 +24062,13 @@ extension $EncodingOptionsExtension on EncodingOptions { Wrapped? vppTonemappingContrast, Wrapped? h264Crf, Wrapped? h265Crf, - Wrapped? encoderPreset, + Wrapped? encoderPreset, Wrapped? deinterlaceDoubleRate, - Wrapped? deinterlaceMethod, + Wrapped? deinterlaceMethod, Wrapped? enableDecodingColorDepth10Hevc, Wrapped? enableDecodingColorDepth10Vp9, + Wrapped? enableDecodingColorDepth10HevcRext, + Wrapped? enableDecodingColorDepth12HevcRext, Wrapped? enableEnhancedNvdecDecoder, Wrapped? preferSystemNativeHwDecoder, Wrapped? enableIntelLowPowerH264HwEncoder, @@ -24802,6 +24128,7 @@ extension $EncodingOptionsExtension on EncodingOptions { : this.encoderAppPathDisplay), vaapiDevice: (vaapiDevice != null ? vaapiDevice.value : this.vaapiDevice), + qsvDevice: (qsvDevice != null ? qsvDevice.value : this.qsvDevice), enableTonemapping: (enableTonemapping != null ? enableTonemapping.value : this.enableTonemapping), @@ -24851,20 +24178,25 @@ extension $EncodingOptionsExtension on EncodingOptions { enableDecodingColorDepth10Vp9: (enableDecodingColorDepth10Vp9 != null ? enableDecodingColorDepth10Vp9.value : this.enableDecodingColorDepth10Vp9), + enableDecodingColorDepth10HevcRext: (enableDecodingColorDepth10HevcRext != null + ? enableDecodingColorDepth10HevcRext.value + : this.enableDecodingColorDepth10HevcRext), + enableDecodingColorDepth12HevcRext: + (enableDecodingColorDepth12HevcRext != null + ? enableDecodingColorDepth12HevcRext.value + : this.enableDecodingColorDepth12HevcRext), enableEnhancedNvdecDecoder: (enableEnhancedNvdecDecoder != null ? enableEnhancedNvdecDecoder.value : this.enableEnhancedNvdecDecoder), preferSystemNativeHwDecoder: (preferSystemNativeHwDecoder != null ? preferSystemNativeHwDecoder.value : this.preferSystemNativeHwDecoder), - enableIntelLowPowerH264HwEncoder: - (enableIntelLowPowerH264HwEncoder != null - ? enableIntelLowPowerH264HwEncoder.value - : this.enableIntelLowPowerH264HwEncoder), - enableIntelLowPowerHevcHwEncoder: - (enableIntelLowPowerHevcHwEncoder != null - ? enableIntelLowPowerHevcHwEncoder.value - : this.enableIntelLowPowerHevcHwEncoder), + enableIntelLowPowerH264HwEncoder: (enableIntelLowPowerH264HwEncoder != null + ? enableIntelLowPowerH264HwEncoder.value + : this.enableIntelLowPowerH264HwEncoder), + enableIntelLowPowerHevcHwEncoder: (enableIntelLowPowerHevcHwEncoder != null + ? enableIntelLowPowerHevcHwEncoder.value + : this.enableIntelLowPowerHevcHwEncoder), enableHardwareEncoding: (enableHardwareEncoding != null ? enableHardwareEncoding.value : this.enableHardwareEncoding), @@ -24880,12 +24212,7 @@ extension $EncodingOptionsExtension on EncodingOptions { hardwareDecodingCodecs: (hardwareDecodingCodecs != null ? hardwareDecodingCodecs.value : this.hardwareDecodingCodecs), - allowOnDemandMetadataBasedKeyframeExtractionForExtensions: - (allowOnDemandMetadataBasedKeyframeExtractionForExtensions != null - ? allowOnDemandMetadataBasedKeyframeExtractionForExtensions - .value - : this - .allowOnDemandMetadataBasedKeyframeExtractionForExtensions)); + allowOnDemandMetadataBasedKeyframeExtractionForExtensions: (allowOnDemandMetadataBasedKeyframeExtractionForExtensions != null ? allowOnDemandMetadataBasedKeyframeExtractionForExtensions.value : this.allowOnDemandMetadataBasedKeyframeExtractionForExtensions)); } } @@ -24946,58 +24273,6 @@ extension $EndPointInfoExtension on EndPointInfo { } } -@JsonSerializable(explicitToJson: true) -class EpisodeVisualization { - const EpisodeVisualization({ - this.id, - this.name, - }); - - factory EpisodeVisualization.fromJson(Map json) => - _$EpisodeVisualizationFromJson(json); - - static const toJsonFactory = _$EpisodeVisualizationToJson; - Map toJson() => _$EpisodeVisualizationToJson(this); - - @JsonKey(name: 'Id', includeIfNull: false) - final String? id; - @JsonKey(name: 'Name', includeIfNull: false) - final String? name; - static const fromJsonFactory = _$EpisodeVisualizationFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is EpisodeVisualization && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.name, name) || - const DeepCollectionEquality().equals(other.name, name))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(name) ^ - runtimeType.hashCode; -} - -extension $EpisodeVisualizationExtension on EpisodeVisualization { - EpisodeVisualization copyWith({String? id, String? name}) { - return EpisodeVisualization(id: id ?? this.id, name: name ?? this.name); - } - - EpisodeVisualization copyWithWrapped( - {Wrapped? id, Wrapped? name}) { - return EpisodeVisualization( - id: (id != null ? id.value : this.id), - name: (name != null ? name.value : this.name)); - } -} - @JsonSerializable(explicitToJson: true) class ExternalIdInfo { const ExternalIdInfo({ @@ -25025,6 +24300,7 @@ class ExternalIdInfo { ) final enums.ExternalIdMediaType? type; @JsonKey(name: 'UrlFormatString', includeIfNull: false) + @deprecated final String? urlFormatString; static const fromJsonFactory = _$ExternalIdInfoFromJson; @@ -25773,7 +25049,8 @@ class GetProgramsDto { final List? genreIds; @JsonKey(name: 'EnableImages', includeIfNull: false) final bool? enableImages; - @JsonKey(name: 'EnableTotalRecordCount', includeIfNull: false) + @JsonKey( + name: 'EnableTotalRecordCount', includeIfNull: false, defaultValue: true) final bool? enableTotalRecordCount; @JsonKey(name: 'ImageTypeLimit', includeIfNull: false) final int? imageTypeLimit; @@ -26955,247 +26232,6 @@ extension $InstallationInfoExtension on InstallationInfo { } } -@JsonSerializable(explicitToJson: true) -class Intro { - const Intro({ - this.episodeId, - this.valid, - this.introStart, - this.introEnd, - this.showSkipPromptAt, - this.hideSkipPromptAt, - }); - - factory Intro.fromJson(Map json) => _$IntroFromJson(json); - - static const toJsonFactory = _$IntroToJson; - Map toJson() => _$IntroToJson(this); - - @JsonKey(name: 'EpisodeId', includeIfNull: false) - final String? episodeId; - @JsonKey(name: 'Valid', includeIfNull: false) - final bool? valid; - @JsonKey(name: 'IntroStart', includeIfNull: false) - final double? introStart; - @JsonKey(name: 'IntroEnd', includeIfNull: false) - final double? introEnd; - @JsonKey(name: 'ShowSkipPromptAt', includeIfNull: false) - final double? showSkipPromptAt; - @JsonKey(name: 'HideSkipPromptAt', includeIfNull: false) - final double? hideSkipPromptAt; - static const fromJsonFactory = _$IntroFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Intro && - (identical(other.episodeId, episodeId) || - const DeepCollectionEquality() - .equals(other.episodeId, episodeId)) && - (identical(other.valid, valid) || - const DeepCollectionEquality().equals(other.valid, valid)) && - (identical(other.introStart, introStart) || - const DeepCollectionEquality() - .equals(other.introStart, introStart)) && - (identical(other.introEnd, introEnd) || - const DeepCollectionEquality() - .equals(other.introEnd, introEnd)) && - (identical(other.showSkipPromptAt, showSkipPromptAt) || - const DeepCollectionEquality() - .equals(other.showSkipPromptAt, showSkipPromptAt)) && - (identical(other.hideSkipPromptAt, hideSkipPromptAt) || - const DeepCollectionEquality() - .equals(other.hideSkipPromptAt, hideSkipPromptAt))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(episodeId) ^ - const DeepCollectionEquality().hash(valid) ^ - const DeepCollectionEquality().hash(introStart) ^ - const DeepCollectionEquality().hash(introEnd) ^ - const DeepCollectionEquality().hash(showSkipPromptAt) ^ - const DeepCollectionEquality().hash(hideSkipPromptAt) ^ - runtimeType.hashCode; -} - -extension $IntroExtension on Intro { - Intro copyWith( - {String? episodeId, - bool? valid, - double? introStart, - double? introEnd, - double? showSkipPromptAt, - double? hideSkipPromptAt}) { - return Intro( - episodeId: episodeId ?? this.episodeId, - valid: valid ?? this.valid, - introStart: introStart ?? this.introStart, - introEnd: introEnd ?? this.introEnd, - showSkipPromptAt: showSkipPromptAt ?? this.showSkipPromptAt, - hideSkipPromptAt: hideSkipPromptAt ?? this.hideSkipPromptAt); - } - - Intro copyWithWrapped( - {Wrapped? episodeId, - Wrapped? valid, - Wrapped? introStart, - Wrapped? introEnd, - Wrapped? showSkipPromptAt, - Wrapped? hideSkipPromptAt}) { - return Intro( - episodeId: (episodeId != null ? episodeId.value : this.episodeId), - valid: (valid != null ? valid.value : this.valid), - introStart: (introStart != null ? introStart.value : this.introStart), - introEnd: (introEnd != null ? introEnd.value : this.introEnd), - showSkipPromptAt: (showSkipPromptAt != null - ? showSkipPromptAt.value - : this.showSkipPromptAt), - hideSkipPromptAt: (hideSkipPromptAt != null - ? hideSkipPromptAt.value - : this.hideSkipPromptAt)); - } -} - -@JsonSerializable(explicitToJson: true) -class IntroWithMetadata { - const IntroWithMetadata({ - this.episodeId, - this.valid, - this.introStart, - this.introEnd, - this.showSkipPromptAt, - this.hideSkipPromptAt, - this.series, - this.season, - this.title, - }); - - factory IntroWithMetadata.fromJson(Map json) => - _$IntroWithMetadataFromJson(json); - - static const toJsonFactory = _$IntroWithMetadataToJson; - Map toJson() => _$IntroWithMetadataToJson(this); - - @JsonKey(name: 'EpisodeId', includeIfNull: false) - final String? episodeId; - @JsonKey(name: 'Valid', includeIfNull: false) - final bool? valid; - @JsonKey(name: 'IntroStart', includeIfNull: false) - final double? introStart; - @JsonKey(name: 'IntroEnd', includeIfNull: false) - final double? introEnd; - @JsonKey(name: 'ShowSkipPromptAt', includeIfNull: false) - final double? showSkipPromptAt; - @JsonKey(name: 'HideSkipPromptAt', includeIfNull: false) - final double? hideSkipPromptAt; - @JsonKey(name: 'Series', includeIfNull: false) - final String? series; - @JsonKey(name: 'Season', includeIfNull: false) - final int? season; - @JsonKey(name: 'Title', includeIfNull: false) - final String? title; - static const fromJsonFactory = _$IntroWithMetadataFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is IntroWithMetadata && - (identical(other.episodeId, episodeId) || - const DeepCollectionEquality() - .equals(other.episodeId, episodeId)) && - (identical(other.valid, valid) || - const DeepCollectionEquality().equals(other.valid, valid)) && - (identical(other.introStart, introStart) || - const DeepCollectionEquality() - .equals(other.introStart, introStart)) && - (identical(other.introEnd, introEnd) || - const DeepCollectionEquality() - .equals(other.introEnd, introEnd)) && - (identical(other.showSkipPromptAt, showSkipPromptAt) || - const DeepCollectionEquality() - .equals(other.showSkipPromptAt, showSkipPromptAt)) && - (identical(other.hideSkipPromptAt, hideSkipPromptAt) || - const DeepCollectionEquality() - .equals(other.hideSkipPromptAt, hideSkipPromptAt)) && - (identical(other.series, series) || - const DeepCollectionEquality().equals(other.series, series)) && - (identical(other.season, season) || - const DeepCollectionEquality().equals(other.season, season)) && - (identical(other.title, title) || - const DeepCollectionEquality().equals(other.title, title))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(episodeId) ^ - const DeepCollectionEquality().hash(valid) ^ - const DeepCollectionEquality().hash(introStart) ^ - const DeepCollectionEquality().hash(introEnd) ^ - const DeepCollectionEquality().hash(showSkipPromptAt) ^ - const DeepCollectionEquality().hash(hideSkipPromptAt) ^ - const DeepCollectionEquality().hash(series) ^ - const DeepCollectionEquality().hash(season) ^ - const DeepCollectionEquality().hash(title) ^ - runtimeType.hashCode; -} - -extension $IntroWithMetadataExtension on IntroWithMetadata { - IntroWithMetadata copyWith( - {String? episodeId, - bool? valid, - double? introStart, - double? introEnd, - double? showSkipPromptAt, - double? hideSkipPromptAt, - String? series, - int? season, - String? title}) { - return IntroWithMetadata( - episodeId: episodeId ?? this.episodeId, - valid: valid ?? this.valid, - introStart: introStart ?? this.introStart, - introEnd: introEnd ?? this.introEnd, - showSkipPromptAt: showSkipPromptAt ?? this.showSkipPromptAt, - hideSkipPromptAt: hideSkipPromptAt ?? this.hideSkipPromptAt, - series: series ?? this.series, - season: season ?? this.season, - title: title ?? this.title); - } - - IntroWithMetadata copyWithWrapped( - {Wrapped? episodeId, - Wrapped? valid, - Wrapped? introStart, - Wrapped? introEnd, - Wrapped? showSkipPromptAt, - Wrapped? hideSkipPromptAt, - Wrapped? series, - Wrapped? season, - Wrapped? title}) { - return IntroWithMetadata( - episodeId: (episodeId != null ? episodeId.value : this.episodeId), - valid: (valid != null ? valid.value : this.valid), - introStart: (introStart != null ? introStart.value : this.introStart), - introEnd: (introEnd != null ? introEnd.value : this.introEnd), - showSkipPromptAt: (showSkipPromptAt != null - ? showSkipPromptAt.value - : this.showSkipPromptAt), - hideSkipPromptAt: (hideSkipPromptAt != null - ? hideSkipPromptAt.value - : this.hideSkipPromptAt), - series: (series != null ? series.value : this.series), - season: (season != null ? season.value : this.season), - title: (title != null ? title.value : this.title)); - } -} - @JsonSerializable(explicitToJson: true) class IPlugin { const IPlugin({ @@ -27491,58 +26527,6 @@ extension $ItemCountsExtension on ItemCounts { } } -@JsonSerializable(explicitToJson: true) -class Items { - const Items({ - this.movies, - this.episodes, - }); - - factory Items.fromJson(Map json) => _$ItemsFromJson(json); - - static const toJsonFactory = _$ItemsToJson; - Map toJson() => _$ItemsToJson(this); - - @JsonKey(name: 'movies', includeIfNull: false) - final int? movies; - @JsonKey(name: 'episodes', includeIfNull: false) - final int? episodes; - static const fromJsonFactory = _$ItemsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Items && - (identical(other.movies, movies) || - const DeepCollectionEquality().equals(other.movies, movies)) && - (identical(other.episodes, episodes) || - const DeepCollectionEquality() - .equals(other.episodes, episodes))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(movies) ^ - const DeepCollectionEquality().hash(episodes) ^ - runtimeType.hashCode; -} - -extension $ItemsExtension on Items { - Items copyWith({int? movies, int? episodes}) { - return Items( - movies: movies ?? this.movies, episodes: episodes ?? this.episodes); - } - - Items copyWithWrapped({Wrapped? movies, Wrapped? episodes}) { - return Items( - movies: (movies != null ? movies.value : this.movies), - episodes: (episodes != null ? episodes.value : this.episodes)); - } -} - @JsonSerializable(explicitToJson: true) class JoinGroupRequestDto { const JoinGroupRequestDto({ @@ -27750,12 +26734,21 @@ class LibraryOptions { this.localMetadataReaderOrder, this.disabledSubtitleFetchers, this.subtitleFetcherOrder, + this.disabledMediaSegmentProviders, + this.mediaSegmentProvideOrder, this.skipSubtitlesIfEmbeddedSubtitlesPresent, this.skipSubtitlesIfAudioTrackMatches, this.subtitleDownloadLanguages, this.requirePerfectSubtitleMatch, this.saveSubtitlesWithMedia, this.saveLyricsWithMedia, + this.saveTrickplayWithMedia, + this.disabledLyricFetchers, + this.lyricFetcherOrder, + this.preferNonstandardArtistsTag, + this.useCustomTagDelimiters, + this.customTagDelimiters, + this.delimiterWhitelist, this.automaticallyAddToCollection, this.allowEmbeddedSubtitles, this.typeOptions, @@ -27831,6 +26824,16 @@ class LibraryOptions { includeIfNull: false, defaultValue: []) final List? subtitleFetcherOrder; + @JsonKey( + name: 'DisabledMediaSegmentProviders', + includeIfNull: false, + defaultValue: []) + final List? disabledMediaSegmentProviders; + @JsonKey( + name: 'MediaSegmentProvideOrder', + includeIfNull: false, + defaultValue: []) + final List? mediaSegmentProvideOrder; @JsonKey( name: 'SkipSubtitlesIfEmbeddedSubtitlesPresent', includeIfNull: false) final bool? skipSubtitlesIfEmbeddedSubtitlesPresent; @@ -27848,6 +26851,35 @@ class LibraryOptions { @JsonKey( name: 'SaveLyricsWithMedia', includeIfNull: false, defaultValue: false) final bool? saveLyricsWithMedia; + @JsonKey( + name: 'SaveTrickplayWithMedia', includeIfNull: false, defaultValue: false) + final bool? saveTrickplayWithMedia; + @JsonKey( + name: 'DisabledLyricFetchers', + includeIfNull: false, + defaultValue: []) + final List? disabledLyricFetchers; + @JsonKey( + name: 'LyricFetcherOrder', includeIfNull: false, defaultValue: []) + final List? lyricFetcherOrder; + @JsonKey( + name: 'PreferNonstandardArtistsTag', + includeIfNull: false, + defaultValue: false) + final bool? preferNonstandardArtistsTag; + @JsonKey( + name: 'UseCustomTagDelimiters', includeIfNull: false, defaultValue: false) + final bool? useCustomTagDelimiters; + @JsonKey( + name: 'CustomTagDelimiters', + includeIfNull: false, + defaultValue: []) + final List? customTagDelimiters; + @JsonKey( + name: 'DelimiterWhitelist', + includeIfNull: false, + defaultValue: []) + final List? delimiterWhitelist; @JsonKey(name: 'AutomaticallyAddToCollection', includeIfNull: false) final bool? automaticallyAddToCollection; @JsonKey( @@ -27918,12 +26950,21 @@ class LibraryOptions { (identical(other.localMetadataReaderOrder, localMetadataReaderOrder) || const DeepCollectionEquality().equals(other.localMetadataReaderOrder, localMetadataReaderOrder)) && (identical(other.disabledSubtitleFetchers, disabledSubtitleFetchers) || const DeepCollectionEquality().equals(other.disabledSubtitleFetchers, disabledSubtitleFetchers)) && (identical(other.subtitleFetcherOrder, subtitleFetcherOrder) || const DeepCollectionEquality().equals(other.subtitleFetcherOrder, subtitleFetcherOrder)) && + (identical(other.disabledMediaSegmentProviders, disabledMediaSegmentProviders) || const DeepCollectionEquality().equals(other.disabledMediaSegmentProviders, disabledMediaSegmentProviders)) && + (identical(other.mediaSegmentProvideOrder, mediaSegmentProvideOrder) || const DeepCollectionEquality().equals(other.mediaSegmentProvideOrder, mediaSegmentProvideOrder)) && (identical(other.skipSubtitlesIfEmbeddedSubtitlesPresent, skipSubtitlesIfEmbeddedSubtitlesPresent) || const DeepCollectionEquality().equals(other.skipSubtitlesIfEmbeddedSubtitlesPresent, skipSubtitlesIfEmbeddedSubtitlesPresent)) && (identical(other.skipSubtitlesIfAudioTrackMatches, skipSubtitlesIfAudioTrackMatches) || const DeepCollectionEquality().equals(other.skipSubtitlesIfAudioTrackMatches, skipSubtitlesIfAudioTrackMatches)) && (identical(other.subtitleDownloadLanguages, subtitleDownloadLanguages) || const DeepCollectionEquality().equals(other.subtitleDownloadLanguages, subtitleDownloadLanguages)) && (identical(other.requirePerfectSubtitleMatch, requirePerfectSubtitleMatch) || const DeepCollectionEquality().equals(other.requirePerfectSubtitleMatch, requirePerfectSubtitleMatch)) && (identical(other.saveSubtitlesWithMedia, saveSubtitlesWithMedia) || const DeepCollectionEquality().equals(other.saveSubtitlesWithMedia, saveSubtitlesWithMedia)) && (identical(other.saveLyricsWithMedia, saveLyricsWithMedia) || const DeepCollectionEquality().equals(other.saveLyricsWithMedia, saveLyricsWithMedia)) && + (identical(other.saveTrickplayWithMedia, saveTrickplayWithMedia) || const DeepCollectionEquality().equals(other.saveTrickplayWithMedia, saveTrickplayWithMedia)) && + (identical(other.disabledLyricFetchers, disabledLyricFetchers) || const DeepCollectionEquality().equals(other.disabledLyricFetchers, disabledLyricFetchers)) && + (identical(other.lyricFetcherOrder, lyricFetcherOrder) || const DeepCollectionEquality().equals(other.lyricFetcherOrder, lyricFetcherOrder)) && + (identical(other.preferNonstandardArtistsTag, preferNonstandardArtistsTag) || const DeepCollectionEquality().equals(other.preferNonstandardArtistsTag, preferNonstandardArtistsTag)) && + (identical(other.useCustomTagDelimiters, useCustomTagDelimiters) || const DeepCollectionEquality().equals(other.useCustomTagDelimiters, useCustomTagDelimiters)) && + (identical(other.customTagDelimiters, customTagDelimiters) || const DeepCollectionEquality().equals(other.customTagDelimiters, customTagDelimiters)) && + (identical(other.delimiterWhitelist, delimiterWhitelist) || const DeepCollectionEquality().equals(other.delimiterWhitelist, delimiterWhitelist)) && (identical(other.automaticallyAddToCollection, automaticallyAddToCollection) || const DeepCollectionEquality().equals(other.automaticallyAddToCollection, automaticallyAddToCollection)) && (identical(other.allowEmbeddedSubtitles, allowEmbeddedSubtitles) || const DeepCollectionEquality().equals(other.allowEmbeddedSubtitles, allowEmbeddedSubtitles)) && (identical(other.typeOptions, typeOptions) || const DeepCollectionEquality().equals(other.typeOptions, typeOptions))); @@ -27960,6 +27001,8 @@ class LibraryOptions { const DeepCollectionEquality().hash(localMetadataReaderOrder) ^ const DeepCollectionEquality().hash(disabledSubtitleFetchers) ^ const DeepCollectionEquality().hash(subtitleFetcherOrder) ^ + const DeepCollectionEquality().hash(disabledMediaSegmentProviders) ^ + const DeepCollectionEquality().hash(mediaSegmentProvideOrder) ^ const DeepCollectionEquality() .hash(skipSubtitlesIfEmbeddedSubtitlesPresent) ^ const DeepCollectionEquality().hash(skipSubtitlesIfAudioTrackMatches) ^ @@ -27967,6 +27010,13 @@ class LibraryOptions { const DeepCollectionEquality().hash(requirePerfectSubtitleMatch) ^ const DeepCollectionEquality().hash(saveSubtitlesWithMedia) ^ const DeepCollectionEquality().hash(saveLyricsWithMedia) ^ + const DeepCollectionEquality().hash(saveTrickplayWithMedia) ^ + const DeepCollectionEquality().hash(disabledLyricFetchers) ^ + const DeepCollectionEquality().hash(lyricFetcherOrder) ^ + const DeepCollectionEquality().hash(preferNonstandardArtistsTag) ^ + const DeepCollectionEquality().hash(useCustomTagDelimiters) ^ + const DeepCollectionEquality().hash(customTagDelimiters) ^ + const DeepCollectionEquality().hash(delimiterWhitelist) ^ const DeepCollectionEquality().hash(automaticallyAddToCollection) ^ const DeepCollectionEquality().hash(allowEmbeddedSubtitles) ^ const DeepCollectionEquality().hash(typeOptions) ^ @@ -27999,12 +27049,21 @@ extension $LibraryOptionsExtension on LibraryOptions { List? localMetadataReaderOrder, List? disabledSubtitleFetchers, List? subtitleFetcherOrder, + List? disabledMediaSegmentProviders, + List? mediaSegmentProvideOrder, bool? skipSubtitlesIfEmbeddedSubtitlesPresent, bool? skipSubtitlesIfAudioTrackMatches, List? subtitleDownloadLanguages, bool? requirePerfectSubtitleMatch, bool? saveSubtitlesWithMedia, bool? saveLyricsWithMedia, + bool? saveTrickplayWithMedia, + List? disabledLyricFetchers, + List? lyricFetcherOrder, + bool? preferNonstandardArtistsTag, + bool? useCustomTagDelimiters, + List? customTagDelimiters, + List? delimiterWhitelist, bool? automaticallyAddToCollection, enums.EmbeddedSubtitleOptions? allowEmbeddedSubtitles, List? typeOptions}) { @@ -28050,6 +27109,10 @@ extension $LibraryOptionsExtension on LibraryOptions { disabledSubtitleFetchers: disabledSubtitleFetchers ?? this.disabledSubtitleFetchers, subtitleFetcherOrder: subtitleFetcherOrder ?? this.subtitleFetcherOrder, + disabledMediaSegmentProviders: + disabledMediaSegmentProviders ?? this.disabledMediaSegmentProviders, + mediaSegmentProvideOrder: + mediaSegmentProvideOrder ?? this.mediaSegmentProvideOrder, skipSubtitlesIfEmbeddedSubtitlesPresent: skipSubtitlesIfEmbeddedSubtitlesPresent ?? this.skipSubtitlesIfEmbeddedSubtitlesPresent, @@ -28062,6 +27125,17 @@ extension $LibraryOptionsExtension on LibraryOptions { saveSubtitlesWithMedia: saveSubtitlesWithMedia ?? this.saveSubtitlesWithMedia, saveLyricsWithMedia: saveLyricsWithMedia ?? this.saveLyricsWithMedia, + saveTrickplayWithMedia: + saveTrickplayWithMedia ?? this.saveTrickplayWithMedia, + disabledLyricFetchers: + disabledLyricFetchers ?? this.disabledLyricFetchers, + lyricFetcherOrder: lyricFetcherOrder ?? this.lyricFetcherOrder, + preferNonstandardArtistsTag: + preferNonstandardArtistsTag ?? this.preferNonstandardArtistsTag, + useCustomTagDelimiters: + useCustomTagDelimiters ?? this.useCustomTagDelimiters, + customTagDelimiters: customTagDelimiters ?? this.customTagDelimiters, + delimiterWhitelist: delimiterWhitelist ?? this.delimiterWhitelist, automaticallyAddToCollection: automaticallyAddToCollection ?? this.automaticallyAddToCollection, allowEmbeddedSubtitles: @@ -28094,12 +27168,21 @@ extension $LibraryOptionsExtension on LibraryOptions { Wrapped?>? localMetadataReaderOrder, Wrapped?>? disabledSubtitleFetchers, Wrapped?>? subtitleFetcherOrder, + Wrapped?>? disabledMediaSegmentProviders, + Wrapped?>? mediaSegmentProvideOrder, Wrapped? skipSubtitlesIfEmbeddedSubtitlesPresent, Wrapped? skipSubtitlesIfAudioTrackMatches, Wrapped?>? subtitleDownloadLanguages, Wrapped? requirePerfectSubtitleMatch, Wrapped? saveSubtitlesWithMedia, Wrapped? saveLyricsWithMedia, + Wrapped? saveTrickplayWithMedia, + Wrapped?>? disabledLyricFetchers, + Wrapped?>? lyricFetcherOrder, + Wrapped? preferNonstandardArtistsTag, + Wrapped? useCustomTagDelimiters, + Wrapped?>? customTagDelimiters, + Wrapped?>? delimiterWhitelist, Wrapped? automaticallyAddToCollection, Wrapped? allowEmbeddedSubtitles, Wrapped?>? typeOptions}) { @@ -28122,9 +27205,10 @@ extension $LibraryOptionsExtension on LibraryOptions { enableTrickplayImageExtraction: (enableTrickplayImageExtraction != null ? enableTrickplayImageExtraction.value : this.enableTrickplayImageExtraction), - extractTrickplayImagesDuringLibraryScan: (extractTrickplayImagesDuringLibraryScan != null - ? extractTrickplayImagesDuringLibraryScan.value - : this.extractTrickplayImagesDuringLibraryScan), + extractTrickplayImagesDuringLibraryScan: + (extractTrickplayImagesDuringLibraryScan != null + ? extractTrickplayImagesDuringLibraryScan.value + : this.extractTrickplayImagesDuringLibraryScan), pathInfos: (pathInfos != null ? pathInfos.value : this.pathInfos), saveLocalMetadata: (saveLocalMetadata != null ? saveLocalMetadata.value @@ -28171,15 +27255,23 @@ extension $LibraryOptionsExtension on LibraryOptions { subtitleFetcherOrder: (subtitleFetcherOrder != null ? subtitleFetcherOrder.value : this.subtitleFetcherOrder), - skipSubtitlesIfEmbeddedSubtitlesPresent: - (skipSubtitlesIfEmbeddedSubtitlesPresent != null - ? skipSubtitlesIfEmbeddedSubtitlesPresent.value - : this.skipSubtitlesIfEmbeddedSubtitlesPresent), + disabledMediaSegmentProviders: (disabledMediaSegmentProviders != null + ? disabledMediaSegmentProviders.value + : this.disabledMediaSegmentProviders), + mediaSegmentProvideOrder: (mediaSegmentProvideOrder != null ? mediaSegmentProvideOrder.value : this.mediaSegmentProvideOrder), + skipSubtitlesIfEmbeddedSubtitlesPresent: (skipSubtitlesIfEmbeddedSubtitlesPresent != null ? skipSubtitlesIfEmbeddedSubtitlesPresent.value : this.skipSubtitlesIfEmbeddedSubtitlesPresent), skipSubtitlesIfAudioTrackMatches: (skipSubtitlesIfAudioTrackMatches != null ? skipSubtitlesIfAudioTrackMatches.value : this.skipSubtitlesIfAudioTrackMatches), subtitleDownloadLanguages: (subtitleDownloadLanguages != null ? subtitleDownloadLanguages.value : this.subtitleDownloadLanguages), requirePerfectSubtitleMatch: (requirePerfectSubtitleMatch != null ? requirePerfectSubtitleMatch.value : this.requirePerfectSubtitleMatch), saveSubtitlesWithMedia: (saveSubtitlesWithMedia != null ? saveSubtitlesWithMedia.value : this.saveSubtitlesWithMedia), saveLyricsWithMedia: (saveLyricsWithMedia != null ? saveLyricsWithMedia.value : this.saveLyricsWithMedia), + saveTrickplayWithMedia: (saveTrickplayWithMedia != null ? saveTrickplayWithMedia.value : this.saveTrickplayWithMedia), + disabledLyricFetchers: (disabledLyricFetchers != null ? disabledLyricFetchers.value : this.disabledLyricFetchers), + lyricFetcherOrder: (lyricFetcherOrder != null ? lyricFetcherOrder.value : this.lyricFetcherOrder), + preferNonstandardArtistsTag: (preferNonstandardArtistsTag != null ? preferNonstandardArtistsTag.value : this.preferNonstandardArtistsTag), + useCustomTagDelimiters: (useCustomTagDelimiters != null ? useCustomTagDelimiters.value : this.useCustomTagDelimiters), + customTagDelimiters: (customTagDelimiters != null ? customTagDelimiters.value : this.customTagDelimiters), + delimiterWhitelist: (delimiterWhitelist != null ? delimiterWhitelist.value : this.delimiterWhitelist), automaticallyAddToCollection: (automaticallyAddToCollection != null ? automaticallyAddToCollection.value : this.automaticallyAddToCollection), allowEmbeddedSubtitles: (allowEmbeddedSubtitles != null ? allowEmbeddedSubtitles.value : this.allowEmbeddedSubtitles), typeOptions: (typeOptions != null ? typeOptions.value : this.typeOptions)); @@ -28192,6 +27284,7 @@ class LibraryOptionsResultDto { this.metadataSavers, this.metadataReaders, this.subtitleFetchers, + this.lyricFetchers, this.typeOptions, }); @@ -28216,6 +27309,11 @@ class LibraryOptionsResultDto { includeIfNull: false, defaultValue: []) final List? subtitleFetchers; + @JsonKey( + name: 'LyricFetchers', + includeIfNull: false, + defaultValue: []) + final List? lyricFetchers; @JsonKey( name: 'TypeOptions', includeIfNull: false, @@ -28236,6 +27334,9 @@ class LibraryOptionsResultDto { (identical(other.subtitleFetchers, subtitleFetchers) || const DeepCollectionEquality() .equals(other.subtitleFetchers, subtitleFetchers)) && + (identical(other.lyricFetchers, lyricFetchers) || + const DeepCollectionEquality() + .equals(other.lyricFetchers, lyricFetchers)) && (identical(other.typeOptions, typeOptions) || const DeepCollectionEquality() .equals(other.typeOptions, typeOptions))); @@ -28249,6 +27350,7 @@ class LibraryOptionsResultDto { const DeepCollectionEquality().hash(metadataSavers) ^ const DeepCollectionEquality().hash(metadataReaders) ^ const DeepCollectionEquality().hash(subtitleFetchers) ^ + const DeepCollectionEquality().hash(lyricFetchers) ^ const DeepCollectionEquality().hash(typeOptions) ^ runtimeType.hashCode; } @@ -28258,11 +27360,13 @@ extension $LibraryOptionsResultDtoExtension on LibraryOptionsResultDto { {List? metadataSavers, List? metadataReaders, List? subtitleFetchers, + List? lyricFetchers, List? typeOptions}) { return LibraryOptionsResultDto( metadataSavers: metadataSavers ?? this.metadataSavers, metadataReaders: metadataReaders ?? this.metadataReaders, subtitleFetchers: subtitleFetchers ?? this.subtitleFetchers, + lyricFetchers: lyricFetchers ?? this.lyricFetchers, typeOptions: typeOptions ?? this.typeOptions); } @@ -28270,6 +27374,7 @@ extension $LibraryOptionsResultDtoExtension on LibraryOptionsResultDto { {Wrapped?>? metadataSavers, Wrapped?>? metadataReaders, Wrapped?>? subtitleFetchers, + Wrapped?>? lyricFetchers, Wrapped?>? typeOptions}) { return LibraryOptionsResultDto( metadataSavers: (metadataSavers != null @@ -28281,6 +27386,8 @@ extension $LibraryOptionsResultDtoExtension on LibraryOptionsResultDto { subtitleFetchers: (subtitleFetchers != null ? subtitleFetchers.value : this.subtitleFetchers), + lyricFetchers: + (lyricFetchers != null ? lyricFetchers.value : this.lyricFetchers), typeOptions: (typeOptions != null ? typeOptions.value : this.typeOptions)); } @@ -29834,7 +28941,6 @@ extension $MediaPathDtoExtension on MediaPathDto { class MediaPathInfo { const MediaPathInfo({ this.path, - this.networkPath, }); factory MediaPathInfo.fromJson(Map json) => @@ -29845,8 +28951,6 @@ class MediaPathInfo { @JsonKey(name: 'Path', includeIfNull: false) final String? path; - @JsonKey(name: 'NetworkPath', includeIfNull: false) - final String? networkPath; static const fromJsonFactory = _$MediaPathInfoFromJson; @override @@ -29854,10 +28958,7 @@ class MediaPathInfo { return identical(this, other) || (other is MediaPathInfo && (identical(other.path, path) || - const DeepCollectionEquality().equals(other.path, path)) && - (identical(other.networkPath, networkPath) || - const DeepCollectionEquality() - .equals(other.networkPath, networkPath))); + const DeepCollectionEquality().equals(other.path, path))); } @override @@ -29865,23 +28966,180 @@ class MediaPathInfo { @override int get hashCode => - const DeepCollectionEquality().hash(path) ^ - const DeepCollectionEquality().hash(networkPath) ^ - runtimeType.hashCode; + const DeepCollectionEquality().hash(path) ^ runtimeType.hashCode; } extension $MediaPathInfoExtension on MediaPathInfo { - MediaPathInfo copyWith({String? path, String? networkPath}) { - return MediaPathInfo( - path: path ?? this.path, networkPath: networkPath ?? this.networkPath); + MediaPathInfo copyWith({String? path}) { + return MediaPathInfo(path: path ?? this.path); } - MediaPathInfo copyWithWrapped( - {Wrapped? path, Wrapped? networkPath}) { - return MediaPathInfo( - path: (path != null ? path.value : this.path), - networkPath: - (networkPath != null ? networkPath.value : this.networkPath)); + MediaPathInfo copyWithWrapped({Wrapped? path}) { + return MediaPathInfo(path: (path != null ? path.value : this.path)); + } +} + +@JsonSerializable(explicitToJson: true) +class MediaSegmentDto { + const MediaSegmentDto({ + this.id, + this.itemId, + this.type, + this.startTicks, + this.endTicks, + }); + + factory MediaSegmentDto.fromJson(Map json) => + _$MediaSegmentDtoFromJson(json); + + static const toJsonFactory = _$MediaSegmentDtoToJson; + Map toJson() => _$MediaSegmentDtoToJson(this); + + @JsonKey(name: 'Id', includeIfNull: false) + final String? id; + @JsonKey(name: 'ItemId', includeIfNull: false) + final String? itemId; + @JsonKey( + name: 'Type', + includeIfNull: false, + toJson: mediaSegmentTypeNullableToJson, + fromJson: mediaSegmentTypeNullableFromJson, + ) + final enums.MediaSegmentType? type; + @JsonKey(name: 'StartTicks', includeIfNull: false) + final int? startTicks; + @JsonKey(name: 'EndTicks', includeIfNull: false) + final int? endTicks; + static const fromJsonFactory = _$MediaSegmentDtoFromJson; + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other is MediaSegmentDto && + (identical(other.id, id) || + const DeepCollectionEquality().equals(other.id, id)) && + (identical(other.itemId, itemId) || + const DeepCollectionEquality().equals(other.itemId, itemId)) && + (identical(other.type, type) || + const DeepCollectionEquality().equals(other.type, type)) && + (identical(other.startTicks, startTicks) || + const DeepCollectionEquality() + .equals(other.startTicks, startTicks)) && + (identical(other.endTicks, endTicks) || + const DeepCollectionEquality() + .equals(other.endTicks, endTicks))); + } + + @override + String toString() => jsonEncode(this); + + @override + int get hashCode => + const DeepCollectionEquality().hash(id) ^ + const DeepCollectionEquality().hash(itemId) ^ + const DeepCollectionEquality().hash(type) ^ + const DeepCollectionEquality().hash(startTicks) ^ + const DeepCollectionEquality().hash(endTicks) ^ + runtimeType.hashCode; +} + +extension $MediaSegmentDtoExtension on MediaSegmentDto { + MediaSegmentDto copyWith( + {String? id, + String? itemId, + enums.MediaSegmentType? type, + int? startTicks, + int? endTicks}) { + return MediaSegmentDto( + id: id ?? this.id, + itemId: itemId ?? this.itemId, + type: type ?? this.type, + startTicks: startTicks ?? this.startTicks, + endTicks: endTicks ?? this.endTicks); + } + + MediaSegmentDto copyWithWrapped( + {Wrapped? id, + Wrapped? itemId, + Wrapped? type, + Wrapped? startTicks, + Wrapped? endTicks}) { + return MediaSegmentDto( + id: (id != null ? id.value : this.id), + itemId: (itemId != null ? itemId.value : this.itemId), + type: (type != null ? type.value : this.type), + startTicks: (startTicks != null ? startTicks.value : this.startTicks), + endTicks: (endTicks != null ? endTicks.value : this.endTicks)); + } +} + +@JsonSerializable(explicitToJson: true) +class MediaSegmentDtoQueryResult { + const MediaSegmentDtoQueryResult({ + this.items, + this.totalRecordCount, + this.startIndex, + }); + + factory MediaSegmentDtoQueryResult.fromJson(Map json) => + _$MediaSegmentDtoQueryResultFromJson(json); + + static const toJsonFactory = _$MediaSegmentDtoQueryResultToJson; + Map toJson() => _$MediaSegmentDtoQueryResultToJson(this); + + @JsonKey( + name: 'Items', includeIfNull: false, defaultValue: []) + final List? items; + @JsonKey(name: 'TotalRecordCount', includeIfNull: false) + final int? totalRecordCount; + @JsonKey(name: 'StartIndex', includeIfNull: false) + final int? startIndex; + static const fromJsonFactory = _$MediaSegmentDtoQueryResultFromJson; + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other is MediaSegmentDtoQueryResult && + (identical(other.items, items) || + const DeepCollectionEquality().equals(other.items, items)) && + (identical(other.totalRecordCount, totalRecordCount) || + const DeepCollectionEquality() + .equals(other.totalRecordCount, totalRecordCount)) && + (identical(other.startIndex, startIndex) || + const DeepCollectionEquality() + .equals(other.startIndex, startIndex))); + } + + @override + String toString() => jsonEncode(this); + + @override + int get hashCode => + const DeepCollectionEquality().hash(items) ^ + const DeepCollectionEquality().hash(totalRecordCount) ^ + const DeepCollectionEquality().hash(startIndex) ^ + runtimeType.hashCode; +} + +extension $MediaSegmentDtoQueryResultExtension on MediaSegmentDtoQueryResult { + MediaSegmentDtoQueryResult copyWith( + {List? items, int? totalRecordCount, int? startIndex}) { + return MediaSegmentDtoQueryResult( + items: items ?? this.items, + totalRecordCount: totalRecordCount ?? this.totalRecordCount, + startIndex: startIndex ?? this.startIndex); + } + + MediaSegmentDtoQueryResult copyWithWrapped( + {Wrapped?>? items, + Wrapped? totalRecordCount, + Wrapped? startIndex}) { + return MediaSegmentDtoQueryResult( + items: (items != null ? items.value : this.items), + totalRecordCount: (totalRecordCount != null + ? totalRecordCount.value + : this.totalRecordCount), + startIndex: (startIndex != null ? startIndex.value : this.startIndex)); } } @@ -29908,6 +29166,7 @@ class MediaSourceInfo { this.supportsDirectStream, this.supportsDirectPlay, this.isInfiniteStream, + this.useMostCompatibleTranscodingProfile, this.requiresOpening, this.openToken, this.requiresClosing, @@ -29922,6 +29181,7 @@ class MediaSourceInfo { this.mediaAttachments, this.formats, this.bitrate, + this.fallbackMaxStreamingBitrate, this.timestamp, this.requiredHttpHeaders, this.transcodingUrl, @@ -29930,6 +29190,7 @@ class MediaSourceInfo { this.analyzeDurationMs, this.defaultAudioStreamIndex, this.defaultSubtitleStreamIndex, + this.hasSegments, }); factory MediaSourceInfo.fromJson(Map json) => @@ -29993,6 +29254,11 @@ class MediaSourceInfo { final bool? supportsDirectPlay; @JsonKey(name: 'IsInfiniteStream', includeIfNull: false) final bool? isInfiniteStream; + @JsonKey( + name: 'UseMostCompatibleTranscodingProfile', + includeIfNull: false, + defaultValue: false) + final bool? useMostCompatibleTranscodingProfile; @JsonKey(name: 'RequiresOpening', includeIfNull: false) final bool? requiresOpening; @JsonKey(name: 'OpenToken', includeIfNull: false) @@ -30040,6 +29306,8 @@ class MediaSourceInfo { final List? formats; @JsonKey(name: 'Bitrate', includeIfNull: false) final int? bitrate; + @JsonKey(name: 'FallbackMaxStreamingBitrate', includeIfNull: false) + final int? fallbackMaxStreamingBitrate; @JsonKey( name: 'Timestamp', includeIfNull: false, @@ -30066,6 +29334,8 @@ class MediaSourceInfo { final int? defaultAudioStreamIndex; @JsonKey(name: 'DefaultSubtitleStreamIndex', includeIfNull: false) final int? defaultSubtitleStreamIndex; + @JsonKey(name: 'HasSegments', includeIfNull: false) + final bool? hasSegments; static const fromJsonFactory = _$MediaSourceInfoFromJson; @override @@ -30126,6 +29396,10 @@ class MediaSourceInfo { (identical(other.isInfiniteStream, isInfiniteStream) || const DeepCollectionEquality() .equals(other.isInfiniteStream, isInfiniteStream)) && + (identical(other.useMostCompatibleTranscodingProfile, useMostCompatibleTranscodingProfile) || + const DeepCollectionEquality().equals( + other.useMostCompatibleTranscodingProfile, + useMostCompatibleTranscodingProfile)) && (identical(other.requiresOpening, requiresOpening) || const DeepCollectionEquality() .equals(other.requiresOpening, requiresOpening)) && @@ -30133,11 +29407,8 @@ class MediaSourceInfo { const DeepCollectionEquality() .equals(other.openToken, openToken)) && (identical(other.requiresClosing, requiresClosing) || - const DeepCollectionEquality() - .equals(other.requiresClosing, requiresClosing)) && - (identical(other.liveStreamId, liveStreamId) || - const DeepCollectionEquality() - .equals(other.liveStreamId, liveStreamId)) && + const DeepCollectionEquality().equals(other.requiresClosing, requiresClosing)) && + (identical(other.liveStreamId, liveStreamId) || const DeepCollectionEquality().equals(other.liveStreamId, liveStreamId)) && (identical(other.bufferMs, bufferMs) || const DeepCollectionEquality().equals(other.bufferMs, bufferMs)) && (identical(other.requiresLooping, requiresLooping) || const DeepCollectionEquality().equals(other.requiresLooping, requiresLooping)) && (identical(other.supportsProbing, supportsProbing) || const DeepCollectionEquality().equals(other.supportsProbing, supportsProbing)) && @@ -30148,6 +29419,7 @@ class MediaSourceInfo { (identical(other.mediaAttachments, mediaAttachments) || const DeepCollectionEquality().equals(other.mediaAttachments, mediaAttachments)) && (identical(other.formats, formats) || const DeepCollectionEquality().equals(other.formats, formats)) && (identical(other.bitrate, bitrate) || const DeepCollectionEquality().equals(other.bitrate, bitrate)) && + (identical(other.fallbackMaxStreamingBitrate, fallbackMaxStreamingBitrate) || const DeepCollectionEquality().equals(other.fallbackMaxStreamingBitrate, fallbackMaxStreamingBitrate)) && (identical(other.timestamp, timestamp) || const DeepCollectionEquality().equals(other.timestamp, timestamp)) && (identical(other.requiredHttpHeaders, requiredHttpHeaders) || const DeepCollectionEquality().equals(other.requiredHttpHeaders, requiredHttpHeaders)) && (identical(other.transcodingUrl, transcodingUrl) || const DeepCollectionEquality().equals(other.transcodingUrl, transcodingUrl)) && @@ -30155,7 +29427,8 @@ class MediaSourceInfo { (identical(other.transcodingContainer, transcodingContainer) || const DeepCollectionEquality().equals(other.transcodingContainer, transcodingContainer)) && (identical(other.analyzeDurationMs, analyzeDurationMs) || const DeepCollectionEquality().equals(other.analyzeDurationMs, analyzeDurationMs)) && (identical(other.defaultAudioStreamIndex, defaultAudioStreamIndex) || const DeepCollectionEquality().equals(other.defaultAudioStreamIndex, defaultAudioStreamIndex)) && - (identical(other.defaultSubtitleStreamIndex, defaultSubtitleStreamIndex) || const DeepCollectionEquality().equals(other.defaultSubtitleStreamIndex, defaultSubtitleStreamIndex))); + (identical(other.defaultSubtitleStreamIndex, defaultSubtitleStreamIndex) || const DeepCollectionEquality().equals(other.defaultSubtitleStreamIndex, defaultSubtitleStreamIndex)) && + (identical(other.hasSegments, hasSegments) || const DeepCollectionEquality().equals(other.hasSegments, hasSegments))); } @override @@ -30183,6 +29456,7 @@ class MediaSourceInfo { const DeepCollectionEquality().hash(supportsDirectStream) ^ const DeepCollectionEquality().hash(supportsDirectPlay) ^ const DeepCollectionEquality().hash(isInfiniteStream) ^ + const DeepCollectionEquality().hash(useMostCompatibleTranscodingProfile) ^ const DeepCollectionEquality().hash(requiresOpening) ^ const DeepCollectionEquality().hash(openToken) ^ const DeepCollectionEquality().hash(requiresClosing) ^ @@ -30197,6 +29471,7 @@ class MediaSourceInfo { const DeepCollectionEquality().hash(mediaAttachments) ^ const DeepCollectionEquality().hash(formats) ^ const DeepCollectionEquality().hash(bitrate) ^ + const DeepCollectionEquality().hash(fallbackMaxStreamingBitrate) ^ const DeepCollectionEquality().hash(timestamp) ^ const DeepCollectionEquality().hash(requiredHttpHeaders) ^ const DeepCollectionEquality().hash(transcodingUrl) ^ @@ -30205,6 +29480,7 @@ class MediaSourceInfo { const DeepCollectionEquality().hash(analyzeDurationMs) ^ const DeepCollectionEquality().hash(defaultAudioStreamIndex) ^ const DeepCollectionEquality().hash(defaultSubtitleStreamIndex) ^ + const DeepCollectionEquality().hash(hasSegments) ^ runtimeType.hashCode; } @@ -30230,6 +29506,7 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { bool? supportsDirectStream, bool? supportsDirectPlay, bool? isInfiniteStream, + bool? useMostCompatibleTranscodingProfile, bool? requiresOpening, String? openToken, bool? requiresClosing, @@ -30244,6 +29521,7 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { List? mediaAttachments, List? formats, int? bitrate, + int? fallbackMaxStreamingBitrate, enums.TransportStreamTimestamp? timestamp, Map? requiredHttpHeaders, String? transcodingUrl, @@ -30251,7 +29529,8 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { String? transcodingContainer, int? analyzeDurationMs, int? defaultAudioStreamIndex, - int? defaultSubtitleStreamIndex}) { + int? defaultSubtitleStreamIndex, + bool? hasSegments}) { return MediaSourceInfo( protocol: protocol ?? this.protocol, id: id ?? this.id, @@ -30274,6 +29553,9 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { supportsDirectStream: supportsDirectStream ?? this.supportsDirectStream, supportsDirectPlay: supportsDirectPlay ?? this.supportsDirectPlay, isInfiniteStream: isInfiniteStream ?? this.isInfiniteStream, + useMostCompatibleTranscodingProfile: + useMostCompatibleTranscodingProfile ?? + this.useMostCompatibleTranscodingProfile, requiresOpening: requiresOpening ?? this.requiresOpening, openToken: openToken ?? this.openToken, requiresClosing: requiresClosing ?? this.requiresClosing, @@ -30288,6 +29570,8 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { mediaAttachments: mediaAttachments ?? this.mediaAttachments, formats: formats ?? this.formats, bitrate: bitrate ?? this.bitrate, + fallbackMaxStreamingBitrate: + fallbackMaxStreamingBitrate ?? this.fallbackMaxStreamingBitrate, timestamp: timestamp ?? this.timestamp, requiredHttpHeaders: requiredHttpHeaders ?? this.requiredHttpHeaders, transcodingUrl: transcodingUrl ?? this.transcodingUrl, @@ -30298,7 +29582,8 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { defaultAudioStreamIndex: defaultAudioStreamIndex ?? this.defaultAudioStreamIndex, defaultSubtitleStreamIndex: - defaultSubtitleStreamIndex ?? this.defaultSubtitleStreamIndex); + defaultSubtitleStreamIndex ?? this.defaultSubtitleStreamIndex, + hasSegments: hasSegments ?? this.hasSegments); } MediaSourceInfo copyWithWrapped( @@ -30322,6 +29607,7 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { Wrapped? supportsDirectStream, Wrapped? supportsDirectPlay, Wrapped? isInfiniteStream, + Wrapped? useMostCompatibleTranscodingProfile, Wrapped? requiresOpening, Wrapped? openToken, Wrapped? requiresClosing, @@ -30336,6 +29622,7 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { Wrapped?>? mediaAttachments, Wrapped?>? formats, Wrapped? bitrate, + Wrapped? fallbackMaxStreamingBitrate, Wrapped? timestamp, Wrapped?>? requiredHttpHeaders, Wrapped? transcodingUrl, @@ -30343,7 +29630,8 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { Wrapped? transcodingContainer, Wrapped? analyzeDurationMs, Wrapped? defaultAudioStreamIndex, - Wrapped? defaultSubtitleStreamIndex}) { + Wrapped? defaultSubtitleStreamIndex, + Wrapped? hasSegments}) { return MediaSourceInfo( protocol: (protocol != null ? protocol.value : this.protocol), id: (id != null ? id.value : this.id), @@ -30381,6 +29669,10 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { isInfiniteStream: (isInfiniteStream != null ? isInfiniteStream.value : this.isInfiniteStream), + useMostCompatibleTranscodingProfile: + (useMostCompatibleTranscodingProfile != null + ? useMostCompatibleTranscodingProfile.value + : this.useMostCompatibleTranscodingProfile), requiresOpening: (requiresOpening != null ? requiresOpening.value : this.requiresOpening), @@ -30408,6 +29700,9 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { : this.mediaAttachments), formats: (formats != null ? formats.value : this.formats), bitrate: (bitrate != null ? bitrate.value : this.bitrate), + fallbackMaxStreamingBitrate: (fallbackMaxStreamingBitrate != null + ? fallbackMaxStreamingBitrate.value + : this.fallbackMaxStreamingBitrate), timestamp: (timestamp != null ? timestamp.value : this.timestamp), requiredHttpHeaders: (requiredHttpHeaders != null ? requiredHttpHeaders.value @@ -30429,7 +29724,9 @@ extension $MediaSourceInfoExtension on MediaSourceInfo { : this.defaultAudioStreamIndex), defaultSubtitleStreamIndex: (defaultSubtitleStreamIndex != null ? defaultSubtitleStreamIndex.value - : this.defaultSubtitleStreamIndex)); + : this.defaultSubtitleStreamIndex), + hasSegments: + (hasSegments != null ? hasSegments.value : this.hasSegments)); } } @@ -30451,6 +29748,7 @@ class MediaStream { this.elPresentFlag, this.blPresentFlag, this.dvBlSignalCompatibilityId, + this.rotation, this.comment, this.timeBase, this.codecTimeBase, @@ -30482,6 +29780,7 @@ class MediaStream { this.width, this.averageFrameRate, this.realFrameRate, + this.referenceFrameRate, this.profile, this.type, this.aspectRatio, @@ -30535,6 +29834,8 @@ class MediaStream { final int? blPresentFlag; @JsonKey(name: 'DvBlSignalCompatibilityId', includeIfNull: false) final int? dvBlSignalCompatibilityId; + @JsonKey(name: 'Rotation', includeIfNull: false) + final int? rotation; @JsonKey(name: 'Comment', includeIfNull: false) final String? comment; @JsonKey(name: 'TimeBase', includeIfNull: false) @@ -30617,6 +29918,8 @@ class MediaStream { final double? averageFrameRate; @JsonKey(name: 'RealFrameRate', includeIfNull: false) final double? realFrameRate; + @JsonKey(name: 'ReferenceFrameRate', includeIfNull: false) + final double? referenceFrameRate; @JsonKey(name: 'Profile', includeIfNull: false) final String? profile; @JsonKey( @@ -30708,6 +30011,9 @@ class MediaStream { const DeepCollectionEquality().equals( other.dvBlSignalCompatibilityId, dvBlSignalCompatibilityId)) && + (identical(other.rotation, rotation) || + const DeepCollectionEquality() + .equals(other.rotation, rotation)) && (identical(other.comment, comment) || const DeepCollectionEquality() .equals(other.comment, comment)) && @@ -30722,9 +30028,7 @@ class MediaStream { (identical(other.videoRange, videoRange) || const DeepCollectionEquality() .equals(other.videoRange, videoRange)) && - (identical(other.videoRangeType, videoRangeType) || - const DeepCollectionEquality() - .equals(other.videoRangeType, videoRangeType)) && + (identical(other.videoRangeType, videoRangeType) || const DeepCollectionEquality().equals(other.videoRangeType, videoRangeType)) && (identical(other.videoDoViTitle, videoDoViTitle) || const DeepCollectionEquality().equals(other.videoDoViTitle, videoDoViTitle)) && (identical(other.audioSpatialFormat, audioSpatialFormat) || const DeepCollectionEquality().equals(other.audioSpatialFormat, audioSpatialFormat)) && (identical(other.localizedUndefined, localizedUndefined) || const DeepCollectionEquality().equals(other.localizedUndefined, localizedUndefined)) && @@ -30750,6 +30054,7 @@ class MediaStream { (identical(other.width, width) || const DeepCollectionEquality().equals(other.width, width)) && (identical(other.averageFrameRate, averageFrameRate) || const DeepCollectionEquality().equals(other.averageFrameRate, averageFrameRate)) && (identical(other.realFrameRate, realFrameRate) || const DeepCollectionEquality().equals(other.realFrameRate, realFrameRate)) && + (identical(other.referenceFrameRate, referenceFrameRate) || const DeepCollectionEquality().equals(other.referenceFrameRate, referenceFrameRate)) && (identical(other.profile, profile) || const DeepCollectionEquality().equals(other.profile, profile)) && (identical(other.type, type) || const DeepCollectionEquality().equals(other.type, type)) && (identical(other.aspectRatio, aspectRatio) || const DeepCollectionEquality().equals(other.aspectRatio, aspectRatio)) && @@ -30787,6 +30092,7 @@ class MediaStream { const DeepCollectionEquality().hash(elPresentFlag) ^ const DeepCollectionEquality().hash(blPresentFlag) ^ const DeepCollectionEquality().hash(dvBlSignalCompatibilityId) ^ + const DeepCollectionEquality().hash(rotation) ^ const DeepCollectionEquality().hash(comment) ^ const DeepCollectionEquality().hash(timeBase) ^ const DeepCollectionEquality().hash(codecTimeBase) ^ @@ -30818,6 +30124,7 @@ class MediaStream { const DeepCollectionEquality().hash(width) ^ const DeepCollectionEquality().hash(averageFrameRate) ^ const DeepCollectionEquality().hash(realFrameRate) ^ + const DeepCollectionEquality().hash(referenceFrameRate) ^ const DeepCollectionEquality().hash(profile) ^ const DeepCollectionEquality().hash(type) ^ const DeepCollectionEquality().hash(aspectRatio) ^ @@ -30853,6 +30160,7 @@ extension $MediaStreamExtension on MediaStream { int? elPresentFlag, int? blPresentFlag, int? dvBlSignalCompatibilityId, + int? rotation, String? comment, String? timeBase, String? codecTimeBase, @@ -30884,6 +30192,7 @@ extension $MediaStreamExtension on MediaStream { int? width, double? averageFrameRate, double? realFrameRate, + double? referenceFrameRate, String? profile, enums.MediaStreamType? type, String? aspectRatio, @@ -30916,6 +30225,7 @@ extension $MediaStreamExtension on MediaStream { blPresentFlag: blPresentFlag ?? this.blPresentFlag, dvBlSignalCompatibilityId: dvBlSignalCompatibilityId ?? this.dvBlSignalCompatibilityId, + rotation: rotation ?? this.rotation, comment: comment ?? this.comment, timeBase: timeBase ?? this.timeBase, codecTimeBase: codecTimeBase ?? this.codecTimeBase, @@ -30948,6 +30258,7 @@ extension $MediaStreamExtension on MediaStream { width: width ?? this.width, averageFrameRate: averageFrameRate ?? this.averageFrameRate, realFrameRate: realFrameRate ?? this.realFrameRate, + referenceFrameRate: referenceFrameRate ?? this.referenceFrameRate, profile: profile ?? this.profile, type: type ?? this.type, aspectRatio: aspectRatio ?? this.aspectRatio, @@ -30982,6 +30293,7 @@ extension $MediaStreamExtension on MediaStream { Wrapped? elPresentFlag, Wrapped? blPresentFlag, Wrapped? dvBlSignalCompatibilityId, + Wrapped? rotation, Wrapped? comment, Wrapped? timeBase, Wrapped? codecTimeBase, @@ -31013,6 +30325,7 @@ extension $MediaStreamExtension on MediaStream { Wrapped? width, Wrapped? averageFrameRate, Wrapped? realFrameRate, + Wrapped? referenceFrameRate, Wrapped? profile, Wrapped? type, Wrapped? aspectRatio, @@ -31057,6 +30370,7 @@ extension $MediaStreamExtension on MediaStream { dvBlSignalCompatibilityId: (dvBlSignalCompatibilityId != null ? dvBlSignalCompatibilityId.value : this.dvBlSignalCompatibilityId), + rotation: (rotation != null ? rotation.value : this.rotation), comment: (comment != null ? comment.value : this.comment), timeBase: (timeBase != null ? timeBase.value : this.timeBase), codecTimeBase: @@ -31115,6 +30429,9 @@ extension $MediaStreamExtension on MediaStream { : this.averageFrameRate), realFrameRate: (realFrameRate != null ? realFrameRate.value : this.realFrameRate), + referenceFrameRate: (referenceFrameRate != null + ? referenceFrameRate.value + : this.referenceFrameRate), profile: (profile != null ? profile.value : this.profile), type: (type != null ? type.value : this.type), aspectRatio: @@ -32850,96 +32167,6 @@ extension $NextItemRequestDtoExtension on NextItemRequestDto { } } -@JsonSerializable(explicitToJson: true) -class NotFoundObjects { - const NotFoundObjects({ - this.movies, - this.shows, - this.episodes, - this.seasons, - this.people, - }); - - factory NotFoundObjects.fromJson(Map json) => - _$NotFoundObjectsFromJson(json); - - static const toJsonFactory = _$NotFoundObjectsToJson; - Map toJson() => _$NotFoundObjectsToJson(this); - - @JsonKey(name: 'movies', includeIfNull: false, defaultValue: []) - final List? movies; - @JsonKey(name: 'shows', includeIfNull: false, defaultValue: []) - final List? shows; - @JsonKey( - name: 'episodes', includeIfNull: false, defaultValue: []) - final List? episodes; - @JsonKey(name: 'seasons', includeIfNull: false, defaultValue: []) - final List? seasons; - @JsonKey(name: 'people', includeIfNull: false, defaultValue: []) - final List? people; - static const fromJsonFactory = _$NotFoundObjectsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is NotFoundObjects && - (identical(other.movies, movies) || - const DeepCollectionEquality().equals(other.movies, movies)) && - (identical(other.shows, shows) || - const DeepCollectionEquality().equals(other.shows, shows)) && - (identical(other.episodes, episodes) || - const DeepCollectionEquality() - .equals(other.episodes, episodes)) && - (identical(other.seasons, seasons) || - const DeepCollectionEquality() - .equals(other.seasons, seasons)) && - (identical(other.people, people) || - const DeepCollectionEquality().equals(other.people, people))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(movies) ^ - const DeepCollectionEquality().hash(shows) ^ - const DeepCollectionEquality().hash(episodes) ^ - const DeepCollectionEquality().hash(seasons) ^ - const DeepCollectionEquality().hash(people) ^ - runtimeType.hashCode; -} - -extension $NotFoundObjectsExtension on NotFoundObjects { - NotFoundObjects copyWith( - {List? movies, - List? shows, - List? episodes, - List? seasons, - List? people}) { - return NotFoundObjects( - movies: movies ?? this.movies, - shows: shows ?? this.shows, - episodes: episodes ?? this.episodes, - seasons: seasons ?? this.seasons, - people: people ?? this.people); - } - - NotFoundObjects copyWithWrapped( - {Wrapped?>? movies, - Wrapped?>? shows, - Wrapped?>? episodes, - Wrapped?>? seasons, - Wrapped?>? people}) { - return NotFoundObjects( - movies: (movies != null ? movies.value : this.movies), - shows: (shows != null ? shows.value : this.shows), - episodes: (episodes != null ? episodes.value : this.episodes), - seasons: (seasons != null ? seasons.value : this.seasons), - people: (people != null ? people.value : this.people)); - } -} - @JsonSerializable(explicitToJson: true) class OpenLiveStreamDto { const OpenLiveStreamDto({ @@ -32954,6 +32181,7 @@ class OpenLiveStreamDto { this.itemId, this.enableDirectPlay, this.enableDirectStream, + this.alwaysBurnInSubtitleWhenTranscoding, this.deviceProfile, this.directPlayProtocols, }); @@ -32986,6 +32214,8 @@ class OpenLiveStreamDto { final bool? enableDirectPlay; @JsonKey(name: 'EnableDirectStream', includeIfNull: false) final bool? enableDirectStream; + @JsonKey(name: 'AlwaysBurnInSubtitleWhenTranscoding', includeIfNull: false) + final bool? alwaysBurnInSubtitleWhenTranscoding; @JsonKey(name: 'DeviceProfile', includeIfNull: false) final DeviceProfile? deviceProfile; @JsonKey( @@ -33032,6 +32262,11 @@ class OpenLiveStreamDto { (identical(other.enableDirectStream, enableDirectStream) || const DeepCollectionEquality() .equals(other.enableDirectStream, enableDirectStream)) && + (identical(other.alwaysBurnInSubtitleWhenTranscoding, + alwaysBurnInSubtitleWhenTranscoding) || + const DeepCollectionEquality().equals( + other.alwaysBurnInSubtitleWhenTranscoding, + alwaysBurnInSubtitleWhenTranscoding)) && (identical(other.deviceProfile, deviceProfile) || const DeepCollectionEquality() .equals(other.deviceProfile, deviceProfile)) && @@ -33056,6 +32291,7 @@ class OpenLiveStreamDto { const DeepCollectionEquality().hash(itemId) ^ const DeepCollectionEquality().hash(enableDirectPlay) ^ const DeepCollectionEquality().hash(enableDirectStream) ^ + const DeepCollectionEquality().hash(alwaysBurnInSubtitleWhenTranscoding) ^ const DeepCollectionEquality().hash(deviceProfile) ^ const DeepCollectionEquality().hash(directPlayProtocols) ^ runtimeType.hashCode; @@ -33074,6 +32310,7 @@ extension $OpenLiveStreamDtoExtension on OpenLiveStreamDto { String? itemId, bool? enableDirectPlay, bool? enableDirectStream, + bool? alwaysBurnInSubtitleWhenTranscoding, DeviceProfile? deviceProfile, List? directPlayProtocols}) { return OpenLiveStreamDto( @@ -33088,6 +32325,9 @@ extension $OpenLiveStreamDtoExtension on OpenLiveStreamDto { itemId: itemId ?? this.itemId, enableDirectPlay: enableDirectPlay ?? this.enableDirectPlay, enableDirectStream: enableDirectStream ?? this.enableDirectStream, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding ?? + this.alwaysBurnInSubtitleWhenTranscoding, deviceProfile: deviceProfile ?? this.deviceProfile, directPlayProtocols: directPlayProtocols ?? this.directPlayProtocols); } @@ -33104,6 +32344,7 @@ extension $OpenLiveStreamDtoExtension on OpenLiveStreamDto { Wrapped? itemId, Wrapped? enableDirectPlay, Wrapped? enableDirectStream, + Wrapped? alwaysBurnInSubtitleWhenTranscoding, Wrapped? deviceProfile, Wrapped?>? directPlayProtocols}) { return OpenLiveStreamDto( @@ -33133,6 +32374,10 @@ extension $OpenLiveStreamDtoExtension on OpenLiveStreamDto { enableDirectStream: (enableDirectStream != null ? enableDirectStream.value : this.enableDirectStream), + alwaysBurnInSubtitleWhenTranscoding: + (alwaysBurnInSubtitleWhenTranscoding != null + ? alwaysBurnInSubtitleWhenTranscoding.value + : this.alwaysBurnInSubtitleWhenTranscoding), deviceProfile: (deviceProfile != null ? deviceProfile.value : this.deviceProfile), directPlayProtocols: (directPlayProtocols != null @@ -33829,6 +33074,7 @@ class PlaybackInfoDto { this.allowVideoStreamCopy, this.allowAudioStreamCopy, this.autoOpenLiveStream, + this.alwaysBurnInSubtitleWhenTranscoding, }); factory PlaybackInfoDto.fromJson(Map json) => @@ -33867,6 +33113,8 @@ class PlaybackInfoDto { final bool? allowAudioStreamCopy; @JsonKey(name: 'AutoOpenLiveStream', includeIfNull: false) final bool? autoOpenLiveStream; + @JsonKey(name: 'AlwaysBurnInSubtitleWhenTranscoding', includeIfNull: false) + final bool? alwaysBurnInSubtitleWhenTranscoding; static const fromJsonFactory = _$PlaybackInfoDtoFromJson; @override @@ -33916,7 +33164,12 @@ class PlaybackInfoDto { other.allowAudioStreamCopy, allowAudioStreamCopy)) && (identical(other.autoOpenLiveStream, autoOpenLiveStream) || const DeepCollectionEquality() - .equals(other.autoOpenLiveStream, autoOpenLiveStream))); + .equals(other.autoOpenLiveStream, autoOpenLiveStream)) && + (identical(other.alwaysBurnInSubtitleWhenTranscoding, + alwaysBurnInSubtitleWhenTranscoding) || + const DeepCollectionEquality().equals( + other.alwaysBurnInSubtitleWhenTranscoding, + alwaysBurnInSubtitleWhenTranscoding))); } @override @@ -33939,6 +33192,7 @@ class PlaybackInfoDto { const DeepCollectionEquality().hash(allowVideoStreamCopy) ^ const DeepCollectionEquality().hash(allowAudioStreamCopy) ^ const DeepCollectionEquality().hash(autoOpenLiveStream) ^ + const DeepCollectionEquality().hash(alwaysBurnInSubtitleWhenTranscoding) ^ runtimeType.hashCode; } @@ -33958,7 +33212,8 @@ extension $PlaybackInfoDtoExtension on PlaybackInfoDto { bool? enableTranscoding, bool? allowVideoStreamCopy, bool? allowAudioStreamCopy, - bool? autoOpenLiveStream}) { + bool? autoOpenLiveStream, + bool? alwaysBurnInSubtitleWhenTranscoding}) { return PlaybackInfoDto( userId: userId ?? this.userId, maxStreamingBitrate: maxStreamingBitrate ?? this.maxStreamingBitrate, @@ -33974,7 +33229,10 @@ extension $PlaybackInfoDtoExtension on PlaybackInfoDto { enableTranscoding: enableTranscoding ?? this.enableTranscoding, allowVideoStreamCopy: allowVideoStreamCopy ?? this.allowVideoStreamCopy, allowAudioStreamCopy: allowAudioStreamCopy ?? this.allowAudioStreamCopy, - autoOpenLiveStream: autoOpenLiveStream ?? this.autoOpenLiveStream); + autoOpenLiveStream: autoOpenLiveStream ?? this.autoOpenLiveStream, + alwaysBurnInSubtitleWhenTranscoding: + alwaysBurnInSubtitleWhenTranscoding ?? + this.alwaysBurnInSubtitleWhenTranscoding); } PlaybackInfoDto copyWithWrapped( @@ -33992,7 +33250,8 @@ extension $PlaybackInfoDtoExtension on PlaybackInfoDto { Wrapped? enableTranscoding, Wrapped? allowVideoStreamCopy, Wrapped? allowAudioStreamCopy, - Wrapped? autoOpenLiveStream}) { + Wrapped? autoOpenLiveStream, + Wrapped? alwaysBurnInSubtitleWhenTranscoding}) { return PlaybackInfoDto( userId: (userId != null ? userId.value : this.userId), maxStreamingBitrate: (maxStreamingBitrate != null @@ -34033,7 +33292,11 @@ extension $PlaybackInfoDtoExtension on PlaybackInfoDto { : this.allowAudioStreamCopy), autoOpenLiveStream: (autoOpenLiveStream != null ? autoOpenLiveStream.value - : this.autoOpenLiveStream)); + : this.autoOpenLiveStream), + alwaysBurnInSubtitleWhenTranscoding: + (alwaysBurnInSubtitleWhenTranscoding != null + ? alwaysBurnInSubtitleWhenTranscoding.value + : this.alwaysBurnInSubtitleWhenTranscoding)); } } @@ -35123,6 +34386,77 @@ extension $PlaylistCreationResultExtension on PlaylistCreationResult { } } +@JsonSerializable(explicitToJson: true) +class PlaylistDto { + const PlaylistDto({ + this.openAccess, + this.shares, + this.itemIds, + }); + + factory PlaylistDto.fromJson(Map json) => + _$PlaylistDtoFromJson(json); + + static const toJsonFactory = _$PlaylistDtoToJson; + Map toJson() => _$PlaylistDtoToJson(this); + + @JsonKey(name: 'OpenAccess', includeIfNull: false) + final bool? openAccess; + @JsonKey( + name: 'Shares', + includeIfNull: false, + defaultValue: []) + final List? shares; + @JsonKey(name: 'ItemIds', includeIfNull: false, defaultValue: []) + final List? itemIds; + static const fromJsonFactory = _$PlaylistDtoFromJson; + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other is PlaylistDto && + (identical(other.openAccess, openAccess) || + const DeepCollectionEquality() + .equals(other.openAccess, openAccess)) && + (identical(other.shares, shares) || + const DeepCollectionEquality().equals(other.shares, shares)) && + (identical(other.itemIds, itemIds) || + const DeepCollectionEquality().equals(other.itemIds, itemIds))); + } + + @override + String toString() => jsonEncode(this); + + @override + int get hashCode => + const DeepCollectionEquality().hash(openAccess) ^ + const DeepCollectionEquality().hash(shares) ^ + const DeepCollectionEquality().hash(itemIds) ^ + runtimeType.hashCode; +} + +extension $PlaylistDtoExtension on PlaylistDto { + PlaylistDto copyWith( + {bool? openAccess, + List? shares, + List? itemIds}) { + return PlaylistDto( + openAccess: openAccess ?? this.openAccess, + shares: shares ?? this.shares, + itemIds: itemIds ?? this.itemIds); + } + + PlaylistDto copyWithWrapped( + {Wrapped? openAccess, + Wrapped?>? shares, + Wrapped?>? itemIds}) { + return PlaylistDto( + openAccess: (openAccess != null ? openAccess.value : this.openAccess), + shares: (shares != null ? shares.value : this.shares), + itemIds: (itemIds != null ? itemIds.value : this.itemIds)); + } +} + @JsonSerializable(explicitToJson: true) class PlaylistUserPermissions { const PlaylistUserPermissions({ @@ -38183,76 +37517,6 @@ extension $RemoveFromPlaylistRequestDtoExtension } } -@JsonSerializable(explicitToJson: true) -class ReportPlaybackOptions { - const ReportPlaybackOptions({ - this.maxDataAge, - this.backupPath, - this.maxBackupFiles, - }); - - factory ReportPlaybackOptions.fromJson(Map json) => - _$ReportPlaybackOptionsFromJson(json); - - static const toJsonFactory = _$ReportPlaybackOptionsToJson; - Map toJson() => _$ReportPlaybackOptionsToJson(this); - - @JsonKey(name: 'MaxDataAge', includeIfNull: false) - final int? maxDataAge; - @JsonKey(name: 'BackupPath', includeIfNull: false) - final String? backupPath; - @JsonKey(name: 'MaxBackupFiles', includeIfNull: false) - final int? maxBackupFiles; - static const fromJsonFactory = _$ReportPlaybackOptionsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is ReportPlaybackOptions && - (identical(other.maxDataAge, maxDataAge) || - const DeepCollectionEquality() - .equals(other.maxDataAge, maxDataAge)) && - (identical(other.backupPath, backupPath) || - const DeepCollectionEquality() - .equals(other.backupPath, backupPath)) && - (identical(other.maxBackupFiles, maxBackupFiles) || - const DeepCollectionEquality() - .equals(other.maxBackupFiles, maxBackupFiles))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(maxDataAge) ^ - const DeepCollectionEquality().hash(backupPath) ^ - const DeepCollectionEquality().hash(maxBackupFiles) ^ - runtimeType.hashCode; -} - -extension $ReportPlaybackOptionsExtension on ReportPlaybackOptions { - ReportPlaybackOptions copyWith( - {int? maxDataAge, String? backupPath, int? maxBackupFiles}) { - return ReportPlaybackOptions( - maxDataAge: maxDataAge ?? this.maxDataAge, - backupPath: backupPath ?? this.backupPath, - maxBackupFiles: maxBackupFiles ?? this.maxBackupFiles); - } - - ReportPlaybackOptions copyWithWrapped( - {Wrapped? maxDataAge, - Wrapped? backupPath, - Wrapped? maxBackupFiles}) { - return ReportPlaybackOptions( - maxDataAge: (maxDataAge != null ? maxDataAge.value : this.maxDataAge), - backupPath: (backupPath != null ? backupPath.value : this.backupPath), - maxBackupFiles: (maxBackupFiles != null - ? maxBackupFiles.value - : this.maxBackupFiles)); - } -} - @JsonSerializable(explicitToJson: true) class RepositoryInfo { const RepositoryInfo({ @@ -40215,7 +39479,6 @@ class ServerConfiguration { this.enableCaseSensitiveItemIds, this.disableLiveTvChannelUserDataName, this.metadataPath, - this.metadataNetworkPath, this.preferredMetadataLanguage, this.metadataCountryCode, this.sortReplaceCharacters, @@ -40290,8 +39553,6 @@ class ServerConfiguration { final bool? disableLiveTvChannelUserDataName; @JsonKey(name: 'MetadataPath', includeIfNull: false) final String? metadataPath; - @JsonKey(name: 'MetadataNetworkPath', includeIfNull: false) - final String? metadataNetworkPath; @JsonKey(name: 'PreferredMetadataLanguage', includeIfNull: false) final String? preferredMetadataLanguage; @JsonKey(name: 'MetadataCountryCode', includeIfNull: false) @@ -40454,9 +39715,8 @@ class ServerConfiguration { (identical(other.metadataPath, metadataPath) || const DeepCollectionEquality() .equals(other.metadataPath, metadataPath)) && - (identical(other.metadataNetworkPath, metadataNetworkPath) || - const DeepCollectionEquality().equals(other.metadataNetworkPath, metadataNetworkPath)) && - (identical(other.preferredMetadataLanguage, preferredMetadataLanguage) || const DeepCollectionEquality().equals(other.preferredMetadataLanguage, preferredMetadataLanguage)) && + (identical(other.preferredMetadataLanguage, preferredMetadataLanguage) || + const DeepCollectionEquality().equals(other.preferredMetadataLanguage, preferredMetadataLanguage)) && (identical(other.metadataCountryCode, metadataCountryCode) || const DeepCollectionEquality().equals(other.metadataCountryCode, metadataCountryCode)) && (identical(other.sortReplaceCharacters, sortReplaceCharacters) || const DeepCollectionEquality().equals(other.sortReplaceCharacters, sortReplaceCharacters)) && (identical(other.sortRemoveCharacters, sortRemoveCharacters) || const DeepCollectionEquality().equals(other.sortRemoveCharacters, sortRemoveCharacters)) && @@ -40517,7 +39777,6 @@ class ServerConfiguration { const DeepCollectionEquality().hash(enableCaseSensitiveItemIds) ^ const DeepCollectionEquality().hash(disableLiveTvChannelUserDataName) ^ const DeepCollectionEquality().hash(metadataPath) ^ - const DeepCollectionEquality().hash(metadataNetworkPath) ^ const DeepCollectionEquality().hash(preferredMetadataLanguage) ^ const DeepCollectionEquality().hash(metadataCountryCode) ^ const DeepCollectionEquality().hash(sortReplaceCharacters) ^ @@ -40577,7 +39836,6 @@ extension $ServerConfigurationExtension on ServerConfiguration { bool? enableCaseSensitiveItemIds, bool? disableLiveTvChannelUserDataName, String? metadataPath, - String? metadataNetworkPath, String? preferredMetadataLanguage, String? metadataCountryCode, List? sortReplaceCharacters, @@ -40638,7 +39896,6 @@ extension $ServerConfigurationExtension on ServerConfiguration { disableLiveTvChannelUserDataName: disableLiveTvChannelUserDataName ?? this.disableLiveTvChannelUserDataName, metadataPath: metadataPath ?? this.metadataPath, - metadataNetworkPath: metadataNetworkPath ?? this.metadataNetworkPath, preferredMetadataLanguage: preferredMetadataLanguage ?? this.preferredMetadataLanguage, metadataCountryCode: metadataCountryCode ?? this.metadataCountryCode, @@ -40717,7 +39974,6 @@ extension $ServerConfigurationExtension on ServerConfiguration { Wrapped? enableCaseSensitiveItemIds, Wrapped? disableLiveTvChannelUserDataName, Wrapped? metadataPath, - Wrapped? metadataNetworkPath, Wrapped? preferredMetadataLanguage, Wrapped? metadataCountryCode, Wrapped?>? sortReplaceCharacters, @@ -40793,9 +40049,6 @@ extension $ServerConfigurationExtension on ServerConfiguration { : this.disableLiveTvChannelUserDataName), metadataPath: (metadataPath != null ? metadataPath.value : this.metadataPath), - metadataNetworkPath: (metadataNetworkPath != null - ? metadataNetworkPath.value - : this.metadataNetworkPath), preferredMetadataLanguage: (preferredMetadataLanguage != null ? preferredMetadataLanguage.value : this.preferredMetadataLanguage), @@ -40881,7 +40134,8 @@ extension $ServerConfigurationExtension on ServerConfiguration { ? slowResponseThresholdMs.value : this.slowResponseThresholdMs), corsHosts: (corsHosts != null ? corsHosts.value : this.corsHosts), - activityLogRetentionDays: (activityLogRetentionDays != null ? activityLogRetentionDays.value : this.activityLogRetentionDays), + activityLogRetentionDays: + (activityLogRetentionDays != null ? activityLogRetentionDays.value : this.activityLogRetentionDays), libraryScanFanoutConcurrency: (libraryScanFanoutConcurrency != null ? libraryScanFanoutConcurrency.value : this.libraryScanFanoutConcurrency), libraryMetadataRefreshConcurrency: (libraryMetadataRefreshConcurrency != null ? libraryMetadataRefreshConcurrency.value : this.libraryMetadataRefreshConcurrency), removeOldPlugins: (removeOldPlugins != null ? removeOldPlugins.value : this.removeOldPlugins), @@ -41111,8 +40365,8 @@ extension $ServerShuttingDownMessageExtension on ServerShuttingDownMessage { } @JsonSerializable(explicitToJson: true) -class SessionInfo { - const SessionInfo({ +class SessionInfoDto { + const SessionInfoDto({ this.playState, this.additionalUsers, this.capabilities, @@ -41144,11 +40398,11 @@ class SessionInfo { this.supportedCommands, }); - factory SessionInfo.fromJson(Map json) => - _$SessionInfoFromJson(json); + factory SessionInfoDto.fromJson(Map json) => + _$SessionInfoDtoFromJson(json); - static const toJsonFactory = _$SessionInfoToJson; - Map toJson() => _$SessionInfoToJson(this); + static const toJsonFactory = _$SessionInfoDtoToJson; + Map toJson() => _$SessionInfoDtoToJson(this); @JsonKey(name: 'PlayState', includeIfNull: false) final PlayerStateInfo? playState; @@ -41158,7 +40412,7 @@ class SessionInfo { defaultValue: []) final List? additionalUsers; @JsonKey(name: 'Capabilities', includeIfNull: false) - final ClientCapabilities? capabilities; + final ClientCapabilitiesDto? capabilities; @JsonKey(name: 'RemoteEndPoint', includeIfNull: false) final String? remoteEndPoint; @JsonKey( @@ -41227,12 +40481,12 @@ class SessionInfo { fromJson: generalCommandTypeListFromJson, ) final List? supportedCommands; - static const fromJsonFactory = _$SessionInfoFromJson; + static const fromJsonFactory = _$SessionInfoDtoFromJson; @override bool operator ==(Object other) { return identical(this, other) || - (other is SessionInfo && + (other is SessionInfoDto && (identical(other.playState, playState) || const DeepCollectionEquality() .equals(other.playState, playState)) && @@ -41343,11 +40597,11 @@ class SessionInfo { runtimeType.hashCode; } -extension $SessionInfoExtension on SessionInfo { - SessionInfo copyWith( +extension $SessionInfoDtoExtension on SessionInfoDto { + SessionInfoDto copyWith( {PlayerStateInfo? playState, List? additionalUsers, - ClientCapabilities? capabilities, + ClientCapabilitiesDto? capabilities, String? remoteEndPoint, List? playableMediaTypes, String? id, @@ -41374,7 +40628,7 @@ extension $SessionInfoExtension on SessionInfo { String? serverId, String? userPrimaryImageTag, List? supportedCommands}) { - return SessionInfo( + return SessionInfoDto( playState: playState ?? this.playState, additionalUsers: additionalUsers ?? this.additionalUsers, capabilities: capabilities ?? this.capabilities, @@ -41408,10 +40662,10 @@ extension $SessionInfoExtension on SessionInfo { supportedCommands: supportedCommands ?? this.supportedCommands); } - SessionInfo copyWithWrapped( + SessionInfoDto copyWithWrapped( {Wrapped? playState, Wrapped?>? additionalUsers, - Wrapped? capabilities, + Wrapped? capabilities, Wrapped? remoteEndPoint, Wrapped?>? playableMediaTypes, Wrapped? id, @@ -41438,7 +40692,7 @@ extension $SessionInfoExtension on SessionInfo { Wrapped? serverId, Wrapped? userPrimaryImageTag, Wrapped?>? supportedCommands}) { - return SessionInfo( + return SessionInfoDto( playState: (playState != null ? playState.value : this.playState), additionalUsers: (additionalUsers != null ? additionalUsers.value @@ -41522,8 +40776,8 @@ class SessionsMessage { static const toJsonFactory = _$SessionsMessageToJson; Map toJson() => _$SessionsMessageToJson(this); - @JsonKey(name: 'Data', includeIfNull: false, defaultValue: []) - final List? data; + @JsonKey(name: 'Data', includeIfNull: false, defaultValue: []) + final List? data; @JsonKey(name: 'MessageId', includeIfNull: false) final String? messageId; @JsonKey( @@ -41567,7 +40821,7 @@ class SessionsMessage { extension $SessionsMessageExtension on SessionsMessage { SessionsMessage copyWith( - {List? data, + {List? data, String? messageId, enums.SessionMessageType? messageType}) { return SessionsMessage( @@ -41577,7 +40831,7 @@ extension $SessionsMessageExtension on SessionsMessage { } SessionsMessage copyWithWrapped( - {Wrapped?>? data, + {Wrapped?>? data, Wrapped? messageId, Wrapped? messageType}) { return SessionsMessage( @@ -44734,825 +43988,6 @@ extension $TrailerInfoRemoteSearchQueryExtension } } -@JsonSerializable(explicitToJson: true) -class TraktEpisode { - const TraktEpisode({ - this.season, - this.number, - this.title, - this.ids, - }); - - factory TraktEpisode.fromJson(Map json) => - _$TraktEpisodeFromJson(json); - - static const toJsonFactory = _$TraktEpisodeToJson; - Map toJson() => _$TraktEpisodeToJson(this); - - @JsonKey(name: 'season', includeIfNull: false) - final int? season; - @JsonKey(name: 'number', includeIfNull: false) - final int? number; - @JsonKey(name: 'title', includeIfNull: false) - final String? title; - @JsonKey(name: 'ids', includeIfNull: false) - final TraktEpisodeId? ids; - static const fromJsonFactory = _$TraktEpisodeFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktEpisode && - (identical(other.season, season) || - const DeepCollectionEquality().equals(other.season, season)) && - (identical(other.number, number) || - const DeepCollectionEquality().equals(other.number, number)) && - (identical(other.title, title) || - const DeepCollectionEquality().equals(other.title, title)) && - (identical(other.ids, ids) || - const DeepCollectionEquality().equals(other.ids, ids))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(season) ^ - const DeepCollectionEquality().hash(number) ^ - const DeepCollectionEquality().hash(title) ^ - const DeepCollectionEquality().hash(ids) ^ - runtimeType.hashCode; -} - -extension $TraktEpisodeExtension on TraktEpisode { - TraktEpisode copyWith( - {int? season, int? number, String? title, TraktEpisodeId? ids}) { - return TraktEpisode( - season: season ?? this.season, - number: number ?? this.number, - title: title ?? this.title, - ids: ids ?? this.ids); - } - - TraktEpisode copyWithWrapped( - {Wrapped? season, - Wrapped? number, - Wrapped? title, - Wrapped? ids}) { - return TraktEpisode( - season: (season != null ? season.value : this.season), - number: (number != null ? number.value : this.number), - title: (title != null ? title.value : this.title), - ids: (ids != null ? ids.value : this.ids)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktEpisodeId { - const TraktEpisodeId({ - this.trakt, - this.slug, - this.imdb, - this.tmdb, - this.tvdb, - this.tvrage, - }); - - factory TraktEpisodeId.fromJson(Map json) => - _$TraktEpisodeIdFromJson(json); - - static const toJsonFactory = _$TraktEpisodeIdToJson; - Map toJson() => _$TraktEpisodeIdToJson(this); - - @JsonKey(name: 'trakt', includeIfNull: false) - final int? trakt; - @JsonKey(name: 'slug', includeIfNull: false) - final String? slug; - @JsonKey(name: 'imdb', includeIfNull: false) - final String? imdb; - @JsonKey(name: 'tmdb', includeIfNull: false) - final int? tmdb; - @JsonKey(name: 'tvdb', includeIfNull: false) - final String? tvdb; - @JsonKey(name: 'tvrage', includeIfNull: false) - final String? tvrage; - static const fromJsonFactory = _$TraktEpisodeIdFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktEpisodeId && - (identical(other.trakt, trakt) || - const DeepCollectionEquality().equals(other.trakt, trakt)) && - (identical(other.slug, slug) || - const DeepCollectionEquality().equals(other.slug, slug)) && - (identical(other.imdb, imdb) || - const DeepCollectionEquality().equals(other.imdb, imdb)) && - (identical(other.tmdb, tmdb) || - const DeepCollectionEquality().equals(other.tmdb, tmdb)) && - (identical(other.tvdb, tvdb) || - const DeepCollectionEquality().equals(other.tvdb, tvdb)) && - (identical(other.tvrage, tvrage) || - const DeepCollectionEquality().equals(other.tvrage, tvrage))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(trakt) ^ - const DeepCollectionEquality().hash(slug) ^ - const DeepCollectionEquality().hash(imdb) ^ - const DeepCollectionEquality().hash(tmdb) ^ - const DeepCollectionEquality().hash(tvdb) ^ - const DeepCollectionEquality().hash(tvrage) ^ - runtimeType.hashCode; -} - -extension $TraktEpisodeIdExtension on TraktEpisodeId { - TraktEpisodeId copyWith( - {int? trakt, - String? slug, - String? imdb, - int? tmdb, - String? tvdb, - String? tvrage}) { - return TraktEpisodeId( - trakt: trakt ?? this.trakt, - slug: slug ?? this.slug, - imdb: imdb ?? this.imdb, - tmdb: tmdb ?? this.tmdb, - tvdb: tvdb ?? this.tvdb, - tvrage: tvrage ?? this.tvrage); - } - - TraktEpisodeId copyWithWrapped( - {Wrapped? trakt, - Wrapped? slug, - Wrapped? imdb, - Wrapped? tmdb, - Wrapped? tvdb, - Wrapped? tvrage}) { - return TraktEpisodeId( - trakt: (trakt != null ? trakt.value : this.trakt), - slug: (slug != null ? slug.value : this.slug), - imdb: (imdb != null ? imdb.value : this.imdb), - tmdb: (tmdb != null ? tmdb.value : this.tmdb), - tvdb: (tvdb != null ? tvdb.value : this.tvdb), - tvrage: (tvrage != null ? tvrage.value : this.tvrage)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktMovie { - const TraktMovie({ - this.title, - this.year, - this.ids, - }); - - factory TraktMovie.fromJson(Map json) => - _$TraktMovieFromJson(json); - - static const toJsonFactory = _$TraktMovieToJson; - Map toJson() => _$TraktMovieToJson(this); - - @JsonKey(name: 'title', includeIfNull: false) - final String? title; - @JsonKey(name: 'year', includeIfNull: false) - final int? year; - @JsonKey(name: 'ids', includeIfNull: false) - final TraktMovieId? ids; - static const fromJsonFactory = _$TraktMovieFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktMovie && - (identical(other.title, title) || - const DeepCollectionEquality().equals(other.title, title)) && - (identical(other.year, year) || - const DeepCollectionEquality().equals(other.year, year)) && - (identical(other.ids, ids) || - const DeepCollectionEquality().equals(other.ids, ids))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(title) ^ - const DeepCollectionEquality().hash(year) ^ - const DeepCollectionEquality().hash(ids) ^ - runtimeType.hashCode; -} - -extension $TraktMovieExtension on TraktMovie { - TraktMovie copyWith({String? title, int? year, TraktMovieId? ids}) { - return TraktMovie( - title: title ?? this.title, - year: year ?? this.year, - ids: ids ?? this.ids); - } - - TraktMovie copyWithWrapped( - {Wrapped? title, - Wrapped? year, - Wrapped? ids}) { - return TraktMovie( - title: (title != null ? title.value : this.title), - year: (year != null ? year.value : this.year), - ids: (ids != null ? ids.value : this.ids)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktMovieId { - const TraktMovieId({ - this.trakt, - this.slug, - this.imdb, - this.tmdb, - }); - - factory TraktMovieId.fromJson(Map json) => - _$TraktMovieIdFromJson(json); - - static const toJsonFactory = _$TraktMovieIdToJson; - Map toJson() => _$TraktMovieIdToJson(this); - - @JsonKey(name: 'trakt', includeIfNull: false) - final int? trakt; - @JsonKey(name: 'slug', includeIfNull: false) - final String? slug; - @JsonKey(name: 'imdb', includeIfNull: false) - final String? imdb; - @JsonKey(name: 'tmdb', includeIfNull: false) - final int? tmdb; - static const fromJsonFactory = _$TraktMovieIdFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktMovieId && - (identical(other.trakt, trakt) || - const DeepCollectionEquality().equals(other.trakt, trakt)) && - (identical(other.slug, slug) || - const DeepCollectionEquality().equals(other.slug, slug)) && - (identical(other.imdb, imdb) || - const DeepCollectionEquality().equals(other.imdb, imdb)) && - (identical(other.tmdb, tmdb) || - const DeepCollectionEquality().equals(other.tmdb, tmdb))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(trakt) ^ - const DeepCollectionEquality().hash(slug) ^ - const DeepCollectionEquality().hash(imdb) ^ - const DeepCollectionEquality().hash(tmdb) ^ - runtimeType.hashCode; -} - -extension $TraktMovieIdExtension on TraktMovieId { - TraktMovieId copyWith({int? trakt, String? slug, String? imdb, int? tmdb}) { - return TraktMovieId( - trakt: trakt ?? this.trakt, - slug: slug ?? this.slug, - imdb: imdb ?? this.imdb, - tmdb: tmdb ?? this.tmdb); - } - - TraktMovieId copyWithWrapped( - {Wrapped? trakt, - Wrapped? slug, - Wrapped? imdb, - Wrapped? tmdb}) { - return TraktMovieId( - trakt: (trakt != null ? trakt.value : this.trakt), - slug: (slug != null ? slug.value : this.slug), - imdb: (imdb != null ? imdb.value : this.imdb), - tmdb: (tmdb != null ? tmdb.value : this.tmdb)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktPerson { - const TraktPerson({ - this.name, - this.ids, - }); - - factory TraktPerson.fromJson(Map json) => - _$TraktPersonFromJson(json); - - static const toJsonFactory = _$TraktPersonToJson; - Map toJson() => _$TraktPersonToJson(this); - - @JsonKey(name: 'name', includeIfNull: false) - final String? name; - @JsonKey(name: 'ids', includeIfNull: false) - final TraktPersonId? ids; - static const fromJsonFactory = _$TraktPersonFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktPerson && - (identical(other.name, name) || - const DeepCollectionEquality().equals(other.name, name)) && - (identical(other.ids, ids) || - const DeepCollectionEquality().equals(other.ids, ids))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(name) ^ - const DeepCollectionEquality().hash(ids) ^ - runtimeType.hashCode; -} - -extension $TraktPersonExtension on TraktPerson { - TraktPerson copyWith({String? name, TraktPersonId? ids}) { - return TraktPerson(name: name ?? this.name, ids: ids ?? this.ids); - } - - TraktPerson copyWithWrapped( - {Wrapped? name, Wrapped? ids}) { - return TraktPerson( - name: (name != null ? name.value : this.name), - ids: (ids != null ? ids.value : this.ids)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktPersonId { - const TraktPersonId({ - this.trakt, - this.slug, - this.imdb, - this.tmdb, - this.tvrage, - }); - - factory TraktPersonId.fromJson(Map json) => - _$TraktPersonIdFromJson(json); - - static const toJsonFactory = _$TraktPersonIdToJson; - Map toJson() => _$TraktPersonIdToJson(this); - - @JsonKey(name: 'trakt', includeIfNull: false) - final int? trakt; - @JsonKey(name: 'slug', includeIfNull: false) - final String? slug; - @JsonKey(name: 'imdb', includeIfNull: false) - final String? imdb; - @JsonKey(name: 'tmdb', includeIfNull: false) - final int? tmdb; - @JsonKey(name: 'tvrage', includeIfNull: false) - final int? tvrage; - static const fromJsonFactory = _$TraktPersonIdFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktPersonId && - (identical(other.trakt, trakt) || - const DeepCollectionEquality().equals(other.trakt, trakt)) && - (identical(other.slug, slug) || - const DeepCollectionEquality().equals(other.slug, slug)) && - (identical(other.imdb, imdb) || - const DeepCollectionEquality().equals(other.imdb, imdb)) && - (identical(other.tmdb, tmdb) || - const DeepCollectionEquality().equals(other.tmdb, tmdb)) && - (identical(other.tvrage, tvrage) || - const DeepCollectionEquality().equals(other.tvrage, tvrage))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(trakt) ^ - const DeepCollectionEquality().hash(slug) ^ - const DeepCollectionEquality().hash(imdb) ^ - const DeepCollectionEquality().hash(tmdb) ^ - const DeepCollectionEquality().hash(tvrage) ^ - runtimeType.hashCode; -} - -extension $TraktPersonIdExtension on TraktPersonId { - TraktPersonId copyWith( - {int? trakt, String? slug, String? imdb, int? tmdb, int? tvrage}) { - return TraktPersonId( - trakt: trakt ?? this.trakt, - slug: slug ?? this.slug, - imdb: imdb ?? this.imdb, - tmdb: tmdb ?? this.tmdb, - tvrage: tvrage ?? this.tvrage); - } - - TraktPersonId copyWithWrapped( - {Wrapped? trakt, - Wrapped? slug, - Wrapped? imdb, - Wrapped? tmdb, - Wrapped? tvrage}) { - return TraktPersonId( - trakt: (trakt != null ? trakt.value : this.trakt), - slug: (slug != null ? slug.value : this.slug), - imdb: (imdb != null ? imdb.value : this.imdb), - tmdb: (tmdb != null ? tmdb.value : this.tmdb), - tvrage: (tvrage != null ? tvrage.value : this.tvrage)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktSeason { - const TraktSeason({ - this.number, - this.ids, - }); - - factory TraktSeason.fromJson(Map json) => - _$TraktSeasonFromJson(json); - - static const toJsonFactory = _$TraktSeasonToJson; - Map toJson() => _$TraktSeasonToJson(this); - - @JsonKey(name: 'number', includeIfNull: false) - final int? number; - @JsonKey(name: 'ids', includeIfNull: false) - final TraktSeasonId? ids; - static const fromJsonFactory = _$TraktSeasonFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktSeason && - (identical(other.number, number) || - const DeepCollectionEquality().equals(other.number, number)) && - (identical(other.ids, ids) || - const DeepCollectionEquality().equals(other.ids, ids))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(number) ^ - const DeepCollectionEquality().hash(ids) ^ - runtimeType.hashCode; -} - -extension $TraktSeasonExtension on TraktSeason { - TraktSeason copyWith({int? number, TraktSeasonId? ids}) { - return TraktSeason(number: number ?? this.number, ids: ids ?? this.ids); - } - - TraktSeason copyWithWrapped( - {Wrapped? number, Wrapped? ids}) { - return TraktSeason( - number: (number != null ? number.value : this.number), - ids: (ids != null ? ids.value : this.ids)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktSeasonId { - const TraktSeasonId({ - this.trakt, - this.slug, - this.tmdb, - this.tvdb, - this.tvrage, - }); - - factory TraktSeasonId.fromJson(Map json) => - _$TraktSeasonIdFromJson(json); - - static const toJsonFactory = _$TraktSeasonIdToJson; - Map toJson() => _$TraktSeasonIdToJson(this); - - @JsonKey(name: 'trakt', includeIfNull: false) - final int? trakt; - @JsonKey(name: 'slug', includeIfNull: false) - final String? slug; - @JsonKey(name: 'tmdb', includeIfNull: false) - final int? tmdb; - @JsonKey(name: 'tvdb', includeIfNull: false) - final int? tvdb; - @JsonKey(name: 'tvrage', includeIfNull: false) - final int? tvrage; - static const fromJsonFactory = _$TraktSeasonIdFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktSeasonId && - (identical(other.trakt, trakt) || - const DeepCollectionEquality().equals(other.trakt, trakt)) && - (identical(other.slug, slug) || - const DeepCollectionEquality().equals(other.slug, slug)) && - (identical(other.tmdb, tmdb) || - const DeepCollectionEquality().equals(other.tmdb, tmdb)) && - (identical(other.tvdb, tvdb) || - const DeepCollectionEquality().equals(other.tvdb, tvdb)) && - (identical(other.tvrage, tvrage) || - const DeepCollectionEquality().equals(other.tvrage, tvrage))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(trakt) ^ - const DeepCollectionEquality().hash(slug) ^ - const DeepCollectionEquality().hash(tmdb) ^ - const DeepCollectionEquality().hash(tvdb) ^ - const DeepCollectionEquality().hash(tvrage) ^ - runtimeType.hashCode; -} - -extension $TraktSeasonIdExtension on TraktSeasonId { - TraktSeasonId copyWith( - {int? trakt, String? slug, int? tmdb, int? tvdb, int? tvrage}) { - return TraktSeasonId( - trakt: trakt ?? this.trakt, - slug: slug ?? this.slug, - tmdb: tmdb ?? this.tmdb, - tvdb: tvdb ?? this.tvdb, - tvrage: tvrage ?? this.tvrage); - } - - TraktSeasonId copyWithWrapped( - {Wrapped? trakt, - Wrapped? slug, - Wrapped? tmdb, - Wrapped? tvdb, - Wrapped? tvrage}) { - return TraktSeasonId( - trakt: (trakt != null ? trakt.value : this.trakt), - slug: (slug != null ? slug.value : this.slug), - tmdb: (tmdb != null ? tmdb.value : this.tmdb), - tvdb: (tvdb != null ? tvdb.value : this.tvdb), - tvrage: (tvrage != null ? tvrage.value : this.tvrage)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktShow { - const TraktShow({ - this.title, - this.year, - this.ids, - }); - - factory TraktShow.fromJson(Map json) => - _$TraktShowFromJson(json); - - static const toJsonFactory = _$TraktShowToJson; - Map toJson() => _$TraktShowToJson(this); - - @JsonKey(name: 'title', includeIfNull: false) - final String? title; - @JsonKey(name: 'year', includeIfNull: false) - final int? year; - @JsonKey(name: 'ids', includeIfNull: false) - final TraktShowId? ids; - static const fromJsonFactory = _$TraktShowFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktShow && - (identical(other.title, title) || - const DeepCollectionEquality().equals(other.title, title)) && - (identical(other.year, year) || - const DeepCollectionEquality().equals(other.year, year)) && - (identical(other.ids, ids) || - const DeepCollectionEquality().equals(other.ids, ids))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(title) ^ - const DeepCollectionEquality().hash(year) ^ - const DeepCollectionEquality().hash(ids) ^ - runtimeType.hashCode; -} - -extension $TraktShowExtension on TraktShow { - TraktShow copyWith({String? title, int? year, TraktShowId? ids}) { - return TraktShow( - title: title ?? this.title, - year: year ?? this.year, - ids: ids ?? this.ids); - } - - TraktShow copyWithWrapped( - {Wrapped? title, - Wrapped? year, - Wrapped? ids}) { - return TraktShow( - title: (title != null ? title.value : this.title), - year: (year != null ? year.value : this.year), - ids: (ids != null ? ids.value : this.ids)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktShowId { - const TraktShowId({ - this.trakt, - this.slug, - this.imdb, - this.tmdb, - this.tvdb, - this.tvrage, - }); - - factory TraktShowId.fromJson(Map json) => - _$TraktShowIdFromJson(json); - - static const toJsonFactory = _$TraktShowIdToJson; - Map toJson() => _$TraktShowIdToJson(this); - - @JsonKey(name: 'trakt', includeIfNull: false) - final int? trakt; - @JsonKey(name: 'slug', includeIfNull: false) - final String? slug; - @JsonKey(name: 'imdb', includeIfNull: false) - final String? imdb; - @JsonKey(name: 'tmdb', includeIfNull: false) - final int? tmdb; - @JsonKey(name: 'tvdb', includeIfNull: false) - final String? tvdb; - @JsonKey(name: 'tvrage', includeIfNull: false) - final String? tvrage; - static const fromJsonFactory = _$TraktShowIdFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktShowId && - (identical(other.trakt, trakt) || - const DeepCollectionEquality().equals(other.trakt, trakt)) && - (identical(other.slug, slug) || - const DeepCollectionEquality().equals(other.slug, slug)) && - (identical(other.imdb, imdb) || - const DeepCollectionEquality().equals(other.imdb, imdb)) && - (identical(other.tmdb, tmdb) || - const DeepCollectionEquality().equals(other.tmdb, tmdb)) && - (identical(other.tvdb, tvdb) || - const DeepCollectionEquality().equals(other.tvdb, tvdb)) && - (identical(other.tvrage, tvrage) || - const DeepCollectionEquality().equals(other.tvrage, tvrage))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(trakt) ^ - const DeepCollectionEquality().hash(slug) ^ - const DeepCollectionEquality().hash(imdb) ^ - const DeepCollectionEquality().hash(tmdb) ^ - const DeepCollectionEquality().hash(tvdb) ^ - const DeepCollectionEquality().hash(tvrage) ^ - runtimeType.hashCode; -} - -extension $TraktShowIdExtension on TraktShowId { - TraktShowId copyWith( - {int? trakt, - String? slug, - String? imdb, - int? tmdb, - String? tvdb, - String? tvrage}) { - return TraktShowId( - trakt: trakt ?? this.trakt, - slug: slug ?? this.slug, - imdb: imdb ?? this.imdb, - tmdb: tmdb ?? this.tmdb, - tvdb: tvdb ?? this.tvdb, - tvrage: tvrage ?? this.tvrage); - } - - TraktShowId copyWithWrapped( - {Wrapped? trakt, - Wrapped? slug, - Wrapped? imdb, - Wrapped? tmdb, - Wrapped? tvdb, - Wrapped? tvrage}) { - return TraktShowId( - trakt: (trakt != null ? trakt.value : this.trakt), - slug: (slug != null ? slug.value : this.slug), - imdb: (imdb != null ? imdb.value : this.imdb), - tmdb: (tmdb != null ? tmdb.value : this.tmdb), - tvdb: (tvdb != null ? tvdb.value : this.tvdb), - tvrage: (tvrage != null ? tvrage.value : this.tvrage)); - } -} - -@JsonSerializable(explicitToJson: true) -class TraktSyncResponse { - const TraktSyncResponse({ - this.added, - this.deleted, - this.updated, - this.notFound, - }); - - factory TraktSyncResponse.fromJson(Map json) => - _$TraktSyncResponseFromJson(json); - - static const toJsonFactory = _$TraktSyncResponseToJson; - Map toJson() => _$TraktSyncResponseToJson(this); - - @JsonKey(name: 'added', includeIfNull: false) - final Items? added; - @JsonKey(name: 'deleted', includeIfNull: false) - final Items? deleted; - @JsonKey(name: 'updated', includeIfNull: false) - final Items? updated; - @JsonKey(name: 'not_found', includeIfNull: false) - final NotFoundObjects? notFound; - static const fromJsonFactory = _$TraktSyncResponseFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TraktSyncResponse && - (identical(other.added, added) || - const DeepCollectionEquality().equals(other.added, added)) && - (identical(other.deleted, deleted) || - const DeepCollectionEquality() - .equals(other.deleted, deleted)) && - (identical(other.updated, updated) || - const DeepCollectionEquality() - .equals(other.updated, updated)) && - (identical(other.notFound, notFound) || - const DeepCollectionEquality() - .equals(other.notFound, notFound))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(added) ^ - const DeepCollectionEquality().hash(deleted) ^ - const DeepCollectionEquality().hash(updated) ^ - const DeepCollectionEquality().hash(notFound) ^ - runtimeType.hashCode; -} - -extension $TraktSyncResponseExtension on TraktSyncResponse { - TraktSyncResponse copyWith( - {Items? added, - Items? deleted, - Items? updated, - NotFoundObjects? notFound}) { - return TraktSyncResponse( - added: added ?? this.added, - deleted: deleted ?? this.deleted, - updated: updated ?? this.updated, - notFound: notFound ?? this.notFound); - } - - TraktSyncResponse copyWithWrapped( - {Wrapped? added, - Wrapped? deleted, - Wrapped? updated, - Wrapped? notFound}) { - return TraktSyncResponse( - added: (added != null ? added.value : this.added), - deleted: (deleted != null ? deleted.value : this.deleted), - updated: (updated != null ? updated.value : this.updated), - notFound: (notFound != null ? notFound.value : this.notFound)); - } -} - @JsonSerializable(explicitToJson: true) class TranscodingInfo { const TranscodingInfo({ @@ -45602,10 +44037,10 @@ class TranscodingInfo { @JsonKey( name: 'HardwareAccelerationType', includeIfNull: false, - toJson: hardwareEncodingTypeNullableToJson, - fromJson: hardwareEncodingTypeNullableFromJson, + toJson: hardwareAccelerationTypeNullableToJson, + fromJson: hardwareAccelerationTypeNullableFromJson, ) - final enums.HardwareEncodingType? hardwareAccelerationType; + final enums.HardwareAccelerationType? hardwareAccelerationType; @JsonKey( name: 'TranscodeReasons', includeIfNull: false, @@ -45694,7 +44129,7 @@ extension $TranscodingInfoExtension on TranscodingInfo { int? width, int? height, int? audioChannels, - enums.HardwareEncodingType? hardwareAccelerationType, + enums.HardwareAccelerationType? hardwareAccelerationType, List? transcodeReasons}) { return TranscodingInfo( audioCodec: audioCodec ?? this.audioCodec, @@ -45725,7 +44160,7 @@ extension $TranscodingInfoExtension on TranscodingInfo { Wrapped? width, Wrapped? height, Wrapped? audioChannels, - Wrapped? hardwareAccelerationType, + Wrapped? hardwareAccelerationType, Wrapped?>? transcodeReasons}) { return TranscodingInfo( audioCodec: (audioCodec != null ? audioCodec.value : this.audioCodec), @@ -45772,6 +44207,7 @@ class TranscodingProfile { this.segmentLength, this.breakOnNonKeyFrames, this.conditions, + this.enableAudioVbrEncoding, }); factory TranscodingProfile.fromJson(Map json) => @@ -45850,6 +44286,9 @@ class TranscodingProfile { includeIfNull: false, defaultValue: []) final List? conditions; + @JsonKey( + name: 'EnableAudioVbrEncoding', includeIfNull: false, defaultValue: true) + final bool? enableAudioVbrEncoding; static const fromJsonFactory = _$TranscodingProfileFromJson; @override @@ -45904,7 +44343,10 @@ class TranscodingProfile { .equals(other.breakOnNonKeyFrames, breakOnNonKeyFrames)) && (identical(other.conditions, conditions) || const DeepCollectionEquality() - .equals(other.conditions, conditions))); + .equals(other.conditions, conditions)) && + (identical(other.enableAudioVbrEncoding, enableAudioVbrEncoding) || + const DeepCollectionEquality().equals( + other.enableAudioVbrEncoding, enableAudioVbrEncoding))); } @override @@ -45928,6 +44370,7 @@ class TranscodingProfile { const DeepCollectionEquality().hash(segmentLength) ^ const DeepCollectionEquality().hash(breakOnNonKeyFrames) ^ const DeepCollectionEquality().hash(conditions) ^ + const DeepCollectionEquality().hash(enableAudioVbrEncoding) ^ runtimeType.hashCode; } @@ -45948,7 +44391,8 @@ extension $TranscodingProfileExtension on TranscodingProfile { int? minSegments, int? segmentLength, bool? breakOnNonKeyFrames, - List? conditions}) { + List? conditions, + bool? enableAudioVbrEncoding}) { return TranscodingProfile( container: container ?? this.container, type: type ?? this.type, @@ -45967,7 +44411,9 @@ extension $TranscodingProfileExtension on TranscodingProfile { minSegments: minSegments ?? this.minSegments, segmentLength: segmentLength ?? this.segmentLength, breakOnNonKeyFrames: breakOnNonKeyFrames ?? this.breakOnNonKeyFrames, - conditions: conditions ?? this.conditions); + conditions: conditions ?? this.conditions, + enableAudioVbrEncoding: + enableAudioVbrEncoding ?? this.enableAudioVbrEncoding); } TranscodingProfile copyWithWrapped( @@ -45986,7 +44432,8 @@ extension $TranscodingProfileExtension on TranscodingProfile { Wrapped? minSegments, Wrapped? segmentLength, Wrapped? breakOnNonKeyFrames, - Wrapped?>? conditions}) { + Wrapped?>? conditions, + Wrapped? enableAudioVbrEncoding}) { return TranscodingProfile( container: (container != null ? container.value : this.container), type: (type != null ? type.value : this.type), @@ -46019,7 +44466,10 @@ extension $TranscodingProfileExtension on TranscodingProfile { breakOnNonKeyFrames: (breakOnNonKeyFrames != null ? breakOnNonKeyFrames.value : this.breakOnNonKeyFrames), - conditions: (conditions != null ? conditions.value : this.conditions)); + conditions: (conditions != null ? conditions.value : this.conditions), + enableAudioVbrEncoding: (enableAudioVbrEncoding != null + ? enableAudioVbrEncoding.value + : this.enableAudioVbrEncoding)); } } @@ -46142,6 +44592,7 @@ class TrickplayOptions { const TrickplayOptions({ this.enableHwAcceleration, this.enableHwEncoding, + this.enableKeyFrameOnlyExtraction, this.scanBehavior, this.processPriority, this.interval, @@ -46163,6 +44614,8 @@ class TrickplayOptions { final bool? enableHwAcceleration; @JsonKey(name: 'EnableHwEncoding', includeIfNull: false) final bool? enableHwEncoding; + @JsonKey(name: 'EnableKeyFrameOnlyExtraction', includeIfNull: false) + final bool? enableKeyFrameOnlyExtraction; @JsonKey( name: 'ScanBehavior', includeIfNull: false, @@ -46204,6 +44657,11 @@ class TrickplayOptions { (identical(other.enableHwEncoding, enableHwEncoding) || const DeepCollectionEquality() .equals(other.enableHwEncoding, enableHwEncoding)) && + (identical(other.enableKeyFrameOnlyExtraction, + enableKeyFrameOnlyExtraction) || + const DeepCollectionEquality().equals( + other.enableKeyFrameOnlyExtraction, + enableKeyFrameOnlyExtraction)) && (identical(other.scanBehavior, scanBehavior) || const DeepCollectionEquality() .equals(other.scanBehavior, scanBehavior)) && @@ -46239,6 +44697,7 @@ class TrickplayOptions { int get hashCode => const DeepCollectionEquality().hash(enableHwAcceleration) ^ const DeepCollectionEquality().hash(enableHwEncoding) ^ + const DeepCollectionEquality().hash(enableKeyFrameOnlyExtraction) ^ const DeepCollectionEquality().hash(scanBehavior) ^ const DeepCollectionEquality().hash(processPriority) ^ const DeepCollectionEquality().hash(interval) ^ @@ -46255,6 +44714,7 @@ extension $TrickplayOptionsExtension on TrickplayOptions { TrickplayOptions copyWith( {bool? enableHwAcceleration, bool? enableHwEncoding, + bool? enableKeyFrameOnlyExtraction, enums.TrickplayScanBehavior? scanBehavior, enums.ProcessPriorityClass? processPriority, int? interval, @@ -46267,6 +44727,8 @@ extension $TrickplayOptionsExtension on TrickplayOptions { return TrickplayOptions( enableHwAcceleration: enableHwAcceleration ?? this.enableHwAcceleration, enableHwEncoding: enableHwEncoding ?? this.enableHwEncoding, + enableKeyFrameOnlyExtraction: + enableKeyFrameOnlyExtraction ?? this.enableKeyFrameOnlyExtraction, scanBehavior: scanBehavior ?? this.scanBehavior, processPriority: processPriority ?? this.processPriority, interval: interval ?? this.interval, @@ -46281,6 +44743,7 @@ extension $TrickplayOptionsExtension on TrickplayOptions { TrickplayOptions copyWithWrapped( {Wrapped? enableHwAcceleration, Wrapped? enableHwEncoding, + Wrapped? enableKeyFrameOnlyExtraction, Wrapped? scanBehavior, Wrapped? processPriority, Wrapped? interval, @@ -46297,6 +44760,9 @@ extension $TrickplayOptionsExtension on TrickplayOptions { enableHwEncoding: (enableHwEncoding != null ? enableHwEncoding.value : this.enableHwEncoding), + enableKeyFrameOnlyExtraction: (enableKeyFrameOnlyExtraction != null + ? enableKeyFrameOnlyExtraction.value + : this.enableKeyFrameOnlyExtraction), scanBehavior: (scanBehavior != null ? scanBehavior.value : this.scanBehavior), processPriority: (processPriority != null @@ -46410,6 +44876,9 @@ class TunerHostInfo { this.friendlyName, this.importFavoritesOnly, this.allowHWTranscoding, + this.allowFmp4TranscodingContainer, + this.allowStreamSharing, + this.fallbackMaxStreamingBitrate, this.enableStreamLooping, this.source, this.tunerCount, @@ -46437,6 +44906,12 @@ class TunerHostInfo { final bool? importFavoritesOnly; @JsonKey(name: 'AllowHWTranscoding', includeIfNull: false) final bool? allowHWTranscoding; + @JsonKey(name: 'AllowFmp4TranscodingContainer', includeIfNull: false) + final bool? allowFmp4TranscodingContainer; + @JsonKey(name: 'AllowStreamSharing', includeIfNull: false) + final bool? allowStreamSharing; + @JsonKey(name: 'FallbackMaxStreamingBitrate', includeIfNull: false) + final int? fallbackMaxStreamingBitrate; @JsonKey(name: 'EnableStreamLooping', includeIfNull: false) final bool? enableStreamLooping; @JsonKey(name: 'Source', includeIfNull: false) @@ -46471,6 +44946,19 @@ class TunerHostInfo { (identical(other.allowHWTranscoding, allowHWTranscoding) || const DeepCollectionEquality() .equals(other.allowHWTranscoding, allowHWTranscoding)) && + (identical(other.allowFmp4TranscodingContainer, + allowFmp4TranscodingContainer) || + const DeepCollectionEquality().equals( + other.allowFmp4TranscodingContainer, + allowFmp4TranscodingContainer)) && + (identical(other.allowStreamSharing, allowStreamSharing) || + const DeepCollectionEquality() + .equals(other.allowStreamSharing, allowStreamSharing)) && + (identical(other.fallbackMaxStreamingBitrate, + fallbackMaxStreamingBitrate) || + const DeepCollectionEquality().equals( + other.fallbackMaxStreamingBitrate, + fallbackMaxStreamingBitrate)) && (identical(other.enableStreamLooping, enableStreamLooping) || const DeepCollectionEquality() .equals(other.enableStreamLooping, enableStreamLooping)) && @@ -46499,6 +44987,9 @@ class TunerHostInfo { const DeepCollectionEquality().hash(friendlyName) ^ const DeepCollectionEquality().hash(importFavoritesOnly) ^ const DeepCollectionEquality().hash(allowHWTranscoding) ^ + const DeepCollectionEquality().hash(allowFmp4TranscodingContainer) ^ + const DeepCollectionEquality().hash(allowStreamSharing) ^ + const DeepCollectionEquality().hash(fallbackMaxStreamingBitrate) ^ const DeepCollectionEquality().hash(enableStreamLooping) ^ const DeepCollectionEquality().hash(source) ^ const DeepCollectionEquality().hash(tunerCount) ^ @@ -46516,6 +45007,9 @@ extension $TunerHostInfoExtension on TunerHostInfo { String? friendlyName, bool? importFavoritesOnly, bool? allowHWTranscoding, + bool? allowFmp4TranscodingContainer, + bool? allowStreamSharing, + int? fallbackMaxStreamingBitrate, bool? enableStreamLooping, String? source, int? tunerCount, @@ -46529,6 +45023,11 @@ extension $TunerHostInfoExtension on TunerHostInfo { friendlyName: friendlyName ?? this.friendlyName, importFavoritesOnly: importFavoritesOnly ?? this.importFavoritesOnly, allowHWTranscoding: allowHWTranscoding ?? this.allowHWTranscoding, + allowFmp4TranscodingContainer: + allowFmp4TranscodingContainer ?? this.allowFmp4TranscodingContainer, + allowStreamSharing: allowStreamSharing ?? this.allowStreamSharing, + fallbackMaxStreamingBitrate: + fallbackMaxStreamingBitrate ?? this.fallbackMaxStreamingBitrate, enableStreamLooping: enableStreamLooping ?? this.enableStreamLooping, source: source ?? this.source, tunerCount: tunerCount ?? this.tunerCount, @@ -46544,6 +45043,9 @@ extension $TunerHostInfoExtension on TunerHostInfo { Wrapped? friendlyName, Wrapped? importFavoritesOnly, Wrapped? allowHWTranscoding, + Wrapped? allowFmp4TranscodingContainer, + Wrapped? allowStreamSharing, + Wrapped? fallbackMaxStreamingBitrate, Wrapped? enableStreamLooping, Wrapped? source, Wrapped? tunerCount, @@ -46562,6 +45064,15 @@ extension $TunerHostInfoExtension on TunerHostInfo { allowHWTranscoding: (allowHWTranscoding != null ? allowHWTranscoding.value : this.allowHWTranscoding), + allowFmp4TranscodingContainer: (allowFmp4TranscodingContainer != null + ? allowFmp4TranscodingContainer.value + : this.allowFmp4TranscodingContainer), + allowStreamSharing: (allowStreamSharing != null + ? allowStreamSharing.value + : this.allowStreamSharing), + fallbackMaxStreamingBitrate: (fallbackMaxStreamingBitrate != null + ? fallbackMaxStreamingBitrate.value + : this.fallbackMaxStreamingBitrate), enableStreamLooping: (enableStreamLooping != null ? enableStreamLooping.value : this.enableStreamLooping), @@ -47948,84 +46459,6 @@ extension $UserDtoExtension on UserDto { } } -@JsonSerializable(explicitToJson: true) -class UserInterfaceConfiguration { - const UserInterfaceConfiguration({ - this.skipButtonVisible, - this.skipButtonIntroText, - this.skipButtonEndCreditsText, - }); - - factory UserInterfaceConfiguration.fromJson(Map json) => - _$UserInterfaceConfigurationFromJson(json); - - static const toJsonFactory = _$UserInterfaceConfigurationToJson; - Map toJson() => _$UserInterfaceConfigurationToJson(this); - - @JsonKey(name: 'SkipButtonVisible', includeIfNull: false) - final bool? skipButtonVisible; - @JsonKey(name: 'SkipButtonIntroText', includeIfNull: false) - final String? skipButtonIntroText; - @JsonKey(name: 'SkipButtonEndCreditsText', includeIfNull: false) - final String? skipButtonEndCreditsText; - static const fromJsonFactory = _$UserInterfaceConfigurationFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is UserInterfaceConfiguration && - (identical(other.skipButtonVisible, skipButtonVisible) || - const DeepCollectionEquality() - .equals(other.skipButtonVisible, skipButtonVisible)) && - (identical(other.skipButtonIntroText, skipButtonIntroText) || - const DeepCollectionEquality() - .equals(other.skipButtonIntroText, skipButtonIntroText)) && - (identical( - other.skipButtonEndCreditsText, skipButtonEndCreditsText) || - const DeepCollectionEquality().equals( - other.skipButtonEndCreditsText, skipButtonEndCreditsText))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(skipButtonVisible) ^ - const DeepCollectionEquality().hash(skipButtonIntroText) ^ - const DeepCollectionEquality().hash(skipButtonEndCreditsText) ^ - runtimeType.hashCode; -} - -extension $UserInterfaceConfigurationExtension on UserInterfaceConfiguration { - UserInterfaceConfiguration copyWith( - {bool? skipButtonVisible, - String? skipButtonIntroText, - String? skipButtonEndCreditsText}) { - return UserInterfaceConfiguration( - skipButtonVisible: skipButtonVisible ?? this.skipButtonVisible, - skipButtonIntroText: skipButtonIntroText ?? this.skipButtonIntroText, - skipButtonEndCreditsText: - skipButtonEndCreditsText ?? this.skipButtonEndCreditsText); - } - - UserInterfaceConfiguration copyWithWrapped( - {Wrapped? skipButtonVisible, - Wrapped? skipButtonIntroText, - Wrapped? skipButtonEndCreditsText}) { - return UserInterfaceConfiguration( - skipButtonVisible: (skipButtonVisible != null - ? skipButtonVisible.value - : this.skipButtonVisible), - skipButtonIntroText: (skipButtonIntroText != null - ? skipButtonIntroText.value - : this.skipButtonIntroText), - skipButtonEndCreditsText: (skipButtonEndCreditsText != null - ? skipButtonEndCreditsText.value - : this.skipButtonEndCreditsText)); - } -} - @JsonSerializable(explicitToJson: true) class UserItemDataDto { const UserItemDataDto({ @@ -49773,70 +48206,6 @@ extension $BaseItemPerson$ImageBlurHashesExtension } } -String? analysisModeNullableToJson(enums.AnalysisMode? analysisMode) { - return analysisMode?.value; -} - -String? analysisModeToJson(enums.AnalysisMode analysisMode) { - return analysisMode.value; -} - -enums.AnalysisMode analysisModeFromJson( - Object? analysisMode, [ - enums.AnalysisMode? defaultValue, -]) { - return enums.AnalysisMode.values - .firstWhereOrNull((e) => e.value == analysisMode) ?? - defaultValue ?? - enums.AnalysisMode.swaggerGeneratedUnknown; -} - -enums.AnalysisMode? analysisModeNullableFromJson( - Object? analysisMode, [ - enums.AnalysisMode? defaultValue, -]) { - if (analysisMode == null) { - return null; - } - return enums.AnalysisMode.values - .firstWhereOrNull((e) => e.value == analysisMode) ?? - defaultValue; -} - -String analysisModeExplodedListToJson(List? analysisMode) { - return analysisMode?.map((e) => e.value!).join(',') ?? ''; -} - -List analysisModeListToJson(List? analysisMode) { - if (analysisMode == null) { - return []; - } - - return analysisMode.map((e) => e.value!).toList(); -} - -List analysisModeListFromJson( - List? analysisMode, [ - List? defaultValue, -]) { - if (analysisMode == null) { - return defaultValue ?? []; - } - - return analysisMode.map((e) => analysisModeFromJson(e.toString())).toList(); -} - -List? analysisModeNullableListFromJson( - List? analysisMode, [ - List? defaultValue, -]) { - if (analysisMode == null) { - return defaultValue; - } - - return analysisMode.map((e) => analysisModeFromJson(e.toString())).toList(); -} - String? audioSpatialFormatNullableToJson( enums.AudioSpatialFormat? audioSpatialFormat) { return audioSpatialFormat?.value; @@ -50582,6 +48951,77 @@ List? dayPatternNullableListFromJson( return dayPattern.map((e) => dayPatternFromJson(e.toString())).toList(); } +String? deinterlaceMethodNullableToJson( + enums.DeinterlaceMethod? deinterlaceMethod) { + return deinterlaceMethod?.value; +} + +String? deinterlaceMethodToJson(enums.DeinterlaceMethod deinterlaceMethod) { + return deinterlaceMethod.value; +} + +enums.DeinterlaceMethod deinterlaceMethodFromJson( + Object? deinterlaceMethod, [ + enums.DeinterlaceMethod? defaultValue, +]) { + return enums.DeinterlaceMethod.values + .firstWhereOrNull((e) => e.value == deinterlaceMethod) ?? + defaultValue ?? + enums.DeinterlaceMethod.swaggerGeneratedUnknown; +} + +enums.DeinterlaceMethod? deinterlaceMethodNullableFromJson( + Object? deinterlaceMethod, [ + enums.DeinterlaceMethod? defaultValue, +]) { + if (deinterlaceMethod == null) { + return null; + } + return enums.DeinterlaceMethod.values + .firstWhereOrNull((e) => e.value == deinterlaceMethod) ?? + defaultValue; +} + +String deinterlaceMethodExplodedListToJson( + List? deinterlaceMethod) { + return deinterlaceMethod?.map((e) => e.value!).join(',') ?? ''; +} + +List deinterlaceMethodListToJson( + List? deinterlaceMethod) { + if (deinterlaceMethod == null) { + return []; + } + + return deinterlaceMethod.map((e) => e.value!).toList(); +} + +List deinterlaceMethodListFromJson( + List? deinterlaceMethod, [ + List? defaultValue, +]) { + if (deinterlaceMethod == null) { + return defaultValue ?? []; + } + + return deinterlaceMethod + .map((e) => deinterlaceMethodFromJson(e.toString())) + .toList(); +} + +List? deinterlaceMethodNullableListFromJson( + List? deinterlaceMethod, [ + List? defaultValue, +]) { + if (deinterlaceMethod == null) { + return defaultValue; + } + + return deinterlaceMethod + .map((e) => deinterlaceMethodFromJson(e.toString())) + .toList(); +} + String? dlnaProfileTypeNullableToJson(enums.DlnaProfileType? dlnaProfileType) { return dlnaProfileType?.value; } @@ -50869,6 +49309,71 @@ List? .toList(); } +String? encoderPresetNullableToJson(enums.EncoderPreset? encoderPreset) { + return encoderPreset?.value; +} + +String? encoderPresetToJson(enums.EncoderPreset encoderPreset) { + return encoderPreset.value; +} + +enums.EncoderPreset encoderPresetFromJson( + Object? encoderPreset, [ + enums.EncoderPreset? defaultValue, +]) { + return enums.EncoderPreset.values + .firstWhereOrNull((e) => e.value == encoderPreset) ?? + defaultValue ?? + enums.EncoderPreset.swaggerGeneratedUnknown; +} + +enums.EncoderPreset? encoderPresetNullableFromJson( + Object? encoderPreset, [ + enums.EncoderPreset? defaultValue, +]) { + if (encoderPreset == null) { + return null; + } + return enums.EncoderPreset.values + .firstWhereOrNull((e) => e.value == encoderPreset) ?? + defaultValue; +} + +String encoderPresetExplodedListToJson( + List? encoderPreset) { + return encoderPreset?.map((e) => e.value!).join(',') ?? ''; +} + +List encoderPresetListToJson(List? encoderPreset) { + if (encoderPreset == null) { + return []; + } + + return encoderPreset.map((e) => e.value!).toList(); +} + +List encoderPresetListFromJson( + List? encoderPreset, [ + List? defaultValue, +]) { + if (encoderPreset == null) { + return defaultValue ?? []; + } + + return encoderPreset.map((e) => encoderPresetFromJson(e.toString())).toList(); +} + +List? encoderPresetNullableListFromJson( + List? encoderPreset, [ + List? defaultValue, +]) { + if (encoderPreset == null) { + return defaultValue; + } + + return encoderPreset.map((e) => encoderPresetFromJson(e.toString())).toList(); +} + String? encodingContextNullableToJson(enums.EncodingContext? encodingContext) { return encodingContext?.value; } @@ -51639,75 +50144,76 @@ List? groupUpdateTypeNullableListFromJson( .toList(); } -String? hardwareEncodingTypeNullableToJson( - enums.HardwareEncodingType? hardwareEncodingType) { - return hardwareEncodingType?.value; +String? hardwareAccelerationTypeNullableToJson( + enums.HardwareAccelerationType? hardwareAccelerationType) { + return hardwareAccelerationType?.value; } -String? hardwareEncodingTypeToJson( - enums.HardwareEncodingType hardwareEncodingType) { - return hardwareEncodingType.value; +String? hardwareAccelerationTypeToJson( + enums.HardwareAccelerationType hardwareAccelerationType) { + return hardwareAccelerationType.value; } -enums.HardwareEncodingType hardwareEncodingTypeFromJson( - Object? hardwareEncodingType, [ - enums.HardwareEncodingType? defaultValue, +enums.HardwareAccelerationType hardwareAccelerationTypeFromJson( + Object? hardwareAccelerationType, [ + enums.HardwareAccelerationType? defaultValue, ]) { - return enums.HardwareEncodingType.values - .firstWhereOrNull((e) => e.value == hardwareEncodingType) ?? + return enums.HardwareAccelerationType.values + .firstWhereOrNull((e) => e.value == hardwareAccelerationType) ?? defaultValue ?? - enums.HardwareEncodingType.swaggerGeneratedUnknown; + enums.HardwareAccelerationType.swaggerGeneratedUnknown; } -enums.HardwareEncodingType? hardwareEncodingTypeNullableFromJson( - Object? hardwareEncodingType, [ - enums.HardwareEncodingType? defaultValue, +enums.HardwareAccelerationType? hardwareAccelerationTypeNullableFromJson( + Object? hardwareAccelerationType, [ + enums.HardwareAccelerationType? defaultValue, ]) { - if (hardwareEncodingType == null) { + if (hardwareAccelerationType == null) { return null; } - return enums.HardwareEncodingType.values - .firstWhereOrNull((e) => e.value == hardwareEncodingType) ?? + return enums.HardwareAccelerationType.values + .firstWhereOrNull((e) => e.value == hardwareAccelerationType) ?? defaultValue; } -String hardwareEncodingTypeExplodedListToJson( - List? hardwareEncodingType) { - return hardwareEncodingType?.map((e) => e.value!).join(',') ?? ''; +String hardwareAccelerationTypeExplodedListToJson( + List? hardwareAccelerationType) { + return hardwareAccelerationType?.map((e) => e.value!).join(',') ?? ''; } -List hardwareEncodingTypeListToJson( - List? hardwareEncodingType) { - if (hardwareEncodingType == null) { +List hardwareAccelerationTypeListToJson( + List? hardwareAccelerationType) { + if (hardwareAccelerationType == null) { return []; } - return hardwareEncodingType.map((e) => e.value!).toList(); + return hardwareAccelerationType.map((e) => e.value!).toList(); } -List hardwareEncodingTypeListFromJson( - List? hardwareEncodingType, [ - List? defaultValue, +List hardwareAccelerationTypeListFromJson( + List? hardwareAccelerationType, [ + List? defaultValue, ]) { - if (hardwareEncodingType == null) { + if (hardwareAccelerationType == null) { return defaultValue ?? []; } - return hardwareEncodingType - .map((e) => hardwareEncodingTypeFromJson(e.toString())) + return hardwareAccelerationType + .map((e) => hardwareAccelerationTypeFromJson(e.toString())) .toList(); } -List? hardwareEncodingTypeNullableListFromJson( - List? hardwareEncodingType, [ - List? defaultValue, +List? + hardwareAccelerationTypeNullableListFromJson( + List? hardwareAccelerationType, [ + List? defaultValue, ]) { - if (hardwareEncodingType == null) { + if (hardwareAccelerationType == null) { return defaultValue; } - return hardwareEncodingType - .map((e) => hardwareEncodingTypeFromJson(e.toString())) + return hardwareAccelerationType + .map((e) => hardwareAccelerationTypeFromJson(e.toString())) .toList(); } @@ -52629,6 +51135,77 @@ List? mediaProtocolNullableListFromJson( return mediaProtocol.map((e) => mediaProtocolFromJson(e.toString())).toList(); } +String? mediaSegmentTypeNullableToJson( + enums.MediaSegmentType? mediaSegmentType) { + return mediaSegmentType?.value; +} + +String? mediaSegmentTypeToJson(enums.MediaSegmentType mediaSegmentType) { + return mediaSegmentType.value; +} + +enums.MediaSegmentType mediaSegmentTypeFromJson( + Object? mediaSegmentType, [ + enums.MediaSegmentType? defaultValue, +]) { + return enums.MediaSegmentType.values + .firstWhereOrNull((e) => e.value == mediaSegmentType) ?? + defaultValue ?? + enums.MediaSegmentType.swaggerGeneratedUnknown; +} + +enums.MediaSegmentType? mediaSegmentTypeNullableFromJson( + Object? mediaSegmentType, [ + enums.MediaSegmentType? defaultValue, +]) { + if (mediaSegmentType == null) { + return null; + } + return enums.MediaSegmentType.values + .firstWhereOrNull((e) => e.value == mediaSegmentType) ?? + defaultValue; +} + +String mediaSegmentTypeExplodedListToJson( + List? mediaSegmentType) { + return mediaSegmentType?.map((e) => e.value!).join(',') ?? ''; +} + +List mediaSegmentTypeListToJson( + List? mediaSegmentType) { + if (mediaSegmentType == null) { + return []; + } + + return mediaSegmentType.map((e) => e.value!).toList(); +} + +List mediaSegmentTypeListFromJson( + List? mediaSegmentType, [ + List? defaultValue, +]) { + if (mediaSegmentType == null) { + return defaultValue ?? []; + } + + return mediaSegmentType + .map((e) => mediaSegmentTypeFromJson(e.toString())) + .toList(); +} + +List? mediaSegmentTypeNullableListFromJson( + List? mediaSegmentType, [ + List? defaultValue, +]) { + if (mediaSegmentType == null) { + return defaultValue; + } + + return mediaSegmentType + .map((e) => mediaSegmentTypeFromJson(e.toString())) + .toList(); +} + String? mediaSourceTypeNullableToJson(enums.MediaSourceType? mediaSourceType) { return mediaSourceType?.value; } @@ -54947,6 +53524,219 @@ List? taskStateNullableListFromJson( return taskState.map((e) => taskStateFromJson(e.toString())).toList(); } +String? tonemappingAlgorithmNullableToJson( + enums.TonemappingAlgorithm? tonemappingAlgorithm) { + return tonemappingAlgorithm?.value; +} + +String? tonemappingAlgorithmToJson( + enums.TonemappingAlgorithm tonemappingAlgorithm) { + return tonemappingAlgorithm.value; +} + +enums.TonemappingAlgorithm tonemappingAlgorithmFromJson( + Object? tonemappingAlgorithm, [ + enums.TonemappingAlgorithm? defaultValue, +]) { + return enums.TonemappingAlgorithm.values + .firstWhereOrNull((e) => e.value == tonemappingAlgorithm) ?? + defaultValue ?? + enums.TonemappingAlgorithm.swaggerGeneratedUnknown; +} + +enums.TonemappingAlgorithm? tonemappingAlgorithmNullableFromJson( + Object? tonemappingAlgorithm, [ + enums.TonemappingAlgorithm? defaultValue, +]) { + if (tonemappingAlgorithm == null) { + return null; + } + return enums.TonemappingAlgorithm.values + .firstWhereOrNull((e) => e.value == tonemappingAlgorithm) ?? + defaultValue; +} + +String tonemappingAlgorithmExplodedListToJson( + List? tonemappingAlgorithm) { + return tonemappingAlgorithm?.map((e) => e.value!).join(',') ?? ''; +} + +List tonemappingAlgorithmListToJson( + List? tonemappingAlgorithm) { + if (tonemappingAlgorithm == null) { + return []; + } + + return tonemappingAlgorithm.map((e) => e.value!).toList(); +} + +List tonemappingAlgorithmListFromJson( + List? tonemappingAlgorithm, [ + List? defaultValue, +]) { + if (tonemappingAlgorithm == null) { + return defaultValue ?? []; + } + + return tonemappingAlgorithm + .map((e) => tonemappingAlgorithmFromJson(e.toString())) + .toList(); +} + +List? tonemappingAlgorithmNullableListFromJson( + List? tonemappingAlgorithm, [ + List? defaultValue, +]) { + if (tonemappingAlgorithm == null) { + return defaultValue; + } + + return tonemappingAlgorithm + .map((e) => tonemappingAlgorithmFromJson(e.toString())) + .toList(); +} + +String? tonemappingModeNullableToJson(enums.TonemappingMode? tonemappingMode) { + return tonemappingMode?.value; +} + +String? tonemappingModeToJson(enums.TonemappingMode tonemappingMode) { + return tonemappingMode.value; +} + +enums.TonemappingMode tonemappingModeFromJson( + Object? tonemappingMode, [ + enums.TonemappingMode? defaultValue, +]) { + return enums.TonemappingMode.values + .firstWhereOrNull((e) => e.value == tonemappingMode) ?? + defaultValue ?? + enums.TonemappingMode.swaggerGeneratedUnknown; +} + +enums.TonemappingMode? tonemappingModeNullableFromJson( + Object? tonemappingMode, [ + enums.TonemappingMode? defaultValue, +]) { + if (tonemappingMode == null) { + return null; + } + return enums.TonemappingMode.values + .firstWhereOrNull((e) => e.value == tonemappingMode) ?? + defaultValue; +} + +String tonemappingModeExplodedListToJson( + List? tonemappingMode) { + return tonemappingMode?.map((e) => e.value!).join(',') ?? ''; +} + +List tonemappingModeListToJson( + List? tonemappingMode) { + if (tonemappingMode == null) { + return []; + } + + return tonemappingMode.map((e) => e.value!).toList(); +} + +List tonemappingModeListFromJson( + List? tonemappingMode, [ + List? defaultValue, +]) { + if (tonemappingMode == null) { + return defaultValue ?? []; + } + + return tonemappingMode + .map((e) => tonemappingModeFromJson(e.toString())) + .toList(); +} + +List? tonemappingModeNullableListFromJson( + List? tonemappingMode, [ + List? defaultValue, +]) { + if (tonemappingMode == null) { + return defaultValue; + } + + return tonemappingMode + .map((e) => tonemappingModeFromJson(e.toString())) + .toList(); +} + +String? tonemappingRangeNullableToJson( + enums.TonemappingRange? tonemappingRange) { + return tonemappingRange?.value; +} + +String? tonemappingRangeToJson(enums.TonemappingRange tonemappingRange) { + return tonemappingRange.value; +} + +enums.TonemappingRange tonemappingRangeFromJson( + Object? tonemappingRange, [ + enums.TonemappingRange? defaultValue, +]) { + return enums.TonemappingRange.values + .firstWhereOrNull((e) => e.value == tonemappingRange) ?? + defaultValue ?? + enums.TonemappingRange.swaggerGeneratedUnknown; +} + +enums.TonemappingRange? tonemappingRangeNullableFromJson( + Object? tonemappingRange, [ + enums.TonemappingRange? defaultValue, +]) { + if (tonemappingRange == null) { + return null; + } + return enums.TonemappingRange.values + .firstWhereOrNull((e) => e.value == tonemappingRange) ?? + defaultValue; +} + +String tonemappingRangeExplodedListToJson( + List? tonemappingRange) { + return tonemappingRange?.map((e) => e.value!).join(',') ?? ''; +} + +List tonemappingRangeListToJson( + List? tonemappingRange) { + if (tonemappingRange == null) { + return []; + } + + return tonemappingRange.map((e) => e.value!).toList(); +} + +List tonemappingRangeListFromJson( + List? tonemappingRange, [ + List? defaultValue, +]) { + if (tonemappingRange == null) { + return defaultValue ?? []; + } + + return tonemappingRange + .map((e) => tonemappingRangeFromJson(e.toString())) + .toList(); +} + +List? tonemappingRangeNullableListFromJson( + List? tonemappingRange, [ + List? defaultValue, +]) { + if (tonemappingRange == null) { + return defaultValue; + } + + return tonemappingRange + .map((e) => tonemappingRangeFromJson(e.toString())) + .toList(); +} + String? transcodeReasonNullableToJson(enums.TranscodeReason? transcodeReason) { return transcodeReason?.value; } @@ -64460,309 +63250,6 @@ List? .toList(); } -String? episodeIdIntroTimestampsGetModeNullableToJson( - enums.EpisodeIdIntroTimestampsGetMode? episodeIdIntroTimestampsGetMode) { - return episodeIdIntroTimestampsGetMode?.value; -} - -String? episodeIdIntroTimestampsGetModeToJson( - enums.EpisodeIdIntroTimestampsGetMode episodeIdIntroTimestampsGetMode) { - return episodeIdIntroTimestampsGetMode.value; -} - -enums.EpisodeIdIntroTimestampsGetMode episodeIdIntroTimestampsGetModeFromJson( - Object? episodeIdIntroTimestampsGetMode, [ - enums.EpisodeIdIntroTimestampsGetMode? defaultValue, -]) { - return enums.EpisodeIdIntroTimestampsGetMode.values.firstWhereOrNull( - (e) => e.value == episodeIdIntroTimestampsGetMode) ?? - defaultValue ?? - enums.EpisodeIdIntroTimestampsGetMode.swaggerGeneratedUnknown; -} - -enums.EpisodeIdIntroTimestampsGetMode? - episodeIdIntroTimestampsGetModeNullableFromJson( - Object? episodeIdIntroTimestampsGetMode, [ - enums.EpisodeIdIntroTimestampsGetMode? defaultValue, -]) { - if (episodeIdIntroTimestampsGetMode == null) { - return null; - } - return enums.EpisodeIdIntroTimestampsGetMode.values.firstWhereOrNull( - (e) => e.value == episodeIdIntroTimestampsGetMode) ?? - defaultValue; -} - -String episodeIdIntroTimestampsGetModeExplodedListToJson( - List? - episodeIdIntroTimestampsGetMode) { - return episodeIdIntroTimestampsGetMode?.map((e) => e.value!).join(',') ?? ''; -} - -List episodeIdIntroTimestampsGetModeListToJson( - List? - episodeIdIntroTimestampsGetMode) { - if (episodeIdIntroTimestampsGetMode == null) { - return []; - } - - return episodeIdIntroTimestampsGetMode.map((e) => e.value!).toList(); -} - -List - episodeIdIntroTimestampsGetModeListFromJson( - List? episodeIdIntroTimestampsGetMode, [ - List? defaultValue, -]) { - if (episodeIdIntroTimestampsGetMode == null) { - return defaultValue ?? []; - } - - return episodeIdIntroTimestampsGetMode - .map((e) => episodeIdIntroTimestampsGetModeFromJson(e.toString())) - .toList(); -} - -List? - episodeIdIntroTimestampsGetModeNullableListFromJson( - List? episodeIdIntroTimestampsGetMode, [ - List? defaultValue, -]) { - if (episodeIdIntroTimestampsGetMode == null) { - return defaultValue; - } - - return episodeIdIntroTimestampsGetMode - .map((e) => episodeIdIntroTimestampsGetModeFromJson(e.toString())) - .toList(); -} - -String? episodeIdIntroTimestampsV1GetModeNullableToJson( - enums.EpisodeIdIntroTimestampsV1GetMode? - episodeIdIntroTimestampsV1GetMode) { - return episodeIdIntroTimestampsV1GetMode?.value; -} - -String? episodeIdIntroTimestampsV1GetModeToJson( - enums.EpisodeIdIntroTimestampsV1GetMode episodeIdIntroTimestampsV1GetMode) { - return episodeIdIntroTimestampsV1GetMode.value; -} - -enums.EpisodeIdIntroTimestampsV1GetMode - episodeIdIntroTimestampsV1GetModeFromJson( - Object? episodeIdIntroTimestampsV1GetMode, [ - enums.EpisodeIdIntroTimestampsV1GetMode? defaultValue, -]) { - return enums.EpisodeIdIntroTimestampsV1GetMode.values.firstWhereOrNull( - (e) => e.value == episodeIdIntroTimestampsV1GetMode) ?? - defaultValue ?? - enums.EpisodeIdIntroTimestampsV1GetMode.swaggerGeneratedUnknown; -} - -enums.EpisodeIdIntroTimestampsV1GetMode? - episodeIdIntroTimestampsV1GetModeNullableFromJson( - Object? episodeIdIntroTimestampsV1GetMode, [ - enums.EpisodeIdIntroTimestampsV1GetMode? defaultValue, -]) { - if (episodeIdIntroTimestampsV1GetMode == null) { - return null; - } - return enums.EpisodeIdIntroTimestampsV1GetMode.values.firstWhereOrNull( - (e) => e.value == episodeIdIntroTimestampsV1GetMode) ?? - defaultValue; -} - -String episodeIdIntroTimestampsV1GetModeExplodedListToJson( - List? - episodeIdIntroTimestampsV1GetMode) { - return episodeIdIntroTimestampsV1GetMode?.map((e) => e.value!).join(',') ?? - ''; -} - -List episodeIdIntroTimestampsV1GetModeListToJson( - List? - episodeIdIntroTimestampsV1GetMode) { - if (episodeIdIntroTimestampsV1GetMode == null) { - return []; - } - - return episodeIdIntroTimestampsV1GetMode.map((e) => e.value!).toList(); -} - -List - episodeIdIntroTimestampsV1GetModeListFromJson( - List? episodeIdIntroTimestampsV1GetMode, [ - List? defaultValue, -]) { - if (episodeIdIntroTimestampsV1GetMode == null) { - return defaultValue ?? []; - } - - return episodeIdIntroTimestampsV1GetMode - .map((e) => episodeIdIntroTimestampsV1GetModeFromJson(e.toString())) - .toList(); -} - -List? - episodeIdIntroTimestampsV1GetModeNullableListFromJson( - List? episodeIdIntroTimestampsV1GetMode, [ - List? defaultValue, -]) { - if (episodeIdIntroTimestampsV1GetMode == null) { - return defaultValue; - } - - return episodeIdIntroTimestampsV1GetMode - .map((e) => episodeIdIntroTimestampsV1GetModeFromJson(e.toString())) - .toList(); -} - -String? introsAllGetModeNullableToJson( - enums.IntrosAllGetMode? introsAllGetMode) { - return introsAllGetMode?.value; -} - -String? introsAllGetModeToJson(enums.IntrosAllGetMode introsAllGetMode) { - return introsAllGetMode.value; -} - -enums.IntrosAllGetMode introsAllGetModeFromJson( - Object? introsAllGetMode, [ - enums.IntrosAllGetMode? defaultValue, -]) { - return enums.IntrosAllGetMode.values - .firstWhereOrNull((e) => e.value == introsAllGetMode) ?? - defaultValue ?? - enums.IntrosAllGetMode.swaggerGeneratedUnknown; -} - -enums.IntrosAllGetMode? introsAllGetModeNullableFromJson( - Object? introsAllGetMode, [ - enums.IntrosAllGetMode? defaultValue, -]) { - if (introsAllGetMode == null) { - return null; - } - return enums.IntrosAllGetMode.values - .firstWhereOrNull((e) => e.value == introsAllGetMode) ?? - defaultValue; -} - -String introsAllGetModeExplodedListToJson( - List? introsAllGetMode) { - return introsAllGetMode?.map((e) => e.value!).join(',') ?? ''; -} - -List introsAllGetModeListToJson( - List? introsAllGetMode) { - if (introsAllGetMode == null) { - return []; - } - - return introsAllGetMode.map((e) => e.value!).toList(); -} - -List introsAllGetModeListFromJson( - List? introsAllGetMode, [ - List? defaultValue, -]) { - if (introsAllGetMode == null) { - return defaultValue ?? []; - } - - return introsAllGetMode - .map((e) => introsAllGetModeFromJson(e.toString())) - .toList(); -} - -List? introsAllGetModeNullableListFromJson( - List? introsAllGetMode, [ - List? defaultValue, -]) { - if (introsAllGetMode == null) { - return defaultValue; - } - - return introsAllGetMode - .map((e) => introsAllGetModeFromJson(e.toString())) - .toList(); -} - -String? introsEraseTimestampsPostModeNullableToJson( - enums.IntrosEraseTimestampsPostMode? introsEraseTimestampsPostMode) { - return introsEraseTimestampsPostMode?.value; -} - -String? introsEraseTimestampsPostModeToJson( - enums.IntrosEraseTimestampsPostMode introsEraseTimestampsPostMode) { - return introsEraseTimestampsPostMode.value; -} - -enums.IntrosEraseTimestampsPostMode introsEraseTimestampsPostModeFromJson( - Object? introsEraseTimestampsPostMode, [ - enums.IntrosEraseTimestampsPostMode? defaultValue, -]) { - return enums.IntrosEraseTimestampsPostMode.values - .firstWhereOrNull((e) => e.value == introsEraseTimestampsPostMode) ?? - defaultValue ?? - enums.IntrosEraseTimestampsPostMode.swaggerGeneratedUnknown; -} - -enums.IntrosEraseTimestampsPostMode? - introsEraseTimestampsPostModeNullableFromJson( - Object? introsEraseTimestampsPostMode, [ - enums.IntrosEraseTimestampsPostMode? defaultValue, -]) { - if (introsEraseTimestampsPostMode == null) { - return null; - } - return enums.IntrosEraseTimestampsPostMode.values - .firstWhereOrNull((e) => e.value == introsEraseTimestampsPostMode) ?? - defaultValue; -} - -String introsEraseTimestampsPostModeExplodedListToJson( - List? introsEraseTimestampsPostMode) { - return introsEraseTimestampsPostMode?.map((e) => e.value!).join(',') ?? ''; -} - -List introsEraseTimestampsPostModeListToJson( - List? introsEraseTimestampsPostMode) { - if (introsEraseTimestampsPostMode == null) { - return []; - } - - return introsEraseTimestampsPostMode.map((e) => e.value!).toList(); -} - -List - introsEraseTimestampsPostModeListFromJson( - List? introsEraseTimestampsPostMode, [ - List? defaultValue, -]) { - if (introsEraseTimestampsPostMode == null) { - return defaultValue ?? []; - } - - return introsEraseTimestampsPostMode - .map((e) => introsEraseTimestampsPostModeFromJson(e.toString())) - .toList(); -} - -List? - introsEraseTimestampsPostModeNullableListFromJson( - List? introsEraseTimestampsPostMode, [ - List? defaultValue, -]) { - if (introsEraseTimestampsPostMode == null) { - return defaultValue; - } - - return introsEraseTimestampsPostMode - .map((e) => introsEraseTimestampsPostModeFromJson(e.toString())) - .toList(); -} - String? showsSeriesIdEpisodesGetSortByNullableToJson( enums.ShowsSeriesIdEpisodesGetSortBy? showsSeriesIdEpisodesGetSortBy) { return showsSeriesIdEpisodesGetSortBy?.value; diff --git a/lib/jellyfin/jellyfin_open_api.swagger.g.dart b/lib/jellyfin/jellyfin_open_api.swagger.g.dart index eb25731..3410a90 100644 --- a/lib/jellyfin/jellyfin_open_api.swagger.g.dart +++ b/lib/jellyfin/jellyfin_open_api.swagger.g.dart @@ -483,7 +483,8 @@ AuthenticationResult _$AuthenticationResultFromJson( : UserDto.fromJson(json['User'] as Map), sessionInfo: json['SessionInfo'] == null ? null - : SessionInfo.fromJson(json['SessionInfo'] as Map), + : SessionInfoDto.fromJson( + json['SessionInfo'] as Map), accessToken: json['AccessToken'] as String?, serverId: json['ServerId'] as String?, ); @@ -1297,50 +1298,6 @@ Map _$ChapterInfoToJson(ChapterInfo instance) { return val; } -ClientCapabilities _$ClientCapabilitiesFromJson(Map json) => - ClientCapabilities( - playableMediaTypes: - mediaTypeListFromJson(json['PlayableMediaTypes'] as List?), - supportedCommands: - generalCommandTypeListFromJson(json['SupportedCommands'] as List?), - supportsMediaControl: json['SupportsMediaControl'] as bool?, - supportsPersistentIdentifier: - json['SupportsPersistentIdentifier'] as bool?, - deviceProfile: json['DeviceProfile'] == null - ? null - : DeviceProfile.fromJson( - json['DeviceProfile'] as Map), - appStoreUrl: json['AppStoreUrl'] as String?, - iconUrl: json['IconUrl'] as String?, - supportsContentUploading: - json['SupportsContentUploading'] as bool? ?? false, - supportsSync: json['SupportsSync'] as bool? ?? false, - ); - -Map _$ClientCapabilitiesToJson(ClientCapabilities instance) { - final val = { - 'PlayableMediaTypes': mediaTypeListToJson(instance.playableMediaTypes), - 'SupportedCommands': - generalCommandTypeListToJson(instance.supportedCommands), - }; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('SupportsMediaControl', instance.supportsMediaControl); - writeNotNull( - 'SupportsPersistentIdentifier', instance.supportsPersistentIdentifier); - writeNotNull('DeviceProfile', instance.deviceProfile?.toJson()); - writeNotNull('AppStoreUrl', instance.appStoreUrl); - writeNotNull('IconUrl', instance.iconUrl); - writeNotNull('SupportsContentUploading', instance.supportsContentUploading); - writeNotNull('SupportsSync', instance.supportsSync); - return val; -} - ClientCapabilitiesDto _$ClientCapabilitiesDtoFromJson( Map json) => ClientCapabilitiesDto( @@ -1357,9 +1314,6 @@ ClientCapabilitiesDto _$ClientCapabilitiesDtoFromJson( json['DeviceProfile'] as Map), appStoreUrl: json['AppStoreUrl'] as String?, iconUrl: json['IconUrl'] as String?, - supportsContentUploading: - json['SupportsContentUploading'] as bool? ?? false, - supportsSync: json['SupportsSync'] as bool? ?? false, ); Map _$ClientCapabilitiesDtoToJson( @@ -1382,8 +1336,6 @@ Map _$ClientCapabilitiesDtoToJson( writeNotNull('DeviceProfile', instance.deviceProfile?.toJson()); writeNotNull('AppStoreUrl', instance.appStoreUrl); writeNotNull('IconUrl', instance.iconUrl); - writeNotNull('SupportsContentUploading', instance.supportsContentUploading); - writeNotNull('SupportsSync', instance.supportsSync); return val; } @@ -1419,6 +1371,7 @@ CodecProfile _$CodecProfileFromJson(Map json) => CodecProfile( [], codec: json['Codec'] as String?, container: json['Container'] as String?, + subContainer: json['SubContainer'] as String?, ); Map _$CodecProfileToJson(CodecProfile instance) { @@ -1437,6 +1390,7 @@ Map _$CodecProfileToJson(CodecProfile instance) { instance.applyConditions?.map((e) => e.toJson()).toList()); writeNotNull('Codec', instance.codec); writeNotNull('Container', instance.container); + writeNotNull('SubContainer', instance.subContainer); return val; } @@ -1543,6 +1497,7 @@ ContainerProfile _$ContainerProfileFromJson(Map json) => .toList() ?? [], container: json['Container'] as String?, + subContainer: json['SubContainer'] as String?, ); Map _$ContainerProfileToJson(ContainerProfile instance) { @@ -1558,6 +1513,7 @@ Map _$ContainerProfileToJson(ContainerProfile instance) { writeNotNull( 'Conditions', instance.conditions?.map((e) => e.toJson()).toList()); writeNotNull('Container', instance.container); + writeNotNull('SubContainer', instance.subContainer); return val; } @@ -1669,26 +1625,6 @@ Map _$CultureDtoToJson(CultureDto instance) { return val; } -CustomQueryData _$CustomQueryDataFromJson(Map json) => - CustomQueryData( - customQueryString: json['CustomQueryString'] as String?, - replaceUserId: json['ReplaceUserId'] as bool?, - ); - -Map _$CustomQueryDataToJson(CustomQueryData instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('CustomQueryString', instance.customQueryString); - writeNotNull('ReplaceUserId', instance.replaceUserId); - return val; -} - DefaultDirectoryBrowserInfoDto _$DefaultDirectoryBrowserInfoDtoFromJson( Map json) => DefaultDirectoryBrowserInfoDto( @@ -1709,7 +1645,8 @@ Map _$DefaultDirectoryBrowserInfoDtoToJson( return val; } -DeviceInfo _$DeviceInfoFromJson(Map json) => DeviceInfo( +DeviceInfoDto _$DeviceInfoDtoFromJson(Map json) => + DeviceInfoDto( name: json['Name'] as String?, customName: json['CustomName'] as String?, accessToken: json['AccessToken'] as String?, @@ -1723,12 +1660,12 @@ DeviceInfo _$DeviceInfoFromJson(Map json) => DeviceInfo( : DateTime.parse(json['DateLastActivity'] as String), capabilities: json['Capabilities'] == null ? null - : ClientCapabilities.fromJson( + : ClientCapabilitiesDto.fromJson( json['Capabilities'] as Map), iconUrl: json['IconUrl'] as String?, ); -Map _$DeviceInfoToJson(DeviceInfo instance) { +Map _$DeviceInfoDtoToJson(DeviceInfoDto instance) { final val = {}; void writeNotNull(String key, dynamic value) { @@ -1752,19 +1689,19 @@ Map _$DeviceInfoToJson(DeviceInfo instance) { return val; } -DeviceInfoQueryResult _$DeviceInfoQueryResultFromJson( +DeviceInfoDtoQueryResult _$DeviceInfoDtoQueryResultFromJson( Map json) => - DeviceInfoQueryResult( + DeviceInfoDtoQueryResult( items: (json['Items'] as List?) - ?.map((e) => DeviceInfo.fromJson(e as Map)) + ?.map((e) => DeviceInfoDto.fromJson(e as Map)) .toList() ?? [], totalRecordCount: (json['TotalRecordCount'] as num?)?.toInt(), startIndex: (json['StartIndex'] as num?)?.toInt(), ); -Map _$DeviceInfoQueryResultToJson( - DeviceInfoQueryResult instance) { +Map _$DeviceInfoDtoQueryResultToJson( + DeviceInfoDtoQueryResult instance) { final val = {}; void writeNotNull(String key, dynamic value) { @@ -1779,28 +1716,6 @@ Map _$DeviceInfoQueryResultToJson( return val; } -DeviceOptions _$DeviceOptionsFromJson(Map json) => - DeviceOptions( - id: (json['Id'] as num?)?.toInt(), - deviceId: json['DeviceId'] as String?, - customName: json['CustomName'] as String?, - ); - -Map _$DeviceOptionsToJson(DeviceOptions instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('Id', instance.id); - writeNotNull('DeviceId', instance.deviceId); - writeNotNull('CustomName', instance.customName); - return val; -} - DeviceOptionsDto _$DeviceOptionsDtoFromJson(Map json) => DeviceOptionsDto( id: (json['Id'] as num?)?.toInt(), @@ -1971,17 +1886,21 @@ EncodingOptions _$EncodingOptionsFromJson(Map json) => throttleDelaySeconds: (json['ThrottleDelaySeconds'] as num?)?.toInt(), enableSegmentDeletion: json['EnableSegmentDeletion'] as bool?, segmentKeepSeconds: (json['SegmentKeepSeconds'] as num?)?.toInt(), - hardwareAccelerationType: json['HardwareAccelerationType'] as String?, + hardwareAccelerationType: hardwareAccelerationTypeNullableFromJson( + json['HardwareAccelerationType']), encoderAppPath: json['EncoderAppPath'] as String?, encoderAppPathDisplay: json['EncoderAppPathDisplay'] as String?, vaapiDevice: json['VaapiDevice'] as String?, + qsvDevice: json['QsvDevice'] as String?, enableTonemapping: json['EnableTonemapping'] as bool?, enableVppTonemapping: json['EnableVppTonemapping'] as bool?, enableVideoToolboxTonemapping: json['EnableVideoToolboxTonemapping'] as bool?, - tonemappingAlgorithm: json['TonemappingAlgorithm'] as String?, - tonemappingMode: json['TonemappingMode'] as String?, - tonemappingRange: json['TonemappingRange'] as String?, + tonemappingAlgorithm: + tonemappingAlgorithmNullableFromJson(json['TonemappingAlgorithm']), + tonemappingMode: tonemappingModeNullableFromJson(json['TonemappingMode']), + tonemappingRange: + tonemappingRangeNullableFromJson(json['TonemappingRange']), tonemappingDesat: (json['TonemappingDesat'] as num?)?.toDouble(), tonemappingPeak: (json['TonemappingPeak'] as num?)?.toDouble(), tonemappingParam: (json['TonemappingParam'] as num?)?.toDouble(), @@ -1991,13 +1910,18 @@ EncodingOptions _$EncodingOptionsFromJson(Map json) => (json['VppTonemappingContrast'] as num?)?.toDouble(), h264Crf: (json['H264Crf'] as num?)?.toInt(), h265Crf: (json['H265Crf'] as num?)?.toInt(), - encoderPreset: json['EncoderPreset'] as String?, + encoderPreset: encoderPresetNullableFromJson(json['EncoderPreset']), deinterlaceDoubleRate: json['DeinterlaceDoubleRate'] as bool?, - deinterlaceMethod: json['DeinterlaceMethod'] as String?, + deinterlaceMethod: + deinterlaceMethodNullableFromJson(json['DeinterlaceMethod']), enableDecodingColorDepth10Hevc: json['EnableDecodingColorDepth10Hevc'] as bool?, enableDecodingColorDepth10Vp9: json['EnableDecodingColorDepth10Vp9'] as bool?, + enableDecodingColorDepth10HevcRext: + json['EnableDecodingColorDepth10HevcRext'] as bool?, + enableDecodingColorDepth12HevcRext: + json['EnableDecodingColorDepth12HevcRext'] as bool?, enableEnhancedNvdecDecoder: json['EnableEnhancedNvdecDecoder'] as bool?, preferSystemNativeHwDecoder: json['PreferSystemNativeHwDecoder'] as bool?, enableIntelLowPowerH264HwEncoder: @@ -2042,17 +1966,24 @@ Map _$EncodingOptionsToJson(EncodingOptions instance) { writeNotNull('ThrottleDelaySeconds', instance.throttleDelaySeconds); writeNotNull('EnableSegmentDeletion', instance.enableSegmentDeletion); writeNotNull('SegmentKeepSeconds', instance.segmentKeepSeconds); - writeNotNull('HardwareAccelerationType', instance.hardwareAccelerationType); + writeNotNull( + 'HardwareAccelerationType', + hardwareAccelerationTypeNullableToJson( + instance.hardwareAccelerationType)); writeNotNull('EncoderAppPath', instance.encoderAppPath); writeNotNull('EncoderAppPathDisplay', instance.encoderAppPathDisplay); writeNotNull('VaapiDevice', instance.vaapiDevice); + writeNotNull('QsvDevice', instance.qsvDevice); writeNotNull('EnableTonemapping', instance.enableTonemapping); writeNotNull('EnableVppTonemapping', instance.enableVppTonemapping); writeNotNull( 'EnableVideoToolboxTonemapping', instance.enableVideoToolboxTonemapping); - writeNotNull('TonemappingAlgorithm', instance.tonemappingAlgorithm); - writeNotNull('TonemappingMode', instance.tonemappingMode); - writeNotNull('TonemappingRange', instance.tonemappingRange); + writeNotNull('TonemappingAlgorithm', + tonemappingAlgorithmNullableToJson(instance.tonemappingAlgorithm)); + writeNotNull('TonemappingMode', + tonemappingModeNullableToJson(instance.tonemappingMode)); + writeNotNull('TonemappingRange', + tonemappingRangeNullableToJson(instance.tonemappingRange)); writeNotNull('TonemappingDesat', instance.tonemappingDesat); writeNotNull('TonemappingPeak', instance.tonemappingPeak); writeNotNull('TonemappingParam', instance.tonemappingParam); @@ -2060,13 +1991,19 @@ Map _$EncodingOptionsToJson(EncodingOptions instance) { writeNotNull('VppTonemappingContrast', instance.vppTonemappingContrast); writeNotNull('H264Crf', instance.h264Crf); writeNotNull('H265Crf', instance.h265Crf); - writeNotNull('EncoderPreset', instance.encoderPreset); + writeNotNull( + 'EncoderPreset', encoderPresetNullableToJson(instance.encoderPreset)); writeNotNull('DeinterlaceDoubleRate', instance.deinterlaceDoubleRate); - writeNotNull('DeinterlaceMethod', instance.deinterlaceMethod); + writeNotNull('DeinterlaceMethod', + deinterlaceMethodNullableToJson(instance.deinterlaceMethod)); writeNotNull('EnableDecodingColorDepth10Hevc', instance.enableDecodingColorDepth10Hevc); writeNotNull( 'EnableDecodingColorDepth10Vp9', instance.enableDecodingColorDepth10Vp9); + writeNotNull('EnableDecodingColorDepth10HevcRext', + instance.enableDecodingColorDepth10HevcRext); + writeNotNull('EnableDecodingColorDepth12HevcRext', + instance.enableDecodingColorDepth12HevcRext); writeNotNull( 'EnableEnhancedNvdecDecoder', instance.enableEnhancedNvdecDecoder); writeNotNull( @@ -2104,28 +2041,6 @@ Map _$EndPointInfoToJson(EndPointInfo instance) { return val; } -EpisodeVisualization _$EpisodeVisualizationFromJson( - Map json) => - EpisodeVisualization( - id: json['Id'] as String?, - name: json['Name'] as String?, - ); - -Map _$EpisodeVisualizationToJson( - EpisodeVisualization instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('Id', instance.id); - writeNotNull('Name', instance.name); - return val; -} - ExternalIdInfo _$ExternalIdInfoFromJson(Map json) => ExternalIdInfo( name: json['Name'] as String?, @@ -2384,7 +2299,7 @@ GetProgramsDto _$GetProgramsDtoFromJson(Map json) => .toList() ?? [], enableImages: json['EnableImages'] as bool?, - enableTotalRecordCount: json['EnableTotalRecordCount'] as bool?, + enableTotalRecordCount: json['EnableTotalRecordCount'] as bool? ?? true, imageTypeLimit: (json['ImageTypeLimit'] as num?)?.toInt(), enableImageTypes: imageTypeListFromJson(json['EnableImageTypes'] as List?), @@ -2732,67 +2647,6 @@ Map _$InstallationInfoToJson(InstallationInfo instance) { return val; } -Intro _$IntroFromJson(Map json) => Intro( - episodeId: json['EpisodeId'] as String?, - valid: json['Valid'] as bool?, - introStart: (json['IntroStart'] as num?)?.toDouble(), - introEnd: (json['IntroEnd'] as num?)?.toDouble(), - showSkipPromptAt: (json['ShowSkipPromptAt'] as num?)?.toDouble(), - hideSkipPromptAt: (json['HideSkipPromptAt'] as num?)?.toDouble(), - ); - -Map _$IntroToJson(Intro instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('EpisodeId', instance.episodeId); - writeNotNull('Valid', instance.valid); - writeNotNull('IntroStart', instance.introStart); - writeNotNull('IntroEnd', instance.introEnd); - writeNotNull('ShowSkipPromptAt', instance.showSkipPromptAt); - writeNotNull('HideSkipPromptAt', instance.hideSkipPromptAt); - return val; -} - -IntroWithMetadata _$IntroWithMetadataFromJson(Map json) => - IntroWithMetadata( - episodeId: json['EpisodeId'] as String?, - valid: json['Valid'] as bool?, - introStart: (json['IntroStart'] as num?)?.toDouble(), - introEnd: (json['IntroEnd'] as num?)?.toDouble(), - showSkipPromptAt: (json['ShowSkipPromptAt'] as num?)?.toDouble(), - hideSkipPromptAt: (json['HideSkipPromptAt'] as num?)?.toDouble(), - series: json['Series'] as String?, - season: (json['Season'] as num?)?.toInt(), - title: json['Title'] as String?, - ); - -Map _$IntroWithMetadataToJson(IntroWithMetadata instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('EpisodeId', instance.episodeId); - writeNotNull('Valid', instance.valid); - writeNotNull('IntroStart', instance.introStart); - writeNotNull('IntroEnd', instance.introEnd); - writeNotNull('ShowSkipPromptAt', instance.showSkipPromptAt); - writeNotNull('HideSkipPromptAt', instance.hideSkipPromptAt); - writeNotNull('Series', instance.series); - writeNotNull('Season', instance.season); - writeNotNull('Title', instance.title); - return val; -} - IPlugin _$IPluginFromJson(Map json) => IPlugin( name: json['Name'] as String?, description: json['Description'] as String?, @@ -2861,25 +2715,6 @@ Map _$ItemCountsToJson(ItemCounts instance) { return val; } -Items _$ItemsFromJson(Map json) => Items( - movies: (json['movies'] as num?)?.toInt(), - episodes: (json['episodes'] as num?)?.toInt(), - ); - -Map _$ItemsToJson(Items instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('movies', instance.movies); - writeNotNull('episodes', instance.episodes); - return val; -} - JoinGroupRequestDto _$JoinGroupRequestDtoFromJson(Map json) => JoinGroupRequestDto( groupId: json['GroupId'] as String?, @@ -3002,6 +2837,16 @@ LibraryOptions _$LibraryOptionsFromJson(Map json) => ?.map((e) => e as String) .toList() ?? [], + disabledMediaSegmentProviders: + (json['DisabledMediaSegmentProviders'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], + mediaSegmentProvideOrder: + (json['MediaSegmentProvideOrder'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], skipSubtitlesIfEmbeddedSubtitlesPresent: json['SkipSubtitlesIfEmbeddedSubtitlesPresent'] as bool?, skipSubtitlesIfAudioTrackMatches: @@ -3014,6 +2859,26 @@ LibraryOptions _$LibraryOptionsFromJson(Map json) => requirePerfectSubtitleMatch: json['RequirePerfectSubtitleMatch'] as bool?, saveSubtitlesWithMedia: json['SaveSubtitlesWithMedia'] as bool?, saveLyricsWithMedia: json['SaveLyricsWithMedia'] as bool? ?? false, + saveTrickplayWithMedia: json['SaveTrickplayWithMedia'] as bool? ?? false, + disabledLyricFetchers: (json['DisabledLyricFetchers'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], + lyricFetcherOrder: (json['LyricFetcherOrder'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], + preferNonstandardArtistsTag: + json['PreferNonstandardArtistsTag'] as bool? ?? false, + useCustomTagDelimiters: json['UseCustomTagDelimiters'] as bool? ?? false, + customTagDelimiters: (json['CustomTagDelimiters'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], + delimiterWhitelist: (json['DelimiterWhitelist'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], automaticallyAddToCollection: json['AutomaticallyAddToCollection'] as bool?, allowEmbeddedSubtitles: embeddedSubtitleOptionsNullableFromJson( @@ -3067,6 +2932,9 @@ Map _$LibraryOptionsToJson(LibraryOptions instance) { writeNotNull('LocalMetadataReaderOrder', instance.localMetadataReaderOrder); writeNotNull('DisabledSubtitleFetchers', instance.disabledSubtitleFetchers); writeNotNull('SubtitleFetcherOrder', instance.subtitleFetcherOrder); + writeNotNull( + 'DisabledMediaSegmentProviders', instance.disabledMediaSegmentProviders); + writeNotNull('MediaSegmentProvideOrder', instance.mediaSegmentProvideOrder); writeNotNull('SkipSubtitlesIfEmbeddedSubtitlesPresent', instance.skipSubtitlesIfEmbeddedSubtitlesPresent); writeNotNull('SkipSubtitlesIfAudioTrackMatches', @@ -3076,6 +2944,14 @@ Map _$LibraryOptionsToJson(LibraryOptions instance) { 'RequirePerfectSubtitleMatch', instance.requirePerfectSubtitleMatch); writeNotNull('SaveSubtitlesWithMedia', instance.saveSubtitlesWithMedia); writeNotNull('SaveLyricsWithMedia', instance.saveLyricsWithMedia); + writeNotNull('SaveTrickplayWithMedia', instance.saveTrickplayWithMedia); + writeNotNull('DisabledLyricFetchers', instance.disabledLyricFetchers); + writeNotNull('LyricFetcherOrder', instance.lyricFetcherOrder); + writeNotNull( + 'PreferNonstandardArtistsTag', instance.preferNonstandardArtistsTag); + writeNotNull('UseCustomTagDelimiters', instance.useCustomTagDelimiters); + writeNotNull('CustomTagDelimiters', instance.customTagDelimiters); + writeNotNull('DelimiterWhitelist', instance.delimiterWhitelist); writeNotNull( 'AutomaticallyAddToCollection', instance.automaticallyAddToCollection); writeNotNull('AllowEmbeddedSubtitles', @@ -3103,6 +2979,11 @@ LibraryOptionsResultDto _$LibraryOptionsResultDtoFromJson( LibraryOptionInfoDto.fromJson(e as Map)) .toList() ?? [], + lyricFetchers: (json['LyricFetchers'] as List?) + ?.map((e) => + LibraryOptionInfoDto.fromJson(e as Map)) + .toList() ?? + [], typeOptions: (json['TypeOptions'] as List?) ?.map((e) => LibraryTypeOptionsDto.fromJson(e as Map)) @@ -3126,6 +3007,8 @@ Map _$LibraryOptionsResultDtoToJson( instance.metadataReaders?.map((e) => e.toJson()).toList()); writeNotNull('SubtitleFetchers', instance.subtitleFetchers?.map((e) => e.toJson()).toList()); + writeNotNull( + 'LyricFetchers', instance.lyricFetchers?.map((e) => e.toJson()).toList()); writeNotNull( 'TypeOptions', instance.typeOptions?.map((e) => e.toJson()).toList()); return val; @@ -3625,7 +3508,6 @@ Map _$MediaPathDtoToJson(MediaPathDto instance) { MediaPathInfo _$MediaPathInfoFromJson(Map json) => MediaPathInfo( path: json['Path'] as String?, - networkPath: json['NetworkPath'] as String?, ); Map _$MediaPathInfoToJson(MediaPathInfo instance) { @@ -3638,7 +3520,59 @@ Map _$MediaPathInfoToJson(MediaPathInfo instance) { } writeNotNull('Path', instance.path); - writeNotNull('NetworkPath', instance.networkPath); + return val; +} + +MediaSegmentDto _$MediaSegmentDtoFromJson(Map json) => + MediaSegmentDto( + id: json['Id'] as String?, + itemId: json['ItemId'] as String?, + type: mediaSegmentTypeNullableFromJson(json['Type']), + startTicks: (json['StartTicks'] as num?)?.toInt(), + endTicks: (json['EndTicks'] as num?)?.toInt(), + ); + +Map _$MediaSegmentDtoToJson(MediaSegmentDto instance) { + final val = {}; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('Id', instance.id); + writeNotNull('ItemId', instance.itemId); + writeNotNull('Type', mediaSegmentTypeNullableToJson(instance.type)); + writeNotNull('StartTicks', instance.startTicks); + writeNotNull('EndTicks', instance.endTicks); + return val; +} + +MediaSegmentDtoQueryResult _$MediaSegmentDtoQueryResultFromJson( + Map json) => + MediaSegmentDtoQueryResult( + items: (json['Items'] as List?) + ?.map((e) => MediaSegmentDto.fromJson(e as Map)) + .toList() ?? + [], + totalRecordCount: (json['TotalRecordCount'] as num?)?.toInt(), + startIndex: (json['StartIndex'] as num?)?.toInt(), + ); + +Map _$MediaSegmentDtoQueryResultToJson( + MediaSegmentDtoQueryResult instance) { + final val = {}; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('Items', instance.items?.map((e) => e.toJson()).toList()); + writeNotNull('TotalRecordCount', instance.totalRecordCount); + writeNotNull('StartIndex', instance.startIndex); return val; } @@ -3664,6 +3598,8 @@ MediaSourceInfo _$MediaSourceInfoFromJson(Map json) => supportsDirectStream: json['SupportsDirectStream'] as bool?, supportsDirectPlay: json['SupportsDirectPlay'] as bool?, isInfiniteStream: json['IsInfiniteStream'] as bool?, + useMostCompatibleTranscodingProfile: + json['UseMostCompatibleTranscodingProfile'] as bool? ?? false, requiresOpening: json['RequiresOpening'] as bool?, openToken: json['OpenToken'] as String?, requiresClosing: json['RequiresClosing'] as bool?, @@ -3687,6 +3623,8 @@ MediaSourceInfo _$MediaSourceInfoFromJson(Map json) => .toList() ?? [], bitrate: (json['Bitrate'] as num?)?.toInt(), + fallbackMaxStreamingBitrate: + (json['FallbackMaxStreamingBitrate'] as num?)?.toInt(), timestamp: transportStreamTimestampNullableFromJson(json['Timestamp']), requiredHttpHeaders: json['RequiredHttpHeaders'] as Map?, transcodingUrl: json['TranscodingUrl'] as String?, @@ -3698,6 +3636,7 @@ MediaSourceInfo _$MediaSourceInfoFromJson(Map json) => (json['DefaultAudioStreamIndex'] as num?)?.toInt(), defaultSubtitleStreamIndex: (json['DefaultSubtitleStreamIndex'] as num?)?.toInt(), + hasSegments: json['HasSegments'] as bool?, ); Map _$MediaSourceInfoToJson(MediaSourceInfo instance) { @@ -3730,6 +3669,8 @@ Map _$MediaSourceInfoToJson(MediaSourceInfo instance) { writeNotNull('SupportsDirectStream', instance.supportsDirectStream); writeNotNull('SupportsDirectPlay', instance.supportsDirectPlay); writeNotNull('IsInfiniteStream', instance.isInfiniteStream); + writeNotNull('UseMostCompatibleTranscodingProfile', + instance.useMostCompatibleTranscodingProfile); writeNotNull('RequiresOpening', instance.requiresOpening); writeNotNull('OpenToken', instance.openToken); writeNotNull('RequiresClosing', instance.requiresClosing); @@ -3747,6 +3688,8 @@ Map _$MediaSourceInfoToJson(MediaSourceInfo instance) { instance.mediaAttachments?.map((e) => e.toJson()).toList()); writeNotNull('Formats', instance.formats); writeNotNull('Bitrate', instance.bitrate); + writeNotNull( + 'FallbackMaxStreamingBitrate', instance.fallbackMaxStreamingBitrate); writeNotNull( 'Timestamp', transportStreamTimestampNullableToJson(instance.timestamp)); writeNotNull('RequiredHttpHeaders', instance.requiredHttpHeaders); @@ -3758,6 +3701,7 @@ Map _$MediaSourceInfoToJson(MediaSourceInfo instance) { writeNotNull('DefaultAudioStreamIndex', instance.defaultAudioStreamIndex); writeNotNull( 'DefaultSubtitleStreamIndex', instance.defaultSubtitleStreamIndex); + writeNotNull('HasSegments', instance.hasSegments); return val; } @@ -3778,6 +3722,7 @@ MediaStream _$MediaStreamFromJson(Map json) => MediaStream( blPresentFlag: (json['BlPresentFlag'] as num?)?.toInt(), dvBlSignalCompatibilityId: (json['DvBlSignalCompatibilityId'] as num?)?.toInt(), + rotation: (json['Rotation'] as num?)?.toInt(), comment: json['Comment'] as String?, timeBase: json['TimeBase'] as String?, codecTimeBase: json['CodecTimeBase'] as String?, @@ -3811,6 +3756,7 @@ MediaStream _$MediaStreamFromJson(Map json) => MediaStream( width: (json['Width'] as num?)?.toInt(), averageFrameRate: (json['AverageFrameRate'] as num?)?.toDouble(), realFrameRate: (json['RealFrameRate'] as num?)?.toDouble(), + referenceFrameRate: (json['ReferenceFrameRate'] as num?)?.toDouble(), profile: json['Profile'] as String?, type: mediaStreamTypeNullableFromJson(json['Type']), aspectRatio: json['AspectRatio'] as String?, @@ -3853,6 +3799,7 @@ Map _$MediaStreamToJson(MediaStream instance) { writeNotNull('ElPresentFlag', instance.elPresentFlag); writeNotNull('BlPresentFlag', instance.blPresentFlag); writeNotNull('DvBlSignalCompatibilityId', instance.dvBlSignalCompatibilityId); + writeNotNull('Rotation', instance.rotation); writeNotNull('Comment', instance.comment); writeNotNull('TimeBase', instance.timeBase); writeNotNull('CodecTimeBase', instance.codecTimeBase); @@ -3886,6 +3833,7 @@ Map _$MediaStreamToJson(MediaStream instance) { writeNotNull('Width', instance.width); writeNotNull('AverageFrameRate', instance.averageFrameRate); writeNotNull('RealFrameRate', instance.realFrameRate); + writeNotNull('ReferenceFrameRate', instance.referenceFrameRate); writeNotNull('Profile', instance.profile); writeNotNull('Type', mediaStreamTypeNullableToJson(instance.type)); writeNotNull('AspectRatio', instance.aspectRatio); @@ -4452,47 +4400,6 @@ Map _$NextItemRequestDtoToJson(NextItemRequestDto instance) { return val; } -NotFoundObjects _$NotFoundObjectsFromJson(Map json) => - NotFoundObjects( - movies: (json['movies'] as List?) - ?.map((e) => TraktMovie.fromJson(e as Map)) - .toList() ?? - [], - shows: (json['shows'] as List?) - ?.map((e) => TraktShow.fromJson(e as Map)) - .toList() ?? - [], - episodes: (json['episodes'] as List?) - ?.map((e) => TraktEpisode.fromJson(e as Map)) - .toList() ?? - [], - seasons: (json['seasons'] as List?) - ?.map((e) => TraktSeason.fromJson(e as Map)) - .toList() ?? - [], - people: (json['people'] as List?) - ?.map((e) => TraktPerson.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$NotFoundObjectsToJson(NotFoundObjects instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('movies', instance.movies?.map((e) => e.toJson()).toList()); - writeNotNull('shows', instance.shows?.map((e) => e.toJson()).toList()); - writeNotNull('episodes', instance.episodes?.map((e) => e.toJson()).toList()); - writeNotNull('seasons', instance.seasons?.map((e) => e.toJson()).toList()); - writeNotNull('people', instance.people?.map((e) => e.toJson()).toList()); - return val; -} - OpenLiveStreamDto _$OpenLiveStreamDtoFromJson(Map json) => OpenLiveStreamDto( openToken: json['OpenToken'] as String?, @@ -4506,6 +4413,8 @@ OpenLiveStreamDto _$OpenLiveStreamDtoFromJson(Map json) => itemId: json['ItemId'] as String?, enableDirectPlay: json['EnableDirectPlay'] as bool?, enableDirectStream: json['EnableDirectStream'] as bool?, + alwaysBurnInSubtitleWhenTranscoding: + json['AlwaysBurnInSubtitleWhenTranscoding'] as bool?, deviceProfile: json['DeviceProfile'] == null ? null : DeviceProfile.fromJson( @@ -4534,6 +4443,8 @@ Map _$OpenLiveStreamDtoToJson(OpenLiveStreamDto instance) { writeNotNull('ItemId', instance.itemId); writeNotNull('EnableDirectPlay', instance.enableDirectPlay); writeNotNull('EnableDirectStream', instance.enableDirectStream); + writeNotNull('AlwaysBurnInSubtitleWhenTranscoding', + instance.alwaysBurnInSubtitleWhenTranscoding); writeNotNull('DeviceProfile', instance.deviceProfile?.toJson()); val['DirectPlayProtocols'] = mediaProtocolListToJson(instance.directPlayProtocols); @@ -4776,6 +4687,8 @@ PlaybackInfoDto _$PlaybackInfoDtoFromJson(Map json) => allowVideoStreamCopy: json['AllowVideoStreamCopy'] as bool?, allowAudioStreamCopy: json['AllowAudioStreamCopy'] as bool?, autoOpenLiveStream: json['AutoOpenLiveStream'] as bool?, + alwaysBurnInSubtitleWhenTranscoding: + json['AlwaysBurnInSubtitleWhenTranscoding'] as bool?, ); Map _$PlaybackInfoDtoToJson(PlaybackInfoDto instance) { @@ -4802,6 +4715,8 @@ Map _$PlaybackInfoDtoToJson(PlaybackInfoDto instance) { writeNotNull('AllowVideoStreamCopy', instance.allowVideoStreamCopy); writeNotNull('AllowAudioStreamCopy', instance.allowAudioStreamCopy); writeNotNull('AutoOpenLiveStream', instance.autoOpenLiveStream); + writeNotNull('AlwaysBurnInSubtitleWhenTranscoding', + instance.alwaysBurnInSubtitleWhenTranscoding); return val; } @@ -5071,6 +4986,34 @@ Map _$PlaylistCreationResultToJson( return val; } +PlaylistDto _$PlaylistDtoFromJson(Map json) => PlaylistDto( + openAccess: json['OpenAccess'] as bool?, + shares: (json['Shares'] as List?) + ?.map((e) => + PlaylistUserPermissions.fromJson(e as Map)) + .toList() ?? + [], + itemIds: (json['ItemIds'] as List?) + ?.map((e) => e as String) + .toList() ?? + [], + ); + +Map _$PlaylistDtoToJson(PlaylistDto instance) { + final val = {}; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('OpenAccess', instance.openAccess); + writeNotNull('Shares', instance.shares?.map((e) => e.toJson()).toList()); + writeNotNull('ItemIds', instance.itemIds); + return val; +} + PlaylistUserPermissions _$PlaylistUserPermissionsFromJson( Map json) => PlaylistUserPermissions( @@ -6007,30 +5950,6 @@ Map _$RemoveFromPlaylistRequestDtoToJson( return val; } -ReportPlaybackOptions _$ReportPlaybackOptionsFromJson( - Map json) => - ReportPlaybackOptions( - maxDataAge: (json['MaxDataAge'] as num?)?.toInt(), - backupPath: json['BackupPath'] as String?, - maxBackupFiles: (json['MaxBackupFiles'] as num?)?.toInt(), - ); - -Map _$ReportPlaybackOptionsToJson( - ReportPlaybackOptions instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('MaxDataAge', instance.maxDataAge); - writeNotNull('BackupPath', instance.backupPath); - writeNotNull('MaxBackupFiles', instance.maxBackupFiles); - return val; -} - RepositoryInfo _$RepositoryInfoFromJson(Map json) => RepositoryInfo( name: json['Name'] as String?, @@ -6595,7 +6514,6 @@ ServerConfiguration _$ServerConfigurationFromJson(Map json) => disableLiveTvChannelUserDataName: json['DisableLiveTvChannelUserDataName'] as bool?, metadataPath: json['MetadataPath'] as String?, - metadataNetworkPath: json['MetadataNetworkPath'] as String?, preferredMetadataLanguage: json['PreferredMetadataLanguage'] as String?, metadataCountryCode: json['MetadataCountryCode'] as String?, sortReplaceCharacters: (json['SortReplaceCharacters'] as List?) @@ -6714,7 +6632,6 @@ Map _$ServerConfigurationToJson(ServerConfiguration instance) { writeNotNull('DisableLiveTvChannelUserDataName', instance.disableLiveTvChannelUserDataName); writeNotNull('MetadataPath', instance.metadataPath); - writeNotNull('MetadataNetworkPath', instance.metadataNetworkPath); writeNotNull('PreferredMetadataLanguage', instance.preferredMetadataLanguage); writeNotNull('MetadataCountryCode', instance.metadataCountryCode); writeNotNull('SortReplaceCharacters', instance.sortReplaceCharacters); @@ -6847,7 +6764,8 @@ Map _$ServerShuttingDownMessageToJson( return val; } -SessionInfo _$SessionInfoFromJson(Map json) => SessionInfo( +SessionInfoDto _$SessionInfoDtoFromJson(Map json) => + SessionInfoDto( playState: json['PlayState'] == null ? null : PlayerStateInfo.fromJson(json['PlayState'] as Map), @@ -6857,7 +6775,7 @@ SessionInfo _$SessionInfoFromJson(Map json) => SessionInfo( [], capabilities: json['Capabilities'] == null ? null - : ClientCapabilities.fromJson( + : ClientCapabilitiesDto.fromJson( json['Capabilities'] as Map), remoteEndPoint: json['RemoteEndPoint'] as String?, playableMediaTypes: @@ -6911,7 +6829,7 @@ SessionInfo _$SessionInfoFromJson(Map json) => SessionInfo( generalCommandTypeListFromJson(json['SupportedCommands'] as List?), ); -Map _$SessionInfoToJson(SessionInfo instance) { +Map _$SessionInfoDtoToJson(SessionInfoDto instance) { final val = {}; void writeNotNull(String key, dynamic value) { @@ -6961,7 +6879,7 @@ Map _$SessionInfoToJson(SessionInfo instance) { SessionsMessage _$SessionsMessageFromJson(Map json) => SessionsMessage( data: (json['Data'] as List?) - ?.map((e) => SessionInfo.fromJson(e as Map)) + ?.map((e) => SessionInfoDto.fromJson(e as Map)) .toList() ?? [], messageId: json['MessageId'] as String?, @@ -7884,281 +7802,6 @@ Map _$TrailerInfoRemoteSearchQueryToJson( return val; } -TraktEpisode _$TraktEpisodeFromJson(Map json) => TraktEpisode( - season: (json['season'] as num?)?.toInt(), - number: (json['number'] as num?)?.toInt(), - title: json['title'] as String?, - ids: json['ids'] == null - ? null - : TraktEpisodeId.fromJson(json['ids'] as Map), - ); - -Map _$TraktEpisodeToJson(TraktEpisode instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('season', instance.season); - writeNotNull('number', instance.number); - writeNotNull('title', instance.title); - writeNotNull('ids', instance.ids?.toJson()); - return val; -} - -TraktEpisodeId _$TraktEpisodeIdFromJson(Map json) => - TraktEpisodeId( - trakt: (json['trakt'] as num?)?.toInt(), - slug: json['slug'] as String?, - imdb: json['imdb'] as String?, - tmdb: (json['tmdb'] as num?)?.toInt(), - tvdb: json['tvdb'] as String?, - tvrage: json['tvrage'] as String?, - ); - -Map _$TraktEpisodeIdToJson(TraktEpisodeId instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('trakt', instance.trakt); - writeNotNull('slug', instance.slug); - writeNotNull('imdb', instance.imdb); - writeNotNull('tmdb', instance.tmdb); - writeNotNull('tvdb', instance.tvdb); - writeNotNull('tvrage', instance.tvrage); - return val; -} - -TraktMovie _$TraktMovieFromJson(Map json) => TraktMovie( - title: json['title'] as String?, - year: (json['year'] as num?)?.toInt(), - ids: json['ids'] == null - ? null - : TraktMovieId.fromJson(json['ids'] as Map), - ); - -Map _$TraktMovieToJson(TraktMovie instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('title', instance.title); - writeNotNull('year', instance.year); - writeNotNull('ids', instance.ids?.toJson()); - return val; -} - -TraktMovieId _$TraktMovieIdFromJson(Map json) => TraktMovieId( - trakt: (json['trakt'] as num?)?.toInt(), - slug: json['slug'] as String?, - imdb: json['imdb'] as String?, - tmdb: (json['tmdb'] as num?)?.toInt(), - ); - -Map _$TraktMovieIdToJson(TraktMovieId instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('trakt', instance.trakt); - writeNotNull('slug', instance.slug); - writeNotNull('imdb', instance.imdb); - writeNotNull('tmdb', instance.tmdb); - return val; -} - -TraktPerson _$TraktPersonFromJson(Map json) => TraktPerson( - name: json['name'] as String?, - ids: json['ids'] == null - ? null - : TraktPersonId.fromJson(json['ids'] as Map), - ); - -Map _$TraktPersonToJson(TraktPerson instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('name', instance.name); - writeNotNull('ids', instance.ids?.toJson()); - return val; -} - -TraktPersonId _$TraktPersonIdFromJson(Map json) => - TraktPersonId( - trakt: (json['trakt'] as num?)?.toInt(), - slug: json['slug'] as String?, - imdb: json['imdb'] as String?, - tmdb: (json['tmdb'] as num?)?.toInt(), - tvrage: (json['tvrage'] as num?)?.toInt(), - ); - -Map _$TraktPersonIdToJson(TraktPersonId instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('trakt', instance.trakt); - writeNotNull('slug', instance.slug); - writeNotNull('imdb', instance.imdb); - writeNotNull('tmdb', instance.tmdb); - writeNotNull('tvrage', instance.tvrage); - return val; -} - -TraktSeason _$TraktSeasonFromJson(Map json) => TraktSeason( - number: (json['number'] as num?)?.toInt(), - ids: json['ids'] == null - ? null - : TraktSeasonId.fromJson(json['ids'] as Map), - ); - -Map _$TraktSeasonToJson(TraktSeason instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('number', instance.number); - writeNotNull('ids', instance.ids?.toJson()); - return val; -} - -TraktSeasonId _$TraktSeasonIdFromJson(Map json) => - TraktSeasonId( - trakt: (json['trakt'] as num?)?.toInt(), - slug: json['slug'] as String?, - tmdb: (json['tmdb'] as num?)?.toInt(), - tvdb: (json['tvdb'] as num?)?.toInt(), - tvrage: (json['tvrage'] as num?)?.toInt(), - ); - -Map _$TraktSeasonIdToJson(TraktSeasonId instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('trakt', instance.trakt); - writeNotNull('slug', instance.slug); - writeNotNull('tmdb', instance.tmdb); - writeNotNull('tvdb', instance.tvdb); - writeNotNull('tvrage', instance.tvrage); - return val; -} - -TraktShow _$TraktShowFromJson(Map json) => TraktShow( - title: json['title'] as String?, - year: (json['year'] as num?)?.toInt(), - ids: json['ids'] == null - ? null - : TraktShowId.fromJson(json['ids'] as Map), - ); - -Map _$TraktShowToJson(TraktShow instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('title', instance.title); - writeNotNull('year', instance.year); - writeNotNull('ids', instance.ids?.toJson()); - return val; -} - -TraktShowId _$TraktShowIdFromJson(Map json) => TraktShowId( - trakt: (json['trakt'] as num?)?.toInt(), - slug: json['slug'] as String?, - imdb: json['imdb'] as String?, - tmdb: (json['tmdb'] as num?)?.toInt(), - tvdb: json['tvdb'] as String?, - tvrage: json['tvrage'] as String?, - ); - -Map _$TraktShowIdToJson(TraktShowId instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('trakt', instance.trakt); - writeNotNull('slug', instance.slug); - writeNotNull('imdb', instance.imdb); - writeNotNull('tmdb', instance.tmdb); - writeNotNull('tvdb', instance.tvdb); - writeNotNull('tvrage', instance.tvrage); - return val; -} - -TraktSyncResponse _$TraktSyncResponseFromJson(Map json) => - TraktSyncResponse( - added: json['added'] == null - ? null - : Items.fromJson(json['added'] as Map), - deleted: json['deleted'] == null - ? null - : Items.fromJson(json['deleted'] as Map), - updated: json['updated'] == null - ? null - : Items.fromJson(json['updated'] as Map), - notFound: json['not_found'] == null - ? null - : NotFoundObjects.fromJson(json['not_found'] as Map), - ); - -Map _$TraktSyncResponseToJson(TraktSyncResponse instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('added', instance.added?.toJson()); - writeNotNull('deleted', instance.deleted?.toJson()); - writeNotNull('updated', instance.updated?.toJson()); - writeNotNull('not_found', instance.notFound?.toJson()); - return val; -} - TranscodingInfo _$TranscodingInfoFromJson(Map json) => TranscodingInfo( audioCodec: json['AudioCodec'] as String?, @@ -8172,7 +7815,7 @@ TranscodingInfo _$TranscodingInfoFromJson(Map json) => width: (json['Width'] as num?)?.toInt(), height: (json['Height'] as num?)?.toInt(), audioChannels: (json['AudioChannels'] as num?)?.toInt(), - hardwareAccelerationType: hardwareEncodingTypeNullableFromJson( + hardwareAccelerationType: hardwareAccelerationTypeNullableFromJson( json['HardwareAccelerationType']), transcodeReasons: transcodeReasonListFromJson(json['TranscodeReasons'] as List?), @@ -8198,8 +7841,10 @@ Map _$TranscodingInfoToJson(TranscodingInfo instance) { writeNotNull('Width', instance.width); writeNotNull('Height', instance.height); writeNotNull('AudioChannels', instance.audioChannels); - writeNotNull('HardwareAccelerationType', - hardwareEncodingTypeNullableToJson(instance.hardwareAccelerationType)); + writeNotNull( + 'HardwareAccelerationType', + hardwareAccelerationTypeNullableToJson( + instance.hardwareAccelerationType)); val['TranscodeReasons'] = transcodeReasonListToJson(instance.transcodeReasons); return val; @@ -8230,6 +7875,7 @@ TranscodingProfile _$TranscodingProfileFromJson(Map json) => ?.map((e) => ProfileCondition.fromJson(e as Map)) .toList() ?? [], + enableAudioVbrEncoding: json['EnableAudioVbrEncoding'] as bool? ?? true, ); Map _$TranscodingProfileToJson(TranscodingProfile instance) { @@ -8260,6 +7906,7 @@ Map _$TranscodingProfileToJson(TranscodingProfile instance) { writeNotNull('BreakOnNonKeyFrames', instance.breakOnNonKeyFrames); writeNotNull( 'Conditions', instance.conditions?.map((e) => e.toJson()).toList()); + writeNotNull('EnableAudioVbrEncoding', instance.enableAudioVbrEncoding); return val; } @@ -8297,6 +7944,8 @@ TrickplayOptions _$TrickplayOptionsFromJson(Map json) => TrickplayOptions( enableHwAcceleration: json['EnableHwAcceleration'] as bool?, enableHwEncoding: json['EnableHwEncoding'] as bool?, + enableKeyFrameOnlyExtraction: + json['EnableKeyFrameOnlyExtraction'] as bool?, scanBehavior: trickplayScanBehaviorNullableFromJson(json['ScanBehavior']), processPriority: processPriorityClassNullableFromJson(json['ProcessPriority']), @@ -8323,6 +7972,8 @@ Map _$TrickplayOptionsToJson(TrickplayOptions instance) { writeNotNull('EnableHwAcceleration', instance.enableHwAcceleration); writeNotNull('EnableHwEncoding', instance.enableHwEncoding); + writeNotNull( + 'EnableKeyFrameOnlyExtraction', instance.enableKeyFrameOnlyExtraction); writeNotNull('ScanBehavior', trickplayScanBehaviorNullableToJson(instance.scanBehavior)); writeNotNull('ProcessPriority', @@ -8370,6 +8021,11 @@ TunerHostInfo _$TunerHostInfoFromJson(Map json) => friendlyName: json['FriendlyName'] as String?, importFavoritesOnly: json['ImportFavoritesOnly'] as bool?, allowHWTranscoding: json['AllowHWTranscoding'] as bool?, + allowFmp4TranscodingContainer: + json['AllowFmp4TranscodingContainer'] as bool?, + allowStreamSharing: json['AllowStreamSharing'] as bool?, + fallbackMaxStreamingBitrate: + (json['FallbackMaxStreamingBitrate'] as num?)?.toInt(), enableStreamLooping: json['EnableStreamLooping'] as bool?, source: json['Source'] as String?, tunerCount: (json['TunerCount'] as num?)?.toInt(), @@ -8393,6 +8049,11 @@ Map _$TunerHostInfoToJson(TunerHostInfo instance) { writeNotNull('FriendlyName', instance.friendlyName); writeNotNull('ImportFavoritesOnly', instance.importFavoritesOnly); writeNotNull('AllowHWTranscoding', instance.allowHWTranscoding); + writeNotNull( + 'AllowFmp4TranscodingContainer', instance.allowFmp4TranscodingContainer); + writeNotNull('AllowStreamSharing', instance.allowStreamSharing); + writeNotNull( + 'FallbackMaxStreamingBitrate', instance.fallbackMaxStreamingBitrate); writeNotNull('EnableStreamLooping', instance.enableStreamLooping); writeNotNull('Source', instance.source); writeNotNull('TunerCount', instance.tunerCount); @@ -8812,30 +8473,6 @@ Map _$UserDtoToJson(UserDto instance) { return val; } -UserInterfaceConfiguration _$UserInterfaceConfigurationFromJson( - Map json) => - UserInterfaceConfiguration( - skipButtonVisible: json['SkipButtonVisible'] as bool?, - skipButtonIntroText: json['SkipButtonIntroText'] as String?, - skipButtonEndCreditsText: json['SkipButtonEndCreditsText'] as String?, - ); - -Map _$UserInterfaceConfigurationToJson( - UserInterfaceConfiguration instance) { - final val = {}; - - void writeNotNull(String key, dynamic value) { - if (value != null) { - val[key] = value; - } - } - - writeNotNull('SkipButtonVisible', instance.skipButtonVisible); - writeNotNull('SkipButtonIntroText', instance.skipButtonIntroText); - writeNotNull('SkipButtonEndCreditsText', instance.skipButtonEndCreditsText); - return val; -} - UserItemDataDto _$UserItemDataDtoFromJson(Map json) => UserItemDataDto( rating: (json['Rating'] as num?)?.toDouble(), diff --git a/lib/models/items/intro_skip_model.dart b/lib/models/items/intro_skip_model.dart deleted file mode 100644 index d8a5de2..0000000 --- a/lib/models/items/intro_skip_model.dart +++ /dev/null @@ -1,47 +0,0 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first, invalid_annotation_target -import 'package:freezed_annotation/freezed_annotation.dart'; - -part 'intro_skip_model.freezed.dart'; -part 'intro_skip_model.g.dart'; - -@freezed -class IntroOutSkipModel with _$IntroOutSkipModel { - const IntroOutSkipModel._(); - factory IntroOutSkipModel({ - IntroSkipModel? intro, - IntroSkipModel? credits, - }) = _IntroOutSkipModel; - - factory IntroOutSkipModel.fromJson(Map json) => _$IntroOutSkipModelFromJson(json); - - bool introInRange(Duration position) { - if (intro == null) return false; - return (position.compareTo(intro!.showTime) >= 0 && position.compareTo(intro!.hideTime) <= 0); - } - - bool creditsInRange(Duration position) { - if (credits == null) return false; - return (position.compareTo(credits!.showTime) >= 0 && position.compareTo(credits!.hideTime) <= 0); - } -} - -@freezed -class IntroSkipModel with _$IntroSkipModel { - factory IntroSkipModel({ - @JsonKey(name: "EpisodeId") required String id, - @JsonKey(name: "Valid") required bool valid, - @JsonKey(name: "IntroStart", fromJson: _durationFromMilliseconds, toJson: _durationToMilliseconds) - required Duration start, - @JsonKey(name: "IntroEnd", fromJson: _durationFromMilliseconds, toJson: _durationToMilliseconds) - required Duration end, - @JsonKey(name: "ShowSkipPromptAt", fromJson: _durationFromMilliseconds, toJson: _durationToMilliseconds) - required Duration showTime, - @JsonKey(name: "HideSkipPromptAt", fromJson: _durationFromMilliseconds, toJson: _durationToMilliseconds) - required Duration hideTime, - }) = _IntroSkipModel; - - factory IntroSkipModel.fromJson(Map json) => _$IntroSkipModelFromJson(json); -} - -Duration _durationFromMilliseconds(num milliseconds) => Duration(milliseconds: (milliseconds * 1000).toInt()); -num _durationToMilliseconds(Duration duration) => duration.inMilliseconds.toDouble() / 1000.0; diff --git a/lib/models/items/intro_skip_model.freezed.dart b/lib/models/items/intro_skip_model.freezed.dart deleted file mode 100644 index ed53eeb..0000000 --- a/lib/models/items/intro_skip_model.freezed.dart +++ /dev/null @@ -1,595 +0,0 @@ -// coverage:ignore-file -// GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: type=lint -// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark - -part of 'intro_skip_model.dart'; - -// ************************************************************************** -// FreezedGenerator -// ************************************************************************** - -T _$identity(T value) => value; - -final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); - -IntroOutSkipModel _$IntroOutSkipModelFromJson(Map json) { - return _IntroOutSkipModel.fromJson(json); -} - -/// @nodoc -mixin _$IntroOutSkipModel { - IntroSkipModel? get intro => throw _privateConstructorUsedError; - IntroSkipModel? get credits => throw _privateConstructorUsedError; - - /// Serializes this IntroOutSkipModel to a JSON map. - Map toJson() => throw _privateConstructorUsedError; - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $IntroOutSkipModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $IntroOutSkipModelCopyWith<$Res> { - factory $IntroOutSkipModelCopyWith( - IntroOutSkipModel value, $Res Function(IntroOutSkipModel) then) = - _$IntroOutSkipModelCopyWithImpl<$Res, IntroOutSkipModel>; - @useResult - $Res call({IntroSkipModel? intro, IntroSkipModel? credits}); - - $IntroSkipModelCopyWith<$Res>? get intro; - $IntroSkipModelCopyWith<$Res>? get credits; -} - -/// @nodoc -class _$IntroOutSkipModelCopyWithImpl<$Res, $Val extends IntroOutSkipModel> - implements $IntroOutSkipModelCopyWith<$Res> { - _$IntroOutSkipModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? intro = freezed, - Object? credits = freezed, - }) { - return _then(_value.copyWith( - intro: freezed == intro - ? _value.intro - : intro // ignore: cast_nullable_to_non_nullable - as IntroSkipModel?, - credits: freezed == credits - ? _value.credits - : credits // ignore: cast_nullable_to_non_nullable - as IntroSkipModel?, - ) as $Val); - } - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @override - @pragma('vm:prefer-inline') - $IntroSkipModelCopyWith<$Res>? get intro { - if (_value.intro == null) { - return null; - } - - return $IntroSkipModelCopyWith<$Res>(_value.intro!, (value) { - return _then(_value.copyWith(intro: value) as $Val); - }); - } - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @override - @pragma('vm:prefer-inline') - $IntroSkipModelCopyWith<$Res>? get credits { - if (_value.credits == null) { - return null; - } - - return $IntroSkipModelCopyWith<$Res>(_value.credits!, (value) { - return _then(_value.copyWith(credits: value) as $Val); - }); - } -} - -/// @nodoc -abstract class _$$IntroOutSkipModelImplCopyWith<$Res> - implements $IntroOutSkipModelCopyWith<$Res> { - factory _$$IntroOutSkipModelImplCopyWith(_$IntroOutSkipModelImpl value, - $Res Function(_$IntroOutSkipModelImpl) then) = - __$$IntroOutSkipModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call({IntroSkipModel? intro, IntroSkipModel? credits}); - - @override - $IntroSkipModelCopyWith<$Res>? get intro; - @override - $IntroSkipModelCopyWith<$Res>? get credits; -} - -/// @nodoc -class __$$IntroOutSkipModelImplCopyWithImpl<$Res> - extends _$IntroOutSkipModelCopyWithImpl<$Res, _$IntroOutSkipModelImpl> - implements _$$IntroOutSkipModelImplCopyWith<$Res> { - __$$IntroOutSkipModelImplCopyWithImpl(_$IntroOutSkipModelImpl _value, - $Res Function(_$IntroOutSkipModelImpl) _then) - : super(_value, _then); - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? intro = freezed, - Object? credits = freezed, - }) { - return _then(_$IntroOutSkipModelImpl( - intro: freezed == intro - ? _value.intro - : intro // ignore: cast_nullable_to_non_nullable - as IntroSkipModel?, - credits: freezed == credits - ? _value.credits - : credits // ignore: cast_nullable_to_non_nullable - as IntroSkipModel?, - )); - } -} - -/// @nodoc -@JsonSerializable() -class _$IntroOutSkipModelImpl extends _IntroOutSkipModel { - _$IntroOutSkipModelImpl({this.intro, this.credits}) : super._(); - - factory _$IntroOutSkipModelImpl.fromJson(Map json) => - _$$IntroOutSkipModelImplFromJson(json); - - @override - final IntroSkipModel? intro; - @override - final IntroSkipModel? credits; - - @override - String toString() { - return 'IntroOutSkipModel(intro: $intro, credits: $credits)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$IntroOutSkipModelImpl && - (identical(other.intro, intro) || other.intro == intro) && - (identical(other.credits, credits) || other.credits == credits)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => Object.hash(runtimeType, intro, credits); - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$IntroOutSkipModelImplCopyWith<_$IntroOutSkipModelImpl> get copyWith => - __$$IntroOutSkipModelImplCopyWithImpl<_$IntroOutSkipModelImpl>( - this, _$identity); - - @override - Map toJson() { - return _$$IntroOutSkipModelImplToJson( - this, - ); - } -} - -abstract class _IntroOutSkipModel extends IntroOutSkipModel { - factory _IntroOutSkipModel( - {final IntroSkipModel? intro, - final IntroSkipModel? credits}) = _$IntroOutSkipModelImpl; - _IntroOutSkipModel._() : super._(); - - factory _IntroOutSkipModel.fromJson(Map json) = - _$IntroOutSkipModelImpl.fromJson; - - @override - IntroSkipModel? get intro; - @override - IntroSkipModel? get credits; - - /// Create a copy of IntroOutSkipModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$IntroOutSkipModelImplCopyWith<_$IntroOutSkipModelImpl> get copyWith => - throw _privateConstructorUsedError; -} - -IntroSkipModel _$IntroSkipModelFromJson(Map json) { - return _IntroSkipModel.fromJson(json); -} - -/// @nodoc -mixin _$IntroSkipModel { - @JsonKey(name: "EpisodeId") - String get id => throw _privateConstructorUsedError; - @JsonKey(name: "Valid") - bool get valid => throw _privateConstructorUsedError; - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get start => throw _privateConstructorUsedError; - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get end => throw _privateConstructorUsedError; - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get showTime => throw _privateConstructorUsedError; - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get hideTime => throw _privateConstructorUsedError; - - /// Serializes this IntroSkipModel to a JSON map. - Map toJson() => throw _privateConstructorUsedError; - - /// Create a copy of IntroSkipModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - $IntroSkipModelCopyWith get copyWith => - throw _privateConstructorUsedError; -} - -/// @nodoc -abstract class $IntroSkipModelCopyWith<$Res> { - factory $IntroSkipModelCopyWith( - IntroSkipModel value, $Res Function(IntroSkipModel) then) = - _$IntroSkipModelCopyWithImpl<$Res, IntroSkipModel>; - @useResult - $Res call( - {@JsonKey(name: "EpisodeId") String id, - @JsonKey(name: "Valid") bool valid, - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration start, - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration end, - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration showTime, - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration hideTime}); -} - -/// @nodoc -class _$IntroSkipModelCopyWithImpl<$Res, $Val extends IntroSkipModel> - implements $IntroSkipModelCopyWith<$Res> { - _$IntroSkipModelCopyWithImpl(this._value, this._then); - - // ignore: unused_field - final $Val _value; - // ignore: unused_field - final $Res Function($Val) _then; - - /// Create a copy of IntroSkipModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? id = null, - Object? valid = null, - Object? start = null, - Object? end = null, - Object? showTime = null, - Object? hideTime = null, - }) { - return _then(_value.copyWith( - id: null == id - ? _value.id - : id // ignore: cast_nullable_to_non_nullable - as String, - valid: null == valid - ? _value.valid - : valid // ignore: cast_nullable_to_non_nullable - as bool, - start: null == start - ? _value.start - : start // ignore: cast_nullable_to_non_nullable - as Duration, - end: null == end - ? _value.end - : end // ignore: cast_nullable_to_non_nullable - as Duration, - showTime: null == showTime - ? _value.showTime - : showTime // ignore: cast_nullable_to_non_nullable - as Duration, - hideTime: null == hideTime - ? _value.hideTime - : hideTime // ignore: cast_nullable_to_non_nullable - as Duration, - ) as $Val); - } -} - -/// @nodoc -abstract class _$$IntroSkipModelImplCopyWith<$Res> - implements $IntroSkipModelCopyWith<$Res> { - factory _$$IntroSkipModelImplCopyWith(_$IntroSkipModelImpl value, - $Res Function(_$IntroSkipModelImpl) then) = - __$$IntroSkipModelImplCopyWithImpl<$Res>; - @override - @useResult - $Res call( - {@JsonKey(name: "EpisodeId") String id, - @JsonKey(name: "Valid") bool valid, - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration start, - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration end, - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration showTime, - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration hideTime}); -} - -/// @nodoc -class __$$IntroSkipModelImplCopyWithImpl<$Res> - extends _$IntroSkipModelCopyWithImpl<$Res, _$IntroSkipModelImpl> - implements _$$IntroSkipModelImplCopyWith<$Res> { - __$$IntroSkipModelImplCopyWithImpl( - _$IntroSkipModelImpl _value, $Res Function(_$IntroSkipModelImpl) _then) - : super(_value, _then); - - /// Create a copy of IntroSkipModel - /// with the given fields replaced by the non-null parameter values. - @pragma('vm:prefer-inline') - @override - $Res call({ - Object? id = null, - Object? valid = null, - Object? start = null, - Object? end = null, - Object? showTime = null, - Object? hideTime = null, - }) { - return _then(_$IntroSkipModelImpl( - id: null == id - ? _value.id - : id // ignore: cast_nullable_to_non_nullable - as String, - valid: null == valid - ? _value.valid - : valid // ignore: cast_nullable_to_non_nullable - as bool, - start: null == start - ? _value.start - : start // ignore: cast_nullable_to_non_nullable - as Duration, - end: null == end - ? _value.end - : end // ignore: cast_nullable_to_non_nullable - as Duration, - showTime: null == showTime - ? _value.showTime - : showTime // ignore: cast_nullable_to_non_nullable - as Duration, - hideTime: null == hideTime - ? _value.hideTime - : hideTime // ignore: cast_nullable_to_non_nullable - as Duration, - )); - } -} - -/// @nodoc -@JsonSerializable() -class _$IntroSkipModelImpl implements _IntroSkipModel { - _$IntroSkipModelImpl( - {@JsonKey(name: "EpisodeId") required this.id, - @JsonKey(name: "Valid") required this.valid, - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required this.start, - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required this.end, - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required this.showTime, - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required this.hideTime}); - - factory _$IntroSkipModelImpl.fromJson(Map json) => - _$$IntroSkipModelImplFromJson(json); - - @override - @JsonKey(name: "EpisodeId") - final String id; - @override - @JsonKey(name: "Valid") - final bool valid; - @override - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - final Duration start; - @override - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - final Duration end; - @override - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - final Duration showTime; - @override - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - final Duration hideTime; - - @override - String toString() { - return 'IntroSkipModel(id: $id, valid: $valid, start: $start, end: $end, showTime: $showTime, hideTime: $hideTime)'; - } - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other.runtimeType == runtimeType && - other is _$IntroSkipModelImpl && - (identical(other.id, id) || other.id == id) && - (identical(other.valid, valid) || other.valid == valid) && - (identical(other.start, start) || other.start == start) && - (identical(other.end, end) || other.end == end) && - (identical(other.showTime, showTime) || - other.showTime == showTime) && - (identical(other.hideTime, hideTime) || - other.hideTime == hideTime)); - } - - @JsonKey(includeFromJson: false, includeToJson: false) - @override - int get hashCode => - Object.hash(runtimeType, id, valid, start, end, showTime, hideTime); - - /// Create a copy of IntroSkipModel - /// with the given fields replaced by the non-null parameter values. - @JsonKey(includeFromJson: false, includeToJson: false) - @override - @pragma('vm:prefer-inline') - _$$IntroSkipModelImplCopyWith<_$IntroSkipModelImpl> get copyWith => - __$$IntroSkipModelImplCopyWithImpl<_$IntroSkipModelImpl>( - this, _$identity); - - @override - Map toJson() { - return _$$IntroSkipModelImplToJson( - this, - ); - } -} - -abstract class _IntroSkipModel implements IntroSkipModel { - factory _IntroSkipModel( - {@JsonKey(name: "EpisodeId") required final String id, - @JsonKey(name: "Valid") required final bool valid, - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required final Duration start, - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required final Duration end, - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required final Duration showTime, - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - required final Duration hideTime}) = _$IntroSkipModelImpl; - - factory _IntroSkipModel.fromJson(Map json) = - _$IntroSkipModelImpl.fromJson; - - @override - @JsonKey(name: "EpisodeId") - String get id; - @override - @JsonKey(name: "Valid") - bool get valid; - @override - @JsonKey( - name: "IntroStart", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get start; - @override - @JsonKey( - name: "IntroEnd", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get end; - @override - @JsonKey( - name: "ShowSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get showTime; - @override - @JsonKey( - name: "HideSkipPromptAt", - fromJson: _durationFromMilliseconds, - toJson: _durationToMilliseconds) - Duration get hideTime; - - /// Create a copy of IntroSkipModel - /// with the given fields replaced by the non-null parameter values. - @override - @JsonKey(includeFromJson: false, includeToJson: false) - _$$IntroSkipModelImplCopyWith<_$IntroSkipModelImpl> get copyWith => - throw _privateConstructorUsedError; -} diff --git a/lib/models/items/intro_skip_model.g.dart b/lib/models/items/intro_skip_model.g.dart deleted file mode 100644 index 01e89f6..0000000 --- a/lib/models/items/intro_skip_model.g.dart +++ /dev/null @@ -1,46 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'intro_skip_model.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -_$IntroOutSkipModelImpl _$$IntroOutSkipModelImplFromJson( - Map json) => - _$IntroOutSkipModelImpl( - intro: json['intro'] == null - ? null - : IntroSkipModel.fromJson(json['intro'] as Map), - credits: json['credits'] == null - ? null - : IntroSkipModel.fromJson(json['credits'] as Map), - ); - -Map _$$IntroOutSkipModelImplToJson( - _$IntroOutSkipModelImpl instance) => - { - 'intro': instance.intro, - 'credits': instance.credits, - }; - -_$IntroSkipModelImpl _$$IntroSkipModelImplFromJson(Map json) => - _$IntroSkipModelImpl( - id: json['EpisodeId'] as String, - valid: json['Valid'] as bool, - start: _durationFromMilliseconds(json['IntroStart'] as num), - end: _durationFromMilliseconds(json['IntroEnd'] as num), - showTime: _durationFromMilliseconds(json['ShowSkipPromptAt'] as num), - hideTime: _durationFromMilliseconds(json['HideSkipPromptAt'] as num), - ); - -Map _$$IntroSkipModelImplToJson( - _$IntroSkipModelImpl instance) => - { - 'EpisodeId': instance.id, - 'Valid': instance.valid, - 'IntroStart': _durationToMilliseconds(instance.start), - 'IntroEnd': _durationToMilliseconds(instance.end), - 'ShowSkipPromptAt': _durationToMilliseconds(instance.showTime), - 'HideSkipPromptAt': _durationToMilliseconds(instance.hideTime), - }; diff --git a/lib/models/items/media_segments_model.dart b/lib/models/items/media_segments_model.dart new file mode 100644 index 0000000..f89388a --- /dev/null +++ b/lib/models/items/media_segments_model.dart @@ -0,0 +1,79 @@ +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart' as dto; + +part 'media_segments_model.freezed.dart'; +part 'media_segments_model.g.dart'; + +@freezed +class MediaSegmentsModel with _$MediaSegmentsModel { + const MediaSegmentsModel._(); + + factory MediaSegmentsModel({ + @Default([]) List segments, + }) = _MediaSegmentsModel; + + factory MediaSegmentsModel.fromJson(Map json) => _$MediaSegmentsModelFromJson(json); + + MediaSegment? get intro => segments.firstWhereOrNull((element) => element.type == MediaSegmentType.intro); + MediaSegment? get outro => segments.firstWhereOrNull((element) => element.type == MediaSegmentType.outro); +} + +@freezed +class MediaSegment with _$MediaSegment { + const MediaSegment._(); + + factory MediaSegment({ + required MediaSegmentType type, + required Duration start, + required Duration end, + }) = _MediaSegment; + + factory MediaSegment.fromJson(Map json) => _$MediaSegmentFromJson(json); + + bool inRange(Duration position) => (position.compareTo(start) >= 0 && position.compareTo(end) <= 0); +} + +enum MediaSegmentType { + unknown, + commercial, + preview, + recap, + outro, + intro; + + Color get color => switch (this) { + MediaSegmentType.unknown => Colors.black, + MediaSegmentType.commercial => Colors.purpleAccent, + MediaSegmentType.preview => Colors.deepOrangeAccent, + MediaSegmentType.recap => Colors.lightBlueAccent, + MediaSegmentType.outro => Colors.yellowAccent, + MediaSegmentType.intro => Colors.greenAccent, + }; + + static MediaSegmentType fromDto(dto.MediaSegmentType? value) { + return switch (value) { + dto.MediaSegmentType.swaggerGeneratedUnknown => MediaSegmentType.unknown, + dto.MediaSegmentType.unknown => MediaSegmentType.unknown, + dto.MediaSegmentType.commercial => MediaSegmentType.commercial, + dto.MediaSegmentType.preview => MediaSegmentType.preview, + dto.MediaSegmentType.recap => MediaSegmentType.recap, + dto.MediaSegmentType.outro => MediaSegmentType.outro, + dto.MediaSegmentType.intro => MediaSegmentType.intro, + null => MediaSegmentType.unknown, + }; + } +} + +extension MediaSegmentExtension on dto.MediaSegmentDto { + MediaSegment get toSegment => MediaSegment( + type: MediaSegmentType.fromDto(type), + start: _durationToMilliseconds(startTicks ?? 0), + end: _durationToMilliseconds(endTicks ?? 0), + ); +} + +Duration _durationToMilliseconds(num milliseconds) => Duration(milliseconds: (milliseconds ~/ 10000)); diff --git a/lib/models/items/media_segments_model.freezed.dart b/lib/models/items/media_segments_model.freezed.dart new file mode 100644 index 0000000..f2c6bf9 --- /dev/null +++ b/lib/models/items/media_segments_model.freezed.dart @@ -0,0 +1,363 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'media_segments_model.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +MediaSegmentsModel _$MediaSegmentsModelFromJson(Map json) { + return _MediaSegmentsModel.fromJson(json); +} + +/// @nodoc +mixin _$MediaSegmentsModel { + List get segments => throw _privateConstructorUsedError; + + /// Serializes this MediaSegmentsModel to a JSON map. + Map toJson() => throw _privateConstructorUsedError; + + /// Create a copy of MediaSegmentsModel + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + $MediaSegmentsModelCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $MediaSegmentsModelCopyWith<$Res> { + factory $MediaSegmentsModelCopyWith( + MediaSegmentsModel value, $Res Function(MediaSegmentsModel) then) = + _$MediaSegmentsModelCopyWithImpl<$Res, MediaSegmentsModel>; + @useResult + $Res call({List segments}); +} + +/// @nodoc +class _$MediaSegmentsModelCopyWithImpl<$Res, $Val extends MediaSegmentsModel> + implements $MediaSegmentsModelCopyWith<$Res> { + _$MediaSegmentsModelCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of MediaSegmentsModel + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? segments = null, + }) { + return _then(_value.copyWith( + segments: null == segments + ? _value.segments + : segments // ignore: cast_nullable_to_non_nullable + as List, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$MediaSegmentsModelImplCopyWith<$Res> + implements $MediaSegmentsModelCopyWith<$Res> { + factory _$$MediaSegmentsModelImplCopyWith(_$MediaSegmentsModelImpl value, + $Res Function(_$MediaSegmentsModelImpl) then) = + __$$MediaSegmentsModelImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({List segments}); +} + +/// @nodoc +class __$$MediaSegmentsModelImplCopyWithImpl<$Res> + extends _$MediaSegmentsModelCopyWithImpl<$Res, _$MediaSegmentsModelImpl> + implements _$$MediaSegmentsModelImplCopyWith<$Res> { + __$$MediaSegmentsModelImplCopyWithImpl(_$MediaSegmentsModelImpl _value, + $Res Function(_$MediaSegmentsModelImpl) _then) + : super(_value, _then); + + /// Create a copy of MediaSegmentsModel + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? segments = null, + }) { + return _then(_$MediaSegmentsModelImpl( + segments: null == segments + ? _value._segments + : segments // ignore: cast_nullable_to_non_nullable + as List, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$MediaSegmentsModelImpl extends _MediaSegmentsModel { + _$MediaSegmentsModelImpl({final List segments = const []}) + : _segments = segments, + super._(); + + factory _$MediaSegmentsModelImpl.fromJson(Map json) => + _$$MediaSegmentsModelImplFromJson(json); + + final List _segments; + @override + @JsonKey() + List get segments { + if (_segments is EqualUnmodifiableListView) return _segments; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_segments); + } + + @override + String toString() { + return 'MediaSegmentsModel(segments: $segments)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$MediaSegmentsModelImpl && + const DeepCollectionEquality().equals(other._segments, _segments)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => + Object.hash(runtimeType, const DeepCollectionEquality().hash(_segments)); + + /// Create a copy of MediaSegmentsModel + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$MediaSegmentsModelImplCopyWith<_$MediaSegmentsModelImpl> get copyWith => + __$$MediaSegmentsModelImplCopyWithImpl<_$MediaSegmentsModelImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$MediaSegmentsModelImplToJson( + this, + ); + } +} + +abstract class _MediaSegmentsModel extends MediaSegmentsModel { + factory _MediaSegmentsModel({final List segments}) = + _$MediaSegmentsModelImpl; + _MediaSegmentsModel._() : super._(); + + factory _MediaSegmentsModel.fromJson(Map json) = + _$MediaSegmentsModelImpl.fromJson; + + @override + List get segments; + + /// Create a copy of MediaSegmentsModel + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + _$$MediaSegmentsModelImplCopyWith<_$MediaSegmentsModelImpl> get copyWith => + throw _privateConstructorUsedError; +} + +MediaSegment _$MediaSegmentFromJson(Map json) { + return _MediaSegment.fromJson(json); +} + +/// @nodoc +mixin _$MediaSegment { + MediaSegmentType get type => throw _privateConstructorUsedError; + Duration get start => throw _privateConstructorUsedError; + Duration get end => throw _privateConstructorUsedError; + + /// Serializes this MediaSegment to a JSON map. + Map toJson() => throw _privateConstructorUsedError; + + /// Create a copy of MediaSegment + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + $MediaSegmentCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $MediaSegmentCopyWith<$Res> { + factory $MediaSegmentCopyWith( + MediaSegment value, $Res Function(MediaSegment) then) = + _$MediaSegmentCopyWithImpl<$Res, MediaSegment>; + @useResult + $Res call({MediaSegmentType type, Duration start, Duration end}); +} + +/// @nodoc +class _$MediaSegmentCopyWithImpl<$Res, $Val extends MediaSegment> + implements $MediaSegmentCopyWith<$Res> { + _$MediaSegmentCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of MediaSegment + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? type = null, + Object? start = null, + Object? end = null, + }) { + return _then(_value.copyWith( + type: null == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as MediaSegmentType, + start: null == start + ? _value.start + : start // ignore: cast_nullable_to_non_nullable + as Duration, + end: null == end + ? _value.end + : end // ignore: cast_nullable_to_non_nullable + as Duration, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$MediaSegmentImplCopyWith<$Res> + implements $MediaSegmentCopyWith<$Res> { + factory _$$MediaSegmentImplCopyWith( + _$MediaSegmentImpl value, $Res Function(_$MediaSegmentImpl) then) = + __$$MediaSegmentImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({MediaSegmentType type, Duration start, Duration end}); +} + +/// @nodoc +class __$$MediaSegmentImplCopyWithImpl<$Res> + extends _$MediaSegmentCopyWithImpl<$Res, _$MediaSegmentImpl> + implements _$$MediaSegmentImplCopyWith<$Res> { + __$$MediaSegmentImplCopyWithImpl( + _$MediaSegmentImpl _value, $Res Function(_$MediaSegmentImpl) _then) + : super(_value, _then); + + /// Create a copy of MediaSegment + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? type = null, + Object? start = null, + Object? end = null, + }) { + return _then(_$MediaSegmentImpl( + type: null == type + ? _value.type + : type // ignore: cast_nullable_to_non_nullable + as MediaSegmentType, + start: null == start + ? _value.start + : start // ignore: cast_nullable_to_non_nullable + as Duration, + end: null == end + ? _value.end + : end // ignore: cast_nullable_to_non_nullable + as Duration, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$MediaSegmentImpl extends _MediaSegment { + _$MediaSegmentImpl( + {required this.type, required this.start, required this.end}) + : super._(); + + factory _$MediaSegmentImpl.fromJson(Map json) => + _$$MediaSegmentImplFromJson(json); + + @override + final MediaSegmentType type; + @override + final Duration start; + @override + final Duration end; + + @override + String toString() { + return 'MediaSegment(type: $type, start: $start, end: $end)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$MediaSegmentImpl && + (identical(other.type, type) || other.type == type) && + (identical(other.start, start) || other.start == start) && + (identical(other.end, end) || other.end == end)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => Object.hash(runtimeType, type, start, end); + + /// Create a copy of MediaSegment + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$MediaSegmentImplCopyWith<_$MediaSegmentImpl> get copyWith => + __$$MediaSegmentImplCopyWithImpl<_$MediaSegmentImpl>(this, _$identity); + + @override + Map toJson() { + return _$$MediaSegmentImplToJson( + this, + ); + } +} + +abstract class _MediaSegment extends MediaSegment { + factory _MediaSegment( + {required final MediaSegmentType type, + required final Duration start, + required final Duration end}) = _$MediaSegmentImpl; + _MediaSegment._() : super._(); + + factory _MediaSegment.fromJson(Map json) = + _$MediaSegmentImpl.fromJson; + + @override + MediaSegmentType get type; + @override + Duration get start; + @override + Duration get end; + + /// Create a copy of MediaSegment + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + _$$MediaSegmentImplCopyWith<_$MediaSegmentImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/models/items/media_segments_model.g.dart b/lib/models/items/media_segments_model.g.dart new file mode 100644 index 0000000..609eac2 --- /dev/null +++ b/lib/models/items/media_segments_model.g.dart @@ -0,0 +1,45 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'media_segments_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$MediaSegmentsModelImpl _$$MediaSegmentsModelImplFromJson( + Map json) => + _$MediaSegmentsModelImpl( + segments: (json['segments'] as List?) + ?.map((e) => MediaSegment.fromJson(e as Map)) + .toList() ?? + const [], + ); + +Map _$$MediaSegmentsModelImplToJson( + _$MediaSegmentsModelImpl instance) => + { + 'segments': instance.segments, + }; + +_$MediaSegmentImpl _$$MediaSegmentImplFromJson(Map json) => + _$MediaSegmentImpl( + type: $enumDecode(_$MediaSegmentTypeEnumMap, json['type']), + start: Duration(microseconds: (json['start'] as num).toInt()), + end: Duration(microseconds: (json['end'] as num).toInt()), + ); + +Map _$$MediaSegmentImplToJson(_$MediaSegmentImpl instance) => + { + 'type': _$MediaSegmentTypeEnumMap[instance.type]!, + 'start': instance.start.inMicroseconds, + 'end': instance.end.inMicroseconds, + }; + +const _$MediaSegmentTypeEnumMap = { + MediaSegmentType.unknown: 'unknown', + MediaSegmentType.commercial: 'commercial', + MediaSegmentType.preview: 'preview', + MediaSegmentType.recap: 'recap', + MediaSegmentType.outro: 'outro', + MediaSegmentType.intro: 'intro', +}; diff --git a/lib/models/playback/direct_playback_model.dart b/lib/models/playback/direct_playback_model.dart index 5729814..2eec700 100644 --- a/lib/models/playback/direct_playback_model.dart +++ b/lib/models/playback/direct_playback_model.dart @@ -5,7 +5,7 @@ import 'package:media_kit/media_kit.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/item_base_model.dart'; import 'package:fladder/models/items/chapters_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/trick_play_model.dart'; import 'package:fladder/models/playback/playback_model.dart'; @@ -23,7 +23,7 @@ class DirectPlaybackModel implements PlaybackModel { required this.media, required this.playbackInfo, this.mediaStreams, - this.introSkipModel, + this.mediaSegments, this.chapters, this.trickPlay, this.queue = const [], @@ -42,7 +42,7 @@ class DirectPlaybackModel implements PlaybackModel { final MediaStreamsModel? mediaStreams; @override - final IntroOutSkipModel? introSkipModel; + final MediaSegmentsModel? mediaSegments; @override final List? chapters; @@ -180,7 +180,7 @@ class DirectPlaybackModel implements PlaybackModel { ValueGetter? lastPosition, PlaybackInfoResponse? playbackInfo, ValueGetter? mediaStreams, - ValueGetter? introSkipModel, + ValueGetter? mediaSegments, ValueGetter?>? chapters, ValueGetter? trickPlay, List? queue, @@ -190,7 +190,7 @@ class DirectPlaybackModel implements PlaybackModel { media: media != null ? media() : this.media, playbackInfo: playbackInfo ?? this.playbackInfo, mediaStreams: mediaStreams != null ? mediaStreams() : this.mediaStreams, - introSkipModel: introSkipModel != null ? introSkipModel() : this.introSkipModel, + mediaSegments: mediaSegments != null ? mediaSegments() : this.mediaSegments, chapters: chapters != null ? chapters() : this.chapters, trickPlay: trickPlay != null ? trickPlay() : this.trickPlay, queue: queue ?? this.queue, diff --git a/lib/models/playback/offline_playback_model.dart b/lib/models/playback/offline_playback_model.dart index 60dd1ca..ef4e209 100644 --- a/lib/models/playback/offline_playback_model.dart +++ b/lib/models/playback/offline_playback_model.dart @@ -1,21 +1,21 @@ import 'package:collection/collection.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:media_kit/media_kit.dart'; + import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; +import 'package:fladder/models/item_base_model.dart'; +import 'package:fladder/models/items/chapters_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; +import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/trick_play_model.dart'; +import 'package:fladder/models/playback/playback_model.dart'; import 'package:fladder/models/syncing/sync_item.dart'; +import 'package:fladder/providers/sync_provider.dart'; +import 'package:fladder/util/duration_extensions.dart'; import 'package:fladder/util/list_extensions.dart'; import 'package:fladder/wrappers/media_control_wrapper.dart' if (dart.library.html) 'package:fladder/wrappers/media_control_wrapper_web.dart'; import 'package:flutter/widgets.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:media_kit/media_kit.dart'; - -import 'package:fladder/models/item_base_model.dart'; -import 'package:fladder/models/items/chapters_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; -import 'package:fladder/models/items/media_streams_model.dart'; -import 'package:fladder/models/playback/playback_model.dart'; -import 'package:fladder/providers/sync_provider.dart'; -import 'package:fladder/util/duration_extensions.dart'; class OfflinePlaybackModel implements PlaybackModel { OfflinePlaybackModel({ @@ -24,7 +24,7 @@ class OfflinePlaybackModel implements PlaybackModel { required this.syncedItem, this.mediaStreams, this.playbackInfo, - this.introSkipModel, + this.mediaSegments, this.trickPlay, this.queue = const [], this.syncedQueue = const [], @@ -45,7 +45,7 @@ class OfflinePlaybackModel implements PlaybackModel { final MediaStreamsModel? mediaStreams; @override - final IntroOutSkipModel? introSkipModel; + final MediaSegmentsModel? mediaSegments; @override List? get chapters => syncedItem.chapters; @@ -156,7 +156,7 @@ class OfflinePlaybackModel implements PlaybackModel { ValueGetter? media, SyncedItem? syncedItem, ValueGetter? mediaStreams, - ValueGetter? introSkipModel, + ValueGetter? mediaSegments, ValueGetter? trickPlay, List? queue, List? syncedQueue, @@ -166,7 +166,7 @@ class OfflinePlaybackModel implements PlaybackModel { media: media != null ? media() : this.media, syncedItem: syncedItem ?? this.syncedItem, mediaStreams: mediaStreams != null ? mediaStreams() : this.mediaStreams, - introSkipModel: introSkipModel != null ? introSkipModel() : this.introSkipModel, + mediaSegments: mediaSegments != null ? mediaSegments() : this.mediaSegments, trickPlay: trickPlay != null ? trickPlay() : this.trickPlay, queue: queue ?? this.queue, syncedQueue: syncedQueue ?? this.syncedQueue, diff --git a/lib/models/playback/playback_model.dart b/lib/models/playback/playback_model.dart index d0d949f..2e2a018 100644 --- a/lib/models/playback/playback_model.dart +++ b/lib/models/playback/playback_model.dart @@ -9,7 +9,7 @@ import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/item_base_model.dart'; import 'package:fladder/models/items/chapters_model.dart'; import 'package:fladder/models/items/episode_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/season_model.dart'; import 'package:fladder/models/items/series_model.dart'; @@ -43,7 +43,7 @@ abstract class PlaybackModel { final ItemBaseModel item = throw UnimplementedError(); final Media? media = throw UnimplementedError(); final List queue = const []; - final IntroOutSkipModel? introSkipModel = null; + final MediaSegmentsModel? mediaSegments = null; final PlaybackInfoResponse? playbackInfo = throw UnimplementedError(); List? get chapters; @@ -118,7 +118,7 @@ class PlaybackModelHelper { item: syncedItemModel, syncedItem: syncedItem, trickPlay: syncedItem.trickPlayModel, - introSkipModel: syncedItem.introOutSkipModel, + mediaSegments: syncedItem.mediaSegments, media: Media(syncedItem.videoFile.path), queue: itemQueue.whereNotNull().toList(), syncedQueue: children, @@ -188,7 +188,7 @@ class PlaybackModelHelper { defaultSubStreamIndex: streamModel?.defaultSubStreamIndex, ); - final intro = await api.introSkipGet(id: item.id); + final mediaSegments = await api.mediaSegmentsGet(id: item.id); final trickPlay = (await api.getTrickPlay(item: fullItem.body, ref: ref))?.body; final chapters = fullItem.body?.overview.chapters ?? []; @@ -214,7 +214,7 @@ class PlaybackModelHelper { return DirectPlaybackModel( item: fullItem.body ?? item, queue: queue, - introSkipModel: intro?.body, + mediaSegments: mediaSegments?.body, chapters: chapters, playbackInfo: playbackInfo, trickPlay: trickPlay, @@ -225,7 +225,7 @@ class PlaybackModelHelper { return TranscodePlaybackModel( item: fullItem.body ?? item, queue: queue, - introSkipModel: intro?.body, + mediaSegments: mediaSegments?.body, chapters: chapters, trickPlay: trickPlay, playbackInfo: playbackInfo, @@ -343,7 +343,7 @@ class PlaybackModelHelper { newModel = DirectPlaybackModel( item: playbackModel.item, queue: playbackModel.queue, - introSkipModel: playbackModel.introSkipModel, + mediaSegments: playbackModel.mediaSegments, chapters: playbackModel.chapters, playbackInfo: playbackInfo, trickPlay: playbackModel.trickPlay, @@ -354,7 +354,7 @@ class PlaybackModelHelper { newModel = TranscodePlaybackModel( item: playbackModel.item, queue: playbackModel.queue, - introSkipModel: playbackModel.introSkipModel, + mediaSegments: playbackModel.mediaSegments, chapters: playbackModel.chapters, playbackInfo: playbackInfo, trickPlay: playbackModel.trickPlay, diff --git a/lib/models/playback/transcode_playback_model.dart b/lib/models/playback/transcode_playback_model.dart index dc0d9d3..9fb520c 100644 --- a/lib/models/playback/transcode_playback_model.dart +++ b/lib/models/playback/transcode_playback_model.dart @@ -5,7 +5,7 @@ import 'package:media_kit/media_kit.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/item_base_model.dart'; import 'package:fladder/models/items/chapters_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/trick_play_model.dart'; import 'package:fladder/models/playback/playback_model.dart'; @@ -23,7 +23,7 @@ class TranscodePlaybackModel implements PlaybackModel { required this.media, required this.playbackInfo, this.mediaStreams, - this.introSkipModel, + this.mediaSegments, this.chapters, this.trickPlay, this.queue = const [], @@ -42,7 +42,7 @@ class TranscodePlaybackModel implements PlaybackModel { final MediaStreamsModel? mediaStreams; @override - final IntroOutSkipModel? introSkipModel; + final MediaSegmentsModel? mediaSegments; @override final List? chapters; @@ -181,7 +181,7 @@ class TranscodePlaybackModel implements PlaybackModel { ValueGetter? lastPosition, PlaybackInfoResponse? playbackInfo, ValueGetter? mediaStreams, - ValueGetter? introSkipModel, + ValueGetter? mediaSegments, ValueGetter?>? chapters, ValueGetter? trickPlay, List? queue, @@ -191,7 +191,7 @@ class TranscodePlaybackModel implements PlaybackModel { media: media != null ? media() : this.media, playbackInfo: playbackInfo ?? this.playbackInfo, mediaStreams: mediaStreams != null ? mediaStreams() : this.mediaStreams, - introSkipModel: introSkipModel != null ? introSkipModel() : this.introSkipModel, + mediaSegments: mediaSegments != null ? mediaSegments() : this.mediaSegments, chapters: chapters != null ? chapters() : this.chapters, trickPlay: trickPlay != null ? trickPlay() : this.trickPlay, queue: queue ?? this.queue, diff --git a/lib/models/syncing/i_synced_item.dart b/lib/models/syncing/i_synced_item.dart index a0c2537..7c82fa8 100644 --- a/lib/models/syncing/i_synced_item.dart +++ b/lib/models/syncing/i_synced_item.dart @@ -35,7 +35,7 @@ class ISyncedItem { int? fileSize; String? videoFileName; String? trickPlayModel; - String? introOutroSkipModel; + String? mediaSegments; String? images; List? chapters; List? subtitles; @@ -50,7 +50,7 @@ class ISyncedItem { this.fileSize, this.videoFileName, this.trickPlayModel, - this.introOutroSkipModel, + this.mediaSegments, this.images, this.chapters, this.subtitles, @@ -68,8 +68,7 @@ class ISyncedItem { sortName: syncedItem.sortName, videoFileName: syncedItem.videoFileName, trickPlayModel: syncedItem.fTrickPlayModel != null ? jsonEncode(syncedItem.fTrickPlayModel?.toJson()) : null, - introOutroSkipModel: - syncedItem.introOutSkipModel != null ? jsonEncode(syncedItem.introOutSkipModel?.toJson()) : null, + mediaSegments: syncedItem.mediaSegments != null ? jsonEncode(syncedItem.mediaSegments?.toJson()) : null, images: syncedItem.fImages != null ? jsonEncode(syncedItem.fImages?.toJson()) : null, chapters: syncedItem.fChapters.map((e) => jsonEncode(e.toJson())).toList(), subtitles: syncedItem.subtitles.map((e) => jsonEncode(e.toJson())).toList(), diff --git a/lib/models/syncing/i_synced_item.g.dart b/lib/models/syncing/i_synced_item.g.dart index 54d12a5..e7f3285 100644 --- a/lib/models/syncing/i_synced_item.g.dart +++ b/lib/models/syncing/i_synced_item.g.dart @@ -57,7 +57,7 @@ const ISyncedItemSchema = IsarGeneratedSchema( type: IsarType.string, ), IsarPropertySchema( - name: 'introOutroSkipModel', + name: 'mediaSegments', type: IsarType.string, ), IsarPropertySchema( @@ -141,7 +141,7 @@ int serializeISyncedItem(IsarWriter writer, ISyncedItem object) { } } { - final value = object.introOutroSkipModel; + final value = object.mediaSegments; if (value == null) { IsarCore.writeNull(writer, 10); } else { @@ -218,8 +218,8 @@ ISyncedItem deserializeISyncedItem(IsarReader reader) { _videoFileName = IsarCore.readString(reader, 8); final String? _trickPlayModel; _trickPlayModel = IsarCore.readString(reader, 9); - final String? _introOutroSkipModel; - _introOutroSkipModel = IsarCore.readString(reader, 10); + final String? _mediaSegments; + _mediaSegments = IsarCore.readString(reader, 10); final String? _images; _images = IsarCore.readString(reader, 11); final List? _chapters; @@ -268,7 +268,7 @@ ISyncedItem deserializeISyncedItem(IsarReader reader) { fileSize: _fileSize, videoFileName: _videoFileName, trickPlayModel: _trickPlayModel, - introOutroSkipModel: _introOutroSkipModel, + mediaSegments: _mediaSegments, images: _images, chapters: _chapters, subtitles: _subtitles, @@ -361,7 +361,7 @@ sealed class _ISyncedItemUpdate { int? fileSize, String? videoFileName, String? trickPlayModel, - String? introOutroSkipModel, + String? mediaSegments, String? images, String? userData, }); @@ -383,7 +383,7 @@ class _ISyncedItemUpdateImpl implements _ISyncedItemUpdate { Object? fileSize = ignore, Object? videoFileName = ignore, Object? trickPlayModel = ignore, - Object? introOutroSkipModel = ignore, + Object? mediaSegments = ignore, Object? images = ignore, Object? userData = ignore, }) { @@ -398,7 +398,7 @@ class _ISyncedItemUpdateImpl implements _ISyncedItemUpdate { if (fileSize != ignore) 7: fileSize as int?, if (videoFileName != ignore) 8: videoFileName as String?, if (trickPlayModel != ignore) 9: trickPlayModel as String?, - if (introOutroSkipModel != ignore) 10: introOutroSkipModel as String?, + if (mediaSegments != ignore) 10: mediaSegments as String?, if (images != ignore) 11: images as String?, if (userData != ignore) 14: userData as String?, }) > @@ -417,7 +417,7 @@ sealed class _ISyncedItemUpdateAll { int? fileSize, String? videoFileName, String? trickPlayModel, - String? introOutroSkipModel, + String? mediaSegments, String? images, String? userData, }); @@ -439,7 +439,7 @@ class _ISyncedItemUpdateAllImpl implements _ISyncedItemUpdateAll { Object? fileSize = ignore, Object? videoFileName = ignore, Object? trickPlayModel = ignore, - Object? introOutroSkipModel = ignore, + Object? mediaSegments = ignore, Object? images = ignore, Object? userData = ignore, }) { @@ -452,7 +452,7 @@ class _ISyncedItemUpdateAllImpl implements _ISyncedItemUpdateAll { if (fileSize != ignore) 7: fileSize as int?, if (videoFileName != ignore) 8: videoFileName as String?, if (trickPlayModel != ignore) 9: trickPlayModel as String?, - if (introOutroSkipModel != ignore) 10: introOutroSkipModel as String?, + if (mediaSegments != ignore) 10: mediaSegments as String?, if (images != ignore) 11: images as String?, if (userData != ignore) 14: userData as String?, }); @@ -475,7 +475,7 @@ sealed class _ISyncedItemQueryUpdate { int? fileSize, String? videoFileName, String? trickPlayModel, - String? introOutroSkipModel, + String? mediaSegments, String? images, String? userData, }); @@ -497,7 +497,7 @@ class _ISyncedItemQueryUpdateImpl implements _ISyncedItemQueryUpdate { Object? fileSize = ignore, Object? videoFileName = ignore, Object? trickPlayModel = ignore, - Object? introOutroSkipModel = ignore, + Object? mediaSegments = ignore, Object? images = ignore, Object? userData = ignore, }) { @@ -510,7 +510,7 @@ class _ISyncedItemQueryUpdateImpl implements _ISyncedItemQueryUpdate { if (fileSize != ignore) 7: fileSize as int?, if (videoFileName != ignore) 8: videoFileName as String?, if (trickPlayModel != ignore) 9: trickPlayModel as String?, - if (introOutroSkipModel != ignore) 10: introOutroSkipModel as String?, + if (mediaSegments != ignore) 10: mediaSegments as String?, if (images != ignore) 11: images as String?, if (userData != ignore) 14: userData as String?, }); @@ -540,7 +540,7 @@ class _ISyncedItemQueryBuilderUpdateImpl implements _ISyncedItemQueryUpdate { Object? fileSize = ignore, Object? videoFileName = ignore, Object? trickPlayModel = ignore, - Object? introOutroSkipModel = ignore, + Object? mediaSegments = ignore, Object? images = ignore, Object? userData = ignore, }) { @@ -555,7 +555,7 @@ class _ISyncedItemQueryBuilderUpdateImpl implements _ISyncedItemQueryUpdate { if (fileSize != ignore) 7: fileSize as int?, if (videoFileName != ignore) 8: videoFileName as String?, if (trickPlayModel != ignore) 9: trickPlayModel as String?, - if (introOutroSkipModel != ignore) 10: introOutroSkipModel as String?, + if (mediaSegments != ignore) 10: mediaSegments as String?, if (images != ignore) 11: images as String?, if (userData != ignore) 14: userData as String?, }); @@ -2015,21 +2015,21 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelIsNull() { + mediaSegmentsIsNull() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition(const IsNullCondition(property: 10)); }); } QueryBuilder - introOutroSkipModelIsNotNull() { + mediaSegmentsIsNotNull() { return QueryBuilder.apply(not(), (query) { return query.addFilterCondition(const IsNullCondition(property: 10)); }); } QueryBuilder - introOutroSkipModelEqualTo( + mediaSegmentsEqualTo( String? value, { bool caseSensitive = true, }) { @@ -2045,7 +2045,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelGreaterThan( + mediaSegmentsGreaterThan( String? value, { bool caseSensitive = true, }) { @@ -2061,7 +2061,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelGreaterThanOrEqualTo( + mediaSegmentsGreaterThanOrEqualTo( String? value, { bool caseSensitive = true, }) { @@ -2077,7 +2077,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelLessThan( + mediaSegmentsLessThan( String? value, { bool caseSensitive = true, }) { @@ -2093,7 +2093,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelLessThanOrEqualTo( + mediaSegmentsLessThanOrEqualTo( String? value, { bool caseSensitive = true, }) { @@ -2109,7 +2109,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelBetween( + mediaSegmentsBetween( String? lower, String? upper, { bool caseSensitive = true, @@ -2127,7 +2127,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelStartsWith( + mediaSegmentsStartsWith( String value, { bool caseSensitive = true, }) { @@ -2143,7 +2143,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelEndsWith( + mediaSegmentsEndsWith( String value, { bool caseSensitive = true, }) { @@ -2159,7 +2159,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelContains(String value, {bool caseSensitive = true}) { + mediaSegmentsContains(String value, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( ContainsCondition( @@ -2172,7 +2172,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelMatches(String pattern, {bool caseSensitive = true}) { + mediaSegmentsMatches(String pattern, {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( MatchesCondition( @@ -2185,7 +2185,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelIsEmpty() { + mediaSegmentsIsEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const EqualCondition( @@ -2197,7 +2197,7 @@ extension ISyncedItemQueryFilter } QueryBuilder - introOutroSkipModelIsNotEmpty() { + mediaSegmentsIsNotEmpty() { return QueryBuilder.apply(this, (query) { return query.addFilterCondition( const GreaterCondition( @@ -3189,8 +3189,8 @@ extension ISyncedItemQuerySortBy }); } - QueryBuilder - sortByIntroOutroSkipModel({bool caseSensitive = true}) { + QueryBuilder sortByMediaSegments( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( 10, @@ -3199,8 +3199,8 @@ extension ISyncedItemQuerySortBy }); } - QueryBuilder - sortByIntroOutroSkipModelDesc({bool caseSensitive = true}) { + QueryBuilder sortByMediaSegmentsDesc( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy( 10, @@ -3377,15 +3377,15 @@ extension ISyncedItemQuerySortThenBy }); } - QueryBuilder - thenByIntroOutroSkipModel({bool caseSensitive = true}) { + QueryBuilder thenByMediaSegments( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy(10, caseSensitive: caseSensitive); }); } - QueryBuilder - thenByIntroOutroSkipModelDesc({bool caseSensitive = true}) { + QueryBuilder thenByMediaSegmentsDesc( + {bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addSortBy(10, sort: Sort.desc, caseSensitive: caseSensitive); }); @@ -3477,7 +3477,7 @@ extension ISyncedItemQueryWhereDistinct } QueryBuilder - distinctByIntroOutroSkipModel({bool caseSensitive = true}) { + distinctByMediaSegments({bool caseSensitive = true}) { return QueryBuilder.apply(this, (query) { return query.addDistinctBy(10, caseSensitive: caseSensitive); }); @@ -3566,8 +3566,7 @@ extension ISyncedItemQueryProperty1 }); } - QueryBuilder - introOutroSkipModelProperty() { + QueryBuilder mediaSegmentsProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(10); }); @@ -3657,7 +3656,7 @@ extension ISyncedItemQueryProperty2 } QueryBuilder - introOutroSkipModelProperty() { + mediaSegmentsProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(10); }); @@ -3749,7 +3748,7 @@ extension ISyncedItemQueryProperty3 } QueryBuilder - introOutroSkipModelProperty() { + mediaSegmentsProperty() { return QueryBuilder.apply(this, (query) { return query.addProperty(10); }); diff --git a/lib/models/syncing/sync_item.dart b/lib/models/syncing/sync_item.dart index ea258e1..26840c2 100644 --- a/lib/models/syncing/sync_item.dart +++ b/lib/models/syncing/sync_item.dart @@ -13,7 +13,7 @@ import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/item_base_model.dart'; import 'package:fladder/models/items/chapters_model.dart'; import 'package:fladder/models/items/images_models.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/item_shared_models.dart'; import 'package:fladder/models/items/media_streams_model.dart'; import 'package:fladder/models/items/trick_play_model.dart'; @@ -38,7 +38,7 @@ class SyncedItem with _$SyncedItem { String? sortName, int? fileSize, String? videoFileName, - IntroOutSkipModel? introOutSkipModel, + MediaSegmentsModel? mediaSegments, TrickPlayModel? fTrickPlayModel, ImagesData? fImages, @Default([]) List fChapters, @@ -132,8 +132,8 @@ class SyncedItem with _$SyncedItem { path: joinAll([savePath, isarSyncedItem.path ?? ""]), fileSize: isarSyncedItem.fileSize, videoFileName: isarSyncedItem.videoFileName, - introOutSkipModel: isarSyncedItem.introOutroSkipModel != null - ? IntroOutSkipModel.fromJson(jsonDecode(isarSyncedItem.introOutroSkipModel!)) + mediaSegments: isarSyncedItem.mediaSegments != null + ? MediaSegmentsModel.fromJson(jsonDecode(isarSyncedItem.mediaSegments!)) : null, fTrickPlayModel: isarSyncedItem.trickPlayModel != null ? TrickPlayModel.fromJson(jsonDecode(isarSyncedItem.trickPlayModel!)) diff --git a/lib/models/syncing/sync_item.freezed.dart b/lib/models/syncing/sync_item.freezed.dart index 40e2e92..2b13b60 100644 --- a/lib/models/syncing/sync_item.freezed.dart +++ b/lib/models/syncing/sync_item.freezed.dart @@ -25,8 +25,7 @@ mixin _$SyncedItem { String? get sortName => throw _privateConstructorUsedError; int? get fileSize => throw _privateConstructorUsedError; String? get videoFileName => throw _privateConstructorUsedError; - IntroOutSkipModel? get introOutSkipModel => - throw _privateConstructorUsedError; + MediaSegmentsModel? get mediaSegments => throw _privateConstructorUsedError; TrickPlayModel? get fTrickPlayModel => throw _privateConstructorUsedError; ImagesData? get fImages => throw _privateConstructorUsedError; List get fChapters => throw _privateConstructorUsedError; @@ -57,14 +56,14 @@ abstract class $SyncedItemCopyWith<$Res> { String? sortName, int? fileSize, String? videoFileName, - IntroOutSkipModel? introOutSkipModel, + MediaSegmentsModel? mediaSegments, TrickPlayModel? fTrickPlayModel, ImagesData? fImages, List fChapters, List subtitles, @UserDataJsonSerializer() UserData? userData}); - $IntroOutSkipModelCopyWith<$Res>? get introOutSkipModel; + $MediaSegmentsModelCopyWith<$Res>? get mediaSegments; $TrickPlayModelCopyWith<$Res>? get fTrickPlayModel; } @@ -92,7 +91,7 @@ class _$SyncedItemCopyWithImpl<$Res, $Val extends SyncedItem> Object? sortName = freezed, Object? fileSize = freezed, Object? videoFileName = freezed, - Object? introOutSkipModel = freezed, + Object? mediaSegments = freezed, Object? fTrickPlayModel = freezed, Object? fImages = freezed, Object? fChapters = null, @@ -136,10 +135,10 @@ class _$SyncedItemCopyWithImpl<$Res, $Val extends SyncedItem> ? _value.videoFileName : videoFileName // ignore: cast_nullable_to_non_nullable as String?, - introOutSkipModel: freezed == introOutSkipModel - ? _value.introOutSkipModel - : introOutSkipModel // ignore: cast_nullable_to_non_nullable - as IntroOutSkipModel?, + mediaSegments: freezed == mediaSegments + ? _value.mediaSegments + : mediaSegments // ignore: cast_nullable_to_non_nullable + as MediaSegmentsModel?, fTrickPlayModel: freezed == fTrickPlayModel ? _value.fTrickPlayModel : fTrickPlayModel // ignore: cast_nullable_to_non_nullable @@ -167,13 +166,13 @@ class _$SyncedItemCopyWithImpl<$Res, $Val extends SyncedItem> /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') - $IntroOutSkipModelCopyWith<$Res>? get introOutSkipModel { - if (_value.introOutSkipModel == null) { + $MediaSegmentsModelCopyWith<$Res>? get mediaSegments { + if (_value.mediaSegments == null) { return null; } - return $IntroOutSkipModelCopyWith<$Res>(_value.introOutSkipModel!, (value) { - return _then(_value.copyWith(introOutSkipModel: value) as $Val); + return $MediaSegmentsModelCopyWith<$Res>(_value.mediaSegments!, (value) { + return _then(_value.copyWith(mediaSegments: value) as $Val); }); } @@ -210,7 +209,7 @@ abstract class _$$SyncItemImplCopyWith<$Res> String? sortName, int? fileSize, String? videoFileName, - IntroOutSkipModel? introOutSkipModel, + MediaSegmentsModel? mediaSegments, TrickPlayModel? fTrickPlayModel, ImagesData? fImages, List fChapters, @@ -218,7 +217,7 @@ abstract class _$$SyncItemImplCopyWith<$Res> @UserDataJsonSerializer() UserData? userData}); @override - $IntroOutSkipModelCopyWith<$Res>? get introOutSkipModel; + $MediaSegmentsModelCopyWith<$Res>? get mediaSegments; @override $TrickPlayModelCopyWith<$Res>? get fTrickPlayModel; } @@ -245,7 +244,7 @@ class __$$SyncItemImplCopyWithImpl<$Res> Object? sortName = freezed, Object? fileSize = freezed, Object? videoFileName = freezed, - Object? introOutSkipModel = freezed, + Object? mediaSegments = freezed, Object? fTrickPlayModel = freezed, Object? fImages = freezed, Object? fChapters = null, @@ -289,10 +288,10 @@ class __$$SyncItemImplCopyWithImpl<$Res> ? _value.videoFileName : videoFileName // ignore: cast_nullable_to_non_nullable as String?, - introOutSkipModel: freezed == introOutSkipModel - ? _value.introOutSkipModel - : introOutSkipModel // ignore: cast_nullable_to_non_nullable - as IntroOutSkipModel?, + mediaSegments: freezed == mediaSegments + ? _value.mediaSegments + : mediaSegments // ignore: cast_nullable_to_non_nullable + as MediaSegmentsModel?, fTrickPlayModel: freezed == fTrickPlayModel ? _value.fTrickPlayModel : fTrickPlayModel // ignore: cast_nullable_to_non_nullable @@ -330,7 +329,7 @@ class _$SyncItemImpl extends _SyncItem { this.sortName, this.fileSize, this.videoFileName, - this.introOutSkipModel, + this.mediaSegments, this.fTrickPlayModel, this.fImages, final List fChapters = const [], @@ -361,7 +360,7 @@ class _$SyncItemImpl extends _SyncItem { @override final String? videoFileName; @override - final IntroOutSkipModel? introOutSkipModel; + final MediaSegmentsModel? mediaSegments; @override final TrickPlayModel? fTrickPlayModel; @override @@ -390,7 +389,7 @@ class _$SyncItemImpl extends _SyncItem { @override String toString() { - return 'SyncedItem(id: $id, syncing: $syncing, parentId: $parentId, userId: $userId, path: $path, markedForDelete: $markedForDelete, sortName: $sortName, fileSize: $fileSize, videoFileName: $videoFileName, introOutSkipModel: $introOutSkipModel, fTrickPlayModel: $fTrickPlayModel, fImages: $fImages, fChapters: $fChapters, subtitles: $subtitles, userData: $userData)'; + return 'SyncedItem(id: $id, syncing: $syncing, parentId: $parentId, userId: $userId, path: $path, markedForDelete: $markedForDelete, sortName: $sortName, fileSize: $fileSize, videoFileName: $videoFileName, mediaSegments: $mediaSegments, fTrickPlayModel: $fTrickPlayModel, fImages: $fImages, fChapters: $fChapters, subtitles: $subtitles, userData: $userData)'; } @override @@ -412,8 +411,8 @@ class _$SyncItemImpl extends _SyncItem { other.fileSize == fileSize) && (identical(other.videoFileName, videoFileName) || other.videoFileName == videoFileName) && - (identical(other.introOutSkipModel, introOutSkipModel) || - other.introOutSkipModel == introOutSkipModel) && + (identical(other.mediaSegments, mediaSegments) || + other.mediaSegments == mediaSegments) && (identical(other.fTrickPlayModel, fTrickPlayModel) || other.fTrickPlayModel == fTrickPlayModel) && (identical(other.fImages, fImages) || other.fImages == fImages) && @@ -437,7 +436,7 @@ class _$SyncItemImpl extends _SyncItem { sortName, fileSize, videoFileName, - introOutSkipModel, + mediaSegments, fTrickPlayModel, fImages, const DeepCollectionEquality().hash(_fChapters), @@ -464,7 +463,7 @@ abstract class _SyncItem extends SyncedItem { final String? sortName, final int? fileSize, final String? videoFileName, - final IntroOutSkipModel? introOutSkipModel, + final MediaSegmentsModel? mediaSegments, final TrickPlayModel? fTrickPlayModel, final ImagesData? fImages, final List fChapters, @@ -491,7 +490,7 @@ abstract class _SyncItem extends SyncedItem { @override String? get videoFileName; @override - IntroOutSkipModel? get introOutSkipModel; + MediaSegmentsModel? get mediaSegments; @override TrickPlayModel? get fTrickPlayModel; @override diff --git a/lib/models/video_stream_model.dart b/lib/models/video_stream_model.dart index e121e76..eb1b154 100644 --- a/lib/models/video_stream_model.dart +++ b/lib/models/video_stream_model.dart @@ -1,16 +1,17 @@ +import 'package:flutter/material.dart'; + // ignore_for_file: public_member_api_docs, sort_constructors_first import 'package:collection/collection.dart'; import 'package:ficonsax/ficonsax.dart'; -import 'package:fladder/models/items/item_stream_model.dart'; -import 'package:fladder/models/syncing/sync_item.dart'; -import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:media_kit/media_kit.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/items/chapters_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/item_stream_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/media_streams_model.dart'; +import 'package:fladder/models/syncing/sync_item.dart'; import 'package:fladder/providers/user_provider.dart'; enum PlaybackType { @@ -100,7 +101,7 @@ class VideoStream { final String playSessionId; final List? chapters; final List? trickPlay; - final IntroSkipModel? introSkipModel; + final MediaSegmentsModel? mediaSegments; final int? audioStreamIndex; final int? subtitleStreamIndex; final MediaStreamsModel? mediaStreamsModel; @@ -129,7 +130,7 @@ class VideoStream { required this.playSessionId, this.chapters, this.trickPlay, - this.introSkipModel, + this.mediaSegments, this.audioStreamIndex, this.subtitleStreamIndex, this.mediaStreamsModel, @@ -143,7 +144,7 @@ class VideoStream { String? playSessionId, List? chapters, List? trickPlay, - IntroSkipModel? introSkipModel, + MediaSegmentsModel? mediaSegments, int? audioStreamIndex, int? subtitleStreamIndex, MediaStreamsModel? mediaStreamsModel, @@ -156,7 +157,7 @@ class VideoStream { playSessionId: playSessionId ?? this.playSessionId, chapters: chapters ?? this.chapters, trickPlay: trickPlay ?? this.trickPlay, - introSkipModel: introSkipModel ?? this.introSkipModel, + mediaSegments: mediaSegments ?? this.mediaSegments, audioStreamIndex: audioStreamIndex ?? this.audioStreamIndex, subtitleStreamIndex: subtitleStreamIndex ?? this.subtitleStreamIndex, mediaStreamsModel: mediaStreamsModel ?? this.mediaStreamsModel, diff --git a/lib/providers/service_provider.dart b/lib/providers/service_provider.dart index 084bd65..259b216 100644 --- a/lib/providers/service_provider.dart +++ b/lib/providers/service_provider.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'dart:developer'; import 'dart:typed_data'; @@ -12,7 +11,7 @@ import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/models/account_model.dart'; import 'package:fladder/models/credentials_model.dart'; import 'package:fladder/models/item_base_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/items/trick_play_model.dart'; import 'package:fladder/providers/api_provider.dart'; import 'package:fladder/providers/image_provider.dart'; @@ -871,20 +870,14 @@ class JellyService { userId: account?.id, ); - Future?> introSkipGet({ + Future?> mediaSegmentsGet({ required String id, }) async { try { - final response = await api.episodeIdIntroTimestampsGet(id: id); - final outro = await api.episodeIdIntroSkipperSegmentsGet(id: id); - final map = jsonDecode(outro.bodyString) as Map; - final newModel = IntroOutSkipModel( - intro: - map["Introduction"] != null ? IntroSkipModel.fromJson(map["Introduction"] as Map) : null, - credits: map["Credits"] != null ? IntroSkipModel.fromJson(map["Credits"] as Map) : null, - ); + final response = await api.mediaSegmentsItemIdGet(itemId: id); + final newSegments = response.body?.items?.map((e) => e.toSegment).toList() ?? []; return response.copyWith( - body: newModel, + body: MediaSegmentsModel(segments: newSegments), ); } catch (e) { log(e.toString()); @@ -927,7 +920,7 @@ class JellyService { } } - Future>> sessionsInfo(String deviceId) async => api.sessionsGet(deviceId: deviceId); + Future>> sessionsInfo(String deviceId) async => api.sessionsGet(deviceId: deviceId); Future> quickConnect(String code) async => api.quickConnectAuthorizePost(code: code); diff --git a/lib/providers/sync_provider.dart b/lib/providers/sync_provider.dart index 88069b3..fbcd854 100644 --- a/lib/providers/sync_provider.dart +++ b/lib/providers/sync_provider.dart @@ -436,12 +436,12 @@ class SyncNotifier extends StateNotifier { final subtitles = await saveExternalSubtitles(newState?.mediaStreamsModel?.subStreams, syncItem); final trickPlayFile = await saveTrickPlayData(item, directory); - final introOutroSkip = (await api.introSkipGet(id: syncItem.id))?.body; + final mediaSegments = (await api.mediaSegmentsGet(id: syncItem.id))?.body; syncItem = syncItem.copyWith( subtitles: subtitles, fTrickPlayModel: trickPlayFile, - introOutSkipModel: introOutroSkip, + mediaSegments: mediaSegments, ); await updateItem(syncItem); diff --git a/lib/screens/video_player/components/video_player_controls_extras.dart b/lib/screens/video_player/components/video_player_controls_extras.dart index aaa8eff..385afc0 100644 --- a/lib/screens/video_player/components/video_player_controls_extras.dart +++ b/lib/screens/video_player/components/video_player_controls_extras.dart @@ -1,9 +1,9 @@ -import 'package:fladder/providers/video_player_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:media_kit/media_kit.dart'; +import 'package:fladder/providers/video_player_provider.dart'; import 'package:fladder/screens/video_player/components/video_player_chapters.dart'; import 'package:fladder/screens/video_player/components/video_player_queue.dart'; @@ -84,10 +84,10 @@ class IntroSkipButton extends ConsumerWidget { } } -class CreditsSkipButton extends ConsumerWidget { +class OutroSkipButton extends ConsumerWidget { final bool isOverlayVisible; - final Function()? skipCredits; - const CreditsSkipButton({this.skipCredits, required this.isOverlayVisible, super.key}); + final Function()? skipOutro; + const OutroSkipButton({this.skipOutro, required this.isOverlayVisible, super.key}); @override Widget build(BuildContext context, WidgetRef ref) { @@ -96,7 +96,7 @@ class CreditsSkipButton extends ConsumerWidget { opacity: 1, duration: const Duration(milliseconds: 250), child: ElevatedButton( - onPressed: () => skipCredits?.call(), + onPressed: () => skipOutro?.call(), style: ElevatedButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5))), child: const Padding( padding: EdgeInsets.all(8), diff --git a/lib/screens/video_player/components/video_player_next_wrapper.dart b/lib/screens/video_player/components/video_player_next_wrapper.dart index e9951b8..139c5f9 100644 --- a/lib/screens/video_player/components/video_player_next_wrapper.dart +++ b/lib/screens/video_player/components/video_player_next_wrapper.dart @@ -81,7 +81,7 @@ class _VideoPlayerNextWrapperState extends ConsumerState return; } - final credits = ref.read(playBackModel)?.introSkipModel?.credits; + final credits = ref.read(playBackModel)?.mediaSegments?.outro; if (nextType == AutoNextType.static || credits == null) { if ((model.duration - model.position).abs() < const Duration(seconds: 32)) { diff --git a/lib/screens/video_player/components/video_progress_bar.dart b/lib/screens/video_player/components/video_progress_bar.dart index f341fa2..1845a3e 100644 --- a/lib/screens/video_player/components/video_progress_bar.dart +++ b/lib/screens/video_player/components/video_progress_bar.dart @@ -6,7 +6,7 @@ import 'package:collection/collection.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fladder/models/items/chapters_model.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/providers/video_player_provider.dart'; import 'package:fladder/util/duration_extensions.dart'; import 'package:fladder/util/list_padding.dart'; @@ -54,7 +54,7 @@ class _ChapterProgressSliderState extends ConsumerState { final isVisible = (onDragStart ? true : onHoverStart); final player = ref.watch(videoPlayerProvider); final position = onDragStart ? currentDuration : widget.position; - final IntroOutSkipModel? introCreditsModel = ref.read(playBackModel.select((value) => value?.introSkipModel)); + final MediaSegmentsModel? mediaSegments = ref.read(playBackModel.select((value) => value?.mediaSegments)); final relativeFraction = position.inMilliseconds / widget.duration.inMilliseconds; return LayoutBuilder( builder: (context, constraints) { @@ -138,36 +138,22 @@ class _ChapterProgressSliderState extends ConsumerState { child: Stack( alignment: Alignment.center, children: [ - if (introCreditsModel?.intro?.start != null && introCreditsModel?.intro?.end != null) - Positioned( - left: calculateStartOffset(constraints, introCreditsModel!.intro!.start), - right: calculateRightOffset(constraints, introCreditsModel.intro!.end), + ...?mediaSegments?.segments.map( + (segment) => Positioned( + left: calculateStartOffset(constraints, segment.start), + right: calculateRightOffset(constraints, segment.end), bottom: 0, child: Container( height: 6, decoration: BoxDecoration( - color: Colors.greenAccent.withOpacity(0.8), - borderRadius: BorderRadius.circular( - 100, - ), - ), - ), - ), - if (introCreditsModel?.credits?.start != null && introCreditsModel?.credits?.end != null) - Positioned( - left: calculateStartOffset(constraints, introCreditsModel!.credits!.start), - right: calculateRightOffset(constraints, introCreditsModel.credits!.end), - bottom: 0, - child: Container( - height: 6, - decoration: BoxDecoration( - color: Colors.orangeAccent.withOpacity(0.8), + color: segment.type.color, borderRadius: BorderRadius.circular( 100, ), ), ), ), + ), if (!widget.buffering) ...{ //VideoBufferBar Positioned( diff --git a/lib/screens/video_player/video_player_controls.dart b/lib/screens/video_player/video_player_controls.dart index de9244a..ed4e556 100644 --- a/lib/screens/video_player/video_player_controls.dart +++ b/lib/screens/video_player/video_player_controls.dart @@ -13,7 +13,7 @@ import 'package:screen_brightness/screen_brightness.dart'; import 'package:universal_html/html.dart' as html; import 'package:window_manager/window_manager.dart'; -import 'package:fladder/models/items/intro_skip_model.dart'; +import 'package:fladder/models/items/media_segments_model.dart'; import 'package:fladder/models/media_playback_model.dart'; import 'package:fladder/models/playback/playback_model.dart'; import 'package:fladder/providers/settings/client_settings_provider.dart'; @@ -57,10 +57,10 @@ class _DesktopControlsState extends ConsumerState { late final double bottomPadding = MediaQuery.of(context).viewPadding.bottom; bool _onKey(KeyEvent value) { - final introSkipModel = ref.read(playBackModel.select((value) => value?.introSkipModel)); + final mediaSegments = ref.read(playBackModel.select((value) => value?.mediaSegments)); final position = ref.read(mediaPlaybackProvider).position; - bool showIntroSkipButton = introSkipModel?.introInRange(position) ?? false; - bool showCreditSkipButton = introSkipModel?.creditsInRange(position) ?? false; + bool showIntroSkipButton = mediaSegments?.intro?.inRange(position) ?? false; + bool showOutroSkipButton = mediaSegments?.outro?.inRange(position) ?? false; if (value is KeyRepeatEvent) { if (value.logicalKey == LogicalKeyboardKey.arrowUp) { resetTimer(); @@ -76,9 +76,9 @@ class _DesktopControlsState extends ConsumerState { if (value is KeyDownEvent) { if (value.logicalKey == LogicalKeyboardKey.keyS) { if (showIntroSkipButton) { - skipIntro(introSkipModel); - } else if (showCreditSkipButton) { - skipCredits(introSkipModel); + skipIntro(mediaSegments); + } else if (showOutroSkipButton) { + skipOutro(mediaSegments); } return true; } @@ -116,7 +116,7 @@ class _DesktopControlsState extends ConsumerState { @override Widget build(BuildContext context) { - final introSkipModel = ref.watch(playBackModel.select((value) => value?.introSkipModel)); + final mediaSegments = ref.watch(playBackModel.select((value) => value?.mediaSegments)); final player = ref.watch(videoPlayerProvider.select((value) => value.controller)); return InputHandler( autoFocus: false, @@ -167,8 +167,8 @@ class _DesktopControlsState extends ConsumerState { Consumer( builder: (context, ref, child) { final position = ref.watch(mediaPlaybackProvider.select((value) => value.position)); - bool showIntroSkipButton = introSkipModel?.introInRange(position) ?? false; - bool showCreditSkipButton = introSkipModel?.creditsInRange(position) ?? false; + bool showIntroSkipButton = mediaSegments?.intro?.inRange(position) ?? false; + bool showOutroSkipButton = mediaSegments?.outro?.inRange(position) ?? false; return Stack( children: [ if (showIntroSkipButton) @@ -178,18 +178,18 @@ class _DesktopControlsState extends ConsumerState { padding: const EdgeInsets.all(32), child: IntroSkipButton( isOverlayVisible: showOverlay, - skipIntro: () => skipIntro(introSkipModel), + skipIntro: () => skipIntro(mediaSegments), ), ), ), - if (showCreditSkipButton) + if (showOutroSkipButton) Align( alignment: Alignment.centerRight, child: Padding( padding: const EdgeInsets.all(32), - child: CreditsSkipButton( + child: OutroSkipButton( isOverlayVisible: showOverlay, - skipCredits: () => skipCredits(introSkipModel), + skipOutro: () => skipOutro(mediaSegments), ), ), ) @@ -582,17 +582,17 @@ class _DesktopControlsState extends ConsumerState { ); } - void skipIntro(IntroOutSkipModel? introSkipModel) { + void skipIntro(MediaSegmentsModel? mediaSegments) { resetTimer(); - final end = introSkipModel?.intro?.end; + final end = mediaSegments?.intro?.end; if (end != null) { ref.read(videoPlayerProvider).seek(end); } } - void skipCredits(IntroOutSkipModel? introSkipModel) { + void skipOutro(MediaSegmentsModel? mediaSegments) { resetTimer(); - final end = introSkipModel?.credits?.end; + final end = mediaSegments?.outro?.end; if (end != null) { ref.read(videoPlayerProvider).seek(end); } diff --git a/lib/util/fladder_image.dart b/lib/util/fladder_image.dart index 4cf34a5..0cf3f07 100644 --- a/lib/util/fladder_image.dart +++ b/lib/util/fladder_image.dart @@ -6,7 +6,6 @@ import 'package:transparent_image/transparent_image.dart'; import 'package:fladder/models/items/images_models.dart'; import 'package:fladder/providers/settings/client_settings_provider.dart'; -import 'package:fladder/util/adaptive_layout.dart'; class FladderImage extends ConsumerWidget { final ImageData? image; @@ -29,7 +28,6 @@ class FladderImage extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final useBluredPlaceHolder = ref.watch(clientSettingsProvider.select((value) => value.blurPlaceHolders)); final newImage = image; - final blurSize = AdaptiveLayout.of(context).isDesktop ? 32 : 16; if (newImage == null) { return placeHolder ?? Container(); } else { @@ -44,8 +42,6 @@ class FladderImage extends ConsumerWidget { filterQuality: FilterQuality.low, image: BlurHashImage( newImage.hash, - decodingWidth: blurSize, - decodingHeight: blurSize, ), ), if (!blurOnly) diff --git a/swagger/jellyfin-open-api.json b/swagger/jellyfin-open-api.json index 15efa10..39261ad 100644 --- a/swagger/jellyfin-open-api.json +++ b/swagger/jellyfin-open-api.json @@ -2,13 +2,15 @@ "openapi": "3.0.1", "info": { "title": "Jellyfin API", - "version": "10.9.7", - "x-jellyfin-version": "10.9.7" + "version": "10.10.1", + "x-jellyfin-version": "10.10.1" }, "paths": { "/System/ActivityLog/Entries": { "get": { - "tags": ["ActivityLog"], + "tags": [ + "ActivityLog" + ], "summary": "Gets activity log entries.", "operationId": "GetLogEntries", "parameters": [ @@ -78,14 +80,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Auth/Keys": { "get": { - "tags": ["ApiKey"], + "tags": [ + "ApiKey" + ], "summary": "Get all keys.", "operationId": "GetKeys", "responses": { @@ -118,12 +124,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "post": { - "tags": ["ApiKey"], + "tags": [ + "ApiKey" + ], "summary": "Create a new api key.", "operationId": "CreateKey", "parameters": [ @@ -150,14 +160,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Auth/Keys/{key}": { "delete": { - "tags": ["ApiKey"], + "tags": [ + "ApiKey" + ], "summary": "Remove an api key.", "operationId": "RevokeKey", "parameters": [ @@ -184,14 +198,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Artists": { "get": { - "tags": ["Artists"], + "tags": [ + "Artists" + ], "summary": "Gets all artists from a given item, folder, or the entire library.", "operationId": "GetArtists", "parameters": [ @@ -545,14 +563,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Artists/{name}": { "get": { - "tags": ["Artists"], + "tags": [ + "Artists" + ], "summary": "Gets an artist by name.", "operationId": "GetArtistByName", "parameters": [ @@ -605,14 +627,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Artists/AlbumArtists": { "get": { - "tags": ["Artists"], + "tags": [ + "Artists" + ], "summary": "Gets all album artists from a given item, folder, or the entire library.", "operationId": "GetAlbumArtists", "parameters": [ @@ -966,14 +992,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/stream": { "get": { - "tags": ["Audio"], + "tags": [ + "Audio" + ], "summary": "Gets an audio stream.", "operationId": "GetAudioStream", "parameters": [ @@ -1083,7 +1113,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -1258,7 +1288,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -1345,7 +1381,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -1391,7 +1427,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -1410,6 +1449,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -1427,7 +1475,9 @@ } }, "head": { - "tags": ["Audio"], + "tags": [ + "Audio" + ], "summary": "Gets an audio stream.", "operationId": "HeadAudioStream", "parameters": [ @@ -1537,7 +1587,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -1712,7 +1762,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -1799,7 +1855,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -1845,7 +1901,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -1864,6 +1923,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -1883,7 +1951,9 @@ }, "/Audio/{itemId}/stream.{container}": { "get": { - "tags": ["Audio"], + "tags": [ + "Audio" + ], "summary": "Gets an audio stream.", "operationId": "GetAudioStreamByContainer", "parameters": [ @@ -1993,7 +2063,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -2168,7 +2238,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -2255,7 +2331,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -2301,7 +2377,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -2320,6 +2399,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -2337,7 +2425,9 @@ } }, "head": { - "tags": ["Audio"], + "tags": [ + "Audio" + ], "summary": "Gets an audio stream.", "operationId": "HeadAudioStreamByContainer", "parameters": [ @@ -2447,7 +2537,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -2622,7 +2712,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -2709,7 +2805,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -2755,7 +2851,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -2774,6 +2873,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -2793,7 +2901,9 @@ }, "/Branding/Configuration": { "get": { - "tags": ["Branding"], + "tags": [ + "Branding" + ], "summary": "Gets branding configuration.", "operationId": "GetBrandingOptions", "responses": { @@ -2822,7 +2932,9 @@ }, "/Branding/Css": { "get": { - "tags": ["Branding"], + "tags": [ + "Branding" + ], "summary": "Gets branding css.", "operationId": "GetBrandingCss", "responses": { @@ -2859,7 +2971,9 @@ }, "/Branding/Css.css": { "get": { - "tags": ["Branding"], + "tags": [ + "Branding" + ], "summary": "Gets branding css.", "operationId": "GetBrandingCss_2", "responses": { @@ -2896,7 +3010,9 @@ }, "/Channels": { "get": { - "tags": ["Channels"], + "tags": [ + "Channels" + ], "summary": "Gets available channels.", "operationId": "GetChannels", "parameters": [ @@ -2982,14 +3098,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Channels/{channelId}/Features": { "get": { - "tags": ["Channels"], + "tags": [ + "Channels" + ], "summary": "Get channel features.", "operationId": "GetChannelFeatures", "parameters": [ @@ -3034,14 +3154,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Channels/{channelId}/Items": { "get": { - "tags": ["Channels"], + "tags": [ + "Channels" + ], "summary": "Get channel items.", "operationId": "GetChannelItems", "parameters": [ @@ -3166,14 +3290,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Channels/Features": { "get": { - "tags": ["Channels"], + "tags": [ + "Channels" + ], "summary": "Get all channel features.", "operationId": "GetAllChannelFeatures", "responses": { @@ -3215,14 +3343,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Channels/Items/Latest": { "get": { - "tags": ["Channels"], + "tags": [ + "Channels" + ], "summary": "Gets latest channel items.", "operationId": "GetLatestChannelItems", "parameters": [ @@ -3318,14 +3450,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/ClientLog/Document": { "post": { - "tags": ["ClientLog"], + "tags": [ + "ClientLog" + ], "summary": "Upload a document.", "operationId": "LogFile", "requestBody": { @@ -3405,14 +3541,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Collections": { "post": { - "tags": ["Collection"], + "tags": [ + "Collection" + ], "summary": "Creates a new collection.", "operationId": "CreateCollection", "parameters": [ @@ -3494,7 +3634,9 @@ }, "/Collections/{collectionId}/Items": { "post": { - "tags": ["Collection"], + "tags": [ + "Collection" + ], "summary": "Adds items to a collection.", "operationId": "AddToCollection", "parameters": [ @@ -3543,7 +3685,9 @@ ] }, "delete": { - "tags": ["Collection"], + "tags": [ + "Collection" + ], "summary": "Removes items from a collection.", "operationId": "RemoveFromCollection", "parameters": [ @@ -3594,7 +3738,9 @@ }, "/System/Configuration": { "get": { - "tags": ["Configuration"], + "tags": [ + "Configuration" + ], "summary": "Gets application configuration.", "operationId": "GetConfiguration", "responses": { @@ -3627,12 +3773,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["Configuration"], + "tags": [ + "Configuration" + ], "summary": "Updates application configuration.", "operationId": "UpdateConfiguration", "requestBody": { @@ -3694,7 +3844,9 @@ }, "/System/Configuration/{key}": { "get": { - "tags": ["Configuration"], + "tags": [ + "Configuration" + ], "summary": "Gets a named configuration.", "operationId": "GetNamedConfiguration", "parameters": [ @@ -3729,12 +3881,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["Configuration"], + "tags": [ + "Configuration" + ], "summary": "Updates named configuration.", "operationId": "UpdateNamedConfiguration", "parameters": [ @@ -3786,7 +3942,9 @@ }, "/System/Configuration/MetadataOptions/Default": { "get": { - "tags": ["Configuration"], + "tags": [ + "Configuration" + ], "summary": "Gets a default MetadataOptions object.", "operationId": "GetDefaultMetadataOptions", "responses": { @@ -3829,7 +3987,9 @@ }, "/web/ConfigurationPage": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "summary": "Gets a dashboard configuration page.", "operationId": "GetDashboardConfigurationPage", "parameters": [ @@ -3885,7 +4045,9 @@ }, "/web/ConfigurationPages": { "get": { - "tags": ["Dashboard"], + "tags": [ + "Dashboard" + ], "summary": "Gets the configuration pages.", "operationId": "GetConfigurationPages", "parameters": [ @@ -3957,14 +4119,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Devices": { "get": { - "tags": ["Devices"], + "tags": [ + "Devices" + ], "summary": "Get Devices.", "operationId": "GetDevices", "parameters": [ @@ -3984,17 +4150,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceInfoQueryResult" + "$ref": "#/components/schemas/DeviceInfoDtoQueryResult" } }, "application/json; profile=\"CamelCase\"": { "schema": { - "$ref": "#/components/schemas/DeviceInfoQueryResult" + "$ref": "#/components/schemas/DeviceInfoDtoQueryResult" } }, "application/json; profile=\"PascalCase\"": { "schema": { - "$ref": "#/components/schemas/DeviceInfoQueryResult" + "$ref": "#/components/schemas/DeviceInfoDtoQueryResult" } } } @@ -4008,12 +4174,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "delete": { - "tags": ["Devices"], + "tags": [ + "Devices" + ], "summary": "Deletes a device.", "operationId": "DeleteDevice", "parameters": [ @@ -4060,14 +4230,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Devices/Info": { "get": { - "tags": ["Devices"], + "tags": [ + "Devices" + ], "summary": "Get info for a device.", "operationId": "GetDeviceInfo", "parameters": [ @@ -4087,17 +4261,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceInfo" + "$ref": "#/components/schemas/DeviceInfoDto" } }, "application/json; profile=\"CamelCase\"": { "schema": { - "$ref": "#/components/schemas/DeviceInfo" + "$ref": "#/components/schemas/DeviceInfoDto" } }, "application/json; profile=\"PascalCase\"": { "schema": { - "$ref": "#/components/schemas/DeviceInfo" + "$ref": "#/components/schemas/DeviceInfoDto" } } } @@ -4131,14 +4305,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Devices/Options": { "get": { - "tags": ["Devices"], + "tags": [ + "Devices" + ], "summary": "Get options for a device.", "operationId": "GetDeviceOptions", "parameters": [ @@ -4158,17 +4336,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeviceOptions" + "$ref": "#/components/schemas/DeviceOptionsDto" } }, "application/json; profile=\"CamelCase\"": { "schema": { - "$ref": "#/components/schemas/DeviceOptions" + "$ref": "#/components/schemas/DeviceOptionsDto" } }, "application/json; profile=\"PascalCase\"": { "schema": { - "$ref": "#/components/schemas/DeviceOptions" + "$ref": "#/components/schemas/DeviceOptionsDto" } } } @@ -4202,12 +4380,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "post": { - "tags": ["Devices"], + "tags": [ + "Devices" + ], "summary": "Update device options.", "operationId": "UpdateDeviceOptions", "parameters": [ @@ -4270,14 +4452,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/DisplayPreferences/{displayPreferencesId}": { "get": { - "tags": ["DisplayPreferences"], + "tags": [ + "DisplayPreferences" + ], "summary": "Get Display Preferences.", "operationId": "GetDisplayPreferences", "parameters": [ @@ -4339,12 +4525,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["DisplayPreferences"], + "tags": [ + "DisplayPreferences" + ], "summary": "Update Display Preferences.", "operationId": "UpdateDisplayPreferences", "parameters": [ @@ -4425,14 +4615,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/hls1/{playlistId}/{segmentId}.{container}": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets a video stream using HTTP live streaming.", "operationId": "GetHlsAudioSegment", "parameters": [ @@ -4581,7 +4775,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -4765,7 +4959,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -4852,7 +5052,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -4898,7 +5098,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -4917,6 +5120,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -4940,14 +5152,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/main.m3u8": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets an audio stream using HTTP live streaming.", "operationId": "GetVariantHlsAudioPlaylist", "parameters": [ @@ -5048,7 +5264,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -5232,7 +5448,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -5319,7 +5541,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vpx, wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -5365,7 +5587,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -5384,6 +5609,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -5407,14 +5641,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/master.m3u8": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets an audio hls playlist stream.", "operationId": "GetMasterHlsAudioPlaylist", "parameters": [ @@ -5516,7 +5754,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -5700,7 +5938,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -5787,7 +6031,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -5833,7 +6077,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -5861,6 +6108,15 @@ "type": "boolean", "default": true } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -5884,12 +6140,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "head": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets an audio hls playlist stream.", "operationId": "HeadMasterHlsAudioPlaylist", "parameters": [ @@ -5991,7 +6251,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -6175,7 +6435,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -6262,7 +6528,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -6308,7 +6574,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -6336,6 +6605,15 @@ "type": "boolean", "default": true } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -6359,14 +6637,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/hls1/{playlistId}/{segmentId}.{container}": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets a video stream using HTTP live streaming.", "operationId": "GetHlsVideoSegment", "parameters": [ @@ -6515,7 +6797,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -6708,7 +6990,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -6795,7 +7083,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -6841,7 +7129,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -6860,6 +7151,24 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "alwaysBurnInSubtitleWhenTranscoding", + "in": "query", + "description": "Whether to always burn in subtitles when transcoding.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -6883,14 +7192,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/live.m3u8": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets a hls live stream.", "operationId": "GetLiveHlsStream", "parameters": [ @@ -7000,7 +7313,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -7175,7 +7488,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -7262,7 +7581,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -7308,7 +7627,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -7353,6 +7675,24 @@ "schema": { "type": "boolean" } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "alwaysBurnInSubtitleWhenTranscoding", + "in": "query", + "description": "Whether to always burn in subtitles when transcoding.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -7376,14 +7716,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/main.m3u8": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets a video stream using HTTP live streaming.", "operationId": "GetVariantHlsVideoPlaylist", "parameters": [ @@ -7484,7 +7828,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -7677,7 +8021,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -7764,7 +8114,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -7810,7 +8160,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -7829,6 +8182,24 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "alwaysBurnInSubtitleWhenTranscoding", + "in": "query", + "description": "Whether to always burn in subtitles when transcoding.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -7852,14 +8223,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/master.m3u8": { "get": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets a video hls playlist stream.", "operationId": "GetMasterHlsVideoPlaylist", "parameters": [ @@ -7961,7 +8336,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -8154,7 +8529,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -8241,7 +8622,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -8287,7 +8668,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -8324,6 +8708,24 @@ "type": "boolean", "default": true } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "alwaysBurnInSubtitleWhenTranscoding", + "in": "query", + "description": "Whether to always burn in subtitles when transcoding.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -8347,12 +8749,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "head": { - "tags": ["DynamicHls"], + "tags": [ + "DynamicHls" + ], "summary": "Gets a video hls playlist stream.", "operationId": "HeadMasterHlsVideoPlaylist", "parameters": [ @@ -8454,7 +8860,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -8647,7 +9053,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -8734,7 +9146,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -8780,7 +9192,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -8817,6 +9232,24 @@ "type": "boolean", "default": true } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "alwaysBurnInSubtitleWhenTranscoding", + "in": "query", + "description": "Whether to always burn in subtitles when transcoding.", + "schema": { + "type": "boolean", + "default": false + } } ], "responses": { @@ -8840,14 +9273,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Environment/DefaultDirectoryBrowser": { "get": { - "tags": ["Environment"], + "tags": [ + "Environment" + ], "summary": "Get Default directory browser.", "operationId": "GetDefaultDirectoryBrowser", "responses": { @@ -8890,7 +9327,9 @@ }, "/Environment/DirectoryContents": { "get": { - "tags": ["Environment"], + "tags": [ + "Environment" + ], "summary": "Gets the contents of a given directory in the file system.", "operationId": "GetDirectoryContents", "parameters": [ @@ -8971,7 +9410,9 @@ }, "/Environment/Drives": { "get": { - "tags": ["Environment"], + "tags": [ + "Environment" + ], "summary": "Gets available drives from the server's file system.", "operationId": "GetDrives", "responses": { @@ -9023,7 +9464,9 @@ }, "/Environment/NetworkShares": { "get": { - "tags": ["Environment"], + "tags": [ + "Environment" + ], "summary": "Gets network paths.", "operationId": "GetNetworkShares", "responses": { @@ -9076,7 +9519,9 @@ }, "/Environment/ParentPath": { "get": { - "tags": ["Environment"], + "tags": [ + "Environment" + ], "summary": "Gets the parent path of a given path.", "operationId": "GetParentPath", "parameters": [ @@ -9130,7 +9575,9 @@ }, "/Environment/ValidatePath": { "post": { - "tags": ["Environment"], + "tags": [ + "Environment" + ], "summary": "Validates path.", "operationId": "ValidatePath", "requestBody": { @@ -9212,7 +9659,9 @@ }, "/Items/Filters": { "get": { - "tags": ["Filter"], + "tags": [ + "Filter" + ], "summary": "Gets legacy query filters.", "operationId": "GetQueryFiltersLegacy", "parameters": [ @@ -9287,14 +9736,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/Filters2": { "get": { - "tags": ["Filter"], + "tags": [ + "Filter" + ], "summary": "Gets query filters.", "operationId": "GetQueryFilters", "parameters": [ @@ -9414,14 +9867,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Genres": { "get": { - "tags": ["Genres"], + "tags": [ + "Genres" + ], "summary": "Gets all genres from a given item, folder, or the entire library.", "operationId": "GetGenres", "parameters": [ @@ -9625,14 +10082,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Genres/{genreName}": { "get": { - "tags": ["Genres"], + "tags": [ + "Genres" + ], "summary": "Gets a genre, by name.", "operationId": "GetGenre", "parameters": [ @@ -9685,14 +10146,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/hls/{segmentId}/stream.aac": { "get": { - "tags": ["HlsSegment"], + "tags": [ + "HlsSegment" + ], "summary": "Gets the specified audio segment for an audio item.", "operationId": "GetHlsAudioSegmentLegacyAac", "parameters": [ @@ -9732,7 +10197,9 @@ }, "/Audio/{itemId}/hls/{segmentId}/stream.mp3": { "get": { - "tags": ["HlsSegment"], + "tags": [ + "HlsSegment" + ], "summary": "Gets the specified audio segment for an audio item.", "operationId": "GetHlsAudioSegmentLegacyMp3", "parameters": [ @@ -9772,7 +10239,9 @@ }, "/Videos/{itemId}/hls/{playlistId}/{segmentId}.{segmentContainer}": { "get": { - "tags": ["HlsSegment"], + "tags": [ + "HlsSegment" + ], "summary": "Gets a hls video segment.", "operationId": "GetHlsVideoSegmentLegacy", "parameters": [ @@ -9850,7 +10319,9 @@ }, "/Videos/{itemId}/hls/{playlistId}/stream.m3u8": { "get": { - "tags": ["HlsSegment"], + "tags": [ + "HlsSegment" + ], "summary": "Gets a hls video playlist.", "operationId": "GetHlsPlaylistLegacy", "parameters": [ @@ -9894,14 +10365,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/ActiveEncodings": { "delete": { - "tags": ["HlsSegment"], + "tags": [ + "HlsSegment" + ], "summary": "Stops an active encoding.", "operationId": "StopEncodingProcess", "parameters": [ @@ -9937,14 +10412,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Artists/{name}/Images/{imageType}/{imageIndex}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get artist image by name.", "operationId": "GetArtistImage", "parameters": [ @@ -9999,7 +10478,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -10159,7 +10645,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get artist image by name.", "operationId": "HeadArtistImage", "parameters": [ @@ -10214,7 +10702,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -10376,7 +10871,9 @@ }, "/Branding/Splashscreen": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Generates or gets the splashscreen.", "operationId": "GetSplashscreen", "parameters": [ @@ -10393,7 +10890,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -10508,7 +11012,9 @@ } }, "post": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Uploads a custom splashscreen.\r\nThe body is expected to the image contents base64 encoded.", "operationId": "UploadCustomSplashscreen", "requestBody": { @@ -10571,12 +11077,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "delete": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Delete a custom splashscreen.", "operationId": "DeleteCustomSplashscreen", "responses": { @@ -10592,14 +11102,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Genres/{name}/Images/{imageType}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get genre image by name.", "operationId": "GetGenreImage", "parameters": [ @@ -10654,7 +11168,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -10813,7 +11334,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get genre image by name.", "operationId": "HeadGenreImage", "parameters": [ @@ -10868,7 +11391,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -11029,7 +11559,9 @@ }, "/Genres/{name}/Images/{imageType}/{imageIndex}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get genre image by name.", "operationId": "GetGenreImageByIndex", "parameters": [ @@ -11094,7 +11626,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -11244,7 +11783,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get genre image by name.", "operationId": "HeadGenreImageByIndex", "parameters": [ @@ -11309,7 +11850,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -11461,7 +12009,9 @@ }, "/Items/{itemId}/Images": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get item image infos.", "operationId": "GetItemImageInfos", "parameters": [ @@ -11535,14 +12085,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/Images/{imageType}": { "delete": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Delete an item's image.", "operationId": "DeleteItemImage", "parameters": [ @@ -11628,12 +12182,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "post": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Set item image.", "operationId": "SetItemImage", "parameters": [ @@ -11740,12 +12298,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Gets the item's image.", "operationId": "GetItemImage", "parameters": [ @@ -11864,7 +12426,14 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Drawing.ImageFormat of the returned image.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -11960,7 +12529,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Gets the item's image.", "operationId": "HeadItemImage", "parameters": [ @@ -12079,7 +12650,14 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Drawing.ImageFormat of the returned image.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -12177,7 +12755,9 @@ }, "/Items/{itemId}/Images/{imageType}/{imageIndex}": { "delete": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Delete an item's image.", "operationId": "DeleteItemImageByIndex", "parameters": [ @@ -12264,12 +12844,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "post": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Set item image.", "operationId": "SetItemImageByIndex", "parameters": [ @@ -12386,12 +12970,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Gets the item's image.", "operationId": "GetItemImageByIndex", "parameters": [ @@ -12520,7 +13108,14 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Drawing.ImageFormat of the returned image.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -12607,7 +13202,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Gets the item's image.", "operationId": "HeadItemImageByIndex", "parameters": [ @@ -12736,7 +13333,14 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Drawing.ImageFormat of the returned image.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -12825,7 +13429,9 @@ }, "/Items/{itemId}/Images/{imageType}/{imageIndex}/{tag}/{format}/{maxWidth}/{maxHeight}/{percentPlayed}/{unplayedCount}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Gets the item's image.", "operationId": "GetItemImage2", "parameters": [ @@ -12948,7 +13554,14 @@ "description": "Determines the output format of the image - original,gif,jpg,png.", "required": true, "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -13048,7 +13661,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Gets the item's image.", "operationId": "HeadItemImage2", "parameters": [ @@ -13171,7 +13786,14 @@ "description": "Determines the output format of the image - original,gif,jpg,png.", "required": true, "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -13273,7 +13895,9 @@ }, "/Items/{itemId}/Images/{imageType}/{imageIndex}/Index": { "post": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Updates the index for an item image.", "operationId": "UpdateItemImageIndex", "parameters": [ @@ -13370,14 +13994,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/MusicGenres/{name}/Images/{imageType}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get music genre image by name.", "operationId": "GetMusicGenreImage", "parameters": [ @@ -13432,7 +14060,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -13591,7 +14226,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get music genre image by name.", "operationId": "HeadMusicGenreImage", "parameters": [ @@ -13646,7 +14283,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -13807,7 +14451,9 @@ }, "/MusicGenres/{name}/Images/{imageType}/{imageIndex}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get music genre image by name.", "operationId": "GetMusicGenreImageByIndex", "parameters": [ @@ -13872,7 +14518,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -14022,7 +14675,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get music genre image by name.", "operationId": "HeadMusicGenreImageByIndex", "parameters": [ @@ -14087,7 +14742,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -14239,7 +14901,9 @@ }, "/Persons/{name}/Images/{imageType}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get person image by name.", "operationId": "GetPersonImage", "parameters": [ @@ -14294,7 +14958,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -14453,7 +15124,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get person image by name.", "operationId": "HeadPersonImage", "parameters": [ @@ -14508,7 +15181,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -14669,7 +15349,9 @@ }, "/Persons/{name}/Images/{imageType}/{imageIndex}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get person image by name.", "operationId": "GetPersonImageByIndex", "parameters": [ @@ -14734,7 +15416,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -14884,7 +15573,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get person image by name.", "operationId": "HeadPersonImageByIndex", "parameters": [ @@ -14949,7 +15640,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -15101,7 +15799,9 @@ }, "/Studios/{name}/Images/{imageType}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get studio image by name.", "operationId": "GetStudioImage", "parameters": [ @@ -15156,7 +15856,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -15315,7 +16022,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get studio image by name.", "operationId": "HeadStudioImage", "parameters": [ @@ -15370,7 +16079,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -15531,7 +16247,9 @@ }, "/Studios/{name}/Images/{imageType}/{imageIndex}": { "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get studio image by name.", "operationId": "GetStudioImageByIndex", "parameters": [ @@ -15596,7 +16314,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -15746,7 +16471,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get studio image by name.", "operationId": "HeadStudioImageByIndex", "parameters": [ @@ -15811,7 +16538,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -15963,7 +16697,9 @@ }, "/UserImage": { "post": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Sets the user image.", "operationId": "PostUserImage", "parameters": [ @@ -16057,12 +16793,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Delete the user's image.", "operationId": "DeleteUserImage", "parameters": [ @@ -16106,12 +16846,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "get": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get user profile image.", "operationId": "GetUserImage", "parameters": [ @@ -16137,7 +16881,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -16316,7 +17067,9 @@ } }, "head": { - "tags": ["Image"], + "tags": [ + "Image" + ], "summary": "Get user profile image.", "operationId": "HeadUserImage", "parameters": [ @@ -16342,7 +17095,14 @@ "in": "query", "description": "Determines the output format of the image - original,gif,jpg,png.", "schema": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "allOf": [ { "$ref": "#/components/schemas/ImageFormat" @@ -16523,7 +17283,9 @@ }, "/Albums/{itemId}/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given album.", "operationId": "GetInstantMixFromAlbum", "parameters": [ @@ -16653,14 +17415,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Artists/{itemId}/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given artist.", "operationId": "GetInstantMixFromArtists", "parameters": [ @@ -16790,14 +17556,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Artists/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given artist.", "operationId": "GetInstantMixFromArtists2", "parameters": [ @@ -16928,14 +17698,18 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given item.", "operationId": "GetInstantMixFromItem", "parameters": [ @@ -17065,14 +17839,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/MusicGenres/{name}/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given genre.", "operationId": "GetInstantMixFromMusicGenreByName", "parameters": [ @@ -17181,14 +17959,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/MusicGenres/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given genre.", "operationId": "GetInstantMixFromMusicGenreById", "parameters": [ @@ -17318,14 +18100,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists/{itemId}/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given playlist.", "operationId": "GetInstantMixFromPlaylist", "parameters": [ @@ -17455,14 +18241,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Songs/{itemId}/InstantMix": { "get": { - "tags": ["InstantMix"], + "tags": [ + "InstantMix" + ], "summary": "Creates an instant playlist based on a given song.", "operationId": "GetInstantMixFromSong", "parameters": [ @@ -17592,14 +18382,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/ExternalIdInfos": { "get": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get the item's external id info.", "operationId": "GetExternalIdInfos", "parameters": [ @@ -17683,7 +18477,9 @@ }, "/Items/RemoteSearch/Apply/{itemId}": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Applies search criteria to an item and refreshes metadata.", "operationId": "ApplySearchCriteria", "parameters": [ @@ -17783,7 +18579,9 @@ }, "/Items/RemoteSearch/Book": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get book remote search.", "operationId": "GetBookRemoteSearchResults", "requestBody": { @@ -17858,14 +18656,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/BoxSet": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get box set remote search.", "operationId": "GetBoxSetRemoteSearchResults", "requestBody": { @@ -17940,14 +18742,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/Movie": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get movie remote search.", "operationId": "GetMovieRemoteSearchResults", "requestBody": { @@ -18022,14 +18828,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/MusicAlbum": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get music album remote search.", "operationId": "GetMusicAlbumRemoteSearchResults", "requestBody": { @@ -18104,14 +18914,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/MusicArtist": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get music artist remote search.", "operationId": "GetMusicArtistRemoteSearchResults", "requestBody": { @@ -18186,14 +19000,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/MusicVideo": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get music video remote search.", "operationId": "GetMusicVideoRemoteSearchResults", "requestBody": { @@ -18268,14 +19086,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/Person": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get person remote search.", "operationId": "GetPersonRemoteSearchResults", "requestBody": { @@ -18360,7 +19182,9 @@ }, "/Items/RemoteSearch/Series": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get series remote search.", "operationId": "GetSeriesRemoteSearchResults", "requestBody": { @@ -18435,14 +19259,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/RemoteSearch/Trailer": { "post": { - "tags": ["ItemLookup"], + "tags": [ + "ItemLookup" + ], "summary": "Get trailer remote search.", "operationId": "GetTrailerRemoteSearchResults", "requestBody": { @@ -18517,14 +19345,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/Refresh": { "post": { - "tags": ["ItemRefresh"], + "tags": [ + "ItemRefresh" + ], "summary": "Refreshes metadata for an item.", "operationId": "RefreshItem", "parameters": [ @@ -18543,7 +19375,12 @@ "in": "query", "description": "(Optional) Specifies the metadata refresh mode.", "schema": { - "enum": ["None", "ValidationOnly", "Default", "FullRefresh"], + "enum": [ + "None", + "ValidationOnly", + "Default", + "FullRefresh" + ], "allOf": [ { "$ref": "#/components/schemas/MetadataRefreshMode" @@ -18557,7 +19394,12 @@ "in": "query", "description": "(Optional) Specifies the image refresh mode.", "schema": { - "enum": ["None", "ValidationOnly", "Default", "FullRefresh"], + "enum": [ + "None", + "ValidationOnly", + "Default", + "FullRefresh" + ], "allOf": [ { "$ref": "#/components/schemas/MetadataRefreshMode" @@ -18618,14 +19460,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Items": { "get": { - "tags": ["Items"], + "tags": [ + "Items" + ], "summary": "Gets items based on a query.", "operationId": "GetItems", "parameters": [ @@ -18695,6 +19541,15 @@ "format": "uuid" } }, + { + "name": "indexNumber", + "in": "query", + "description": "Optional filter by index number.", + "schema": { + "type": "integer", + "format": "int32" + } + }, { "name": "parentIndexNumber", "in": "query", @@ -19463,12 +20318,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Deletes items from the library and filesystem.", "operationId": "DeleteItems", "parameters": [ @@ -19535,14 +20394,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserItems/{itemId}/UserData": { "get": { - "tags": ["Items"], + "tags": [ + "Items" + ], "summary": "Get Item User Data.", "operationId": "GetItemUserData", "parameters": [ @@ -19616,12 +20479,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["Items"], + "tags": [ + "Items" + ], "summary": "Update Item User Data.", "operationId": "UpdateItemUserData", "parameters": [ @@ -19731,14 +20598,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserItems/Resume": { "get": { - "tags": ["Items"], + "tags": [ + "Items" + ], "summary": "Gets items based on a query.", "operationId": "GetResumeItems", "parameters": [ @@ -19916,14 +20787,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}": { "post": { - "tags": ["ItemUpdate"], + "tags": [ + "ItemUpdate" + ], "summary": "Updates an item.", "operationId": "UpdateItem", "parameters": [ @@ -20007,12 +20882,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "delete": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Deletes an item from the library and filesystem.", "operationId": "DeleteItem", "parameters": [ @@ -20077,12 +20956,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "get": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Gets an item from a user's library.", "operationId": "GetItem", "parameters": [ @@ -20136,14 +21019,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/ContentType": { "post": { - "tags": ["ItemUpdate"], + "tags": [ + "ItemUpdate" + ], "summary": "Updates an item's content type.", "operationId": "UpdateItemContentType", "parameters": [ @@ -20199,14 +21086,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Items/{itemId}/MetadataEditor": { "get": { - "tags": ["ItemUpdate"], + "tags": [ + "ItemUpdate" + ], "summary": "Gets metadata editor info for an item.", "operationId": "GetMetadataEditorInfo", "parameters": [ @@ -20271,14 +21162,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Albums/{itemId}/Similar": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets similar items.", "operationId": "GetSimilarAlbums", "parameters": [ @@ -20364,14 +21259,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Artists/{itemId}/Similar": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets similar items.", "operationId": "GetSimilarArtists", "parameters": [ @@ -20457,14 +21356,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/Ancestors": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets all parents of an item.", "operationId": "GetAncestors", "parameters": [ @@ -20547,14 +21450,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/CriticReviews": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets critic review for an item.", "operationId": "GetCriticReviews", "parameters": [ @@ -20598,14 +21505,18 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/Download": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Downloads item media.", "operationId": "GetDownload", "parameters": [ @@ -20667,14 +21578,19 @@ }, "security": [ { - "CustomAuthentication": ["Download", "DefaultAuthorization"] + "CustomAuthentication": [ + "Download", + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/File": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Get the original file of an item.", "operationId": "GetFile", "parameters": [ @@ -20736,14 +21652,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/Similar": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets similar items.", "operationId": "GetSimilarItems", "parameters": [ @@ -20829,14 +21749,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/ThemeMedia": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Get theme songs and videos for an item.", "operationId": "GetThemeMedia", "parameters": [ @@ -20867,6 +21791,28 @@ "type": "boolean", "default": false } + }, + { + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemSortBy" + } + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Optional. Sort Order - Ascending, Descending.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SortOrder" + } + } } ], "responses": { @@ -20902,14 +21848,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/ThemeSongs": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Get theme songs for an item.", "operationId": "GetThemeSongs", "parameters": [ @@ -20940,6 +21890,28 @@ "type": "boolean", "default": false } + }, + { + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemSortBy" + } + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Optional. Sort Order - Ascending, Descending.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SortOrder" + } + } } ], "responses": { @@ -20992,14 +21964,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/ThemeVideos": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Get theme videos for an item.", "operationId": "GetThemeVideos", "parameters": [ @@ -21030,6 +22006,28 @@ "type": "boolean", "default": false } + }, + { + "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": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemSortBy" + } + } + }, + { + "name": "sortOrder", + "in": "query", + "description": "Optional. Sort Order - Ascending, Descending.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SortOrder" + } + } } ], "responses": { @@ -21082,14 +22080,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/Counts": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Get item counts.", "operationId": "GetItemCounts", "parameters": [ @@ -21141,14 +22143,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Libraries/AvailableOptions": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets the library options info.", "operationId": "GetLibraryOptionsInfo", "parameters": [ @@ -21229,7 +22235,9 @@ }, "/Library/Media/Updated": { "post": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Reports that new movies have been added by an external source.", "operationId": "PostUpdatedMedia", "requestBody": { @@ -21281,14 +22289,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Library/MediaFolders": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets all user media folders.", "operationId": "GetMediaFolders", "parameters": [ @@ -21331,14 +22343,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Library/Movies/Added": { "post": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Reports that new movies have been added by an external source.", "operationId": "PostAddedMovies", "parameters": [ @@ -21372,14 +22388,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Library/Movies/Updated": { "post": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Reports that new movies have been added by an external source.", "operationId": "PostUpdatedMovies", "parameters": [ @@ -21413,14 +22433,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Library/PhysicalPaths": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets a list of physical paths from virtual folders.", "operationId": "GetPhysicalPaths", "responses": { @@ -21462,14 +22486,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Library/Refresh": { "post": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Starts a library scan.", "operationId": "RefreshLibrary", "responses": { @@ -21485,14 +22513,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Library/Series/Added": { "post": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Reports that new episodes of a series have been added by an external source.", "operationId": "PostAddedSeries", "parameters": [ @@ -21518,14 +22550,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Library/Series/Updated": { "post": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Reports that new episodes of a series have been added by an external source.", "operationId": "PostUpdatedSeries", "parameters": [ @@ -21551,14 +22587,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Movies/{itemId}/Similar": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets similar items.", "operationId": "GetSimilarMovies", "parameters": [ @@ -21644,14 +22684,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Shows/{itemId}/Similar": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets similar items.", "operationId": "GetSimilarShows", "parameters": [ @@ -21737,14 +22781,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Trailers/{itemId}/Similar": { "get": { - "tags": ["Library"], + "tags": [ + "Library" + ], "summary": "Gets similar items.", "operationId": "GetSimilarTrailers", "parameters": [ @@ -21830,14 +22878,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Library/VirtualFolders": { "get": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Gets all virtual folders.", "operationId": "GetVirtualFolders", "responses": { @@ -21887,7 +22939,9 @@ ] }, "post": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Adds a virtual folder.", "operationId": "AddVirtualFolder", "parameters": [ @@ -21998,7 +23052,9 @@ ] }, "delete": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Removes a virtual folder.", "operationId": "RemoveVirtualFolder", "parameters": [ @@ -22043,7 +23099,9 @@ }, "/Library/VirtualFolders/LibraryOptions": { "post": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Update library options.", "operationId": "UpdateLibraryOptions", "requestBody": { @@ -22124,7 +23182,9 @@ }, "/Library/VirtualFolders/Name": { "post": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Renames a virtual folder.", "operationId": "RenameVirtualFolder", "parameters": [ @@ -22217,7 +23277,9 @@ }, "/Library/VirtualFolders/Paths": { "post": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Add a media path to a library.", "operationId": "AddMediaPath", "parameters": [ @@ -22288,7 +23350,9 @@ ] }, "delete": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Remove a media path.", "operationId": "RemoveMediaPath", "parameters": [ @@ -22341,7 +23405,9 @@ }, "/Library/VirtualFolders/Paths/Update": { "post": { - "tags": ["LibraryStructure"], + "tags": [ + "LibraryStructure" + ], "summary": "Updates a media path.", "operationId": "UpdateMediaPath", "requestBody": { @@ -22403,7 +23469,9 @@ }, "/LiveTv/ChannelMappingOptions": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Get channel mapping options.", "operationId": "GetChannelMappingOptions", "parameters": [ @@ -22446,14 +23514,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/ChannelMappings": { "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Set channel mappings.", "operationId": "SetChannelMapping", "requestBody": { @@ -22522,14 +23595,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Channels": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets available live tv channels.", "operationId": "GetLiveTvChannels", "parameters": [ @@ -22538,7 +23616,10 @@ "in": "query", "description": "Optional. Filter by channel type.", "schema": { - "enum": ["TV", "Radio"], + "enum": [ + "TV", + "Radio" + ], "allOf": [ { "$ref": "#/components/schemas/ChannelType" @@ -22700,7 +23781,10 @@ "in": "query", "description": "Optional. Sort order.", "schema": { - "enum": ["Ascending", "Descending"], + "enum": [ + "Ascending", + "Descending" + ], "allOf": [ { "$ref": "#/components/schemas/SortOrder" @@ -22757,14 +23841,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Channels/{channelId}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a live tv channel.", "operationId": "GetChannel", "parameters": [ @@ -22838,14 +23927,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/GuideInfo": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Get guid info.", "operationId": "GetGuideInfo", "responses": { @@ -22878,14 +23972,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Info": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets available live tv services.", "operationId": "GetLiveTvInfo", "responses": { @@ -22918,14 +24017,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/ListingProviders": { "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Adds a listings provider.", "operationId": "AddListingProvider", "parameters": [ @@ -23018,12 +24122,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Delete listing provider.", "operationId": "DeleteListingProvider", "parameters": [ @@ -23049,14 +24158,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/ListingProviders/Default": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets default listings provider info.", "operationId": "GetDefaultListingProvider", "responses": { @@ -23089,14 +24203,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/ListingProviders/Lineups": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets available lineups.", "operationId": "GetLineups", "parameters": [ @@ -23172,14 +24291,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/ListingProviders/SchedulesDirect/Countries": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets available countries.", "operationId": "GetSchedulesDirectCountries", "responses": { @@ -23203,14 +24327,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/LiveRecordings/{recordingId}/stream": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a live tv recording stream.", "operationId": "GetLiveRecordingFile", "parameters": [ @@ -23261,7 +24390,9 @@ }, "/LiveTv/LiveStreamFiles/{streamId}/stream.{container}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a live tv channel stream.", "operationId": "GetLiveStreamFile", "parameters": [ @@ -23321,7 +24452,9 @@ }, "/LiveTv/Programs": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets available live tv epgs.", "operationId": "GetLiveTvPrograms", "parameters": [ @@ -23605,12 +24738,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets available live tv epgs.", "operationId": "GetPrograms", "requestBody": { @@ -23678,14 +24816,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Programs/{programId}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a live tv program.", "operationId": "GetProgram", "parameters": [ @@ -23738,14 +24881,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Programs/Recommended": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets recommended live tv epgs.", "operationId": "GetRecommendedPrograms", "parameters": [ @@ -23922,14 +25070,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Recordings": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets live tv recordings.", "operationId": "GetRecordings", "parameters": [ @@ -24140,14 +25293,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Recordings/{recordingId}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a live tv recording.", "operationId": "GetRecording", "parameters": [ @@ -24221,12 +25379,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Deletes a live tv recording.", "operationId": "DeleteRecording", "parameters": [ @@ -24274,14 +25437,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Recordings/Folders": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets recording folders.", "operationId": "GetRecordingFolders", "parameters": [ @@ -24325,14 +25493,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Recordings/Groups": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets live tv recording groups.", "operationId": "GetRecordingGroups", "parameters": [ @@ -24377,14 +25550,19 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Recordings/Groups/{groupId}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Get recording group.", "operationId": "GetRecordingGroup", "parameters": [ @@ -24430,14 +25608,19 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Recordings/Series": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets live tv recording series.", "operationId": "GetRecordingsSeries", "parameters": [ @@ -24609,14 +25792,19 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/SeriesTimers": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets live tv series timers.", "operationId": "GetSeriesTimers", "parameters": [ @@ -24633,7 +25821,10 @@ "in": "query", "description": "Optional. Sort in Ascending or Descending order.", "schema": { - "enum": ["Ascending", "Descending"], + "enum": [ + "Ascending", + "Descending" + ], "allOf": [ { "$ref": "#/components/schemas/SortOrder" @@ -24672,12 +25863,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Creates a live tv series timer.", "operationId": "CreateSeriesTimer", "requestBody": { @@ -24728,14 +25924,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/SeriesTimers/{timerId}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a live tv series timer.", "operationId": "GetSeriesTimer", "parameters": [ @@ -24799,12 +26000,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Cancels a live tv series timer.", "operationId": "CancelSeriesTimer", "parameters": [ @@ -24831,12 +26037,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Updates a live tv series timer.", "operationId": "UpdateSeriesTimer", "parameters": [ @@ -24898,14 +26109,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Timers": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets the live tv timers.", "operationId": "GetTimers", "parameters": [ @@ -24972,12 +26188,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Creates a live tv timer.", "operationId": "CreateTimer", "requestBody": { @@ -25025,14 +26246,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Timers/{timerId}": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets a timer.", "operationId": "GetTimer", "parameters": [ @@ -25076,12 +26302,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Cancels a live tv timer.", "operationId": "CancelTimer", "parameters": [ @@ -25108,12 +26339,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Updates a live tv timer.", "operationId": "UpdateTimer", "parameters": [ @@ -25172,14 +26408,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Timers/Defaults": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Gets the default values for a new timer.", "operationId": "GetDefaultTimer", "parameters": [ @@ -25222,14 +26463,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/TunerHosts": { "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Adds a tuner host.", "operationId": "AddTunerHost", "requestBody": { @@ -25294,12 +26540,17 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Deletes a tuner host.", "operationId": "DeleteTunerHost", "parameters": [ @@ -25325,14 +26576,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/TunerHosts/Types": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Get tuner host types.", "operationId": "GetTunerHostTypes", "responses": { @@ -25374,14 +26630,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvAccess", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvAccess", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Tuners/{tunerId}/Reset": { "post": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Resets a tv tuner.", "operationId": "ResetTuner", "parameters": [ @@ -25408,14 +26669,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Tuners/Discover": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Discover tuners.", "operationId": "DiscoverTuners", "parameters": [ @@ -25468,14 +26734,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/LiveTv/Tuners/Discvover": { "get": { - "tags": ["LiveTv"], + "tags": [ + "LiveTv" + ], "summary": "Discover tuners.", "operationId": "DiscvoverTuners", "parameters": [ @@ -25528,14 +26799,19 @@ }, "security": [ { - "CustomAuthentication": ["LiveTvManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LiveTvManagement", + "DefaultAuthorization" + ] } ] } }, "/Localization/Countries": { "get": { - "tags": ["Localization"], + "tags": [ + "Localization" + ], "summary": "Gets known countries.", "operationId": "GetCountries", "responses": { @@ -25587,7 +26863,9 @@ }, "/Localization/Cultures": { "get": { - "tags": ["Localization"], + "tags": [ + "Localization" + ], "summary": "Gets known cultures.", "operationId": "GetCultures", "responses": { @@ -25639,7 +26917,9 @@ }, "/Localization/Options": { "get": { - "tags": ["Localization"], + "tags": [ + "Localization" + ], "summary": "Gets localization options.", "operationId": "GetLocalizationOptions", "responses": { @@ -25691,7 +26971,9 @@ }, "/Localization/ParentalRatings": { "get": { - "tags": ["Localization"], + "tags": [ + "Localization" + ], "summary": "Gets known parental ratings.", "operationId": "GetParentalRatings", "responses": { @@ -25743,7 +27025,9 @@ }, "/Audio/{itemId}/Lyrics": { "get": { - "tags": ["Lyrics"], + "tags": [ + "Lyrics" + ], "summary": "Gets an item's lyrics.", "operationId": "GetLyrics", "parameters": [ @@ -25808,12 +27092,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["Lyrics"], + "tags": [ + "Lyrics" + ], "summary": "Upload an external lyric file.", "operationId": "UploadLyrics", "parameters": [ @@ -25917,12 +27205,17 @@ }, "security": [ { - "CustomAuthentication": ["LyricManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LyricManagement", + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Lyrics"], + "tags": [ + "Lyrics" + ], "summary": "Deletes an external lyric file.", "operationId": "DeleteLyrics", "parameters": [ @@ -25970,14 +27263,19 @@ }, "security": [ { - "CustomAuthentication": ["LyricManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LyricManagement", + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/RemoteSearch/Lyrics": { "get": { - "tags": ["Lyrics"], + "tags": [ + "Lyrics" + ], "summary": "Search remote lyrics.", "operationId": "SearchRemoteLyrics", "parameters": [ @@ -26051,14 +27349,19 @@ }, "security": [ { - "CustomAuthentication": ["LyricManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LyricManagement", + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/RemoteSearch/Lyrics/{lyricId}": { "post": { - "tags": ["Lyrics"], + "tags": [ + "Lyrics" + ], "summary": "Downloads a remote lyric.", "operationId": "DownloadRemoteLyrics", "parameters": [ @@ -26132,14 +27435,19 @@ }, "security": [ { - "CustomAuthentication": ["LyricManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LyricManagement", + "DefaultAuthorization" + ] } ] } }, "/Providers/Lyrics/{lyricId}": { "get": { - "tags": ["Lyrics"], + "tags": [ + "Lyrics" + ], "summary": "Gets the remote lyrics.", "operationId": "GetRemoteLyrics", "parameters": [ @@ -26203,14 +27511,19 @@ }, "security": [ { - "CustomAuthentication": ["LyricManagement", "DefaultAuthorization"] + "CustomAuthentication": [ + "LyricManagement", + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/PlaybackInfo": { "get": { - "tags": ["MediaInfo"], + "tags": [ + "MediaInfo" + ], "summary": "Gets live playback media info for an item.", "operationId": "GetPlaybackInfo", "parameters": [ @@ -26284,12 +27597,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["MediaInfo"], + "tags": [ + "MediaInfo" + ], "summary": "Gets live playback media info for an item.", "description": "For backwards compatibility parameters can be sent via Query or Body, with Query having higher precedence.\r\nQuery parameters are obsolete.", "operationId": "GetPostedPlaybackInfo", @@ -26522,14 +27839,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/LiveStreams/Close": { "post": { - "tags": ["MediaInfo"], + "tags": [ + "MediaInfo" + ], "summary": "Closes a media source.", "operationId": "CloseLiveStream", "parameters": [ @@ -26556,14 +27877,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/LiveStreams/Open": { "post": { - "tags": ["MediaInfo"], + "tags": [ + "MediaInfo" + ], "summary": "Opens a media source.", "operationId": "OpenLiveStream", "parameters": [ @@ -26661,6 +27986,14 @@ "schema": { "type": "boolean" } + }, + { + "name": "alwaysBurnInSubtitleWhenTranscoding", + "in": "query", + "description": "Always burn-in subtitle when transcoding.", + "schema": { + "type": "boolean" + } } ], "requestBody": { @@ -26728,14 +28061,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playback/BitrateTest": { "get": { - "tags": ["MediaInfo"], + "tags": [ + "MediaInfo" + ], "summary": "Tests the network with a request with the size of the bitrate.", "operationId": "GetBitrateTestBytes", "parameters": [ @@ -26773,14 +28110,105 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] + } + ] + } + }, + "/MediaSegments/{itemId}": { + "get": { + "tags": [ + "MediaSegments" + ], + "summary": "Gets all media segments based on an itemId.", + "operationId": "GetItemSegments", + "parameters": [ + { + "name": "itemId", + "in": "path", + "description": "The ItemId.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "includeSegmentTypes", + "in": "query", + "description": "Optional filter of requested segment types.", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaSegmentType" + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MediaSegmentDtoQueryResult" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/MediaSegmentDtoQueryResult" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/MediaSegmentDtoQueryResult" + } + } + } + }, + "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" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + }, + "security": [ + { + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Movies/Recommendations": { "get": { - "tags": ["Movies"], + "tags": [ + "Movies" + ], "summary": "Gets movie recommendations.", "operationId": "GetMovieRecommendations", "parameters": [ @@ -26873,14 +28301,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/MusicGenres": { "get": { - "tags": ["MusicGenres"], + "tags": [ + "MusicGenres" + ], "summary": "Gets all music genres from a given item, folder, or the entire library.", "operationId": "GetMusicGenres", "parameters": [ @@ -27085,14 +28517,18 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/MusicGenres/{genreName}": { "get": { - "tags": ["MusicGenres"], + "tags": [ + "MusicGenres" + ], "summary": "Gets a music genre, by name.", "operationId": "GetMusicGenre", "parameters": [ @@ -27145,14 +28581,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Packages": { "get": { - "tags": ["Package"], + "tags": [ + "Package" + ], "summary": "Gets available packages.", "operationId": "GetPackages", "responses": { @@ -27194,14 +28634,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Packages/{name}": { "get": { - "tags": ["Package"], + "tags": [ + "Package" + ], "summary": "Gets a package by name or assembly GUID.", "operationId": "GetPackageInfo", "parameters": [ @@ -27254,14 +28698,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Packages/Installed/{name}": { "post": { - "tags": ["Package"], + "tags": [ + "Package" + ], "summary": "Installs a package.", "operationId": "InstallPackage", "parameters": [ @@ -27333,14 +28781,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Packages/Installing/{packageId}": { "delete": { - "tags": ["Package"], + "tags": [ + "Package" + ], "summary": "Cancels a package installation.", "operationId": "CancelPackageInstallation", "parameters": [ @@ -27368,14 +28820,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Repositories": { "get": { - "tags": ["Package"], + "tags": [ + "Package" + ], "summary": "Gets all package repositories.", "operationId": "GetRepositories", "responses": { @@ -27417,12 +28873,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "post": { - "tags": ["Package"], + "tags": [ + "Package" + ], "summary": "Sets the enabled and existing package repositories.", "operationId": "SetRepositories", "requestBody": { @@ -27468,14 +28928,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Persons": { "get": { - "tags": ["Persons"], + "tags": [ + "Persons" + ], "summary": "Gets all persons.", "operationId": "GetPersons", "parameters": [ @@ -27634,14 +29098,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Persons/{name}": { "get": { - "tags": ["Persons"], + "tags": [ + "Persons" + ], "summary": "Get person by name.", "operationId": "GetPerson", "parameters": [ @@ -27714,716 +29182,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/{breakdownType}/BreakdownReport": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetBreakdownReport", - "parameters": [ - { - "name": "breakdownType", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/{userId}/{date}/GetItems": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetUserReportData", - "parameters": [ - { - "name": "userId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "date", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "filter", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/DurationHistogramReport": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetDurationHistogramReport", - "parameters": [ - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "filter", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/GetTvShowsReport": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetTvShowsReport", - "parameters": [ - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/HourlyReport": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetHourlyReport", - "parameters": [ - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "filter", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/load_backup": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "LoadBackup", - "parameters": [ - { - "name": "backupFilePath", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/MoviesReport": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetMovieReport", - "parameters": [ - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/PlayActivity": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetUsageStats", - "parameters": [ - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "filter", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "dataType", - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/save_backup": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "SaveBackup", - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/submit_custom_query": { - "post": { - "tags": ["PlaybackReportingActivity"], - "operationId": "CustomQuery", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/CustomQueryData" - } - ] - } - }, - "text/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/CustomQueryData" - } - ] - } - }, - "application/*+json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/CustomQueryData" - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": {} - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/type_filter_list": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetTypeFilterList", - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/user_activity": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetUserReport", - "parameters": [ - { - "name": "days", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "endDate", - "in": "query", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "timezoneOffset", - "in": "query", - "schema": { - "type": "number", - "format": "float" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/user_list": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "GetJellyfinUsers", - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/user_manage/add": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "IgnoreListAdd", - "parameters": [ - { - "name": "id", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/user_manage/prune": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "PruneUnknownUsers", - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/user_usage_stats/user_manage/remove": { - "get": { - "tags": ["PlaybackReportingActivity"], - "operationId": "IgnoreListRemove", - "parameters": [ - { - "name": "id", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists": { "post": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Creates a new playlist.", "description": "For backwards compatibility parameters can be sent via Query or Body, with Query having higher precedence.\r\nQuery parameters are obsolete.", "operationId": "CreatePlaylist", @@ -28466,7 +29236,13 @@ "description": "The media type.", "deprecated": true, "schema": { - "enum": ["Unknown", "Video", "Audio", "Photo", "Book"], + "enum": [ + "Unknown", + "Video", + "Audio", + "Photo", + "Book" + ], "allOf": [ { "$ref": "#/components/schemas/MediaType" @@ -28540,14 +29316,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists/{playlistId}": { "post": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Updates a playlist.", "operationId": "UpdatePlaylist", "parameters": [ @@ -28648,14 +29428,92 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] + } + ] + }, + "get": { + "tags": [ + "Playlists" + ], + "summary": "Get a playlist.", + "operationId": "GetPlaylist", + "parameters": [ + { + "name": "playlistId", + "in": "path", + "description": "The playlist id.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "The playlist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlaylistDto" + } + }, + "application/json; profile=\"CamelCase\"": { + "schema": { + "$ref": "#/components/schemas/PlaylistDto" + } + }, + "application/json; profile=\"PascalCase\"": { + "schema": { + "$ref": "#/components/schemas/PlaylistDto" + } + } + } + }, + "404": { + "description": "Playlist 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" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + }, + "security": [ + { + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists/{playlistId}/Items": { "post": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Adds items to a playlist.", "operationId": "AddItemToPlaylist", "parameters": [ @@ -28741,12 +29599,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Removes items from a playlist.", "operationId": "RemoveItemFromPlaylist", "parameters": [ @@ -28821,12 +29683,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "get": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Gets the original items of a playlist.", "operationId": "GetPlaylistItems", "parameters": [ @@ -28982,14 +29848,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists/{playlistId}/Items/{itemId}/Move/{newIndex}": { "post": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Moves a playlist item.", "operationId": "MoveItem", "parameters": [ @@ -29072,14 +29942,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists/{playlistId}/Users": { "get": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Get a playlist's users.", "operationId": "GetPlaylistUsers", "parameters": [ @@ -29170,14 +30044,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Playlists/{playlistId}/Users/{userId}": { "get": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Get a playlist user.", "operationId": "GetPlaylistUser", "parameters": [ @@ -29269,12 +30147,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Modify a user of a playlist's users.", "operationId": "UpdatePlaylistUser", "parameters": [ @@ -29385,12 +30267,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Playlists"], + "tags": [ + "Playlists" + ], "summary": "Remove a user from a playlist's users.", "operationId": "RemoveUserFromPlaylist", "parameters": [ @@ -29465,14 +30351,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/PlayingItems/{itemId}": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Reports that a session has begun playing an item.", "operationId": "OnPlaybackStart", "parameters": [ @@ -29517,7 +30407,11 @@ "in": "query", "description": "The play method.", "schema": { - "enum": ["Transcode", "DirectStream", "DirectPlay"], + "enum": [ + "Transcode", + "DirectStream", + "DirectPlay" + ], "allOf": [ { "$ref": "#/components/schemas/PlayMethod" @@ -29564,12 +30458,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Reports that a session has stopped playing an item.", "operationId": "OnPlaybackStopped", "parameters": [ @@ -29638,14 +30536,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/PlayingItems/{itemId}/Progress": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Reports a session's playback progress.", "operationId": "OnPlaybackProgress", "parameters": [ @@ -29708,7 +30610,11 @@ "in": "query", "description": "The play method.", "schema": { - "enum": ["Transcode", "DirectStream", "DirectPlay"], + "enum": [ + "Transcode", + "DirectStream", + "DirectPlay" + ], "allOf": [ { "$ref": "#/components/schemas/PlayMethod" @@ -29737,7 +30643,11 @@ "in": "query", "description": "The repeat mode.", "schema": { - "enum": ["RepeatNone", "RepeatAll", "RepeatOne"], + "enum": [ + "RepeatNone", + "RepeatAll", + "RepeatOne" + ], "allOf": [ { "$ref": "#/components/schemas/RepeatMode" @@ -29777,14 +30687,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Playing": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Reports playback has started within a session.", "operationId": "ReportPlaybackStart", "requestBody": { @@ -29835,14 +30749,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Playing/Ping": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Pings a playback session.", "operationId": "PingPlaybackSession", "parameters": [ @@ -29869,14 +30787,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Playing/Progress": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Reports playback progress within a session.", "operationId": "ReportPlaybackProgress", "requestBody": { @@ -29927,14 +30849,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Playing/Stopped": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Reports playback has stopped within a session.", "operationId": "ReportPlaybackStopped", "requestBody": { @@ -29985,14 +30911,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserPlayedItems/{itemId}": { "post": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Marks an item as played for user.", "operationId": "MarkPlayedItem", "parameters": [ @@ -30075,12 +31005,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Playstate"], + "tags": [ + "Playstate" + ], "summary": "Marks an item as unplayed for user.", "operationId": "MarkUnplayedItem", "parameters": [ @@ -30154,14 +31088,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Plugins": { "get": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Gets a list of currently installed plugins.", "operationId": "GetPlugins", "responses": { @@ -30203,14 +31141,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}": { "delete": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Uninstalls a plugin.", "operationId": "UninstallPlugin", "parameters": [ @@ -30259,14 +31201,18 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}/{version}": { "delete": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Uninstalls a plugin by version.", "operationId": "UninstallPluginByVersion", "parameters": [ @@ -30323,14 +31269,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}/{version}/Disable": { "post": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Disable a plugin.", "operationId": "DisablePlugin", "parameters": [ @@ -30387,14 +31337,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}/{version}/Enable": { "post": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Enables a disabled plugin.", "operationId": "EnablePlugin", "parameters": [ @@ -30451,14 +31405,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}/{version}/Image": { "get": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Gets a plugin's image.", "operationId": "GetPluginImage", "parameters": [ @@ -30523,14 +31481,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}/Configuration": { "get": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Gets plugin configuration.", "operationId": "GetPluginConfiguration", "parameters": [ @@ -30595,12 +31557,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "post": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Updates plugin configuration.", "description": "Accepts plugin configuration as JSON body.", "operationId": "UpdatePluginConfiguration", @@ -30649,14 +31615,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Plugins/{pluginId}/Manifest": { "post": { - "tags": ["Plugins"], + "tags": [ + "Plugins" + ], "summary": "Gets a plugin's manifest.", "operationId": "GetPluginManifest", "parameters": [ @@ -30704,14 +31674,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/QuickConnect/Authorize": { "post": { - "tags": ["QuickConnect"], + "tags": [ + "QuickConnect" + ], "summary": "Authorizes a pending quick connect request.", "operationId": "AuthorizeQuickConnect", "parameters": [ @@ -30781,14 +31755,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/QuickConnect/Connect": { "get": { - "tags": ["QuickConnect"], + "tags": [ + "QuickConnect" + ], "summary": "Attempts to retrieve authentication information.", "operationId": "GetQuickConnectState", "parameters": [ @@ -30848,7 +31826,9 @@ }, "/QuickConnect/Enabled": { "get": { - "tags": ["QuickConnect"], + "tags": [ + "QuickConnect" + ], "summary": "Gets the current quick connect state.", "operationId": "GetQuickConnectEnabled", "responses": { @@ -30877,7 +31857,9 @@ }, "/QuickConnect/Initiate": { "post": { - "tags": ["QuickConnect"], + "tags": [ + "QuickConnect" + ], "summary": "Initiate a new quick connect request.", "operationId": "InitiateQuickConnect", "responses": { @@ -30909,7 +31891,9 @@ }, "/Items/{itemId}/RemoteImages": { "get": { - "tags": ["RemoteImage"], + "tags": [ + "RemoteImage" + ], "summary": "Gets available remote images for an item.", "operationId": "GetRemoteImages", "parameters": [ @@ -31036,14 +32020,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/RemoteImages/Download": { "post": { - "tags": ["RemoteImage"], + "tags": [ + "RemoteImage" + ], "summary": "Downloads a remote image for an item.", "operationId": "DownloadRemoteImage", "parameters": [ @@ -31128,14 +32116,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Items/{itemId}/RemoteImages/Providers": { "get": { - "tags": ["RemoteImage"], + "tags": [ + "RemoteImage" + ], "summary": "Gets available remote image providers for an item.", "operationId": "GetRemoteImageProviders", "parameters": [ @@ -31209,14 +32201,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/ScheduledTasks": { "get": { - "tags": ["ScheduledTasks"], + "tags": [ + "ScheduledTasks" + ], "summary": "Get tasks.", "operationId": "GetTasks", "parameters": [ @@ -31276,14 +32272,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/ScheduledTasks/{taskId}": { "get": { - "tags": ["ScheduledTasks"], + "tags": [ + "ScheduledTasks" + ], "summary": "Get task by id.", "operationId": "GetTask", "parameters": [ @@ -31347,14 +32347,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/ScheduledTasks/{taskId}/Triggers": { "post": { - "tags": ["ScheduledTasks"], + "tags": [ + "ScheduledTasks" + ], "summary": "Update specified task triggers.", "operationId": "UpdateTask", "parameters": [ @@ -31431,14 +32435,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/ScheduledTasks/Running/{taskId}": { "post": { - "tags": ["ScheduledTasks"], + "tags": [ + "ScheduledTasks" + ], "summary": "Start specified task.", "operationId": "StartTask", "parameters": [ @@ -31485,12 +32493,16 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] }, "delete": { - "tags": ["ScheduledTasks"], + "tags": [ + "ScheduledTasks" + ], "summary": "Stop specified task.", "operationId": "StopTask", "parameters": [ @@ -31537,14 +32549,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Search/Hints": { "get": { - "tags": ["Search"], + "tags": [ + "Search" + ], "summary": "Gets the search hint result.", "operationId": "GetSearchHints", "parameters": [ @@ -31742,14 +32758,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Auth/PasswordResetProviders": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Get all password reset providers.", "operationId": "GetPasswordResetProviders", "responses": { @@ -31791,14 +32811,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Auth/Providers": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Get all auth providers.", "operationId": "GetAuthProviders", "responses": { @@ -31840,14 +32864,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Sessions": { "get": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Gets a list of sessions.", "operationId": "GetSessions", "parameters": [ @@ -31886,7 +32914,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SessionInfo" + "$ref": "#/components/schemas/SessionInfoDto" } } }, @@ -31894,7 +32922,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SessionInfo" + "$ref": "#/components/schemas/SessionInfoDto" } } }, @@ -31902,7 +32930,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SessionInfo" + "$ref": "#/components/schemas/SessionInfoDto" } } } @@ -31917,14 +32945,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/Command": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Issues a full general command to a client.", "operationId": "SendFullGeneralCommand", "parameters": [ @@ -31984,14 +33016,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/Command/{command}": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Issues a general command to a client.", "operationId": "SendGeneralCommand", "parameters": [ @@ -32077,14 +33113,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/Message": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Issues a command to a client to display a message to the user.", "operationId": "SendMessageCommand", "parameters": [ @@ -32144,14 +33184,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/Playing": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Instructs a session to play an item.", "operationId": "Play", "parameters": [ @@ -32256,14 +33300,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/Playing/{command}": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Issues a playstate command to a client.", "operationId": "SendPlaystateCommand", "parameters": [ @@ -32332,14 +33380,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/System/{command}": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Issues a system command to a client.", "operationId": "SendSystemCommand", "parameters": [ @@ -32425,14 +33477,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/User/{userId}": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Adds an additional user to a session.", "operationId": "AddUserToSession", "parameters": [ @@ -32469,12 +33525,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Removes an additional user from a session.", "operationId": "RemoveUserFromSession", "parameters": [ @@ -32511,14 +33571,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/{sessionId}/Viewing": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Instructs a session to browse to an item or view.", "operationId": "DisplayContent", "parameters": [ @@ -32616,14 +33680,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Capabilities": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Updates capabilities for a device.", "operationId": "PostCapabilities", "parameters": [ @@ -32689,14 +33757,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Capabilities/Full": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Updates capabilities for a device.", "operationId": "PostFullCapabilities", "parameters": [ @@ -32758,14 +33830,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Logout": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Reports that a session has ended.", "operationId": "ReportSessionEnded", "responses": { @@ -32781,14 +33857,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Sessions/Viewing": { "post": { - "tags": ["Session"], + "tags": [ + "Session" + ], "summary": "Reports that a session is viewing an item.", "operationId": "ReportViewing", "parameters": [ @@ -32821,291 +33901,20 @@ "description": "Forbidden" } }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Episode/{id}/IntroSkipperSegments": { - "get": { - "tags": ["SkipIntro"], - "operationId": "GetSkippableSegments", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Intro" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Episode/{id}/IntroTimestamps": { - "get": { - "tags": ["SkipIntro"], - "operationId": "GetIntroTimestamps", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "mode", - "in": "query", - "schema": { - "enum": ["Introduction", "Credits"], - "allOf": [ - { - "$ref": "#/components/schemas/AnalysisMode" - } - ], - "default": "Introduction" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Intro" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Episode/{id}/IntroTimestamps/v1": { - "get": { - "tags": ["SkipIntro"], - "operationId": "GetIntroTimestamps", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "mode", - "in": "query", - "schema": { - "enum": ["Introduction", "Credits"], - "allOf": [ - { - "$ref": "#/components/schemas/AnalysisMode" - } - ], - "default": "Introduction" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Intro" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Intros/All": { - "get": { - "tags": ["SkipIntro"], - "operationId": "GetAllTimestamps", - "parameters": [ - { - "name": "mode", - "in": "query", - "schema": { - "enum": ["Introduction", "Credits"], - "allOf": [ - { - "$ref": "#/components/schemas/AnalysisMode" - } - ], - "default": "Introduction" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IntroWithMetadata" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, "security": [ { "CustomAuthentication": [ - "RequiresElevation", "DefaultAuthorization" ] } ] } }, - "/Intros/EraseTimestamps": { - "post": { - "tags": ["SkipIntro"], - "operationId": "ResetIntroTimestamps", - "parameters": [ - { - "name": "mode", - "in": "query", - "schema": { - "enum": ["Introduction", "Credits"], - "allOf": [ - { - "$ref": "#/components/schemas/AnalysisMode" - } - ] - } - }, - { - "name": "eraseCache", - "in": "query", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": [ - "RequiresElevation", - "DefaultAuthorization" - ] - } - ] - } - }, - "/Intros/UserInterfaceConfiguration": { - "get": { - "tags": ["SkipIntro"], - "operationId": "GetUserInterfaceConfiguration", - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserInterfaceConfiguration" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, "/Startup/Complete": { "post": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Completes the startup wizard.", "operationId": "CompleteWizard", "responses": { @@ -33131,7 +33940,9 @@ }, "/Startup/Configuration": { "get": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Gets the initial startup wizard configuration.", "operationId": "GetStartupConfiguration", "responses": { @@ -33172,7 +33983,9 @@ ] }, "post": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Sets the initial startup wizard configuration.", "operationId": "UpdateInitialConfiguration", "requestBody": { @@ -33234,7 +34047,9 @@ }, "/Startup/FirstUser": { "get": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Gets the first user.", "operationId": "GetFirstUser_2", "responses": { @@ -33277,7 +34092,9 @@ }, "/Startup/RemoteAccess": { "post": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Sets remote access and UPnP.", "operationId": "SetRemoteAccess", "requestBody": { @@ -33339,7 +34156,9 @@ }, "/Startup/User": { "get": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Gets the first user.", "operationId": "GetFirstUser", "responses": { @@ -33380,7 +34199,9 @@ ] }, "post": { - "tags": ["Startup"], + "tags": [ + "Startup" + ], "summary": "Sets the user name and password.", "operationId": "UpdateStartupUser", "requestBody": { @@ -33441,7 +34262,9 @@ }, "/Studios": { "get": { - "tags": ["Studios"], + "tags": [ + "Studios" + ], "summary": "Gets all studios from a given item, folder, or the entire library.", "operationId": "GetStudios", "parameters": [ @@ -33631,14 +34454,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Studios/{name}": { "get": { - "tags": ["Studios"], + "tags": [ + "Studios" + ], "summary": "Gets a studio by name.", "operationId": "GetStudio", "parameters": [ @@ -33691,14 +34518,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/FallbackFont/Fonts": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Gets a list of available fallback font files.", "operationId": "GetFallbackFontList", "responses": { @@ -33740,14 +34571,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/FallbackFont/Fonts/{name}": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Gets a fallback font file.", "operationId": "GetFallbackFont", "parameters": [ @@ -33782,14 +34617,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/RemoteSearch/Subtitles/{language}": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Search remote subtitles.", "operationId": "SearchRemoteSubtitles", "parameters": [ @@ -33890,7 +34729,9 @@ }, "/Items/{itemId}/RemoteSearch/Subtitles/{subtitleId}": { "post": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Downloads a remote subtitle.", "operationId": "DownloadRemoteSubtitles", "parameters": [ @@ -33957,7 +34798,9 @@ }, "/Providers/Subtitles/Subtitles/{subtitleId}": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Gets the remote subtitles.", "operationId": "GetRemoteSubtitles", "parameters": [ @@ -34002,7 +34845,9 @@ }, "/Videos/{itemId}/{mediaSourceId}/Subtitles/{index}/subtitles.m3u8": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Gets an HLS subtitle playlist.", "operationId": "GetSubtitlePlaylist", "parameters": [ @@ -34087,14 +34932,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/Subtitles": { "post": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Upload an external subtitle file.", "operationId": "UploadSubtitle", "parameters": [ @@ -34188,7 +35037,9 @@ }, "/Videos/{itemId}/Subtitles/{index}": { "delete": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Deletes an external subtitle file.", "operationId": "DeleteSubtitle", "parameters": [ @@ -34246,14 +35097,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Videos/{routeItemId}/{routeMediaSourceId}/Subtitles/{routeIndex}/{routeStartPositionTicks}/Stream.{routeFormat}": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Gets subtitles in a specified format.", "operationId": "GetSubtitleWithTicks", "parameters": [ @@ -34398,7 +35253,9 @@ }, "/Videos/{routeItemId}/{routeMediaSourceId}/Subtitles/{routeIndex}/Stream.{routeFormat}": { "get": { - "tags": ["Subtitle"], + "tags": [ + "Subtitle" + ], "summary": "Gets subtitles in a specified format.", "operationId": "GetSubtitle", "parameters": [ @@ -34533,7 +35390,9 @@ }, "/Items/Suggestions": { "get": { - "tags": ["Suggestions"], + "tags": [ + "Suggestions" + ], "summary": "Gets suggestions.", "operationId": "GetSuggestions", "parameters": [ @@ -34626,14 +35485,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/SyncPlay/Buffering": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Notify SyncPlay group that member is buffering.", "operationId": "SyncPlayBuffering", "requestBody": { @@ -34696,7 +35559,9 @@ }, "/SyncPlay/Join": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Join an existing SyncPlay group.", "operationId": "SyncPlayJoinGroup", "requestBody": { @@ -34759,7 +35624,9 @@ }, "/SyncPlay/Leave": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Leave the joined SyncPlay group.", "operationId": "SyncPlayLeaveGroup", "responses": { @@ -34786,7 +35653,9 @@ }, "/SyncPlay/List": { "get": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Gets all SyncPlay groups.", "operationId": "SyncPlayGetGroups", "responses": { @@ -34839,7 +35708,9 @@ }, "/SyncPlay/MovePlaylistItem": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to move an item in the playlist in SyncPlay group.", "operationId": "SyncPlayMovePlaylistItem", "requestBody": { @@ -34902,7 +35773,9 @@ }, "/SyncPlay/New": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Create a new SyncPlay group.", "operationId": "SyncPlayCreateGroup", "requestBody": { @@ -34965,7 +35838,9 @@ }, "/SyncPlay/NextItem": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request next item in SyncPlay group.", "operationId": "SyncPlayNextItem", "requestBody": { @@ -35028,7 +35903,9 @@ }, "/SyncPlay/Pause": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request pause in SyncPlay group.", "operationId": "SyncPlayPause", "responses": { @@ -35055,7 +35932,9 @@ }, "/SyncPlay/Ping": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Update session ping.", "operationId": "SyncPlayPing", "requestBody": { @@ -35117,7 +35996,9 @@ }, "/SyncPlay/PreviousItem": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request previous item in SyncPlay group.", "operationId": "SyncPlayPreviousItem", "requestBody": { @@ -35180,7 +36061,9 @@ }, "/SyncPlay/Queue": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to queue items to the playlist of a SyncPlay group.", "operationId": "SyncPlayQueue", "requestBody": { @@ -35243,7 +36126,9 @@ }, "/SyncPlay/Ready": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Notify SyncPlay group that member is ready for playback.", "operationId": "SyncPlayReady", "requestBody": { @@ -35306,7 +36191,9 @@ }, "/SyncPlay/RemoveFromPlaylist": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to remove items from the playlist in SyncPlay group.", "operationId": "SyncPlayRemoveFromPlaylist", "requestBody": { @@ -35369,7 +36256,9 @@ }, "/SyncPlay/Seek": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request seek in SyncPlay group.", "operationId": "SyncPlaySeek", "requestBody": { @@ -35432,7 +36321,9 @@ }, "/SyncPlay/SetIgnoreWait": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request SyncPlay group to ignore member during group-wait.", "operationId": "SyncPlaySetIgnoreWait", "requestBody": { @@ -35495,7 +36386,9 @@ }, "/SyncPlay/SetNewQueue": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to set new playlist in SyncPlay group.", "operationId": "SyncPlaySetNewQueue", "requestBody": { @@ -35558,7 +36451,9 @@ }, "/SyncPlay/SetPlaylistItem": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to change playlist item in SyncPlay group.", "operationId": "SyncPlaySetPlaylistItem", "requestBody": { @@ -35621,7 +36516,9 @@ }, "/SyncPlay/SetRepeatMode": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to set repeat mode in SyncPlay group.", "operationId": "SyncPlaySetRepeatMode", "requestBody": { @@ -35684,7 +36581,9 @@ }, "/SyncPlay/SetShuffleMode": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request to set shuffle mode in SyncPlay group.", "operationId": "SyncPlaySetShuffleMode", "requestBody": { @@ -35747,7 +36646,9 @@ }, "/SyncPlay/Stop": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request stop in SyncPlay group.", "operationId": "SyncPlayStop", "responses": { @@ -35774,7 +36675,9 @@ }, "/SyncPlay/Unpause": { "post": { - "tags": ["SyncPlay"], + "tags": [ + "SyncPlay" + ], "summary": "Request unpause in SyncPlay group.", "operationId": "SyncPlayUnpause", "responses": { @@ -35801,7 +36704,9 @@ }, "/System/Endpoint": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Gets information about the request endpoint.", "operationId": "GetEndpointInfo", "responses": { @@ -35851,14 +36756,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/System/Info": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Gets information about the server.", "operationId": "GetSystemInfo", "responses": { @@ -35918,7 +36827,9 @@ }, "/System/Info/Public": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Gets public information about the server.", "operationId": "GetPublicSystemInfo", "responses": { @@ -35947,7 +36858,9 @@ }, "/System/Logs": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Gets a list of available server log files.", "operationId": "GetServerLogs", "responses": { @@ -36006,14 +36919,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/System/Logs/Log": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Gets a log file.", "operationId": "GetLogFile", "parameters": [ @@ -36085,14 +37002,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/System/Ping": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Pings the system.", "operationId": "GetPingSystem", "responses": { @@ -36119,7 +37040,9 @@ } }, "post": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Pings the system.", "operationId": "PostPingSystem", "responses": { @@ -36148,7 +37071,9 @@ }, "/System/Restart": { "post": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Restarts the application.", "operationId": "RestartApplication", "responses": { @@ -36181,14 +37106,18 @@ }, "security": [ { - "CustomAuthentication": ["LocalAccessOrRequiresElevation"] + "CustomAuthentication": [ + "LocalAccessOrRequiresElevation" + ] } ] } }, "/System/Shutdown": { "post": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Shuts down the application.", "operationId": "ShutdownApplication", "responses": { @@ -36221,14 +37150,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/System/WakeOnLanInfo": { "get": { - "tags": ["System"], + "tags": [ + "System" + ], "summary": "Gets wake on lan information.", "operationId": "GetWakeOnLanInfo", "responses": { @@ -36271,14 +37204,18 @@ "deprecated": true, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/GetUtcTime": { "get": { - "tags": ["TimeSync"], + "tags": [ + "TimeSync" + ], "summary": "Gets the current UTC time.", "operationId": "GetUtcTime", "responses": { @@ -36307,7 +37244,9 @@ }, "/Tmdb/ClientConfiguration": { "get": { - "tags": ["Tmdb"], + "tags": [ + "Tmdb" + ], "summary": "Gets the TMDb image configuration options.", "operationId": "TmdbClientConfiguration", "responses": { @@ -36330,36 +37269,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/TMDbBoxSets/Refresh": { - "post": { - "tags": ["TMDbBoxSets"], - "operationId": "RefreshMetadataRequest", - "responses": { - "204": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Trailers": { "get": { - "tags": ["Trailers"], + "tags": [ + "Trailers" + ], "summary": "Finds movies and trailers similar to a given trailer.", "operationId": "GetTrailers", "parameters": [ @@ -37184,274 +38105,20 @@ "description": "Forbidden" } }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Trakt/Users/{userGuid}/Authorize": { - "post": { - "tags": ["Trakt"], - "operationId": "TraktDeviceAuthorization", - "parameters": [ - { - "name": "userGuid", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, "security": [ { "CustomAuthentication": [ - "RequiresElevation", "DefaultAuthorization" ] } ] } }, - "/Trakt/Users/{userGuid}/Deauthorize": { - "post": { - "tags": ["Trakt"], - "operationId": "TraktDeviceDeAuthorization", - "parameters": [ - { - "name": "userGuid", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": [ - "RequiresElevation", - "DefaultAuthorization" - ] - } - ] - } - }, - "/Trakt/Users/{userGuid}/Items/{itemId}/Rate": { - "post": { - "tags": ["Trakt"], - "operationId": "TraktRateItem", - "parameters": [ - { - "name": "userGuid", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "itemId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "name": "rating", - "in": "query", - "schema": { - "type": "integer", - "format": "int32" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TraktSyncResponse" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Trakt/Users/{userGuid}/PollAuthorizationStatus": { - "get": { - "tags": ["Trakt"], - "operationId": "TraktPollAuthorizationStatus", - "parameters": [ - { - "name": "userGuid", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": [ - "RequiresElevation", - "DefaultAuthorization" - ] - } - ] - } - }, - "/Trakt/Users/{userGuid}/RecommendedMovies": { - "post": { - "tags": ["Trakt"], - "operationId": "RecommendedTraktMovies", - "parameters": [ - { - "name": "userGuid", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktMovie" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/Trakt/Users/{userGuid}/RecommendedShows": { - "post": { - "tags": ["Trakt"], - "operationId": "RecommendedTraktShows", - "parameters": [ - { - "name": "userGuid", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktShow" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, "/Videos/{itemId}/Trickplay/{width}/{index}.jpg": { "get": { - "tags": ["Trickplay"], + "tags": [ + "Trickplay" + ], "summary": "Gets a trickplay tile image.", "operationId": "GetTrickplayTileImage", "parameters": [ @@ -37536,14 +38203,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/Trickplay/{width}/tiles.m3u8": { "get": { - "tags": ["Trickplay"], + "tags": [ + "Trickplay" + ], "summary": "Gets an image tiles playlist for trickplay.", "operationId": "GetTrickplayHlsPlaylist", "parameters": [ @@ -37618,48 +38289,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] - } - ] - } - }, - "/IntroSkipper/SupportBundle": { - "get": { - "tags": ["Troubleshooting"], - "operationId": "GetSupportBundle", - "responses": { - "200": { - "description": "Success", - "content": { - "text/plain": { - "schema": { - "type": "string" - } - }, - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Shows/{seriesId}/Episodes": { "get": { - "tags": ["TvShows"], + "tags": [ + "TvShows" + ], "summary": "Gets episodes for a tv season.", "operationId": "GetEpisodes", "parameters": [ @@ -37888,14 +38529,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Shows/{seriesId}/Seasons": { "get": { - "tags": ["TvShows"], + "tags": [ + "TvShows" + ], "summary": "Gets seasons for a tv series.", "operationId": "GetSeasons", "parameters": [ @@ -38041,14 +38686,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Shows/NextUp": { "get": { - "tags": ["TvShows"], + "tags": [ + "TvShows" + ], "summary": "Gets a list of next up episodes.", "operationId": "GetNextUp", "parameters": [ @@ -38220,14 +38869,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Shows/Upcoming": { "get": { - "tags": ["TvShows"], + "tags": [ + "TvShows" + ], "summary": "Gets a list of upcoming episodes.", "operationId": "GetUpcomingEpisodes", "parameters": [ @@ -38345,14 +38998,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Audio/{itemId}/universal": { "get": { - "tags": ["UniversalAudio"], + "tags": [ + "UniversalAudio" + ], "summary": "Gets an audio stream.", "operationId": "GetUniversalAudioStream", "parameters": [ @@ -38470,7 +39127,10 @@ "in": "query", "description": "Optional. The transcoding protocol.", "schema": { - "enum": ["http", "hls"], + "enum": [ + "http", + "hls" + ], "allOf": [ { "$ref": "#/components/schemas/MediaStreamProtocol" @@ -38504,6 +39164,15 @@ "type": "boolean" } }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, { "name": "breakOnNonKeyFrames", "in": "query", @@ -38567,12 +39236,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "head": { - "tags": ["UniversalAudio"], + "tags": [ + "UniversalAudio" + ], "summary": "Gets an audio stream.", "operationId": "HeadUniversalAudioStream", "parameters": [ @@ -38690,7 +39363,10 @@ "in": "query", "description": "Optional. The transcoding protocol.", "schema": { - "enum": ["http", "hls"], + "enum": [ + "http", + "hls" + ], "allOf": [ { "$ref": "#/components/schemas/MediaStreamProtocol" @@ -38724,6 +39400,15 @@ "type": "boolean" } }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } + }, { "name": "breakOnNonKeyFrames", "in": "query", @@ -38787,14 +39472,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Users": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Gets a list of users.", "operationId": "GetUsers", "parameters": [ @@ -38854,12 +39543,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Updates a user.", "operationId": "UpdateUser", "parameters": [ @@ -38959,14 +39652,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Users/{userId}": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Gets a user by Id.", "operationId": "GetUserById", "parameters": [ @@ -39039,7 +39736,9 @@ ] }, "delete": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Deletes a user.", "operationId": "DeleteUser", "parameters": [ @@ -39087,14 +39786,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Users/{userId}/Policy": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Updates a user policy.", "operationId": "UpdateUserPolicy", "parameters": [ @@ -39192,14 +39895,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Users/AuthenticateByName": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Authenticates a user by name.", "operationId": "AuthenticateUserByName", "requestBody": { @@ -39264,7 +39971,9 @@ }, "/Users/AuthenticateWithQuickConnect": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Authenticates a user with quick connect.", "operationId": "AuthenticateWithQuickConnect", "requestBody": { @@ -39332,7 +40041,9 @@ }, "/Users/Configuration": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Updates a user configuration.", "operationId": "UpdateUserConfiguration", "parameters": [ @@ -39412,14 +40123,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Users/ForgotPassword": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Initiates the forgot password process for a local user.", "operationId": "ForgotPassword", "requestBody": { @@ -39484,7 +40199,9 @@ }, "/Users/ForgotPassword/Pin": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Redeems a forgot password pin.", "operationId": "ForgotPasswordPin", "requestBody": { @@ -39549,7 +40266,9 @@ }, "/Users/Me": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Gets the user based on auth token.", "operationId": "GetCurrentUser", "responses": { @@ -39602,14 +40321,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Users/New": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Creates a user.", "operationId": "CreateUserByName", "requestBody": { @@ -39678,14 +40401,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Users/Password": { "post": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Updates a user's password.", "operationId": "UpdateUserPassword", "parameters": [ @@ -39785,14 +40512,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Users/Public": { "get": { - "tags": ["User"], + "tags": [ + "User" + ], "summary": "Gets a list of publicly visible users for display on a login screen.", "operationId": "GetPublicUsers", "responses": { @@ -39830,7 +40561,9 @@ }, "/Items/{itemId}/Intros": { "get": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Gets intros to play before the main media item plays.", "operationId": "GetIntros", "parameters": [ @@ -39884,14 +40617,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/LocalTrailers": { "get": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Gets local trailers for an item.", "operationId": "GetLocalTrailers", "parameters": [ @@ -39954,14 +40691,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/{itemId}/SpecialFeatures": { "get": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Gets special features for an item.", "operationId": "GetSpecialFeatures", "parameters": [ @@ -40024,14 +40765,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/Latest": { "get": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Gets latest media.", "operationId": "GetLatestMedia", "parameters": [ @@ -40178,14 +40923,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Items/Root": { "get": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Gets the root folder from a user's library.", "operationId": "GetRootFolder", "parameters": [ @@ -40229,14 +40978,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserFavoriteItems/{itemId}": { "post": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Marks an item as a favorite.", "operationId": "MarkFavoriteItem", "parameters": [ @@ -40290,12 +41043,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "delete": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Unmarks item as a favorite.", "operationId": "UnmarkFavoriteItem", "parameters": [ @@ -40349,14 +41106,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserItems/{itemId}/Rating": { "delete": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Deletes a user's saved personal rating for an item.", "operationId": "DeleteUserItemRating", "parameters": [ @@ -40410,12 +41171,16 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] }, "post": { - "tags": ["UserLibrary"], + "tags": [ + "UserLibrary" + ], "summary": "Updates a user's rating for an item.", "operationId": "UpdateUserItemRating", "parameters": [ @@ -40477,14 +41242,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserViews": { "get": { - "tags": ["UserViews"], + "tags": [ + "UserViews" + ], "summary": "Get user views.", "operationId": "GetUserViews", "parameters": [ @@ -40556,14 +41325,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/UserViews/GroupingOptions": { "get": { - "tags": ["UserViews"], + "tags": [ + "UserViews" + ], "summary": "Get user view grouping options.", "operationId": "GetGroupingOptions", "parameters": [ @@ -40636,14 +41409,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{videoId}/{mediaSourceId}/Attachments/{index}": { "get": { - "tags": ["VideoAttachments"], + "tags": [ + "VideoAttachments" + ], "summary": "Get video attachment.", "operationId": "GetAttachment", "parameters": [ @@ -40714,7 +41491,9 @@ }, "/Videos/{itemId}/AdditionalParts": { "get": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Gets additional parts for a video.", "operationId": "GetAdditionalPart", "parameters": [ @@ -40768,14 +41547,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Videos/{itemId}/AlternateSources": { "delete": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Removes alternate video sources.", "operationId": "DeleteAlternateSources", "parameters": [ @@ -40823,14 +41606,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Videos/{itemId}/stream": { "get": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Gets a video stream.", "operationId": "GetVideoStream", "parameters": [ @@ -40940,7 +41727,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -41133,7 +41920,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -41220,7 +42013,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -41266,7 +42059,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -41285,6 +42081,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -41302,7 +42107,9 @@ } }, "head": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Gets a video stream.", "operationId": "HeadVideoStream", "parameters": [ @@ -41412,7 +42219,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -41605,7 +42412,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -41692,7 +42505,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -41738,7 +42551,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -41757,6 +42573,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -41776,7 +42601,9 @@ }, "/Videos/{itemId}/stream.{container}": { "get": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Gets a video stream.", "operationId": "GetVideoStreamByContainer", "parameters": [ @@ -41885,7 +42712,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -42078,7 +42905,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -42165,7 +42998,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -42211,7 +43044,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -42230,6 +43066,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -42247,7 +43092,9 @@ } }, "head": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Gets a video stream.", "operationId": "HeadVideoStreamByContainer", "parameters": [ @@ -42356,7 +43203,7 @@ { "name": "audioCodec", "in": "query", - "description": "Optional. Specify a audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension. Options: aac, mp3, vorbis, wma.", + "description": "Optional. Specify an audio codec to encode to, e.g. mp3. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -42549,7 +43396,13 @@ "in": "query", "description": "Optional. Specify the subtitle delivery method.", "schema": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -42636,7 +43489,7 @@ { "name": "videoCodec", "in": "query", - "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension. Options: h265, h264, mpeg4, theora, vp8, vp9, vpx (deprecated), wmv.", + "description": "Optional. Specify a video codec to encode to, e.g. h264. If omitted the server will auto-select using the url's extension.", "schema": { "pattern": "^[a-zA-Z0-9\\-\\._,|]{0,40}$", "type": "string" @@ -42682,7 +43535,10 @@ "in": "query", "description": "Optional. The MediaBrowser.Model.Dlna.EncodingContext.", "schema": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" @@ -42701,6 +43557,15 @@ "nullable": true } } + }, + { + "name": "enableAudioVbrEncoding", + "in": "query", + "description": "Optional. Whether to enable Audio Encoding.", + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { @@ -42720,7 +43585,9 @@ }, "/Videos/MergeVersions": { "post": { - "tags": ["Videos"], + "tags": [ + "Videos" + ], "summary": "Merges videos into a single record.", "operationId": "MergeVersions", "parameters": [ @@ -42771,254 +43638,18 @@ }, "security": [ { - "CustomAuthentication": ["RequiresElevation"] - } - ] - } - }, - "/Intros/Episode/{Id}/Chromaprint": { - "get": { - "tags": ["Visualization"], - "operationId": "GetEpisodeFingerprint", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["RequiresElevation"] - } - ] - } - }, - "/Intros/Episode/{Id}/UpdateIntroTimestamps": { - "post": { - "tags": ["Visualization"], - "operationId": "UpdateTimestamps", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Intro" - } - ] - } - }, - "text/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Intro" - } - ] - } - }, - "application/*+json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Intro" - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["RequiresElevation"] - } - ] - } - }, - "/Intros/Show/{Series}/{Season}": { - "get": { - "tags": ["Visualization"], - "operationId": "GetSeasonEpisodes", - "parameters": [ - { - "name": "series", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "season", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EpisodeVisualization" - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["RequiresElevation"] - } - ] - }, - "delete": { - "tags": ["Visualization"], - "operationId": "EraseSeason", - "parameters": [ - { - "name": "series", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "season", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "eraseCache", - "in": "query", - "schema": { - "type": "boolean", - "default": false - } - } - ], - "responses": { - "200": { - "description": "Success" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["RequiresElevation"] - } - ] - } - }, - "/Intros/Shows": { - "get": { - "tags": ["Visualization"], - "operationId": "GetShowSeasons", - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "uniqueItems": true, - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "security": [ - { - "CustomAuthentication": ["RequiresElevation"] + "CustomAuthentication": [ + "RequiresElevation" + ] } ] } }, "/Years": { "get": { - "tags": ["Years"], + "tags": [ + "Years" + ], "summary": "Get years.", "operationId": "GetYears", "parameters": [ @@ -43201,14 +43832,18 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } }, "/Years/{year}": { "get": { - "tags": ["Years"], + "tags": [ + "Years" + ], "summary": "Gets a year.", "operationId": "GetYear", "parameters": [ @@ -43282,7 +43917,9 @@ }, "security": [ { - "CustomAuthentication": ["DefaultAuthorization"] + "CustomAuthentication": [ + "DefaultAuthorization" + ] } ] } @@ -43480,8 +44117,7 @@ "items": { "$ref": "#/components/schemas/ActivityLogEntry" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -43494,7 +44130,8 @@ "format": "int32" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Query result container." }, "ActivityLogEntryStartMessage": { "type": "object", @@ -43768,10 +44405,6 @@ }, "additionalProperties": false }, - "AnalysisMode": { - "enum": ["Introduction", "Credits"], - "type": "string" - }, "ArtistInfo": { "type": "object", "properties": { @@ -43870,7 +44503,11 @@ "additionalProperties": false }, "AudioSpatialFormat": { - "enum": ["None", "DolbyAtmos", "DTSX"], + "enum": [ + "None", + "DolbyAtmos", + "DTSX" + ], "type": "string", "description": "An enum representing formats of spatial audio." }, @@ -43963,8 +44600,7 @@ "items": { "$ref": "#/components/schemas/AuthenticationInfo" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -43977,7 +44613,8 @@ "format": "int32" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Query result container." }, "AuthenticationResult": { "type": "object", @@ -43994,22 +44631,25 @@ "SessionInfo": { "allOf": [ { - "$ref": "#/components/schemas/SessionInfo" + "$ref": "#/components/schemas/SessionInfoDto" } ], - "description": "Class SessionInfo.", + "description": "Session info DTO.", "nullable": true }, "AccessToken": { "type": "string", + "description": "Gets or sets the access token.", "nullable": true }, "ServerId": { "type": "string", + "description": "Gets or sets the server id.", "nullable": true } }, - "additionalProperties": false + "additionalProperties": false, + "description": "A class representing an authentication result." }, "BaseItemDto": { "type": "object", @@ -44253,7 +44893,10 @@ "nullable": true }, "PlayAccess": { - "enum": ["Full", "None"], + "enum": [ + "Full", + "None" + ], "allOf": [ { "$ref": "#/components/schemas/PlayAccess" @@ -44383,7 +45026,7 @@ "$ref": "#/components/schemas/BaseItemKind" } ], - "description": "The base item kind." + "description": "Gets or sets the type." }, "People": { "type": "array", @@ -44608,7 +45251,12 @@ "nullable": true }, "VideoType": { - "enum": ["VideoFile", "Iso", "Dvd", "BluRay"], + "enum": [ + "VideoFile", + "Iso", + "Dvd", + "BluRay" + ], "allOf": [ { "$ref": "#/components/schemas/VideoType" @@ -44804,7 +45452,12 @@ "nullable": true }, "LocationType": { - "enum": ["FileSystem", "Remote", "Virtual", "Offline"], + "enum": [ + "FileSystem", + "Remote", + "Virtual", + "Offline" + ], "allOf": [ { "$ref": "#/components/schemas/LocationType" @@ -44814,7 +45467,10 @@ "nullable": true }, "IsoType": { - "enum": ["Dvd", "BluRay"], + "enum": [ + "Dvd", + "BluRay" + ], "allOf": [ { "$ref": "#/components/schemas/IsoType" @@ -44824,13 +45480,19 @@ "nullable": true }, "MediaType": { - "enum": ["Unknown", "Video", "Audio", "Photo", "Book"], + "enum": [ + "Unknown", + "Video", + "Audio", + "Photo", + "Book" + ], "allOf": [ { "$ref": "#/components/schemas/MediaType" } ], - "description": "Media types." + "description": "Gets or sets the type of the media." }, "EndDate": { "type": "string", @@ -45021,7 +45683,10 @@ "nullable": true }, "ChannelType": { - "enum": ["TV", "Radio"], + "enum": [ + "TV", + "Radio" + ], "allOf": [ { "$ref": "#/components/schemas/ChannelType" @@ -45031,7 +45696,14 @@ "nullable": true }, "Audio": { - "enum": ["Mono", "Stereo", "Dolby", "DolbyDigital", "Thx", "Atmos"], + "enum": [ + "Mono", + "Stereo", + "Dolby", + "DolbyDigital", + "Thx", + "Atmos" + ], "allOf": [ { "$ref": "#/components/schemas/ProgramAudio" @@ -45107,8 +45779,7 @@ "items": { "$ref": "#/components/schemas/BaseItemDto" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -45121,7 +45792,8 @@ "format": "int32" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Query result container." }, "BaseItemKind": { "enum": [ @@ -45217,7 +45889,7 @@ "$ref": "#/components/schemas/PersonKind" } ], - "description": "The person kind." + "description": "Gets or sets the type." }, "PrimaryImageTag": { "type": "string", @@ -45693,11 +46365,18 @@ "type": "string" }, "ChannelMediaType": { - "enum": ["Audio", "Video", "Photo"], + "enum": [ + "Audio", + "Video", + "Photo" + ], "type": "string" }, "ChannelType": { - "enum": ["TV", "Radio"], + "enum": [ + "TV", + "Radio" + ], "type": "string", "description": "Enum ChannelType." }, @@ -45731,61 +46410,6 @@ "additionalProperties": false, "description": "Class ChapterInfo." }, - "ClientCapabilities": { - "type": "object", - "properties": { - "PlayableMediaTypes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MediaType" - }, - "nullable": true - }, - "SupportedCommands": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GeneralCommandType" - }, - "nullable": true - }, - "SupportsMediaControl": { - "type": "boolean" - }, - "SupportsPersistentIdentifier": { - "type": "boolean" - }, - "DeviceProfile": { - "allOf": [ - { - "$ref": "#/components/schemas/DeviceProfile" - } - ], - "description": "A MediaBrowser.Model.Dlna.DeviceProfile represents a set of metadata which determines which content a certain device is able to play.\r\n
\r\nSpecifically, it defines the supported containers and\r\ncodecs (video and/or audio, including codec profiles and levels)\r\nthe device is able to direct play (without transcoding or remuxing),\r\nas well as which containers/codecs to transcode to in case it isn't.", - "nullable": true - }, - "AppStoreUrl": { - "type": "string", - "nullable": true - }, - "IconUrl": { - "type": "string", - "nullable": true - }, - "SupportsContentUploading": { - "type": "boolean", - "default": false, - "nullable": true, - "deprecated": true - }, - "SupportsSync": { - "type": "boolean", - "default": false, - "nullable": true, - "deprecated": true - } - }, - "additionalProperties": false - }, "ClientCapabilitiesDto": { "type": "object", "properties": { @@ -45829,18 +46453,6 @@ "type": "string", "description": "Gets or sets the icon url.", "nullable": true - }, - "SupportsContentUploading": { - "type": "boolean", - "default": false, - "nullable": true, - "deprecated": true - }, - "SupportsSync": { - "type": "boolean", - "default": false, - "nullable": true, - "deprecated": true } }, "additionalProperties": false, @@ -45861,40 +46473,57 @@ "type": "object", "properties": { "Type": { - "enum": ["Video", "VideoAudio", "Audio"], + "enum": [ + "Video", + "VideoAudio", + "Audio" + ], "allOf": [ { "$ref": "#/components/schemas/CodecType" } - ] + ], + "description": "Gets or sets the MediaBrowser.Model.Dlna.CodecType which this container must meet." }, "Conditions": { "type": "array", "items": { "$ref": "#/components/schemas/ProfileCondition" }, - "nullable": true + "description": "Gets or sets the list of MediaBrowser.Model.Dlna.ProfileCondition which this profile must meet." }, "ApplyConditions": { "type": "array", "items": { "$ref": "#/components/schemas/ProfileCondition" }, - "nullable": true + "description": "Gets or sets the list of MediaBrowser.Model.Dlna.ProfileCondition to apply if this profile is met." }, "Codec": { "type": "string", + "description": "Gets or sets the codec(s) that this profile applies to.", "nullable": true }, "Container": { "type": "string", + "description": "Gets or sets the container(s) which this profile will be applied to.", + "nullable": true + }, + "SubContainer": { + "type": "string", + "description": "Gets or sets the sub-container(s) which this profile will be applied to.", "nullable": true } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Defines the MediaBrowser.Model.Dlna.CodecProfile." }, "CodecType": { - "enum": ["Video", "VideoAudio", "Audio"], + "enum": [ + "Video", + "VideoAudio", + "Audio" + ], "type": "string" }, "CollectionCreationResult": { @@ -46029,24 +46658,40 @@ "type": "object", "properties": { "Type": { - "enum": ["Audio", "Video", "Photo", "Subtitle", "Lyric"], + "enum": [ + "Audio", + "Video", + "Photo", + "Subtitle", + "Lyric" + ], "allOf": [ { "$ref": "#/components/schemas/DlnaProfileType" } - ] + ], + "description": "Gets or sets the MediaBrowser.Model.Dlna.DlnaProfileType which this container must meet." }, "Conditions": { "type": "array", "items": { "$ref": "#/components/schemas/ProfileCondition" - } + }, + "description": "Gets or sets the list of MediaBrowser.Model.Dlna.ProfileCondition which this container will be applied to." }, "Container": { - "type": "string" + "type": "string", + "description": "Gets or sets the container(s) which this container must meet.", + "nullable": true + }, + "SubContainer": { + "type": "string", + "description": "Gets or sets the sub container(s) which this container must meet.", + "nullable": true } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Defines the MediaBrowser.Model.Dlna.ContainerProfile." }, "CountryInfo": { "type": "object", @@ -46097,7 +46742,13 @@ "nullable": true }, "MediaType": { - "enum": ["Unknown", "Video", "Audio", "Photo", "Book"], + "enum": [ + "Unknown", + "Video", + "Audio", + "Photo", + "Book" + ], "allOf": [ { "$ref": "#/components/schemas/MediaType" @@ -46122,7 +46773,9 @@ "description": "Create new playlist dto." }, "CreateUserByName": { - "required": ["Name"], + "required": [ + "Name" + ], "type": "object", "properties": { "Name": { @@ -46169,18 +46822,6 @@ "additionalProperties": false, "description": "Class CultureDto." }, - "CustomQueryData": { - "type": "object", - "properties": { - "CustomQueryString": { - "type": "string" - }, - "ReplaceUserId": { - "type": "boolean" - } - }, - "additionalProperties": false - }, "DayOfWeek": { "enum": [ "Sunday", @@ -46194,7 +46835,11 @@ "type": "string" }, "DayPattern": { - "enum": ["Daily", "Weekdays", "Weekends"], + "enum": [ + "Daily", + "Weekdays", + "Weekends" + ], "type": "string" }, "DefaultDirectoryBrowserInfoDto": { @@ -46209,15 +46854,25 @@ "additionalProperties": false, "description": "Default directory browser info." }, - "DeviceInfo": { + "DeinterlaceMethod": { + "enum": [ + "yadif", + "bwdif" + ], + "type": "string", + "description": "Enum containing deinterlace methods." + }, + "DeviceInfoDto": { "type": "object", "properties": { "Name": { "type": "string", + "description": "Gets or sets the name.", "nullable": true }, "CustomName": { "type": "string", + "description": "Gets or sets the custom name.", "nullable": true }, "AccessToken": { @@ -46248,39 +46903,41 @@ "LastUserId": { "type": "string", "description": "Gets or sets the last user identifier.", - "format": "uuid" + "format": "uuid", + "nullable": true }, "DateLastActivity": { "type": "string", "description": "Gets or sets the date last modified.", - "format": "date-time" + "format": "date-time", + "nullable": true }, "Capabilities": { "allOf": [ { - "$ref": "#/components/schemas/ClientCapabilities" + "$ref": "#/components/schemas/ClientCapabilitiesDto" } ], - "description": "Gets or sets the capabilities.", - "nullable": true + "description": "Gets or sets the capabilities." }, "IconUrl": { "type": "string", + "description": "Gets or sets the icon URL.", "nullable": true } }, - "additionalProperties": false + "additionalProperties": false, + "description": "A DTO representing device information." }, - "DeviceInfoQueryResult": { + "DeviceInfoDtoQueryResult": { "type": "object", "properties": { "Items": { "type": "array", "items": { - "$ref": "#/components/schemas/DeviceInfo" + "$ref": "#/components/schemas/DeviceInfoDto" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -46293,29 +46950,8 @@ "format": "int32" } }, - "additionalProperties": false - }, - "DeviceOptions": { - "type": "object", - "properties": { - "Id": { - "type": "integer", - "description": "Gets the id.", - "format": "int32", - "readOnly": true - }, - "DeviceId": { - "type": "string", - "description": "Gets the device id." - }, - "CustomName": { - "type": "string", - "description": "Gets or sets the custom name.", - "nullable": true - } - }, "additionalProperties": false, - "description": "An entity representing custom options for a device." + "description": "Query result container." }, "DeviceOptionsDto": { "type": "object", @@ -46344,12 +46980,13 @@ "properties": { "Name": { "type": "string", - "description": "Gets or sets the name of this device profile.", + "description": "Gets or sets the name of this device profile. User profiles must have a unique name.", "nullable": true }, "Id": { "type": "string", - "description": "Gets or sets the Id.", + "description": "Gets or sets the unique internal identifier.", + "format": "uuid", "nullable": true }, "MaxStreamingBitrate": { @@ -46395,7 +47032,7 @@ "items": { "$ref": "#/components/schemas/ContainerProfile" }, - "description": "Gets or sets the container profiles." + "description": "Gets or sets the container profiles. Failing to meet these optional conditions causes transcoding to occur." }, "CodecProfiles": { "type": "array", @@ -46420,26 +47057,36 @@ "properties": { "Container": { "type": "string", - "nullable": true + "description": "Gets or sets the container." }, "AudioCodec": { "type": "string", + "description": "Gets or sets the audio codec.", "nullable": true }, "VideoCodec": { "type": "string", + "description": "Gets or sets the video codec.", "nullable": true }, "Type": { - "enum": ["Audio", "Video", "Photo", "Subtitle", "Lyric"], + "enum": [ + "Audio", + "Video", + "Photo", + "Subtitle", + "Lyric" + ], "allOf": [ { "$ref": "#/components/schemas/DlnaProfileType" } - ] + ], + "description": "Gets or sets the Dlna profile type." } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Defines the MediaBrowser.Model.Dlna.DirectPlayProfile." }, "DisplayPreferencesDto": { "type": "object", @@ -46487,13 +47134,16 @@ "description": "Gets or sets the custom prefs." }, "ScrollDirection": { - "enum": ["Horizontal", "Vertical"], + "enum": [ + "Horizontal", + "Vertical" + ], "allOf": [ { "$ref": "#/components/schemas/ScrollDirection" } ], - "description": "An enum representing the axis that should be scrolled." + "description": "Gets or sets the scroll direction." }, "ShowBackdrop": { "type": "boolean", @@ -46504,13 +47154,16 @@ "description": "Gets or sets a value indicating whether [remember sorting]." }, "SortOrder": { - "enum": ["Ascending", "Descending"], + "enum": [ + "Ascending", + "Descending" + ], "allOf": [ { "$ref": "#/components/schemas/SortOrder" } ], - "description": "An enum representing the sorting order." + "description": "Gets or sets the sort order." }, "ShowSidebar": { "type": "boolean", @@ -46526,13 +47179,25 @@ "description": "Defines the display preferences for any item that supports them (usually Folders)." }, "DlnaProfileType": { - "enum": ["Audio", "Video", "Photo", "Subtitle", "Lyric"], + "enum": [ + "Audio", + "Video", + "Photo", + "Subtitle", + "Lyric" + ], "type": "string" }, "DownMixStereoAlgorithms": { - "enum": ["None", "Dave750", "NightmodeDialogue"], + "enum": [ + "None", + "Dave750", + "NightmodeDialogue", + "Rfc7845", + "Ac4" + ], "type": "string", - "description": "An enum representing an algorithm to downmix 6ch+ to stereo.\r\nAlgorithms sourced from https://superuser.com/questions/852400/properly-downmix-5-1-to-stereo-using-ffmpeg/1410620#1410620." + "description": "An enum representing an algorithm to downmix surround sound to stereo." }, "DynamicDayOfWeek": { "enum": [ @@ -46551,12 +47216,37 @@ "description": "An enum that represents a day of the week, weekdays, weekends, or all days." }, "EmbeddedSubtitleOptions": { - "enum": ["AllowAll", "AllowText", "AllowImage", "AllowNone"], + "enum": [ + "AllowAll", + "AllowText", + "AllowImage", + "AllowNone" + ], "type": "string", "description": "An enum representing the options to disable embedded subs." }, + "EncoderPreset": { + "enum": [ + "auto", + "placebo", + "veryslow", + "slower", + "slow", + "medium", + "fast", + "faster", + "veryfast", + "superfast", + "ultrafast" + ], + "type": "string", + "description": "Enum containing encoder presets." + }, "EncodingContext": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "type": "string" }, "EncodingOptions": { @@ -46591,7 +47281,13 @@ "format": "double" }, "DownMixStereoAlgorithm": { - "enum": ["None", "Dave750", "NightmodeDialogue"], + "enum": [ + "None", + "Dave750", + "NightmodeDialogue", + "Rfc7845", + "Ac4" + ], "allOf": [ { "$ref": "#/components/schemas/DownMixStereoAlgorithms" @@ -46623,9 +47319,22 @@ "format": "int32" }, "HardwareAccelerationType": { - "type": "string", - "description": "Gets or sets the hardware acceleration type.", - "nullable": true + "enum": [ + "none", + "amf", + "qsv", + "nvenc", + "v4l2m2m", + "vaapi", + "videotoolbox", + "rkmpp" + ], + "allOf": [ + { + "$ref": "#/components/schemas/HardwareAccelerationType" + } + ], + "description": "Gets or sets the hardware acceleration type." }, "EncoderAppPath": { "type": "string", @@ -46642,6 +47351,11 @@ "description": "Gets or sets the VA-API device.", "nullable": true }, + "QsvDevice": { + "type": "string", + "description": "Gets or sets the QSV device.", + "nullable": true + }, "EnableTonemapping": { "type": "boolean", "description": "Gets or sets a value indicating whether tonemapping is enabled." @@ -46655,19 +47369,50 @@ "description": "Gets or sets a value indicating whether videotoolbox tonemapping is enabled." }, "TonemappingAlgorithm": { - "type": "string", - "description": "Gets or sets the tone-mapping algorithm.", - "nullable": true + "enum": [ + "none", + "clip", + "linear", + "gamma", + "reinhard", + "hable", + "mobius", + "bt2390" + ], + "allOf": [ + { + "$ref": "#/components/schemas/TonemappingAlgorithm" + } + ], + "description": "Gets or sets the tone-mapping algorithm." }, "TonemappingMode": { - "type": "string", - "description": "Gets or sets the tone-mapping mode.", - "nullable": true + "enum": [ + "auto", + "max", + "rgb", + "lum", + "itp" + ], + "allOf": [ + { + "$ref": "#/components/schemas/TonemappingMode" + } + ], + "description": "Gets or sets the tone-mapping mode." }, "TonemappingRange": { - "type": "string", - "description": "Gets or sets the tone-mapping range.", - "nullable": true + "enum": [ + "auto", + "tv", + "pc" + ], + "allOf": [ + { + "$ref": "#/components/schemas/TonemappingRange" + } + ], + "description": "Gets or sets the tone-mapping range." }, "TonemappingDesat": { "type": "number", @@ -46705,7 +47450,24 @@ "format": "int32" }, "EncoderPreset": { - "type": "string", + "enum": [ + "auto", + "placebo", + "veryslow", + "slower", + "slow", + "medium", + "fast", + "faster", + "veryfast", + "superfast", + "ultrafast" + ], + "allOf": [ + { + "$ref": "#/components/schemas/EncoderPreset" + } + ], "description": "Gets or sets the encoder preset.", "nullable": true }, @@ -46714,9 +47476,16 @@ "description": "Gets or sets a value indicating whether the framerate is doubled when deinterlacing." }, "DeinterlaceMethod": { - "type": "string", - "description": "Gets or sets the deinterlace method.", - "nullable": true + "enum": [ + "yadif", + "bwdif" + ], + "allOf": [ + { + "$ref": "#/components/schemas/DeinterlaceMethod" + } + ], + "description": "Gets or sets the deinterlace method." }, "EnableDecodingColorDepth10Hevc": { "type": "boolean", @@ -46726,6 +47495,14 @@ "type": "boolean", "description": "Gets or sets a value indicating whether 10bit VP9 decoding is enabled." }, + "EnableDecodingColorDepth10HevcRext": { + "type": "boolean", + "description": "Gets or sets a value indicating whether 8/10bit HEVC RExt decoding is enabled." + }, + "EnableDecodingColorDepth12HevcRext": { + "type": "boolean", + "description": "Gets or sets a value indicating whether 12bit HEVC RExt decoding is enabled." + }, "EnableEnhancedNvdecDecoder": { "type": "boolean", "description": "Gets or sets a value indicating whether the enhanced NVDEC is enabled." @@ -46790,19 +47567,6 @@ }, "additionalProperties": false }, - "EpisodeVisualization": { - "type": "object", - "properties": { - "Id": { - "type": "string", - "format": "uuid" - }, - "Name": { - "type": "string" - } - }, - "additionalProperties": false - }, "ExternalIdInfo": { "type": "object", "properties": { @@ -46841,7 +47605,8 @@ "UrlFormatString": { "type": "string", "description": "Gets or sets the URL format string.", - "nullable": true + "nullable": true, + "deprecated": true } }, "additionalProperties": false, @@ -46911,7 +47676,12 @@ "description": "Gets the path." }, "Type": { - "enum": ["File", "Directory", "NetworkComputer", "NetworkShare"], + "enum": [ + "File", + "Directory", + "NetworkComputer", + "NetworkShare" + ], "allOf": [ { "$ref": "#/components/schemas/FileSystemEntryType" @@ -46924,7 +47694,12 @@ "description": "Class FileSystemEntryInfo." }, "FileSystemEntryType": { - "enum": ["File", "Directory", "NetworkComputer", "NetworkShare"], + "enum": [ + "File", + "Directory", + "NetworkComputer", + "NetworkShare" + ], "type": "string", "description": "Enum FileSystemEntryType." }, @@ -47019,11 +47794,17 @@ "description": "Force keep alive websocket messages." }, "ForgotPasswordAction": { - "enum": ["ContactAdmin", "PinCode", "InNetworkRequired"], + "enum": [ + "ContactAdmin", + "PinCode", + "InNetworkRequired" + ], "type": "string" }, "ForgotPasswordDto": { - "required": ["EnteredUsername"], + "required": [ + "EnteredUsername" + ], "type": "object", "properties": { "EnteredUsername": { @@ -47035,7 +47816,9 @@ "description": "Forgot Password request body DTO." }, "ForgotPasswordPinDto": { - "required": ["Pin"], + "required": [ + "Pin" + ], "type": "object", "properties": { "Pin": { @@ -47050,7 +47833,11 @@ "type": "object", "properties": { "Action": { - "enum": ["ContactAdmin", "PinCode", "InNetworkRequired"], + "enum": [ + "ContactAdmin", + "PinCode", + "InNetworkRequired" + ], "allOf": [ { "$ref": "#/components/schemas/ForgotPasswordAction" @@ -47267,7 +48054,8 @@ "type": "string", "format": "uuid" }, - "description": "Gets or sets the channels to return guide information for." + "description": "Gets or sets the channels to return guide information for.", + "nullable": true }, "UserId": { "type": "string", @@ -47277,72 +48065,72 @@ }, "MinStartDate": { "type": "string", - "description": "Gets or sets the minimum premiere start date.\r\nOptional.", + "description": "Gets or sets the minimum premiere start date.", "format": "date-time", "nullable": true }, "HasAired": { "type": "boolean", - "description": "Gets or sets filter by programs that have completed airing, or not.\r\nOptional.", + "description": "Gets or sets filter by programs that have completed airing, or not.", "nullable": true }, "IsAiring": { "type": "boolean", - "description": "Gets or sets filter by programs that are currently airing, or not.\r\nOptional.", + "description": "Gets or sets filter by programs that are currently airing, or not.", "nullable": true }, "MaxStartDate": { "type": "string", - "description": "Gets or sets the maximum premiere start date.\r\nOptional.", + "description": "Gets or sets the maximum premiere start date.", "format": "date-time", "nullable": true }, "MinEndDate": { "type": "string", - "description": "Gets or sets the minimum premiere end date.\r\nOptional.", + "description": "Gets or sets the minimum premiere end date.", "format": "date-time", "nullable": true }, "MaxEndDate": { "type": "string", - "description": "Gets or sets the maximum premiere end date.\r\nOptional.", + "description": "Gets or sets the maximum premiere end date.", "format": "date-time", "nullable": true }, "IsMovie": { "type": "boolean", - "description": "Gets or sets filter for movies.\r\nOptional.", + "description": "Gets or sets filter for movies.", "nullable": true }, "IsSeries": { "type": "boolean", - "description": "Gets or sets filter for series.\r\nOptional.", + "description": "Gets or sets filter for series.", "nullable": true }, "IsNews": { "type": "boolean", - "description": "Gets or sets filter for news.\r\nOptional.", + "description": "Gets or sets filter for news.", "nullable": true }, "IsKids": { "type": "boolean", - "description": "Gets or sets filter for kids.\r\nOptional.", + "description": "Gets or sets filter for kids.", "nullable": true }, "IsSports": { "type": "boolean", - "description": "Gets or sets filter for sports.\r\nOptional.", + "description": "Gets or sets filter for sports.", "nullable": true }, "StartIndex": { "type": "integer", - "description": "Gets or sets the record index to start at. All items with a lower index will be dropped from the results.\r\nOptional.", + "description": "Gets or sets the record index to start at. All items with a lower index will be dropped from the results.", "format": "int32", "nullable": true }, "Limit": { "type": "integer", - "description": "Gets or sets the maximum number of records to return.\r\nOptional.", + "description": "Gets or sets the maximum number of records to return.", "format": "int32", "nullable": true }, @@ -47351,21 +48139,24 @@ "items": { "$ref": "#/components/schemas/ItemSortBy" }, - "description": "Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.\r\nOptional." + "description": "Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.", + "nullable": true }, "SortOrder": { "type": "array", "items": { "$ref": "#/components/schemas/SortOrder" }, - "description": "Gets or sets sort Order - Ascending,Descending." + "description": "Gets or sets sort order.", + "nullable": true }, "Genres": { "type": "array", "items": { "type": "string" }, - "description": "Gets or sets the genres to return guide information for." + "description": "Gets or sets the genres to return guide information for.", + "nullable": true }, "GenreIds": { "type": "array", @@ -47373,20 +48164,22 @@ "type": "string", "format": "uuid" }, - "description": "Gets or sets the genre ids to return guide information for." + "description": "Gets or sets the genre ids to return guide information for.", + "nullable": true }, "EnableImages": { "type": "boolean", - "description": "Gets or sets include image information in output.\r\nOptional.", + "description": "Gets or sets include image information in output.", "nullable": true }, "EnableTotalRecordCount": { "type": "boolean", - "description": "Gets or sets a value indicating whether retrieve total record count." + "description": "Gets or sets a value indicating whether retrieve total record count.", + "default": true }, "ImageTypeLimit": { "type": "integer", - "description": "Gets or sets the max number of images to return, per image type.\r\nOptional.", + "description": "Gets or sets the max number of images to return, per image type.", "format": "int32", "nullable": true }, @@ -47395,29 +48188,32 @@ "items": { "$ref": "#/components/schemas/ImageType" }, - "description": "Gets or sets the image types to include in the output.\r\nOptional." + "description": "Gets or sets the image types to include in the output.", + "nullable": true }, "EnableUserData": { "type": "boolean", - "description": "Gets or sets include user data.\r\nOptional.", + "description": "Gets or sets include user data.", "nullable": true }, "SeriesTimerId": { "type": "string", - "description": "Gets or sets filter by series timer id.\r\nOptional.", + "description": "Gets or sets filter by series timer id.", "nullable": true }, "LibrarySeriesId": { "type": "string", - "description": "Gets or sets filter by library series id.\r\nOptional.", - "format": "uuid" + "description": "Gets or sets filter by library series id.", + "format": "uuid", + "nullable": true }, "Fields": { "type": "array", "items": { "$ref": "#/components/schemas/ItemFields" }, - "description": "Gets or sets 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.\r\nOptional." + "description": "Gets or sets specify additional fields of information to return in the output.", + "nullable": true } }, "additionalProperties": false, @@ -47436,7 +48232,12 @@ "description": "Gets the group name." }, "State": { - "enum": ["Idle", "Waiting", "Paused", "Playing"], + "enum": [ + "Idle", + "Waiting", + "Paused", + "Playing" + ], "allOf": [ { "$ref": "#/components/schemas/GroupStateType" @@ -47503,22 +48304,37 @@ "description": "Class GroupUpdate." }, "GroupQueueMode": { - "enum": ["Queue", "QueueNext"], + "enum": [ + "Queue", + "QueueNext" + ], "type": "string", "description": "Enum GroupQueueMode." }, "GroupRepeatMode": { - "enum": ["RepeatOne", "RepeatAll", "RepeatNone"], + "enum": [ + "RepeatOne", + "RepeatAll", + "RepeatNone" + ], "type": "string", "description": "Enum GroupRepeatMode." }, "GroupShuffleMode": { - "enum": ["Sorted", "Shuffle"], + "enum": [ + "Sorted", + "Shuffle" + ], "type": "string", "description": "Enum GroupShuffleMode." }, "GroupStateType": { - "enum": ["Idle", "Waiting", "Paused", "Playing"], + "enum": [ + "Idle", + "Waiting", + "Paused", + "Playing" + ], "type": "string", "description": "Enum GroupState." }, @@ -47526,7 +48342,12 @@ "type": "object", "properties": { "State": { - "enum": ["Idle", "Waiting", "Paused", "Playing"], + "enum": [ + "Idle", + "Waiting", + "Paused", + "Playing" + ], "allOf": [ { "$ref": "#/components/schemas/GroupStateType" @@ -47702,18 +48523,19 @@ }, "additionalProperties": false }, - "HardwareEncodingType": { + "HardwareAccelerationType": { "enum": [ - "AMF", - "QSV", - "NVENC", - "V4L2M2M", - "VAAPI", - "VideoToolBox", - "RKMPP" + "none", + "amf", + "qsv", + "nvenc", + "v4l2m2m", + "vaapi", + "videotoolbox", + "rkmpp" ], "type": "string", - "description": "Enum HardwareEncodingType." + "description": "Enum containing hardware acceleration types." }, "IgnoreWaitRequestDto": { "type": "object", @@ -47727,7 +48549,14 @@ "description": "Class IgnoreWaitRequestDto." }, "ImageFormat": { - "enum": ["Bmp", "Gif", "Jpg", "Png", "Webp", "Svg"], + "enum": [ + "Bmp", + "Gif", + "Jpg", + "Png", + "Webp", + "Svg" + ], "type": "string", "description": "Enum ImageOutputFormat." }, @@ -47885,7 +48714,10 @@ "description": "Enum ImageResolution." }, "ImageSavingConvention": { - "enum": ["Legacy", "Compatible"], + "enum": [ + "Legacy", + "Compatible" + ], "type": "string" }, "ImageType": { @@ -48045,76 +48877,6 @@ "additionalProperties": false, "description": "Class InstallationInfo." }, - "Intro": { - "type": "object", - "properties": { - "EpisodeId": { - "type": "string", - "format": "uuid" - }, - "Valid": { - "type": "boolean", - "readOnly": true - }, - "IntroStart": { - "type": "number", - "format": "double" - }, - "IntroEnd": { - "type": "number", - "format": "double" - }, - "ShowSkipPromptAt": { - "type": "number", - "format": "double" - }, - "HideSkipPromptAt": { - "type": "number", - "format": "double" - } - }, - "additionalProperties": false - }, - "IntroWithMetadata": { - "type": "object", - "properties": { - "EpisodeId": { - "type": "string", - "format": "uuid" - }, - "Valid": { - "type": "boolean", - "readOnly": true - }, - "IntroStart": { - "type": "number", - "format": "double" - }, - "IntroEnd": { - "type": "number", - "format": "double" - }, - "ShowSkipPromptAt": { - "type": "number", - "format": "double" - }, - "HideSkipPromptAt": { - "type": "number", - "format": "double" - }, - "Series": { - "type": "string" - }, - "Season": { - "type": "integer", - "format": "int32" - }, - "Title": { - "type": "string" - } - }, - "additionalProperties": false - }, "IPlugin": { "type": "object", "properties": { @@ -48164,7 +48926,10 @@ "description": "Defines the MediaBrowser.Common.Plugins.IPlugin." }, "IsoType": { - "enum": ["Dvd", "BluRay"], + "enum": [ + "Dvd", + "BluRay" + ], "type": "string", "description": "Enum IsoType." }, @@ -48316,20 +49081,6 @@ "type": "string", "description": "Enum ItemFilter." }, - "Items": { - "type": "object", - "properties": { - "movies": { - "type": "integer", - "format": "int32" - }, - "episodes": { - "type": "integer", - "format": "int32" - } - }, - "additionalProperties": false - }, "ItemSortBy": { "enum": [ "Default", @@ -48398,7 +49149,7 @@ "$ref": "#/components/schemas/LibraryUpdateInfo" } ], - "description": "Gets or sets the data.", + "description": "Class LibraryUpdateInfo.", "nullable": true }, "MessageId": { @@ -48573,6 +49324,18 @@ "type": "string" } }, + "DisabledMediaSegmentProviders": { + "type": "array", + "items": { + "type": "string" + } + }, + "MediaSegmentProvideOrder": { + "type": "array", + "items": { + "type": "string" + } + }, "SkipSubtitlesIfEmbeddedSubtitlesPresent": { "type": "boolean" }, @@ -48596,11 +49359,52 @@ "type": "boolean", "default": false }, + "SaveTrickplayWithMedia": { + "type": "boolean", + "default": false + }, + "DisabledLyricFetchers": { + "type": "array", + "items": { + "type": "string" + } + }, + "LyricFetcherOrder": { + "type": "array", + "items": { + "type": "string" + } + }, + "PreferNonstandardArtistsTag": { + "type": "boolean", + "default": false + }, + "UseCustomTagDelimiters": { + "type": "boolean", + "default": false + }, + "CustomTagDelimiters": { + "type": "array", + "items": { + "type": "string" + } + }, + "DelimiterWhitelist": { + "type": "array", + "items": { + "type": "string" + } + }, "AutomaticallyAddToCollection": { "type": "boolean" }, "AllowEmbeddedSubtitles": { - "enum": ["AllowAll", "AllowText", "AllowImage", "AllowNone"], + "enum": [ + "AllowAll", + "AllowText", + "AllowImage", + "AllowNone" + ], "allOf": [ { "$ref": "#/components/schemas/EmbeddedSubtitleOptions" @@ -48641,6 +49445,13 @@ }, "description": "Gets or sets the subtitle fetchers." }, + "LyricFetchers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LibraryOptionInfoDto" + }, + "description": "Gets or sets the list of lyric fetchers." + }, "TypeOptions": { "type": "array", "items": { @@ -48962,7 +49773,10 @@ "nullable": true }, "Status": { - "enum": ["Ok", "Unavailable"], + "enum": [ + "Ok", + "Unavailable" + ], "allOf": [ { "$ref": "#/components/schemas/LiveTvServiceStatus" @@ -49000,7 +49814,10 @@ "description": "Class ServiceInfo." }, "LiveTvServiceStatus": { - "enum": ["Ok", "Unavailable"], + "enum": [ + "Ok", + "Unavailable" + ], "type": "string" }, "LocalizationOption": { @@ -49018,7 +49835,12 @@ "additionalProperties": false }, "LocationType": { - "enum": ["FileSystem", "Remote", "Virtual", "Offline"], + "enum": [ + "FileSystem", + "Remote", + "Virtual", + "Offline" + ], "type": "string", "description": "Enum LocationType." }, @@ -49200,7 +50022,9 @@ "description": "Class MediaAttachment." }, "MediaPathDto": { - "required": ["Name"], + "required": [ + "Name" + ], "type": "object", "properties": { "Name": { @@ -49230,23 +50054,114 @@ "properties": { "Path": { "type": "string" - }, - "NetworkPath": { - "type": "string", - "nullable": true } }, "additionalProperties": false }, "MediaProtocol": { - "enum": ["File", "Http", "Rtmp", "Rtsp", "Udp", "Rtp", "Ftp"], + "enum": [ + "File", + "Http", + "Rtmp", + "Rtsp", + "Udp", + "Rtp", + "Ftp" + ], "type": "string" }, + "MediaSegmentDto": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "Gets or sets the id of the media segment.", + "format": "uuid" + }, + "ItemId": { + "type": "string", + "description": "Gets or sets the id of the associated item.", + "format": "uuid" + }, + "Type": { + "enum": [ + "Unknown", + "Commercial", + "Preview", + "Recap", + "Outro", + "Intro" + ], + "allOf": [ + { + "$ref": "#/components/schemas/MediaSegmentType" + } + ], + "description": "Gets or sets the type of content this segment defines." + }, + "StartTicks": { + "type": "integer", + "description": "Gets or sets the start of the segment.", + "format": "int64" + }, + "EndTicks": { + "type": "integer", + "description": "Gets or sets the end of the segment.", + "format": "int64" + } + }, + "additionalProperties": false, + "description": "Api model for MediaSegment's." + }, + "MediaSegmentDtoQueryResult": { + "type": "object", + "properties": { + "Items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaSegmentDto" + }, + "description": "Gets or sets the items." + }, + "TotalRecordCount": { + "type": "integer", + "description": "Gets or sets the total number of records available.", + "format": "int32" + }, + "StartIndex": { + "type": "integer", + "description": "Gets or sets the index of the first record in Items.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Query result container." + }, + "MediaSegmentType": { + "enum": [ + "Unknown", + "Commercial", + "Preview", + "Recap", + "Outro", + "Intro" + ], + "type": "string", + "description": "Defines the types of content an individual Jellyfin.Data.Entities.MediaSegment represents." + }, "MediaSourceInfo": { "type": "object", "properties": { "Protocol": { - "enum": ["File", "Http", "Rtmp", "Rtsp", "Udp", "Rtp", "Ftp"], + "enum": [ + "File", + "Http", + "Rtmp", + "Rtsp", + "Udp", + "Rtp", + "Ftp" + ], "allOf": [ { "$ref": "#/components/schemas/MediaProtocol" @@ -49266,7 +50181,15 @@ "nullable": true }, "EncoderProtocol": { - "enum": ["File", "Http", "Rtmp", "Rtsp", "Udp", "Rtp", "Ftp"], + "enum": [ + "File", + "Http", + "Rtmp", + "Rtsp", + "Udp", + "Rtp", + "Ftp" + ], "allOf": [ { "$ref": "#/components/schemas/MediaProtocol" @@ -49275,7 +50198,11 @@ "nullable": true }, "Type": { - "enum": ["Default", "Grouping", "Placeholder"], + "enum": [ + "Default", + "Grouping", + "Placeholder" + ], "allOf": [ { "$ref": "#/components/schemas/MediaSourceType" @@ -49332,6 +50259,10 @@ "IsInfiniteStream": { "type": "boolean" }, + "UseMostCompatibleTranscodingProfile": { + "type": "boolean", + "default": false + }, "RequiresOpening": { "type": "boolean" }, @@ -49358,7 +50289,12 @@ "type": "boolean" }, "VideoType": { - "enum": ["VideoFile", "Iso", "Dvd", "BluRay"], + "enum": [ + "VideoFile", + "Iso", + "Dvd", + "BluRay" + ], "allOf": [ { "$ref": "#/components/schemas/VideoType" @@ -49367,7 +50303,10 @@ "nullable": true }, "IsoType": { - "enum": ["Dvd", "BluRay"], + "enum": [ + "Dvd", + "BluRay" + ], "allOf": [ { "$ref": "#/components/schemas/IsoType" @@ -49416,8 +50355,17 @@ "format": "int32", "nullable": true }, + "FallbackMaxStreamingBitrate": { + "type": "integer", + "format": "int32", + "nullable": true + }, "Timestamp": { - "enum": ["None", "Zero", "Valid"], + "enum": [ + "None", + "Zero", + "Valid" + ], "allOf": [ { "$ref": "#/components/schemas/TransportStreamTimestamp" @@ -49438,7 +50386,10 @@ "nullable": true }, "TranscodingSubProtocol": { - "enum": ["http", "hls"], + "enum": [ + "http", + "hls" + ], "allOf": [ { "$ref": "#/components/schemas/MediaStreamProtocol" @@ -49464,12 +50415,19 @@ "type": "integer", "format": "int32", "nullable": true + }, + "HasSegments": { + "type": "boolean" } }, "additionalProperties": false }, "MediaSourceType": { - "enum": ["Default", "Grouping", "Placeholder"], + "enum": [ + "Default", + "Grouping", + "Placeholder" + ], "type": "string" }, "MediaStream": { @@ -49558,6 +50516,12 @@ "format": "int32", "nullable": true }, + "Rotation": { + "type": "integer", + "description": "Gets or sets the Rotation in degrees.", + "format": "int32", + "nullable": true + }, "Comment": { "type": "string", "description": "Gets or sets the comment.", @@ -49579,13 +50543,17 @@ "nullable": true }, "VideoRange": { - "enum": ["Unknown", "SDR", "HDR"], + "enum": [ + "Unknown", + "SDR", + "HDR" + ], "allOf": [ { "$ref": "#/components/schemas/VideoRange" } ], - "description": "An enum representing video ranges.", + "description": "Gets the video range.", "readOnly": true }, "VideoRangeType": { @@ -49605,7 +50573,7 @@ "$ref": "#/components/schemas/VideoRangeType" } ], - "description": "An enum representing types of video ranges.", + "description": "Gets the video range type.", "readOnly": true }, "VideoDoViTitle": { @@ -49615,13 +50583,17 @@ "readOnly": true }, "AudioSpatialFormat": { - "enum": ["None", "DolbyAtmos", "DTSX"], + "enum": [ + "None", + "DolbyAtmos", + "DTSX" + ], "allOf": [ { "$ref": "#/components/schemas/AudioSpatialFormat" } ], - "description": "An enum representing formats of spatial audio.", + "description": "Gets the audio spatial format.", "default": "None", "readOnly": true }, @@ -49739,6 +50711,13 @@ "format": "float", "nullable": true }, + "ReferenceFrameRate": { + "type": "number", + "description": "Gets the framerate used as reference.\r\nPrefer AverageFrameRate, if that is null or an unrealistic value\r\nthen fallback to RealFrameRate.", + "format": "float", + "nullable": true, + "readOnly": true + }, "Profile": { "type": "string", "description": "Gets or sets the profile.", @@ -49781,7 +50760,13 @@ "description": "Gets or sets a value indicating whether this instance is external." }, "DeliveryMethod": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" @@ -49834,7 +50819,10 @@ "description": "Class MediaStream." }, "MediaStreamProtocol": { - "enum": ["http", "hls"], + "enum": [ + "http", + "hls" + ], "type": "string", "description": "Media streaming protocol.\r\nLowercase for backwards compatibility." }, @@ -49851,7 +50839,13 @@ "description": "Enum MediaStreamType." }, "MediaType": { - "enum": ["Unknown", "Video", "Audio", "Photo", "Book"], + "enum": [ + "Unknown", + "Video", + "Audio", + "Photo", + "Book" + ], "type": "string", "description": "Media types." }, @@ -49901,7 +50895,9 @@ "additionalProperties": false }, "MessageCommand": { - "required": ["Text"], + "required": [ + "Text" + ], "type": "object", "properties": { "Header": { @@ -50056,7 +51052,12 @@ "description": "Class MetadataOptions." }, "MetadataRefreshMode": { - "enum": ["None", "ValidationOnly", "Default", "FullRefresh"], + "enum": [ + "None", + "ValidationOnly", + "Default", + "FullRefresh" + ], "type": "string" }, "MovePlaylistItemRequestDto": { @@ -50455,47 +51456,6 @@ "additionalProperties": false, "description": "Class NextItemRequestDto." }, - "NotFoundObjects": { - "type": "object", - "properties": { - "movies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktMovie" - }, - "nullable": true - }, - "shows": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktShow" - }, - "nullable": true - }, - "episodes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktEpisode" - }, - "nullable": true - }, - "seasons": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktSeason" - }, - "nullable": true - }, - "people": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TraktPerson" - }, - "nullable": true - } - }, - "additionalProperties": false - }, "OpenLiveStreamDto": { "type": "object", "properties": { @@ -50561,13 +51521,18 @@ "description": "Gets or sets a value indicating whether to enale direct stream.", "nullable": true }, + "AlwaysBurnInSubtitleWhenTranscoding": { + "type": "boolean", + "description": "Gets or sets a value indicating whether always burn in subtitles when transcoding.", + "nullable": true + }, "DeviceProfile": { "allOf": [ { "$ref": "#/components/schemas/DeviceProfile" } ], - "description": "Gets or sets the device profile.", + "description": "A MediaBrowser.Model.Dlna.DeviceProfile represents a set of metadata which determines which content a certain device is able to play.\r\n
\r\nSpecifically, it defines the supported containers and\r\ncodecs (video and/or audio, including codec profiles and levels)\r\nthe device is able to direct play (without transcoding or remuxing),\r\nas well as which containers/codecs to transcode to in case it isn't.", "nullable": true }, "DirectPlayProtocols": { @@ -50991,11 +51956,18 @@ "additionalProperties": false }, "PlayAccess": { - "enum": ["Full", "None"], + "enum": [ + "Full", + "None" + ], "type": "string" }, "PlaybackErrorCode": { - "enum": ["NotAllowed", "NoCompatibleStream", "RateLimitExceeded"], + "enum": [ + "NotAllowed", + "NoCompatibleStream", + "RateLimitExceeded" + ], "type": "string" }, "PlaybackInfoDto": { @@ -51053,7 +52025,7 @@ "$ref": "#/components/schemas/DeviceProfile" } ], - "description": "Gets or sets the device profile.", + "description": "A MediaBrowser.Model.Dlna.DeviceProfile represents a set of metadata which determines which content a certain device is able to play.\r\n
\r\nSpecifically, it defines the supported containers and\r\ncodecs (video and/or audio, including codec profiles and levels)\r\nthe device is able to direct play (without transcoding or remuxing),\r\nas well as which containers/codecs to transcode to in case it isn't.", "nullable": true }, "EnableDirectPlay": { @@ -51085,6 +52057,11 @@ "type": "boolean", "description": "Gets or sets a value indicating whether to auto open the live stream.", "nullable": true + }, + "AlwaysBurnInSubtitleWhenTranscoding": { + "type": "boolean", + "description": "Gets or sets a value indicating whether always burn in subtitles when transcoding.", + "nullable": true } }, "additionalProperties": false, @@ -51106,7 +52083,11 @@ "nullable": true }, "ErrorCode": { - "enum": ["NotAllowed", "NoCompatibleStream", "RateLimitExceeded"], + "enum": [ + "NotAllowed", + "NoCompatibleStream", + "RateLimitExceeded" + ], "allOf": [ { "$ref": "#/components/schemas/PlaybackErrorCode" @@ -51120,7 +52101,10 @@ "description": "Class PlaybackInfoResponse." }, "PlaybackOrder": { - "enum": ["Default", "Shuffle"], + "enum": [ + "Default", + "Shuffle" + ], "type": "string", "description": "Enum PlaybackOrder." }, @@ -51202,7 +52186,11 @@ "nullable": true }, "PlayMethod": { - "enum": ["Transcode", "DirectStream", "DirectPlay"], + "enum": [ + "Transcode", + "DirectStream", + "DirectPlay" + ], "allOf": [ { "$ref": "#/components/schemas/PlayMethod" @@ -51221,7 +52209,11 @@ "nullable": true }, "RepeatMode": { - "enum": ["RepeatNone", "RepeatAll", "RepeatOne"], + "enum": [ + "RepeatNone", + "RepeatAll", + "RepeatOne" + ], "allOf": [ { "$ref": "#/components/schemas/RepeatMode" @@ -51230,7 +52222,10 @@ "description": "Gets or sets the repeat mode." }, "PlaybackOrder": { - "enum": ["Default", "Shuffle"], + "enum": [ + "Default", + "Shuffle" + ], "allOf": [ { "$ref": "#/components/schemas/PlaybackOrder" @@ -51354,7 +52349,11 @@ "nullable": true }, "PlayMethod": { - "enum": ["Transcode", "DirectStream", "DirectPlay"], + "enum": [ + "Transcode", + "DirectStream", + "DirectPlay" + ], "allOf": [ { "$ref": "#/components/schemas/PlayMethod" @@ -51373,7 +52372,11 @@ "nullable": true }, "RepeatMode": { - "enum": ["RepeatNone", "RepeatAll", "RepeatOne"], + "enum": [ + "RepeatNone", + "RepeatAll", + "RepeatOne" + ], "allOf": [ { "$ref": "#/components/schemas/RepeatMode" @@ -51382,7 +52385,10 @@ "description": "Gets or sets the repeat mode." }, "PlaybackOrder": { - "enum": ["Default", "Shuffle"], + "enum": [ + "Default", + "Shuffle" + ], "allOf": [ { "$ref": "#/components/schemas/PlaybackOrder" @@ -51527,7 +52533,11 @@ "nullable": true }, "PlayMethod": { - "enum": ["Transcode", "DirectStream", "DirectPlay"], + "enum": [ + "Transcode", + "DirectStream", + "DirectPlay" + ], "allOf": [ { "$ref": "#/components/schemas/PlayMethod" @@ -51537,7 +52547,11 @@ "nullable": true }, "RepeatMode": { - "enum": ["RepeatNone", "RepeatAll", "RepeatOne"], + "enum": [ + "RepeatNone", + "RepeatAll", + "RepeatOne" + ], "allOf": [ { "$ref": "#/components/schemas/RepeatMode" @@ -51546,7 +52560,10 @@ "description": "Gets or sets the repeat mode." }, "PlaybackOrder": { - "enum": ["Default", "Shuffle"], + "enum": [ + "Default", + "Shuffle" + ], "allOf": [ { "$ref": "#/components/schemas/PlaybackOrder" @@ -51571,6 +52588,32 @@ }, "additionalProperties": false }, + "PlaylistDto": { + "type": "object", + "properties": { + "OpenAccess": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the playlist is publicly readable." + }, + "Shares": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PlaylistUserPermissions" + }, + "description": "Gets or sets the share permissions." + }, + "ItemIds": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Gets or sets the item ids." + } + }, + "additionalProperties": false, + "description": "DTO for playlists." + }, "PlaylistUserPermissions": { "type": "object", "properties": { @@ -51596,7 +52639,7 @@ "$ref": "#/components/schemas/PlayRequest" } ], - "description": "Gets or sets the data.", + "description": "Class PlayRequest.", "nullable": true }, "MessageId": { @@ -51655,7 +52698,11 @@ "description": "Play command websocket message." }, "PlayMethod": { - "enum": ["Transcode", "DirectStream", "DirectPlay"], + "enum": [ + "Transcode", + "DirectStream", + "DirectPlay" + ], "type": "string" }, "PlayQueueUpdate": { @@ -51708,7 +52755,10 @@ "description": "Gets a value indicating whether the current item is playing." }, "ShuffleMode": { - "enum": ["Sorted", "Shuffle"], + "enum": [ + "Sorted", + "Shuffle" + ], "allOf": [ { "$ref": "#/components/schemas/GroupShuffleMode" @@ -51717,7 +52767,11 @@ "description": "Gets the shuffle mode." }, "RepeatMode": { - "enum": ["RepeatOne", "RepeatAll", "RepeatNone"], + "enum": [ + "RepeatOne", + "RepeatAll", + "RepeatNone" + ], "allOf": [ { "$ref": "#/components/schemas/GroupRepeatMode" @@ -52053,7 +53107,7 @@ "$ref": "#/components/schemas/InstallationInfo" } ], - "description": "Gets or sets the data.", + "description": "Class InstallationInfo.", "nullable": true }, "MessageId": { @@ -52120,7 +53174,7 @@ "$ref": "#/components/schemas/InstallationInfo" } ], - "description": "Gets or sets the data.", + "description": "Class InstallationInfo.", "nullable": true }, "MessageId": { @@ -52187,7 +53241,7 @@ "$ref": "#/components/schemas/InstallationInfo" } ], - "description": "Gets or sets the data.", + "description": "Class InstallationInfo.", "nullable": true }, "MessageId": { @@ -52254,7 +53308,7 @@ "$ref": "#/components/schemas/InstallationInfo" } ], - "description": "Gets or sets the data.", + "description": "Class InstallationInfo.", "nullable": true }, "MessageId": { @@ -52334,7 +53388,7 @@ "$ref": "#/components/schemas/PluginInfo" } ], - "description": "Gets or sets the data.", + "description": "This is a serializable stub class that is used by the api to provide information about installed plugins.", "nullable": true }, "MessageId": { @@ -52542,7 +53596,14 @@ "type": "string" }, "ProgramAudio": { - "enum": ["Mono", "Stereo", "Dolby", "DolbyDigital", "Thx", "Atmos"], + "enum": [ + "Mono", + "Stereo", + "Dolby", + "DolbyDigital", + "Thx", + "Atmos" + ], "type": "string" }, "PublicSystemInfo": { @@ -52668,20 +53729,25 @@ "description": "Gets or sets the items to enqueue." }, "Mode": { - "enum": ["Queue", "QueueNext"], + "enum": [ + "Queue", + "QueueNext" + ], "allOf": [ { "$ref": "#/components/schemas/GroupQueueMode" } ], - "description": "Gets or sets the mode in which to add the new items." + "description": "Enum GroupQueueMode." } }, "additionalProperties": false, "description": "Class QueueRequestDto." }, "QuickConnectDto": { - "required": ["Secret"], + "required": [ + "Secret" + ], "type": "object", "properties": { "Secret": { @@ -52733,7 +53799,10 @@ "description": "Stores the state of an quick connect request." }, "RatingType": { - "enum": ["Score", "Likes"], + "enum": [ + "Score", + "Likes" + ], "type": "string" }, "ReadyRequestDto": { @@ -52959,7 +54028,10 @@ "description": "Gets or sets the type." }, "RatingType": { - "enum": ["Score", "Likes"], + "enum": [ + "Score", + "Likes" + ], "allOf": [ { "$ref": "#/components/schemas/RatingType" @@ -53193,26 +54265,13 @@ "description": "Class RemoveFromPlaylistRequestDto." }, "RepeatMode": { - "enum": ["RepeatNone", "RepeatAll", "RepeatOne"], + "enum": [ + "RepeatNone", + "RepeatAll", + "RepeatOne" + ], "type": "string" }, - "ReportPlaybackOptions": { - "type": "object", - "properties": { - "MaxDataAge": { - "type": "integer", - "format": "int32" - }, - "BackupPath": { - "type": "string" - }, - "MaxBackupFiles": { - "type": "integer", - "format": "int32" - } - }, - "additionalProperties": false - }, "RepositoryInfo": { "type": "object", "properties": { @@ -53301,7 +54360,7 @@ "$ref": "#/components/schemas/TaskResult" } ], - "description": "Gets or sets the data.", + "description": "Class TaskExecutionInfo.", "nullable": true }, "MessageId": { @@ -53537,7 +54596,10 @@ "description": "Scheduled tasks info stop message." }, "ScrollDirection": { - "enum": ["Horizontal", "Vertical"], + "enum": [ + "Horizontal", + "Vertical" + ], "type": "string", "description": "An enum representing the axis that should be scrolled." }, @@ -53652,7 +54714,7 @@ "$ref": "#/components/schemas/BaseItemKind" } ], - "description": "The base item kind." + "description": "Gets or sets the type." }, "IsFolder": { "type": "boolean", @@ -53666,13 +54728,19 @@ "nullable": true }, "MediaType": { - "enum": ["Unknown", "Video", "Audio", "Photo", "Book"], + "enum": [ + "Unknown", + "Video", + "Audio", + "Photo", + "Book" + ], "allOf": [ { "$ref": "#/components/schemas/MediaType" } ], - "description": "Media types." + "description": "Gets or sets the type of the media." }, "StartDate": { "type": "string", @@ -53808,7 +54876,12 @@ "nullable": true }, "Command": { - "enum": ["Unpause", "Pause", "Stop", "Seek"], + "enum": [ + "Unpause", + "Pause", + "Stop", + "Seek" + ], "allOf": [ { "$ref": "#/components/schemas/SendCommandType" @@ -53826,7 +54899,12 @@ "description": "Class SendCommand." }, "SendCommandType": { - "enum": ["Unpause", "Pause", "Stop", "Seek"], + "enum": [ + "Unpause", + "Pause", + "Stop", + "Seek" + ], "type": "string", "description": "Enum SendCommandType." }, @@ -53922,7 +55000,11 @@ "additionalProperties": false }, "SeriesStatus": { - "enum": ["Continuing", "Ended", "Unreleased"], + "enum": [ + "Continuing", + "Ended", + "Unreleased" + ], "type": "string", "description": "The status of a series." }, @@ -54213,7 +55295,11 @@ "nullable": true }, "DayPattern": { - "enum": ["Daily", "Weekdays", "Weekends"], + "enum": [ + "Daily", + "Weekdays", + "Weekends" + ], "allOf": [ { "$ref": "#/components/schemas/DayPattern" @@ -54262,8 +55348,7 @@ "items": { "$ref": "#/components/schemas/SeriesTimerInfoDto" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -54276,7 +55361,8 @@ "format": "int32" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Query result container." }, "ServerConfiguration": { "type": "object", @@ -54331,9 +55417,6 @@ "type": "string", "description": "Gets or sets the metadata path." }, - "MetadataNetworkPath": { - "type": "string" - }, "PreferredMetadataLanguage": { "type": "string", "description": "Gets or sets the preferred metadata language." @@ -54404,7 +55487,10 @@ "format": "int32" }, "ImageSavingConvention": { - "enum": ["Legacy", "Compatible"], + "enum": [ + "Legacy", + "Compatible" + ], "allOf": [ { "$ref": "#/components/schemas/ImageSavingConvention" @@ -54702,7 +55788,7 @@ "additionalProperties": false, "description": "Server shutting down message." }, - "SessionInfo": { + "SessionInfoDto": { "type": "object", "properties": { "PlayState": { @@ -54711,6 +55797,7 @@ "$ref": "#/components/schemas/PlayerStateInfo" } ], + "description": "Gets or sets the play state.", "nullable": true }, "AdditionalUsers": { @@ -54718,14 +55805,16 @@ "items": { "$ref": "#/components/schemas/SessionUserInfo" }, + "description": "Gets or sets the additional users.", "nullable": true }, "Capabilities": { "allOf": [ { - "$ref": "#/components/schemas/ClientCapabilities" + "$ref": "#/components/schemas/ClientCapabilitiesDto" } ], + "description": "Gets or sets the client capabilities.", "nullable": true }, "RemoteEndPoint": { @@ -54738,9 +55827,7 @@ "items": { "$ref": "#/components/schemas/MediaType" }, - "description": "Gets the playable media types.", - "nullable": true, - "readOnly": true + "description": "Gets or sets the playable media types." }, "Id": { "type": "string", @@ -54803,7 +55890,7 @@ "$ref": "#/components/schemas/BaseItemDto" } ], - "description": "This is strictly used as a data transfer object from the api layer.\r\nThis holds information about a BaseItem in a format that is convenient for the client.", + "description": "Gets or sets the now viewing item.", "nullable": true }, "DeviceId": { @@ -54822,26 +55909,27 @@ "$ref": "#/components/schemas/TranscodingInfo" } ], + "description": "Gets or sets the transcoding info.", "nullable": true }, "IsActive": { "type": "boolean", - "description": "Gets a value indicating whether this instance is active.", - "readOnly": true + "description": "Gets or sets a value indicating whether this session is active." }, "SupportsMediaControl": { "type": "boolean", - "readOnly": true + "description": "Gets or sets a value indicating whether the session supports media control." }, "SupportsRemoteControl": { "type": "boolean", - "readOnly": true + "description": "Gets or sets a value indicating whether the session supports remote control." }, "NowPlayingQueue": { "type": "array", "items": { "$ref": "#/components/schemas/QueueItem" }, + "description": "Gets or sets the now playing queue.", "nullable": true }, "NowPlayingQueueFullItems": { @@ -54849,21 +55937,26 @@ "items": { "$ref": "#/components/schemas/BaseItemDto" }, + "description": "Gets or sets the now playing queue full items.", "nullable": true }, "HasCustomDeviceName": { - "type": "boolean" + "type": "boolean", + "description": "Gets or sets a value indicating whether the session has a custom device name." }, "PlaylistItemId": { "type": "string", + "description": "Gets or sets the playlist item id.", "nullable": true }, "ServerId": { "type": "string", + "description": "Gets or sets the server id.", "nullable": true }, "UserPrimaryImageTag": { "type": "string", + "description": "Gets or sets the user primary image tag.", "nullable": true }, "SupportedCommands": { @@ -54871,13 +55964,11 @@ "items": { "$ref": "#/components/schemas/GeneralCommandType" }, - "description": "Gets the supported commands.", - "nullable": true, - "readOnly": true + "description": "Gets or sets the supported commands." } }, "additionalProperties": false, - "description": "Class SessionInfo." + "description": "Session info DTO." }, "SessionMessageType": { "enum": [ @@ -54925,7 +56016,7 @@ "Data": { "type": "array", "items": { - "$ref": "#/components/schemas/SessionInfo" + "$ref": "#/components/schemas/SessionInfoDto" }, "description": "Gets or sets the data.", "nullable": true @@ -55114,7 +56205,11 @@ "description": "Class SessionUserInfo." }, "SetChannelMappingDto": { - "required": ["ProviderChannelId", "ProviderId", "TunerChannelId"], + "required": [ + "ProviderChannelId", + "ProviderId", + "TunerChannelId" + ], "type": "object", "properties": { "ProviderId": { @@ -55149,13 +56244,17 @@ "type": "object", "properties": { "Mode": { - "enum": ["RepeatOne", "RepeatAll", "RepeatNone"], + "enum": [ + "RepeatOne", + "RepeatAll", + "RepeatNone" + ], "allOf": [ { "$ref": "#/components/schemas/GroupRepeatMode" } ], - "description": "Gets or sets the repeat mode." + "description": "Enum GroupRepeatMode." } }, "additionalProperties": false, @@ -55165,13 +56264,16 @@ "type": "object", "properties": { "Mode": { - "enum": ["Sorted", "Shuffle"], + "enum": [ + "Sorted", + "Shuffle" + ], "allOf": [ { "$ref": "#/components/schemas/GroupShuffleMode" } ], - "description": "Gets or sets the shuffle mode." + "description": "Enum GroupShuffleMode." } }, "additionalProperties": false, @@ -55260,7 +56362,10 @@ "additionalProperties": false }, "SortOrder": { - "enum": ["Ascending", "Descending"], + "enum": [ + "Ascending", + "Descending" + ], "type": "string", "description": "An enum representing the sorting order." }, @@ -55304,7 +56409,10 @@ "description": "The startup configuration DTO." }, "StartupRemoteAccessDto": { - "required": ["EnableAutomaticPortMapping", "EnableRemoteAccess"], + "required": [ + "EnableAutomaticPortMapping", + "EnableRemoteAccess" + ], "type": "object", "properties": { "EnableRemoteAccess": { @@ -55375,7 +56483,13 @@ "description": "Class GroupUpdate." }, "SubtitleDeliveryMethod": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "type": "string", "description": "Delivery method to use during playback of a specific subtitle format." }, @@ -55419,7 +56533,13 @@ "additionalProperties": false }, "SubtitlePlaybackMode": { - "enum": ["Default", "Always", "OnlyForced", "None", "Smart"], + "enum": [ + "Default", + "Always", + "OnlyForced", + "None", + "Smart" + ], "type": "string", "description": "An enum representing a subtitle playback mode." }, @@ -55428,31 +56548,42 @@ "properties": { "Format": { "type": "string", + "description": "Gets or sets the format.", "nullable": true }, "Method": { - "enum": ["Encode", "Embed", "External", "Hls", "Drop"], + "enum": [ + "Encode", + "Embed", + "External", + "Hls", + "Drop" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitleDeliveryMethod" } ], - "description": "Delivery method to use during playback of a specific subtitle format." + "description": "Gets or sets the delivery method." }, "DidlMode": { "type": "string", + "description": "Gets or sets the DIDL mode.", "nullable": true }, "Language": { "type": "string", + "description": "Gets or sets the language.", "nullable": true }, "Container": { "type": "string", + "description": "Gets or sets the container.", "nullable": true } }, - "additionalProperties": false + "additionalProperties": false, + "description": "A class for subtitle profile information." }, "SyncPlayCommandMessage": { "type": "object", @@ -55463,7 +56594,7 @@ "$ref": "#/components/schemas/SendCommand" } ], - "description": "Gets or sets the data.", + "description": "Class SendCommand.", "nullable": true }, "MessageId": { @@ -55530,7 +56661,7 @@ "$ref": "#/components/schemas/GroupUpdate" } ], - "description": "Gets or sets the data.", + "description": "Group update without data.", "nullable": true }, "MessageId": { @@ -55607,7 +56738,11 @@ "description": "Class QueueItem." }, "SyncPlayUserAccessType": { - "enum": ["CreateAndJoinGroups", "JoinGroups", "None"], + "enum": [ + "CreateAndJoinGroups", + "JoinGroups", + "None" + ], "type": "string", "description": "Enum SyncPlayUserAccessType." }, @@ -55762,7 +56897,12 @@ "description": "Class SystemInfo." }, "TaskCompletionStatus": { - "enum": ["Completed", "Failed", "Cancelled", "Aborted"], + "enum": [ + "Completed", + "Failed", + "Cancelled", + "Aborted" + ], "type": "string", "description": "Enum TaskCompletionStatus." }, @@ -55775,7 +56915,11 @@ "nullable": true }, "State": { - "enum": ["Idle", "Cancelling", "Running"], + "enum": [ + "Idle", + "Cancelling", + "Running" + ], "allOf": [ { "$ref": "#/components/schemas/TaskState" @@ -55848,7 +56992,12 @@ "format": "date-time" }, "Status": { - "enum": ["Completed", "Failed", "Cancelled", "Aborted"], + "enum": [ + "Completed", + "Failed", + "Cancelled", + "Aborted" + ], "allOf": [ { "$ref": "#/components/schemas/TaskCompletionStatus" @@ -55886,7 +57035,11 @@ "description": "Class TaskExecutionInfo." }, "TaskState": { - "enum": ["Idle", "Cancelling", "Running"], + "enum": [ + "Idle", + "Cancelling", + "Running" + ], "type": "string", "description": "Enum TaskState." }, @@ -55946,8 +57099,7 @@ "items": { "$ref": "#/components/schemas/BaseItemDto" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -56294,8 +57446,7 @@ "items": { "$ref": "#/components/schemas/TimerInfoDto" }, - "description": "Gets or sets the items.", - "nullable": true + "description": "Gets or sets the items." }, "TotalRecordCount": { "type": "integer", @@ -56308,7 +57459,42 @@ "format": "int32" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Query result container." + }, + "TonemappingAlgorithm": { + "enum": [ + "none", + "clip", + "linear", + "gamma", + "reinhard", + "hable", + "mobius", + "bt2390" + ], + "type": "string", + "description": "Enum containing tonemapping algorithms." + }, + "TonemappingMode": { + "enum": [ + "auto", + "max", + "rgb", + "lum", + "itp" + ], + "type": "string", + "description": "Enum containing tonemapping modes." + }, + "TonemappingRange": { + "enum": [ + "auto", + "tv", + "pc" + ], + "type": "string", + "description": "Enum containing tonemapping ranges." }, "TrailerInfo": { "type": "object", @@ -56401,300 +57587,6 @@ }, "additionalProperties": false }, - "TraktEpisode": { - "type": "object", - "properties": { - "season": { - "type": "integer", - "format": "int32" - }, - "number": { - "type": "integer", - "format": "int32" - }, - "title": { - "type": "string", - "nullable": true - }, - "ids": { - "allOf": [ - { - "$ref": "#/components/schemas/TraktEpisodeId" - } - ], - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktEpisodeId": { - "type": "object", - "properties": { - "trakt": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "slug": { - "type": "string", - "nullable": true - }, - "imdb": { - "type": "string", - "nullable": true - }, - "tmdb": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "tvdb": { - "type": "string", - "nullable": true - }, - "tvrage": { - "type": "string", - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktMovie": { - "type": "object", - "properties": { - "title": { - "type": "string", - "nullable": true - }, - "year": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "ids": { - "allOf": [ - { - "$ref": "#/components/schemas/TraktMovieId" - } - ], - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktMovieId": { - "type": "object", - "properties": { - "trakt": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "slug": { - "type": "string", - "nullable": true - }, - "imdb": { - "type": "string", - "nullable": true - }, - "tmdb": { - "type": "integer", - "format": "int32", - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktPerson": { - "type": "object", - "properties": { - "name": { - "type": "string", - "nullable": true - }, - "ids": { - "allOf": [ - { - "$ref": "#/components/schemas/TraktPersonId" - } - ], - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktPersonId": { - "type": "object", - "properties": { - "trakt": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "slug": { - "type": "string", - "nullable": true - }, - "imdb": { - "type": "string", - "nullable": true - }, - "tmdb": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "tvrage": { - "type": "integer", - "format": "int32", - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktSeason": { - "type": "object", - "properties": { - "number": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "ids": { - "allOf": [ - { - "$ref": "#/components/schemas/TraktSeasonId" - } - ], - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktSeasonId": { - "type": "object", - "properties": { - "trakt": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "slug": { - "type": "string", - "nullable": true - }, - "tmdb": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "tvdb": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "tvrage": { - "type": "integer", - "format": "int32", - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktShow": { - "type": "object", - "properties": { - "title": { - "type": "string", - "nullable": true - }, - "year": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "ids": { - "allOf": [ - { - "$ref": "#/components/schemas/TraktShowId" - } - ], - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktShowId": { - "type": "object", - "properties": { - "trakt": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "slug": { - "type": "string", - "nullable": true - }, - "imdb": { - "type": "string", - "nullable": true - }, - "tmdb": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "tvdb": { - "type": "string", - "nullable": true - }, - "tvrage": { - "type": "string", - "nullable": true - } - }, - "additionalProperties": false - }, - "TraktSyncResponse": { - "type": "object", - "properties": { - "added": { - "allOf": [ - { - "$ref": "#/components/schemas/Items" - } - ], - "nullable": true - }, - "deleted": { - "allOf": [ - { - "$ref": "#/components/schemas/Items" - } - ], - "nullable": true - }, - "updated": { - "allOf": [ - { - "$ref": "#/components/schemas/Items" - } - ], - "nullable": true - }, - "not_found": { - "allOf": [ - { - "$ref": "#/components/schemas/NotFoundObjects" - } - ], - "nullable": true - } - }, - "additionalProperties": false - }, "TranscodeReason": { "enum": [ "ContainerNotSupported", @@ -56721,12 +57613,16 @@ "UnknownVideoStreamInfo", "UnknownAudioStreamInfo", "DirectPlayError", - "VideoRangeTypeNotSupported" + "VideoRangeTypeNotSupported", + "VideoCodecTagNotSupported" ], "type": "string" }, "TranscodeSeekInfo": { - "enum": ["Auto", "Bytes"], + "enum": [ + "Auto", + "Bytes" + ], "type": "string" }, "TranscodingInfo": { @@ -56734,67 +57630,80 @@ "properties": { "AudioCodec": { "type": "string", + "description": "Gets or sets the thread count used for encoding.", "nullable": true }, "VideoCodec": { "type": "string", + "description": "Gets or sets the thread count used for encoding.", "nullable": true }, "Container": { "type": "string", + "description": "Gets or sets the thread count used for encoding.", "nullable": true }, "IsVideoDirect": { - "type": "boolean" + "type": "boolean", + "description": "Gets or sets a value indicating whether the video is passed through." }, "IsAudioDirect": { - "type": "boolean" + "type": "boolean", + "description": "Gets or sets a value indicating whether the audio is passed through." }, "Bitrate": { "type": "integer", + "description": "Gets or sets the bitrate.", "format": "int32", "nullable": true }, "Framerate": { "type": "number", + "description": "Gets or sets the framerate.", "format": "float", "nullable": true }, "CompletionPercentage": { "type": "number", + "description": "Gets or sets the completion percentage.", "format": "double", "nullable": true }, "Width": { "type": "integer", + "description": "Gets or sets the video width.", "format": "int32", "nullable": true }, "Height": { "type": "integer", + "description": "Gets or sets the video height.", "format": "int32", "nullable": true }, "AudioChannels": { "type": "integer", + "description": "Gets or sets the audio channels.", "format": "int32", "nullable": true }, "HardwareAccelerationType": { "enum": [ - "AMF", - "QSV", - "NVENC", - "V4L2M2M", - "VAAPI", - "VideoToolBox", - "RKMPP" + "none", + "amf", + "qsv", + "nvenc", + "v4l2m2m", + "vaapi", + "videotoolbox", + "rkmpp" ], "allOf": [ { - "$ref": "#/components/schemas/HardwareEncodingType" + "$ref": "#/components/schemas/HardwareAccelerationType" } ], + "description": "Gets or sets the hardware acceleration type.", "nullable": true }, "TranscodeReasons": { @@ -56823,108 +57732,151 @@ "UnknownVideoStreamInfo", "UnknownAudioStreamInfo", "DirectPlayError", - "VideoRangeTypeNotSupported" + "VideoRangeTypeNotSupported", + "VideoCodecTagNotSupported" ], "type": "array", "items": { "$ref": "#/components/schemas/TranscodeReason" - } + }, + "description": "Gets or sets the transcode reasons." } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Class holding information on a runnning transcode." }, "TranscodingProfile": { "type": "object", "properties": { "Container": { - "type": "string" + "type": "string", + "description": "Gets or sets the container." }, "Type": { - "enum": ["Audio", "Video", "Photo", "Subtitle", "Lyric"], + "enum": [ + "Audio", + "Video", + "Photo", + "Subtitle", + "Lyric" + ], "allOf": [ { "$ref": "#/components/schemas/DlnaProfileType" } - ] + ], + "description": "Gets or sets the DLNA profile type." }, "VideoCodec": { - "type": "string" + "type": "string", + "description": "Gets or sets the video codec." }, "AudioCodec": { - "type": "string" + "type": "string", + "description": "Gets or sets the audio codec." }, "Protocol": { - "enum": ["http", "hls"], + "enum": [ + "http", + "hls" + ], "allOf": [ { "$ref": "#/components/schemas/MediaStreamProtocol" } ], - "description": "Media streaming protocol.\r\nLowercase for backwards compatibility." + "description": "Gets or sets the protocol." }, "EstimateContentLength": { "type": "boolean", + "description": "Gets or sets a value indicating whether the content length should be estimated.", "default": false }, "EnableMpegtsM2TsMode": { "type": "boolean", + "description": "Gets or sets a value indicating whether M2TS mode is enabled.", "default": false }, "TranscodeSeekInfo": { - "enum": ["Auto", "Bytes"], + "enum": [ + "Auto", + "Bytes" + ], "allOf": [ { "$ref": "#/components/schemas/TranscodeSeekInfo" } ], + "description": "Gets or sets the transcoding seek info mode.", "default": "Auto" }, "CopyTimestamps": { "type": "boolean", + "description": "Gets or sets a value indicating whether timestamps should be copied.", "default": false }, "Context": { - "enum": ["Streaming", "Static"], + "enum": [ + "Streaming", + "Static" + ], "allOf": [ { "$ref": "#/components/schemas/EncodingContext" } ], + "description": "Gets or sets the encoding context.", "default": "Streaming" }, "EnableSubtitlesInManifest": { "type": "boolean", + "description": "Gets or sets a value indicating whether subtitles are allowed in the manifest.", "default": false }, "MaxAudioChannels": { "type": "string", + "description": "Gets or sets the maximum audio channels.", "nullable": true }, "MinSegments": { "type": "integer", + "description": "Gets or sets the minimum amount of segments.", "format": "int32", "default": 0 }, "SegmentLength": { "type": "integer", + "description": "Gets or sets the segment length.", "format": "int32", "default": 0 }, "BreakOnNonKeyFrames": { "type": "boolean", + "description": "Gets or sets a value indicating whether breaking the video stream on non-keyframes is supported.", "default": false }, "Conditions": { "type": "array", "items": { "$ref": "#/components/schemas/ProfileCondition" - } + }, + "description": "Gets or sets the profile conditions." + }, + "EnableAudioVbrEncoding": { + "type": "boolean", + "description": "Gets or sets a value indicating whether variable bitrate encoding is supported.", + "default": true } }, - "additionalProperties": false + "additionalProperties": false, + "description": "A class for transcoding profile information." }, "TransportStreamTimestamp": { - "enum": ["None", "Zero", "Valid"], + "enum": [ + "None", + "Zero", + "Valid" + ], "type": "string" }, "TrickplayInfo": { @@ -56980,8 +57932,15 @@ "type": "boolean", "description": "Gets or sets a value indicating whether or not to use HW accelerated MJPEG encoding." }, + "EnableKeyFrameOnlyExtraction": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to only extract key frames.\r\nSignificantly faster, but is not compatible with all decoders and/or video files." + }, "ScanBehavior": { - "enum": ["Blocking", "NonBlocking"], + "enum": [ + "Blocking", + "NonBlocking" + ], "allOf": [ { "$ref": "#/components/schemas/TrickplayScanBehavior" @@ -57048,7 +58007,10 @@ "description": "Class TrickplayOptions." }, "TrickplayScanBehavior": { - "enum": ["Blocking", "NonBlocking"], + "enum": [ + "Blocking", + "NonBlocking" + ], "type": "string", "description": "Enum TrickplayScanBehavior." }, @@ -57103,6 +58065,16 @@ "AllowHWTranscoding": { "type": "boolean" }, + "AllowFmp4TranscodingContainer": { + "type": "boolean" + }, + "AllowStreamSharing": { + "type": "boolean" + }, + "FallbackMaxStreamingBitrate": { + "type": "integer", + "format": "int32" + }, "EnableStreamLooping": { "type": "boolean" }, @@ -57206,7 +58178,10 @@ "description": "Update library options dto." }, "UpdateMediaPathRequestDto": { - "required": ["Name", "PathInfo"], + "required": [ + "Name", + "PathInfo" + ], "type": "object", "properties": { "Name": { @@ -57427,7 +58402,13 @@ } }, "SubtitleMode": { - "enum": ["Default", "Always", "OnlyForced", "None", "Smart"], + "enum": [ + "Default", + "Always", + "OnlyForced", + "None", + "Smart" + ], "allOf": [ { "$ref": "#/components/schemas/SubtitlePlaybackMode" @@ -57492,7 +58473,7 @@ "$ref": "#/components/schemas/UserDataChangeInfo" } ], - "description": "Gets or sets the data.", + "description": "Class UserDataChangeInfo.", "nullable": true }, "MessageId": { @@ -57556,15 +58537,14 @@ "UserId": { "type": "string", "description": "Gets or sets the user id.", - "nullable": true + "format": "uuid" }, "UserDataList": { "type": "array", "items": { "$ref": "#/components/schemas/UserItemDataDto" }, - "description": "Gets or sets the user data list.", - "nullable": true + "description": "Gets or sets the user data list." } }, "additionalProperties": false, @@ -57719,21 +58699,6 @@ "additionalProperties": false, "description": "Class UserDto." }, - "UserInterfaceConfiguration": { - "type": "object", - "properties": { - "SkipButtonVisible": { - "type": "boolean" - }, - "SkipButtonIntroText": { - "type": "string" - }, - "SkipButtonEndCreditsText": { - "type": "string" - } - }, - "additionalProperties": false - }, "UserItemDataDto": { "type": "object", "properties": { @@ -57786,20 +58751,22 @@ }, "Key": { "type": "string", - "description": "Gets or sets the key.", - "nullable": true + "description": "Gets or sets the key." }, "ItemId": { "type": "string", "description": "Gets or sets the item identifier.", - "nullable": true + "format": "uuid" } }, "additionalProperties": false, "description": "Class UserItemDataDto." }, "UserPolicy": { - "required": ["AuthenticationProviderId", "PasswordResetProviderId"], + "required": [ + "AuthenticationProviderId", + "PasswordResetProviderId" + ], "type": "object", "properties": { "IsAdministrator": { @@ -57990,13 +58957,17 @@ "type": "string" }, "SyncPlayAccess": { - "enum": ["CreateAndJoinGroups", "JoinGroups", "None"], + "enum": [ + "CreateAndJoinGroups", + "JoinGroups", + "None" + ], "allOf": [ { "$ref": "#/components/schemas/SyncPlayUserAccessType" } ], - "description": "Enum SyncPlayUserAccessType." + "description": "Gets or sets a value indicating what SyncPlay features the user can access." } }, "additionalProperties": false @@ -58010,7 +58981,7 @@ "$ref": "#/components/schemas/UserDto" } ], - "description": "Gets or sets the data.", + "description": "Class UserDto.", "nullable": true }, "MessageId": { @@ -58166,7 +59137,11 @@ "type": "string" }, "VideoRange": { - "enum": ["Unknown", "SDR", "HDR"], + "enum": [ + "Unknown", + "SDR", + "HDR" + ], "type": "string", "description": "An enum representing video ranges." }, @@ -58186,7 +59161,12 @@ "description": "An enum representing types of video ranges." }, "VideoType": { - "enum": ["VideoFile", "Iso", "Dvd", "BluRay"], + "enum": [ + "VideoFile", + "Iso", + "Dvd", + "BluRay" + ], "type": "string", "description": "Enum VideoType." }, @@ -58317,4 +59297,4 @@ } } } -} +} \ No newline at end of file