diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index c18e922..5212437 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 5a8dbcbc-e0ee-41f0-9d84-b8b50567d1e9 management: - docChecksum: 5d44282cd3351c75bd6c9a894dbe1ec9 + docChecksum: 6f287a2526fda4d3a32a92e891a0c4ce docVersion: 0.0.3 - speakeasyVersion: 1.487.0 + speakeasyVersion: 1.487.1 generationVersion: 2.506.0 - releaseVersion: 0.13.6 - configChecksum: a06266b1c814ba29493ed92404ca4d2b + releaseVersion: 0.14.0 + configChecksum: 6b86d48c93935e3018c9ab4b75998265 repoURL: https://github.com/LukeHagar/plexcsharp.git repoSubDirectory: . published: true @@ -30,6 +30,7 @@ features: nullables: 0.1.0 responseFormat: 0.0.4 sdkHooks: 0.1.0 + unions: 0.2.2 generatedFiles: - .gitattributes - LukeHagar.PlexAPI.SDK.sln @@ -89,6 +90,10 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllLibrariesErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllLibrariesLibraryErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllLibrariesUnauthorized.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs + - LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAvailableClientsBadRequest.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAvailableClientsErrors.cs - LukeHagar/PlexAPI/SDK/Models/Errors/GetAvailableClientsServerErrors.cs @@ -427,6 +432,39 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllLibrariesResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAvailableClientsMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAvailableClientsResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetAvailableClientsResponseBody.cs @@ -540,11 +578,16 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataDirector.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGenre.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataHasThumbnail.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataImage.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataLocation.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMedia.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMediaContainer.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataPart.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataResponse.cs @@ -656,6 +699,8 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesMetadata.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesOptimizedForStreaming.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesPart.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesRequest.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesResponse.cs - LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesResponseBody.cs @@ -768,6 +813,7 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/Home.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Hub.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Image.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeAdvanced.cs - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeCollections.cs - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeDetails.cs - LukeHagar/PlexAPI/SDK/Models/Requests/IncludeExternalMedia.cs @@ -798,9 +844,11 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/Metadata.cs - LukeHagar/PlexAPI/SDK/Models/Requests/MinSize.cs - LukeHagar/PlexAPI/SDK/Models/Requests/MyPlex.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/One.cs - LukeHagar/PlexAPI/SDK/Models/Requests/OnlyTransient.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Operator.cs - LukeHagar/PlexAPI/SDK/Models/Requests/OptimizedForStreaming.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/OptimizedForStreaming1.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Owned.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Part.cs - LukeHagar/PlexAPI/SDK/Models/Requests/PastSubscription.cs @@ -840,11 +888,12 @@ generatedFiles: - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamForce.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeCollections.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeExternalMedia.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeGuids.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeMeta.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamOnlyTransient.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamSmart.cs - LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamType.cs - - LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs + - LukeHagar/PlexAPI/SDK/Models/Requests/Ratings.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Release.cs - LukeHagar/PlexAPI/SDK/Models/Requests/ResponseBody.cs - LukeHagar/PlexAPI/SDK/Models/Requests/Restricted.cs @@ -974,6 +1023,10 @@ generatedFiles: - docs/Models/Errors/GetAllLibrariesErrors.md - docs/Models/Errors/GetAllLibrariesLibraryErrors.md - docs/Models/Errors/GetAllLibrariesUnauthorized.md + - docs/Models/Errors/GetAllMediaLibraryBadRequest.md + - docs/Models/Errors/GetAllMediaLibraryErrors.md + - docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md + - docs/Models/Errors/GetAllMediaLibraryUnauthorized.md - docs/Models/Errors/GetAvailableClientsBadRequest.md - docs/Models/Errors/GetAvailableClientsErrors.md - docs/Models/Errors/GetAvailableClientsServerErrors.md @@ -1311,6 +1364,39 @@ generatedFiles: - docs/Models/Requests/GetAllLibrariesMediaContainer.md - docs/Models/Requests/GetAllLibrariesResponse.md - docs/Models/Requests/GetAllLibrariesResponseBody.md + - docs/Models/Requests/GetAllMediaLibraryActiveDirection.md + - docs/Models/Requests/GetAllMediaLibraryCollection.md + - docs/Models/Requests/GetAllMediaLibraryCountry.md + - docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md + - docs/Models/Requests/GetAllMediaLibraryDirector.md + - docs/Models/Requests/GetAllMediaLibraryField.md + - docs/Models/Requests/GetAllMediaLibraryFieldType.md + - docs/Models/Requests/GetAllMediaLibraryFilter.md + - docs/Models/Requests/GetAllMediaLibraryGenre.md + - docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md + - docs/Models/Requests/GetAllMediaLibraryImage.md + - docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md + - docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md + - docs/Models/Requests/GetAllMediaLibraryLibraryType.md + - docs/Models/Requests/GetAllMediaLibraryMedia.md + - docs/Models/Requests/GetAllMediaLibraryMediaContainer.md + - docs/Models/Requests/GetAllMediaLibraryMeta.md + - docs/Models/Requests/GetAllMediaLibraryMetadata.md + - docs/Models/Requests/GetAllMediaLibraryOperator.md + - docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md + - docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md + - docs/Models/Requests/GetAllMediaLibraryPart.md + - docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md + - docs/Models/Requests/GetAllMediaLibraryQueryParamType.md + - docs/Models/Requests/GetAllMediaLibraryRequest.md + - docs/Models/Requests/GetAllMediaLibraryResponse.md + - docs/Models/Requests/GetAllMediaLibraryResponseBody.md + - docs/Models/Requests/GetAllMediaLibraryRole.md + - docs/Models/Requests/GetAllMediaLibrarySort.md + - docs/Models/Requests/GetAllMediaLibraryStream.md + - docs/Models/Requests/GetAllMediaLibraryType.md + - docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md + - docs/Models/Requests/GetAllMediaLibraryWriter.md - docs/Models/Requests/GetAvailableClientsMediaContainer.md - docs/Models/Requests/GetAvailableClientsResponse.md - docs/Models/Requests/GetAvailableClientsResponseBody.md @@ -1424,11 +1510,16 @@ generatedFiles: - docs/Models/Requests/GetMediaMetaDataCountry.md - docs/Models/Requests/GetMediaMetaDataDirector.md - docs/Models/Requests/GetMediaMetaDataGenre.md + - docs/Models/Requests/GetMediaMetaDataGuids.md + - docs/Models/Requests/GetMediaMetaDataHasThumbnail.md - docs/Models/Requests/GetMediaMetaDataImage.md + - docs/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.md - docs/Models/Requests/GetMediaMetaDataLocation.md - docs/Models/Requests/GetMediaMetaDataMedia.md - docs/Models/Requests/GetMediaMetaDataMediaContainer.md - docs/Models/Requests/GetMediaMetaDataMetadata.md + - docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming.md + - docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.md - docs/Models/Requests/GetMediaMetaDataPart.md - docs/Models/Requests/GetMediaMetaDataRequest.md - docs/Models/Requests/GetMediaMetaDataResponse.md @@ -1540,6 +1631,8 @@ generatedFiles: - docs/Models/Requests/GetSearchAllLibrariesMetadata.md - docs/Models/Requests/GetSearchAllLibrariesOptimizedForStreaming.md - docs/Models/Requests/GetSearchAllLibrariesPart.md + - docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.md + - docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.md - docs/Models/Requests/GetSearchAllLibrariesRequest.md - docs/Models/Requests/GetSearchAllLibrariesResponse.md - docs/Models/Requests/GetSearchAllLibrariesResponseBody.md @@ -1652,6 +1745,7 @@ generatedFiles: - docs/Models/Requests/Home.md - docs/Models/Requests/Hub.md - docs/Models/Requests/Image.md + - docs/Models/Requests/IncludeAdvanced.md - docs/Models/Requests/IncludeCollections.md - docs/Models/Requests/IncludeDetails.md - docs/Models/Requests/IncludeExternalMedia.md @@ -1682,9 +1776,11 @@ generatedFiles: - docs/Models/Requests/Metadata.md - docs/Models/Requests/MinSize.md - docs/Models/Requests/MyPlex.md + - docs/Models/Requests/One.md - docs/Models/Requests/OnlyTransient.md - docs/Models/Requests/Operator.md - docs/Models/Requests/OptimizedForStreaming.md + - docs/Models/Requests/OptimizedForStreaming1.md - docs/Models/Requests/Owned.md - docs/Models/Requests/Part.md - docs/Models/Requests/PastSubscription.md @@ -1724,11 +1820,12 @@ generatedFiles: - docs/Models/Requests/QueryParamForce.md - docs/Models/Requests/QueryParamIncludeCollections.md - docs/Models/Requests/QueryParamIncludeExternalMedia.md + - docs/Models/Requests/QueryParamIncludeGuids.md - docs/Models/Requests/QueryParamIncludeMeta.md - docs/Models/Requests/QueryParamOnlyTransient.md - docs/Models/Requests/QueryParamSmart.md - docs/Models/Requests/QueryParamType.md - - docs/Models/Requests/Rating.md + - docs/Models/Requests/Ratings.md - docs/Models/Requests/Release.md - docs/Models/Requests/ResponseBody.md - docs/Models/Requests/Restricted.md @@ -2170,7 +2267,7 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"size": 50, "identifier": "com.plexapp.plugins.library", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}, {"type": "tag", "Operator": []}]}, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": []}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}]}} + application/json: {"MediaContainer": {"size": 50, "identifier": "com.plexapp.plugins.library", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}, {"type": "tag", "Operator": []}]}, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": []}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}]}} getLibraryHubs: speakeasy-default-get-library-hubs: parameters: @@ -2241,7 +2338,7 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}], "size": 50, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "ratingKey": 59398, "key": "/library/metadata/59398", "guid": "plex://movie/5e161a83bea6ac004126e148", "studio": "Marvel Studios", "type": "movie", "title": "Ant-Man and the Wasp: Quantumania", "contentRating": "PG-13", "summary": "Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible.", "rating": 4.7, "audienceRating": 8.3, "year": 2023, "tagline": "Witness the beginning of a new dynasty.", "thumb": "/library/metadata/59398/thumb/1681888010", "art": "/library/metadata/59398/art/1681888010", "duration": 7474422, "originallyAvailableAt": "2023-02-15T00:00:00Z", "addedAt": 1681803215, "updatedAt": 1681888010, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/59399", "ratingImage": "rottentomatoes://image.rating.rotten", "Media": [{"id": 120345, "duration": 7474422, "bitrate": 3623, "width": 1920, "height": 804, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "ac3", "videoCodec": "h264", "videoResolution": 1080, "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "videoProfile": "high", "Part": [{"id": 120353, "key": "/library/parts/120353/1681803203/file.mp4", "duration": 7474422, "file": "/movies/Ant-Man and the Wasp Quantumania (2023)/Ant-Man.and.the.Wasp.Quantumania.2023.1080p.mp4", "size": 3395307162, "container": "mp4", "hasThumbnail": 1, "videoProfile": "high"}]}], "Genre": [{"tag": "Comedy"}], "Director": [{"tag": "Peyton Reed"}], "Writer": [{"tag": "Jeff Loveness"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Role": [{"tag": "Paul Rudd"}]}]}} + application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}], "size": 50, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [{"librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "ratingKey": 59398, "key": "/library/metadata/59398", "guid": "plex://movie/5e161a83bea6ac004126e148", "studio": "Marvel Studios", "type": "movie", "title": "Ant-Man and the Wasp: Quantumania", "contentRating": "PG-13", "summary": "Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible.", "rating": 4.7, "audienceRating": 8.3, "year": 2023, "tagline": "Witness the beginning of a new dynasty.", "thumb": "/library/metadata/59398/thumb/1681888010", "art": "/library/metadata/59398/art/1681888010", "duration": 7474422, "originallyAvailableAt": "2023-02-15T00:00:00Z", "addedAt": 1681803215, "updatedAt": 1681888010, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/59399", "ratingImage": "rottentomatoes://image.rating.rotten", "Media": [{"id": 120345, "duration": 7474422, "bitrate": 3623, "width": 1920, "height": 804, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "ac3", "videoCodec": "h264", "videoResolution": 1080, "container": "mp4", "videoFrameRate": "24p", "optimizedForStreaming": 0, "videoProfile": "high", "Part": [{"id": 120353, "key": "/library/parts/120353/1681803203/file.mp4", "duration": 7474422, "file": "/movies/Ant-Man and the Wasp Quantumania (2023)/Ant-Man.and.the.Wasp.Quantumania.2023.1080p.mp4", "size": 3395307162, "container": "mp4", "hasThumbnail": 1, "videoProfile": "high"}]}], "Genre": [{"tag": "Comedy"}], "Director": [{"tag": "Peyton Reed"}], "Writer": [{"tag": "Jeff Loveness"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Role": [{"tag": "Paul Rudd"}]}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2293,7 +2390,7 @@ examples: X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}], "size": 70, "totalSize": 170, "offset": 0, "content": "secondary", "allowSync": true, "nocache": true, "art": "/:/resources/movie-fanart.jpg", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "title2": "Recently Released", "viewGroup": "movie", "viewMode": 65592, "mixedParents": true, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": []}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}], "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}]}]}}} + application/json: {"MediaContainer": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}]}, {"type": "tag", "Operator": []}], "size": 70, "totalSize": 170, "offset": 0, "content": "secondary", "allowSync": true, "nocache": true, "art": "/:/resources/movie-fanart.jpg", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "title2": "Recently Released", "viewGroup": "movie", "viewMode": 65592, "mixedParents": true, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": []}], "Genre": [{"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}, {"tag": "James Cameron"}, {"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}, {"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}, {"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "studio": "20th Century Studios", "skipChildren": false, "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionKey": "/library/sections/1", "type": "movie", "title": "Avatar: The Way of Water", "slug": "4-for-texas", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "seasonCount": 2022, "tagline": "Return to Pandora.", "flattenSeasons": "1", "episodeSort": "0", "enableCreditsMarkerGeneration": "-1", "showOrdering": "absolute", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "banner": "/library/metadata/58683/banner/1703239236", "duration": 11558112, "originallyAvailableAt": "2022-12-14T00:00:00Z", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "ratingImage": "rottentomatoes://image.rating.ripe", "grandparentRatingKey": "66", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "parentSlug": "alice-in-borderland-2020", "grandparentSlug": "alice-in-borderland-2020", "grandparentArt": "/library/metadata/66/art/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "Media": [{"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}, {"id": 119534, "duration": 11558112, "bitrate": 25025, "width": 3840, "height": 2072, "aspectRatio": 1.85, "audioProfile": "dts", "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "optimizedForStreaming": 1, "has64bitOffsets": false, "Part": [{"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}, {"id": 119542, "key": "/library/parts/119542/1680457526/file.mkv", "duration": 11558112, "file": "/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv", "size": 36158371307, "container": "mkv", "audioProfile": "dts", "has64bitOffsets": false, "optimizedForStreaming": false, "videoProfile": "main 10", "indexes": "sd", "hasThumbnail": "1", "Stream": [{"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}, {"id": 272796, "streamType": 1, "default": true, "selected": true, "codec": "h264", "index": 0, "bitrate": 6273, "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "bitDepth": 8, "chromaLocation": "left", "streamIdentifier": "2", "chromaSubsampling": "4:2:0", "codedHeight": 1088, "codedWidth": 1920, "frameRate": 29.97, "hasScalingMatrix": false, "hearingImpaired": false, "closedCaptions": false, "embeddedInVideo": "1", "height": 1080, "level": 40, "profile": "main", "refFrames": 4, "scanType": "progressive", "width": 1920, "displayTitle": "1080p (H.264)", "extendedDisplayTitle": "1080p (H.264)", "channels": 2, "language": "English", "languageTag": "en", "languageCode": "eng", "audioChannelLayout": "stereo", "samplingRate": 48000, "title": "English", "canAutoSync": false}]}]}], "Genre": [{"tag": "Adventure"}, {"tag": "Adventure"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "James Cameron"}], "Writer": [{"tag": "James Cameron"}], "Collection": [{"tag": "Working NL Subs"}], "Role": [{"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}, {"id": 294129, "filter": "actor=294129", "thumb": "https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg", "tag": "Mike Smith", "tagKey": "668e7e7b22bcad9064350c91", "role": "Self"}], "Location": [{"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}, {"path": "/TV Shows/House"}], "Guid": [{"id": "imdb://tt13015952"}, {"id": "imdb://tt13015952"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Rating": [{"image": "themoviedb://image.rating", "value": 3, "type": "audience"}, {"image": "themoviedb://image.rating", "value": 3, "type": "audience"}], "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "titleSort": "Whale", "viewCount": 1, "lastViewedAt": 1682752242, "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "viewOffset": 5222500, "skipCount": 1, "index": 1, "theme": "/library/metadata/1/theme/1705636920", "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "hasPremiumExtras": "1", "hasPremiumPrimaryExtra": "1", "parentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "parentStudio": "UCP", "parentKey": "/library/metadata/66", "parentTitle": "Caprica", "parentIndex": 1, "parentYear": 2010, "parentThumb": "/library/metadata/66/thumb/1705716261", "parentTheme": "/library/metadata/66/theme/1705716261"}], "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "show", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter"}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}, {"key": "=", "title": "is"}, {"key": "=", "title": "is"}]}, {"type": "tag", "Operator": [{"key": "=", "title": "is"}]}]}}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2796,7 +2893,7 @@ examples: type: 2 responses: "200": - application/json: {"MediaContainer": {"size": 50, "identifier": "com.plexapp.plugins.library", "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Shows (Reality)", "title2": "By Genre", "viewGroup": "secondary", "Directory": [{"fastKey": "/library/sections/10/all?genre=89", "key": "89", "title": "Action", "type": "genre"}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "Directory": [{"fastKey": "/library/sections/10/all?genre=89", "key": "89", "title": "Action", "type": "genre"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2810,7 +2907,7 @@ examples: type: 2 responses: "200": - application/json: {"MediaContainer": {"size": 50, "identifier": "com.plexapp.plugins.library", "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Series", "title2": "By Country", "viewGroup": "secondary", "Directory": [{"fastKey": "/library/sections/2/all?country=15491", "key": "15491", "title": "Japan"}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "Directory": [{"fastKey": "/library/sections/2/all?country=15491", "key": "15491", "title": "Japan"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -2874,10 +2971,31 @@ examples: asyncRefreshLocalMediaAgent: true responses: "200": - application/json: {"MediaContainer": {"size": 50, "allowSync": false, "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "Metadata": [{"ratingKey": "44288", "parentRatingKey": "48047", "grandparentRatingKey": "45520", "parentGuid": "plex://season/618b89208dde18df707ad15c", "grandparentGuid": "plex://show/5e16253691c20300412003a8", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/45520", "parentKey": "/library/metadata/48047", "key": "/library/metadata/44288/children", "guid": "plex://show/5d9c08254eefaa001f5d6dcb", "slug": "better-call-saul", "studio": "Sony Pictures Television", "type": "show", "title": "Better Call Saul", "originalTitle": "Wicked: Part I", "librarySectionTitle": "TV Series ", "librarySectionID": 2, "librarySectionKey": "/library/sections/2", "contentRating": "TV-MA", "summary": "Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to \"Breaking Bad\" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman.", "index": 1, "grandparentTitle": "Alice in Borderland", "parentTitle": "Season 2", "audienceRating": 8.7, "viewCount": 4, "skipCount": 1, "lastViewedAt": 1625764795, "year": 2015, "tagline": "Make the call", "chapterSource": "media", "primaryExtraKey": "/library/metadata/134704", "thumb": "/library/metadata/44288/thumb/1736487993", "art": "/library/metadata/44288/art/1736487993", "theme": "/library/metadata/44288/theme/1736487993", "duration": 2700000, "originallyAvailableAt": "2015-02-08", "leafCount": 63, "viewedLeafCount": 4, "childCount": 6, "addedAt": 1625505101, "updatedAt": 1736487993, "audienceRatingImage": "themoviedb://image.rating", "parentIndex": 2, "parentThumb": "/library/metadata/48047/thumb/1671800243", "grandparentThumb": "/library/metadata/45520/thumb/1736488003", "grandparentArt": "/library/metadata/45520/art/1736488003", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": []}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": []}], "Image": [{"alt": "Better Call Saul", "type": "coverPoster", "url": "/library/metadata/44288/thumb/1736487993"}, {"alt": "Better Call Saul", "type": "coverPoster", "url": "/library/metadata/44288/thumb/1736487993"}], "UltraBlurColors": {"topLeft": "11333a", "topRight": "1d2721", "bottomRight": "5c451d", "bottomLeft": "372c10"}, "Genre": [{"id": 1057, "filter": "genre=1057", "tag": "Crime"}], "Country": [{"id": 58591, "filter": "country=58591", "tag": "United States of America"}, {"id": 58591, "filter": "country=58591", "tag": "United States of America"}], "Guid": [{"id": "imdb://tt3032476"}], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Role": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Director": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Writer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}]}, {"ratingKey": "44288", "parentRatingKey": "48047", "grandparentRatingKey": "45520", "parentGuid": "plex://season/618b89208dde18df707ad15c", "grandparentGuid": "plex://show/5e16253691c20300412003a8", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/45520", "parentKey": "/library/metadata/48047", "key": "/library/metadata/44288/children", "guid": "plex://show/5d9c08254eefaa001f5d6dcb", "slug": "better-call-saul", "studio": "Sony Pictures Television", "type": "show", "title": "Better Call Saul", "originalTitle": "Wicked: Part I", "librarySectionTitle": "TV Series ", "librarySectionID": 2, "librarySectionKey": "/library/sections/2", "contentRating": "TV-MA", "summary": "Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to \"Breaking Bad\" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman.", "index": 1, "grandparentTitle": "Alice in Borderland", "parentTitle": "Season 2", "audienceRating": 8.7, "viewCount": 4, "skipCount": 1, "lastViewedAt": 1625764795, "year": 2015, "tagline": "Make the call", "chapterSource": "media", "primaryExtraKey": "/library/metadata/134704", "thumb": "/library/metadata/44288/thumb/1736487993", "art": "/library/metadata/44288/art/1736487993", "theme": "/library/metadata/44288/theme/1736487993", "duration": 2700000, "originallyAvailableAt": "2015-02-08", "leafCount": 63, "viewedLeafCount": 4, "childCount": 6, "addedAt": 1625505101, "updatedAt": 1736487993, "audienceRatingImage": "themoviedb://image.rating", "parentIndex": 2, "parentThumb": "/library/metadata/48047/thumb/1671800243", "grandparentThumb": "/library/metadata/45520/thumb/1736488003", "grandparentArt": "/library/metadata/45520/art/1736488003", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": []}], "Image": [], "UltraBlurColors": {"topLeft": "11333a", "topRight": "1d2721", "bottomRight": "5c451d", "bottomLeft": "372c10"}, "Genre": [{"id": 1057, "filter": "genre=1057", "tag": "Crime"}], "Country": [{"id": 58591, "filter": "country=58591", "tag": "United States of America"}, {"id": 58591, "filter": "country=58591", "tag": "United States of America"}], "Guid": [{"id": "imdb://tt3032476"}, {"id": "imdb://tt3032476"}], "Rating": [], "Role": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Director": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Writer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}, {"path": "/TV Shows/Better Call Saul"}]}, {"ratingKey": "44288", "parentRatingKey": "48047", "grandparentRatingKey": "45520", "parentGuid": "plex://season/618b89208dde18df707ad15c", "grandparentGuid": "plex://show/5e16253691c20300412003a8", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/45520", "parentKey": "/library/metadata/48047", "key": "/library/metadata/44288/children", "guid": "plex://show/5d9c08254eefaa001f5d6dcb", "slug": "better-call-saul", "studio": "Sony Pictures Television", "type": "show", "title": "Better Call Saul", "originalTitle": "Wicked: Part I", "librarySectionTitle": "TV Series ", "librarySectionID": 2, "librarySectionKey": "/library/sections/2", "contentRating": "TV-MA", "summary": "Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to \"Breaking Bad\" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman.", "index": 1, "grandparentTitle": "Alice in Borderland", "parentTitle": "Season 2", "audienceRating": 8.7, "viewCount": 4, "skipCount": 1, "lastViewedAt": 1625764795, "year": 2015, "tagline": "Make the call", "chapterSource": "media", "primaryExtraKey": "/library/metadata/134704", "thumb": "/library/metadata/44288/thumb/1736487993", "art": "/library/metadata/44288/art/1736487993", "theme": "/library/metadata/44288/theme/1736487993", "duration": 2700000, "originallyAvailableAt": "2015-02-08", "leafCount": 63, "viewedLeafCount": 4, "childCount": 6, "addedAt": 1625505101, "updatedAt": 1736487993, "audienceRatingImage": "themoviedb://image.rating", "parentIndex": 2, "parentThumb": "/library/metadata/48047/thumb/1671800243", "grandparentThumb": "/library/metadata/45520/thumb/1736488003", "grandparentArt": "/library/metadata/45520/art/1736488003", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": []}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Image": [{"alt": "Better Call Saul", "type": "coverPoster", "url": "/library/metadata/44288/thumb/1736487993"}], "UltraBlurColors": {"topLeft": "11333a", "topRight": "1d2721", "bottomRight": "5c451d", "bottomLeft": "372c10"}, "Genre": [{"id": 1057, "filter": "genre=1057", "tag": "Crime"}], "Country": [{"id": 58591, "filter": "country=58591", "tag": "United States of America"}, {"id": 58591, "filter": "country=58591", "tag": "United States of America"}], "Guid": [], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}, {"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Role": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Director": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Writer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}]}]}} + application/json: {"MediaContainer": {"size": 50, "allowSync": false, "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "Metadata": [{"ratingKey": "44288", "parentRatingKey": "48047", "grandparentRatingKey": "45520", "parentGuid": "plex://season/618b89208dde18df707ad15c", "grandparentGuid": "plex://show/5e16253691c20300412003a8", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/45520", "parentKey": "/library/metadata/48047", "key": "/library/metadata/44288/children", "guid": "plex://show/5d9c08254eefaa001f5d6dcb", "slug": "better-call-saul", "studio": "Sony Pictures Television", "type": "show", "title": "Better Call Saul", "originalTitle": "Wicked: Part I", "librarySectionTitle": "TV Series ", "librarySectionID": 2, "librarySectionKey": "/library/sections/2", "contentRating": "TV-MA", "summary": "Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to \"Breaking Bad\" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman.", "index": 1, "grandparentTitle": "Alice in Borderland", "parentTitle": "Season 2", "audienceRating": 8.7, "viewCount": 4, "skipCount": 1, "lastViewedAt": 1625764795, "year": 2015, "tagline": "Make the call", "chapterSource": "media", "primaryExtraKey": "/library/metadata/134704", "thumb": "/library/metadata/44288/thumb/1736487993", "art": "/library/metadata/44288/art/1736487993", "theme": "/library/metadata/44288/theme/1736487993", "duration": 2700000, "originallyAvailableAt": "2015-02-08", "leafCount": 63, "viewedLeafCount": 4, "childCount": 6, "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "themoviedb://image.rating", "parentIndex": 2, "parentThumb": "/library/metadata/48047/thumb/1671800243", "grandparentThumb": "/library/metadata/45520/thumb/1736488003", "grandparentArt": "/library/metadata/45520/art/1736488003", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": []}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": []}], "Image": [{"alt": "Better Call Saul", "type": "coverPoster", "url": "/library/metadata/44288/thumb/1736487993"}, {"alt": "Better Call Saul", "type": "coverPoster", "url": "/library/metadata/44288/thumb/1736487993"}], "UltraBlurColors": {"topLeft": "11333a", "topRight": "1d2721", "bottomRight": "5c451d", "bottomLeft": "372c10"}, "Genre": [{"id": 1057, "filter": "genre=1057", "tag": "Crime"}], "Country": [{"id": 58591, "filter": "country=58591", "tag": "United States of America"}, {"id": 58591, "filter": "country=58591", "tag": "United States of America"}], "Guid": [{"id": "imdb://tt3032476"}], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Role": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Director": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Writer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}]}, {"ratingKey": "44288", "parentRatingKey": "48047", "grandparentRatingKey": "45520", "parentGuid": "plex://season/618b89208dde18df707ad15c", "grandparentGuid": "plex://show/5e16253691c20300412003a8", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/45520", "parentKey": "/library/metadata/48047", "key": "/library/metadata/44288/children", "guid": "plex://show/5d9c08254eefaa001f5d6dcb", "slug": "better-call-saul", "studio": "Sony Pictures Television", "type": "show", "title": "Better Call Saul", "originalTitle": "Wicked: Part I", "librarySectionTitle": "TV Series ", "librarySectionID": 2, "librarySectionKey": "/library/sections/2", "contentRating": "TV-MA", "summary": "Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to \"Breaking Bad\" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman.", "index": 1, "grandparentTitle": "Alice in Borderland", "parentTitle": "Season 2", "audienceRating": 8.7, "viewCount": 4, "skipCount": 1, "lastViewedAt": 1625764795, "year": 2015, "tagline": "Make the call", "chapterSource": "media", "primaryExtraKey": "/library/metadata/134704", "thumb": "/library/metadata/44288/thumb/1736487993", "art": "/library/metadata/44288/art/1736487993", "theme": "/library/metadata/44288/theme/1736487993", "duration": 2700000, "originallyAvailableAt": "2015-02-08", "leafCount": 63, "viewedLeafCount": 4, "childCount": 6, "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "themoviedb://image.rating", "parentIndex": 2, "parentThumb": "/library/metadata/48047/thumb/1671800243", "grandparentThumb": "/library/metadata/45520/thumb/1736488003", "grandparentArt": "/library/metadata/45520/art/1736488003", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": []}], "Image": [], "UltraBlurColors": {"topLeft": "11333a", "topRight": "1d2721", "bottomRight": "5c451d", "bottomLeft": "372c10"}, "Genre": [{"id": 1057, "filter": "genre=1057", "tag": "Crime"}], "Country": [{"id": 58591, "filter": "country=58591", "tag": "United States of America"}, {"id": 58591, "filter": "country=58591", "tag": "United States of America"}], "Guid": [{"id": "imdb://tt3032476"}, {"id": "imdb://tt3032476"}], "Rating": [], "Role": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Director": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Writer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}, {"path": "/TV Shows/Better Call Saul"}]}, {"ratingKey": "44288", "parentRatingKey": "48047", "grandparentRatingKey": "45520", "parentGuid": "plex://season/618b89208dde18df707ad15c", "grandparentGuid": "plex://show/5e16253691c20300412003a8", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/45520", "parentKey": "/library/metadata/48047", "key": "/library/metadata/44288/children", "guid": "plex://show/5d9c08254eefaa001f5d6dcb", "slug": "better-call-saul", "studio": "Sony Pictures Television", "type": "show", "title": "Better Call Saul", "originalTitle": "Wicked: Part I", "librarySectionTitle": "TV Series ", "librarySectionID": 2, "librarySectionKey": "/library/sections/2", "contentRating": "TV-MA", "summary": "Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to \"Breaking Bad\" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman.", "index": 1, "grandparentTitle": "Alice in Borderland", "parentTitle": "Season 2", "audienceRating": 8.7, "viewCount": 4, "skipCount": 1, "lastViewedAt": 1625764795, "year": 2015, "tagline": "Make the call", "chapterSource": "media", "primaryExtraKey": "/library/metadata/134704", "thumb": "/library/metadata/44288/thumb/1736487993", "art": "/library/metadata/44288/art/1736487993", "theme": "/library/metadata/44288/theme/1736487993", "duration": 2700000, "originallyAvailableAt": "2015-02-08", "leafCount": 63, "viewedLeafCount": 4, "childCount": 6, "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "themoviedb://image.rating", "parentIndex": 2, "parentThumb": "/library/metadata/48047/thumb/1671800243", "grandparentThumb": "/library/metadata/45520/thumb/1736488003", "grandparentArt": "/library/metadata/45520/art/1736488003", "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": []}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "container": "mkv", "videoProfile": "main 10", "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Image": [{"alt": "Better Call Saul", "type": "coverPoster", "url": "/library/metadata/44288/thumb/1736487993"}], "UltraBlurColors": {"topLeft": "11333a", "topRight": "1d2721", "bottomRight": "5c451d", "bottomLeft": "372c10"}, "Genre": [{"id": 1057, "filter": "genre=1057", "tag": "Crime"}], "Country": [{"id": 58591, "filter": "country=58591", "tag": "United States of America"}, {"id": 58591, "filter": "country=58591", "tag": "United States of America"}], "Guid": [], "Rating": [{"image": "imdb://image.rating", "value": 9, "type": "audience"}, {"image": "imdb://image.rating", "value": 9, "type": "audience"}], "Role": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Director": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Writer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Producer": [{"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}, {"id": 109501, "filter": "actor=109501", "tag": "Bob Odenkirk", "tagKey": "5d77683254f42c001f8c3f69", "role": "Jimmy McGill", "thumb": "https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg"}], "Similar": [{"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}, {"id": 26, "filter": "similar=26", "tag": "Breaking Bad"}], "Location": [{"path": "/TV Shows/Better Call Saul"}]}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}, {"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} + get-all-media-library: + speakeasy-default-get-all-media-library: + parameters: + path: + sectionKey: 9518 + query: + type: 2 + includeMeta: 1 + includeGuids: 1 + includeAdvanced: 1 + includeCollections: 1 + includeExternalMedia: 1 + X-Plex-Container-Start: 0 + X-Plex-Container-Size: 50 + responses: + "200": + application/json: {"MediaContainer": {"size": 50, "totalSize": 50, "offset": 0, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 2, "librarySectionTitle": "TV Series", "librarySectionUUID": "e69655a2-ef48-4aba-bb19-0cc34d1e7d36", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1734362201, "thumb": "/:/resources/show.png", "nocache": true, "title1": "TV Series", "title2": "By Starring Actor", "viewGroup": "secondary", "Meta": {"Type": [{"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}, {"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}, {"key": "/library/sections/2/all?type=2", "type": "filter", "subtype": "clip", "title": "TV Shows", "active": false, "Filter": [{"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}, {"filter": "genre", "filterType": "string", "key": "/library/sections/2/genre?type=2", "title": "Genre", "type": "filter", "advanced": true}], "Sort": [{"default": "asc", "active": false, "activeDirection": "asc", "defaultDirection": "asc", "descKey": "titleSort:desc", "firstCharacterKey": "/library/sections/2/firstCharacter", "key": "titleSort", "title": "Title"}], "Field": [{"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}, {"key": "show.title", "title": "Show Title", "type": "string", "subType": "rating"}]}], "FieldType": [{"type": "tag", "Operator": []}]}, "Metadata": [{"ratingKey": "58683", "key": "/library/metadata/58683", "guid": "plex://movie/5d7768ba96b655001fdc0408", "slug": "4-for-texas", "studio": "20th Century Studios", "type": "movie", "title": "Avatar: The Way of Water", "titleSort": "Whale", "contentRating": "PG-13", "summary": "Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.\nOnce a familiar threat returns to finish what was previously started, Jake must\nwork with Neytiri and the army of the Na'vi race to protect their home.\n", "rating": 7.6, "audienceRating": 9.2, "year": 2022, "tagline": "Return to Pandora.", "thumb": "/library/metadata/58683/thumb/1703239236", "art": "/library/metadata/58683/art/1703239236", "theme": "/library/metadata/1/theme/1705636920", "index": 1, "leafCount": 14, "viewedLeafCount": 0, "childCount": 1, "seasonCount": 2022, "duration": 11558112, "originallyAvailableAt": "2022-12-14", "addedAt": 1556281940, "updatedAt": 1556281940, "audienceRatingImage": "rottentomatoes://image.rating.upright", "chapterSource": "media", "primaryExtraKey": "/library/metadata/58684", "originalTitle": "映画 ブラッククローバー 魔法帝の剣", "parentRatingKey": "66", "grandparentRatingKey": "66", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "grandparentSlug": "alice-in-borderland-2020", "grandparentKey": "/library/metadata/66", "parentKey": "/library/metadata/66", "grandparentTitle": "Caprica", "grandparentThumb": "/library/metadata/66/thumb/1705716261", "grandparentTheme": "/library/metadata/66/theme/1705716261", "grandparentArt": "/library/metadata/66/art/1705716261", "parentTitle": "Caprica", "parentIndex": 1, "parentThumb": "/library/metadata/66/thumb/1705716261", "ratingImage": "rottentomatoes://image.rating.ripe", "viewCount": 1, "viewOffset": 5222500, "skipCount": 1, "subtype": "clip", "lastRatedAt": 1721813113, "createdAtAccuracy": "epoch,local", "createdAtTZOffset": "0", "lastViewedAt": 1682752242, "userRating": 10, "Image": [{"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}, {"alt": "Episode 1", "type": "background", "url": "/library/metadata/45521/thumb/1644710589"}], "UltraBlurColors": {"topLeft": "11333b", "topRight": "0a232d", "bottomRight": "73958", "bottomLeft": "1f5066"}, "Media": [{"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": []}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}, {"id": 387322, "duration": 9610350, "bitrate": 25512, "width": 3840, "height": 1602, "aspectRatio": 2.35, "audioChannels": 6, "displayOffset": 50, "audioCodec": "eac3", "videoCodec": "hevc", "videoResolution": "4k", "container": "mkv", "videoFrameRate": "24p", "videoProfile": "main 10", "hasVoiceActivity": false, "audioProfile": "dts", "has64bitOffsets": false, "Part": [{"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}, {"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}, {"accessible": true, "exists": true, "id": 418385, "key": "/library/parts/418385/1735864239/file.mkv", "indexes": "sd", "duration": 9610350, "file": "/mnt/Movies_1/W/Wicked (2024).mkv", "size": 30649952104, "packetLength": 188, "container": "mkv", "videoProfile": "main 10", "audioProfile": "dts", "has64bitOffsets": false, "hasThumbnail": "1", "Stream": [{"id": 1002625, "streamType": 1, "default": true, "codec": "hevc", "index": 0, "bitrate": 24743, "language": "English", "languageTag": "en", "languageCode": "eng", "headerCompression": true, "DOVIBLCompatID": 1, "DOVIBLPresent": true, "DOVIELPresent": false, "DOVILevel": 6, "DOVIPresent": true, "DOVIProfile": 8, "DOVIRPUPresent": true, "DOVIVersion": "1.0", "bitDepth": 10, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codedHeight": 1608, "codedWidth": 3840, "colorPrimaries": "bt2020", "colorRange": "tv", "colorSpace": "bt2020nc", "colorTrc": "smpte2084", "frameRate": 23.976, "height": 1602, "level": 150, "original": true, "hasScalingMatrix": false, "profile": "main 10", "scanType": "progressive", "refFrames": 1, "width": 3840, "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)", "selected": true, "forced": true, "channels": 6, "audioChannelLayout": "5.1(side)", "samplingRate": 48000, "canAutoSync": false, "hearingImpaired": true, "dub": true, "title": "SDH"}]}]}], "Genre": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Country": [{"tag": "United States of America"}, {"tag": "United States of America"}, {"tag": "United States of America"}], "Director": [{"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}], "Writer": [{"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}], "Role": [{"tag": "Danny Boyle"}, {"tag": "Danny Boyle"}], "Guid": [{"id": "tvdb://2337"}, {"id": "tvdb://2337"}], "Collection": [{"tag": "My Awesome Collection"}]}]}} + "400": + application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} + "401": + application/json: {"errors": [{"code": 1001, "message": "User could not be authenticated", "status": 401}, {"code": 1001, "message": "User could not be authenticated", "status": 401}]} examplesVersion: 1.0.0 generatedTests: {} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 1d0f028..c51b4b8 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -13,7 +13,7 @@ generation: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: false csharp: - version: 0.13.6 + version: 0.14.0 additionalDependencies: [] author: LukeHagar clientServerStatusCodesAsErrors: true diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 23cc388..47366a2 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,4 +1,4 @@ -speakeasyVersion: 1.487.0 +speakeasyVersion: 1.487.1 sources: my-source: sourceNamespace: my-source @@ -16,19 +16,19 @@ sources: - main plexapi: sourceNamespace: plexapi - sourceRevisionDigest: sha256:49536684a97842ea7c069f909012b31a22a046d8277aee47b50a334494bf2c64 - sourceBlobDigest: sha256:eac671ea32ce31e1e558839153f7effef39bb35b4e461c6e95661d0eaf4ce1c8 + sourceRevisionDigest: sha256:0efb9039972533bf1190dfc1ffb377429a8e486b6299442e732f662c1ffbeca6 + sourceBlobDigest: sha256:038d73166cc9db17f514d511cfe4365ea032f4ebcb247fa86b7aa1bba0e1ab46 tags: - latest - - speakeasy-sdk-regen-1738887697 + - speakeasy-sdk-regen-1739146933 targets: plexcsharp: source: plexapi sourceNamespace: plexapi - sourceRevisionDigest: sha256:49536684a97842ea7c069f909012b31a22a046d8277aee47b50a334494bf2c64 - sourceBlobDigest: sha256:eac671ea32ce31e1e558839153f7effef39bb35b4e461c6e95661d0eaf4ce1c8 + sourceRevisionDigest: sha256:0efb9039972533bf1190dfc1ffb377429a8e486b6299442e732f662c1ffbeca6 + sourceBlobDigest: sha256:038d73166cc9db17f514d511cfe4365ea032f4ebcb247fa86b7aa1bba0e1ab46 codeSamplesNamespace: code-samples-csharp-plexcsharp - codeSamplesRevisionDigest: sha256:1ae1692b51b662e5da48795a9118d7f40874d39ecad5ef299754f2eade9f681f + codeSamplesRevisionDigest: sha256:73c2ef95b19f0498eb4d3f8f694f80fc8a44bd773663a44ffb66bcbcfa6d3f42 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/LukeHagar/PlexAPI/SDK/Activities.cs b/LukeHagar/PlexAPI/SDK/Activities.cs index 7a82efc..821b75d 100644 --- a/LukeHagar/PlexAPI/SDK/Activities.cs +++ b/LukeHagar/PlexAPI/SDK/Activities.cs @@ -74,10 +74,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Authentication.cs b/LukeHagar/PlexAPI/SDK/Authentication.cs index 422f8e2..aeaecc3 100644 --- a/LukeHagar/PlexAPI/SDK/Authentication.cs +++ b/LukeHagar/PlexAPI/SDK/Authentication.cs @@ -95,10 +95,10 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Butler.cs b/LukeHagar/PlexAPI/SDK/Butler.cs index b9eca70..9ebb5f1 100644 --- a/LukeHagar/PlexAPI/SDK/Butler.cs +++ b/LukeHagar/PlexAPI/SDK/Butler.cs @@ -101,10 +101,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Hubs.cs b/LukeHagar/PlexAPI/SDK/Hubs.cs index 9fc2689..f184f0e 100644 --- a/LukeHagar/PlexAPI/SDK/Hubs.cs +++ b/LukeHagar/PlexAPI/SDK/Hubs.cs @@ -73,10 +73,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Library.cs b/LukeHagar/PlexAPI/SDK/Library.cs index 60968a7..880d5f0 100644 --- a/LukeHagar/PlexAPI/SDK/Library.cs +++ b/LukeHagar/PlexAPI/SDK/Library.cs @@ -153,6 +153,16 @@ namespace LukeHagar.PlexAPI.SDK /// Task GetLibraryItemsAsync(GetLibraryItemsRequest request); + /// + /// Get all media of library + /// + /// + /// Retrieves a list of all general media data for this library.
+ /// + ///
+ ///
+ Task GetAllMediaLibraryAsync(GetAllMediaLibraryRequest request); + /// /// Refresh Metadata Of The Library /// @@ -282,10 +292,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; @@ -897,6 +907,106 @@ namespace LukeHagar.PlexAPI.SDK throw new Models.Errors.SDKException("Unknown status code received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); } + public async Task GetAllMediaLibraryAsync(GetAllMediaLibraryRequest request) + { + string baseUrl = this.SDKConfiguration.GetTemplatedServerUrl(); + var urlString = URLBuilder.Build(baseUrl, "/library/sections/{sectionKey}/all", request); + + var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString); + httpRequest.Headers.Add("user-agent", _userAgent); + + if (_securitySource != null) + { + httpRequest = new SecurityMetadata(_securitySource).Apply(httpRequest); + } + + var hookCtx = new HookContext("get-all-media-library", null, _securitySource); + + httpRequest = await this.SDKConfiguration.Hooks.BeforeRequestAsync(new BeforeRequestContext(hookCtx), httpRequest); + + HttpResponseMessage httpResponse; + try + { + httpResponse = await _client.SendAsync(httpRequest); + int _statusCode = (int)httpResponse.StatusCode; + + if (_statusCode == 400 || _statusCode == 401 || _statusCode == 404 || _statusCode >= 400 && _statusCode < 500 || _statusCode >= 500 && _statusCode < 600) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), httpResponse, null); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + } + } + catch (Exception error) + { + var _httpResponse = await this.SDKConfiguration.Hooks.AfterErrorAsync(new AfterErrorContext(hookCtx), null, error); + if (_httpResponse != null) + { + httpResponse = _httpResponse; + } + else + { + throw; + } + } + + httpResponse = await this.SDKConfiguration.Hooks.AfterSuccessAsync(new AfterSuccessContext(hookCtx), httpResponse); + + var contentType = httpResponse.Content.Headers.ContentType?.MediaType; + int responseStatusCode = (int)httpResponse.StatusCode; + if(responseStatusCode == 200) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); + var response = new GetAllMediaLibraryResponse() + { + StatusCode = responseStatusCode, + ContentType = contentType, + RawResponse = httpResponse + }; + response.Object = obj; + return response; + } + + throw new Models.Errors.SDKException("Unknown content type received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); + } + else if(responseStatusCode == 400) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); + obj!.RawResponse = httpResponse; + throw obj!; + } + + throw new Models.Errors.SDKException("Unknown content type received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); + } + else if(responseStatusCode == 401) + { + if(Utilities.IsContentTypeMatch("application/json", contentType)) + { + var obj = ResponseBodyDeserializer.Deserialize(await httpResponse.Content.ReadAsStringAsync(), NullValueHandling.Ignore); + obj!.RawResponse = httpResponse; + throw obj!; + } + + throw new Models.Errors.SDKException("Unknown content type received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); + } + else if(responseStatusCode == 404 || responseStatusCode >= 400 && responseStatusCode < 500) + { + throw new Models.Errors.SDKException("API error occurred", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); + } + else if(responseStatusCode >= 500 && responseStatusCode < 600) + { + throw new Models.Errors.SDKException("API error occurred", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); + } + + throw new Models.Errors.SDKException("Unknown status code received", responseStatusCode, await httpResponse.Content.ReadAsStringAsync(), httpResponse); + } + public async Task GetRefreshLibraryMetadataAsync(int sectionKey, Force? force = null) { var request = new GetRefreshLibraryMetadataRequest() diff --git a/LukeHagar/PlexAPI/SDK/Log.cs b/LukeHagar/PlexAPI/SDK/Log.cs index 44db8f1..137ba62 100644 --- a/LukeHagar/PlexAPI/SDK/Log.cs +++ b/LukeHagar/PlexAPI/SDK/Log.cs @@ -94,10 +94,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj b/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj index a450cd2..ee22337 100644 --- a/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj +++ b/LukeHagar/PlexAPI/SDK/LukeHagar.PlexAPI.SDK.csproj @@ -3,7 +3,7 @@ true LukeHagar.PlexAPI.SDK - 0.13.6 + 0.14.0 net8.0 LukeHagar Copyright (c) LukeHagar 2025 diff --git a/LukeHagar/PlexAPI/SDK/Media.cs b/LukeHagar/PlexAPI/SDK/Media.cs index c5903a1..63a278e 100644 --- a/LukeHagar/PlexAPI/SDK/Media.cs +++ b/LukeHagar/PlexAPI/SDK/Media.cs @@ -90,10 +90,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs new file mode 100644 index 0000000..f227aad --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryBadRequest.cs @@ -0,0 +1,34 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + /// + /// Bad Request - A parameter was not specified, or was specified incorrectly. + /// + public class GetAllMediaLibraryBadRequest : Exception + { + + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs new file mode 100644 index 0000000..e2d6c42 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs new file mode 100644 index 0000000..0cc361e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryLibraryErrors.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryLibraryErrors + { + + [JsonProperty("code")] + public int? Code { get; set; } + + [JsonProperty("message")] + public string? Message { get; set; } + + [JsonProperty("status")] + public int? Status { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs new file mode 100644 index 0000000..7a13d52 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Errors/GetAllMediaLibraryUnauthorized.cs @@ -0,0 +1,34 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Errors +{ + using LukeHagar.PlexAPI.SDK.Models.Errors; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + using System.Collections.Generic; + using System.Net.Http; + + /// + /// Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + /// + public class GetAllMediaLibraryUnauthorized : Exception + { + + [JsonProperty("errors")] + public List? Errors { get; set; } + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + [JsonProperty("-")] + public HttpResponseMessage? RawResponse { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryMediaContainer.cs index 54b9926..55b3721 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetActorsLibraryMediaContainer.cs @@ -17,8 +17,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetActorsLibraryMediaContainer { + /// + /// Number of media items returned in this response. + /// [JsonProperty("size")] - public double Size { get; set; } = default!; + public int Size { get; set; } = default!; /// /// Indicates whether syncing is allowed. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs new file mode 100644 index 0000000..89ef0d0 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryActiveDirection.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// The direction of the sort. Can be either `asc` or `desc`.
+ /// + /// + /// + /// + ///
+ public enum GetAllMediaLibraryActiveDirection + { + [JsonProperty("asc")] + Ascending, + [JsonProperty("desc")] + Descending, + } + + public static class GetAllMediaLibraryActiveDirectionExtension + { + public static string Value(this GetAllMediaLibraryActiveDirection value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static GetAllMediaLibraryActiveDirection ToEnum(this string value) + { + foreach(var field in typeof(GetAllMediaLibraryActiveDirection).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is GetAllMediaLibraryActiveDirection) + { + return (GetAllMediaLibraryActiveDirection)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryActiveDirection"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs new file mode 100644 index 0000000..a69f5a5 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCollection.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryCollection + { + + /// + /// The user-made collection this media item belongs to + /// + [JsonProperty("tag")] + public string Tag { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs new file mode 100644 index 0000000..63fbe60 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryCountry.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryCountry + { + + /// + /// The country of origin of this media item + /// + [JsonProperty("tag")] + public string Tag { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs new file mode 100644 index 0000000..479d76e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDefaultDirection.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// The direction of the sort. Can be either `asc` or `desc`.
+ /// + /// + /// + /// + ///
+ public enum GetAllMediaLibraryDefaultDirection + { + [JsonProperty("asc")] + Ascending, + [JsonProperty("desc")] + Descending, + } + + public static class GetAllMediaLibraryDefaultDirectionExtension + { + public static string Value(this GetAllMediaLibraryDefaultDirection value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static GetAllMediaLibraryDefaultDirection ToEnum(this string value) + { + foreach(var field in typeof(GetAllMediaLibraryDefaultDirection).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is GetAllMediaLibraryDefaultDirection) + { + return (GetAllMediaLibraryDefaultDirection)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryDefaultDirection"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs new file mode 100644 index 0000000..fae790a --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryDirector.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryDirector + { + + /// + /// The role of Director + /// + [JsonProperty("tag")] + public string Tag { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs new file mode 100644 index 0000000..fc704ab --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryField.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryField + { + + [JsonProperty("key")] + public string Key { get; set; } = default!; + + [JsonProperty("title")] + public string Title { get; set; } = default!; + + [JsonProperty("type")] + public string Type { get; set; } = default!; + + [JsonProperty("subType")] + public string? SubType { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs new file mode 100644 index 0000000..e8f4b4d --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFieldType.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class GetAllMediaLibraryFieldType + { + + [JsonProperty("type")] + public string Type { get; set; } = default!; + + [JsonProperty("Operator")] + public List Operator { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs new file mode 100644 index 0000000..9027b0e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryFilter.cs @@ -0,0 +1,36 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryFilter + { + + [JsonProperty("filter")] + public string Filter { get; set; } = default!; + + [JsonProperty("filterType")] + public string FilterType { get; set; } = default!; + + [JsonProperty("key")] + public string Key { get; set; } = default!; + + [JsonProperty("title")] + public string Title { get; set; } = default!; + + [JsonProperty("type")] + public string Type { get; set; } = default!; + + [JsonProperty("advanced")] + public bool? Advanced { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs new file mode 100644 index 0000000..5c3a02c --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryGenre.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryGenre + { + + /// + /// The country of origin of this media item + /// + [JsonProperty("tag")] + public string Tag { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs new file mode 100644 index 0000000..499a1c8 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryHasThumbnail.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// Indicates if the part has a thumbnail. + /// + public enum GetAllMediaLibraryHasThumbnail + { + [JsonProperty("0")] + False, + [JsonProperty("1")] + True, + } + + public static class GetAllMediaLibraryHasThumbnailExtension + { + public static string Value(this GetAllMediaLibraryHasThumbnail value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static GetAllMediaLibraryHasThumbnail ToEnum(this string value) + { + foreach(var field in typeof(GetAllMediaLibraryHasThumbnail).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is GetAllMediaLibraryHasThumbnail) + { + return (GetAllMediaLibraryHasThumbnail)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryHasThumbnail"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs new file mode 100644 index 0000000..93291f1 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryImage.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryImage + { + + [JsonProperty("alt")] + public string Alt { get; set; } = default!; + + [JsonProperty("type")] + public GetAllMediaLibraryLibraryResponseType Type { get; set; } = default!; + + [JsonProperty("url")] + public string Url { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs new file mode 100644 index 0000000..c5eecc5 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.cs @@ -0,0 +1,199 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using Newtonsoft.Json.Linq; + using System; + using System.Collections.Generic; + using System.Numerics; + using System.Reflection; + + + public class GetAllMediaLibraryLibraryOptimizedForStreamingType + { + private GetAllMediaLibraryLibraryOptimizedForStreamingType(string value) { Value = value; } + + public string Value { get; private set; } + public static GetAllMediaLibraryLibraryOptimizedForStreamingType GetAllMediaLibraryOptimizedForStreaming1 { get { return new GetAllMediaLibraryLibraryOptimizedForStreamingType("get-all-media-library_optimizedForStreaming_1"); } } + + public static GetAllMediaLibraryLibraryOptimizedForStreamingType Boolean { get { return new GetAllMediaLibraryLibraryOptimizedForStreamingType("boolean"); } } + + public static GetAllMediaLibraryLibraryOptimizedForStreamingType Null { get { return new GetAllMediaLibraryLibraryOptimizedForStreamingType("null"); } } + + public override string ToString() { return Value; } + public static implicit operator String(GetAllMediaLibraryLibraryOptimizedForStreamingType v) { return v.Value; } + public static GetAllMediaLibraryLibraryOptimizedForStreamingType FromString(string v) { + switch(v) { + case "get-all-media-library_optimizedForStreaming_1": return GetAllMediaLibraryOptimizedForStreaming1; + case "boolean": return Boolean; + case "null": return Null; + default: throw new ArgumentException("Invalid value for GetAllMediaLibraryLibraryOptimizedForStreamingType"); + } + } + public override bool Equals(object? obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + return Value.Equals(((GetAllMediaLibraryLibraryOptimizedForStreamingType)obj).Value); + } + + public override int GetHashCode() + { + return Value.GetHashCode(); + } + } + + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonConverter(typeof(GetAllMediaLibraryLibraryOptimizedForStreaming.GetAllMediaLibraryLibraryOptimizedForStreamingConverter))] + public class GetAllMediaLibraryLibraryOptimizedForStreaming { + public GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType type) { + Type = type; + } + + [SpeakeasyMetadata("form:explode=true")] + public GetAllMediaLibraryOptimizedForStreaming1? GetAllMediaLibraryOptimizedForStreaming1 { get; set; } + + [SpeakeasyMetadata("form:explode=true")] + public bool? Boolean { get; set; } + + public GetAllMediaLibraryLibraryOptimizedForStreamingType Type { get; set; } + + + public static GetAllMediaLibraryLibraryOptimizedForStreaming CreateGetAllMediaLibraryOptimizedForStreaming1(GetAllMediaLibraryOptimizedForStreaming1 getAllMediaLibraryOptimizedForStreaming1) { + GetAllMediaLibraryLibraryOptimizedForStreamingType typ = GetAllMediaLibraryLibraryOptimizedForStreamingType.GetAllMediaLibraryOptimizedForStreaming1; + + GetAllMediaLibraryLibraryOptimizedForStreaming res = new GetAllMediaLibraryLibraryOptimizedForStreaming(typ); + res.GetAllMediaLibraryOptimizedForStreaming1 = getAllMediaLibraryOptimizedForStreaming1; + return res; + } + + public static GetAllMediaLibraryLibraryOptimizedForStreaming CreateBoolean(bool boolean) { + GetAllMediaLibraryLibraryOptimizedForStreamingType typ = GetAllMediaLibraryLibraryOptimizedForStreamingType.Boolean; + + GetAllMediaLibraryLibraryOptimizedForStreaming res = new GetAllMediaLibraryLibraryOptimizedForStreaming(typ); + res.Boolean = boolean; + return res; + } + + public static GetAllMediaLibraryLibraryOptimizedForStreaming CreateNull() { + GetAllMediaLibraryLibraryOptimizedForStreamingType typ = GetAllMediaLibraryLibraryOptimizedForStreamingType.Null; + return new GetAllMediaLibraryLibraryOptimizedForStreaming(typ); + } + + public class GetAllMediaLibraryLibraryOptimizedForStreamingConverter : JsonConverter + { + + public override bool CanConvert(System.Type objectType) => objectType == typeof(GetAllMediaLibraryLibraryOptimizedForStreaming); + + public override bool CanRead => true; + + public override object? ReadJson(JsonReader reader, System.Type objectType, object? existingValue, JsonSerializer serializer) + { + var json = JRaw.Create(reader).ToString(); + if (json == "null") + { + return null; + } + + var fallbackCandidates = new List<(System.Type, object, string)>(); + + try + { + return new GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType.GetAllMediaLibraryOptimizedForStreaming1) + { + GetAllMediaLibraryOptimizedForStreaming1 = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) + }; + } + catch (ResponseBodyDeserializer.MissingMemberException) + { + fallbackCandidates.Add((typeof(GetAllMediaLibraryOptimizedForStreaming1), new GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType.GetAllMediaLibraryOptimizedForStreaming1), "GetAllMediaLibraryOptimizedForStreaming1")); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next option + } + catch (Exception) + { + throw; + } + + try + { + var converted = Convert.ToBoolean(json); + return new GetAllMediaLibraryLibraryOptimizedForStreaming(GetAllMediaLibraryLibraryOptimizedForStreamingType.Boolean) + { + Boolean = converted + }; + } + catch (System.FormatException) + { + // try next option + } + + if (fallbackCandidates.Count > 0) + { + fallbackCandidates.Sort((a, b) => ResponseBodyDeserializer.CompareFallbackCandidates(a.Item1, b.Item1, json)); + foreach(var (deserializationType, returnObject, propertyName) in fallbackCandidates) + { + try + { + return ResponseBodyDeserializer.DeserializeUndiscriminatedUnionFallback(deserializationType, returnObject, propertyName, json); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next fallback option + } + catch (Exception) + { + throw; + } + } + } + + throw new InvalidOperationException("Could not deserialize into any supported types."); + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + if (value == null) { + writer.WriteRawValue("null"); + return; + } + GetAllMediaLibraryLibraryOptimizedForStreaming res = (GetAllMediaLibraryLibraryOptimizedForStreaming)value; + if (GetAllMediaLibraryLibraryOptimizedForStreamingType.FromString(res.Type).Equals(GetAllMediaLibraryLibraryOptimizedForStreamingType.Null)) + { + writer.WriteRawValue("null"); + return; + } + if (res.GetAllMediaLibraryOptimizedForStreaming1 != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.GetAllMediaLibraryOptimizedForStreaming1)); + return; + } + if (res.Boolean != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.Boolean)); + return; + } + + } + + } + + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs new file mode 100644 index 0000000..b7341cc --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryResponseType.cs @@ -0,0 +1,61 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + public enum GetAllMediaLibraryLibraryResponseType + { + [JsonProperty("coverPoster")] + CoverPoster, + [JsonProperty("background")] + Background, + [JsonProperty("snapshot")] + Snapshot, + [JsonProperty("clearLogo")] + ClearLogo, + } + + public static class GetAllMediaLibraryLibraryResponseTypeExtension + { + public static string Value(this GetAllMediaLibraryLibraryResponseType value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static GetAllMediaLibraryLibraryResponseType ToEnum(this string value) + { + foreach(var field in typeof(GetAllMediaLibraryLibraryResponseType).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is GetAllMediaLibraryLibraryResponseType) + { + return (GetAllMediaLibraryLibraryResponseType)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryLibraryResponseType"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs new file mode 100644 index 0000000..35e11d6 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryLibraryType.cs @@ -0,0 +1,72 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// The type of media content
+ /// + /// + /// + /// + ///
+ public enum GetAllMediaLibraryLibraryType + { + [JsonProperty("movie")] + Movie, + [JsonProperty("show")] + TvShow, + [JsonProperty("season")] + Season, + [JsonProperty("episode")] + Episode, + [JsonProperty("artist")] + Artist, + [JsonProperty("album")] + Album, + } + + public static class GetAllMediaLibraryLibraryTypeExtension + { + public static string Value(this GetAllMediaLibraryLibraryType value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static GetAllMediaLibraryLibraryType ToEnum(this string value) + { + foreach(var field in typeof(GetAllMediaLibraryLibraryType).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is GetAllMediaLibraryLibraryType) + { + return (GetAllMediaLibraryLibraryType)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum GetAllMediaLibraryLibraryType"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs new file mode 100644 index 0000000..c8dbffe --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMedia.cs @@ -0,0 +1,133 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class GetAllMediaLibraryMedia + { + + /// + /// Unique media identifier. + /// + [JsonProperty("id")] + public long Id { get; set; } = default!; + + /// + /// Duration of the media in milliseconds. + /// + [JsonProperty("duration")] + public int? Duration { get; set; } + + /// + /// Bitrate in bits per second. + /// + [JsonProperty("bitrate")] + public int? Bitrate { get; set; } + + /// + /// Video width in pixels. + /// + [JsonProperty("width")] + public int? Width { get; set; } + + /// + /// Video height in pixels. + /// + [JsonProperty("height")] + public int? Height { get; set; } + + /// + /// Aspect ratio of the video. + /// + [JsonProperty("aspectRatio")] + public float? AspectRatio { get; set; } + + /// + /// Number of audio channels. + /// + [JsonProperty("audioChannels")] + public int? AudioChannels { get; set; } + + [JsonProperty("displayOffset")] + public int? DisplayOffset { get; set; } + + /// + /// Audio codec used. + /// + [JsonProperty("audioCodec")] + public string? AudioCodec { get; set; } + + /// + /// Video codec used. + /// + [JsonProperty("videoCodec")] + public string? VideoCodec { get; set; } + + /// + /// Video resolution (e.g., 4k). + /// + [JsonProperty("videoResolution")] + public string? VideoResolution { get; set; } + + /// + /// File container type. + /// + [JsonProperty("container")] + public string? Container { get; set; } + + /// + /// Frame rate of the video. Values found include NTSC, PAL, 24p
+ /// + /// + /// + /// + ///
+ [JsonProperty("videoFrameRate")] + public string? VideoFrameRate { get; set; } + + /// + /// Video profile (e.g., main 10). + /// + [JsonProperty("videoProfile")] + public string? VideoProfile { get; set; } + + /// + /// Indicates whether voice activity is detected. + /// + [JsonProperty("hasVoiceActivity")] + public bool HasVoiceActivity { get; set; } = default!; + + /// + /// The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). + /// + [JsonProperty("audioProfile")] + public string? AudioProfile { get; set; } + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonProperty("optimizedForStreaming")] + public GetAllMediaLibraryOptimizedForStreaming? OptimizedForStreaming { get; set; } + + [JsonProperty("has64bitOffsets")] + public bool? Has64bitOffsets { get; set; } + + /// + /// An array of parts for this media item. + /// + [JsonProperty("Part")] + public List Part { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs new file mode 100644 index 0000000..3afe72c --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMediaContainer.cs @@ -0,0 +1,138 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class GetAllMediaLibraryMediaContainer + { + + /// + /// Number of media items returned in this response. + /// + [JsonProperty("size")] + public int Size { get; set; } = default!; + + /// + /// Total number of media items in the library. + /// + [JsonProperty("totalSize")] + public int TotalSize { get; set; } = default!; + + /// + /// Offset value for pagination. + /// + [JsonProperty("offset")] + public long Offset { get; set; } = default!; + + /// + /// Indicates whether syncing is allowed. + /// + [JsonProperty("allowSync")] + public bool AllowSync { get; set; } = default!; + + /// + /// URL for the background artwork of the media container. + /// + [JsonProperty("art")] + public string Art { get; set; } = default!; + + /// + /// The content type or mode. + /// + [JsonProperty("content")] + public string Content { get; set; } = default!; + + /// + /// An plugin identifier for the media container. + /// + [JsonProperty("identifier")] + public string Identifier { get; set; } = default!; + + /// + /// The unique identifier for the library section. + /// + [JsonProperty("librarySectionID")] + public long LibrarySectionID { get; set; } = default!; + + /// + /// The title of the library section. + /// + [JsonProperty("librarySectionTitle")] + public string LibrarySectionTitle { get; set; } = default!; + + /// + /// The universally unique identifier for the library section. + /// + [JsonProperty("librarySectionUUID")] + public string? LibrarySectionUUID { get; set; } + + /// + /// The prefix used for media tag resource paths. + /// + [JsonProperty("mediaTagPrefix")] + public string MediaTagPrefix { get; set; } = default!; + + /// + /// The version number for media tags. + /// + [JsonProperty("mediaTagVersion")] + public long MediaTagVersion { get; set; } = default!; + + /// + /// URL for the thumbnail image of the media container. + /// + [JsonProperty("thumb")] + public string Thumb { get; set; } = default!; + + /// + /// Specifies whether caching is disabled. + /// + [JsonProperty("nocache")] + public bool Nocache { get; set; } = default!; + + /// + /// The primary title of the media container. + /// + [JsonProperty("title1")] + public string Title1 { get; set; } = default!; + + /// + /// The secondary title of the media container. + /// + [JsonProperty("title2")] + public string Title2 { get; set; } = default!; + + /// + /// Identifier for the view group layout. + /// + [JsonProperty("viewGroup")] + public string ViewGroup { get; set; } = default!; + + /// + /// The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
+ /// + /// + /// + /// + ///
+ [JsonProperty("Meta")] + public GetAllMediaLibraryMeta? Meta { get; set; } + + /// + /// An array of metadata items. + /// + [JsonProperty("Metadata")] + public List? Metadata { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs new file mode 100644 index 0000000..aa2e2f3 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMeta.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + /// + /// The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
+ /// + /// + /// + /// + ///
+ public class GetAllMediaLibraryMeta + { + + [JsonProperty("Type")] + public List? Type { get; set; } + + [JsonProperty("FieldType")] + public List? FieldType { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs new file mode 100644 index 0000000..b8d656f --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryMetadata.cs @@ -0,0 +1,376 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using NodaTime; + using System.Collections.Generic; + + /// + /// Unknown
+ /// + /// + /// + /// + ///
+ public class GetAllMediaLibraryMetadata + { + + /// + /// The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API. + /// + [JsonProperty("ratingKey")] + public string RatingKey { get; set; } = default!; + + /// + /// The unique key for the media item. + /// + [JsonProperty("key")] + public string Key { get; set; } = default!; + + /// + /// The globally unique identifier for the media item. + /// + [JsonProperty("guid")] + public string Guid { get; set; } = default!; + + /// + /// A URL‐friendly version of the media title. + /// + [JsonProperty("slug")] + public string Slug { get; set; } = default!; + + /// + /// The studio that produced the media item. + /// + [JsonProperty("studio")] + public string? Studio { get; set; } + + [JsonProperty("type")] + public GetAllMediaLibraryLibraryType Type { get; set; } = default!; + + /// + /// The title of the media item. + /// + [JsonProperty("title")] + public string Title { get; set; } = default!; + + /// + /// The sort title used for ordering media items. + /// + [JsonProperty("titleSort")] + public string TitleSort { get; set; } = default!; + + /// + /// The content rating for the media item. + /// + [JsonProperty("contentRating")] + public string? ContentRating { get; set; } + + /// + /// A synopsis of the media item. + /// + [JsonProperty("summary")] + public string Summary { get; set; } = default!; + + /// + /// The critic rating for the media item. + /// + [JsonProperty("rating")] + public float Rating { get; set; } = default!; + + /// + /// The audience rating for the media item. + /// + [JsonProperty("audienceRating")] + public double AudienceRating { get; set; } = default!; + + /// + /// The release year of the media item. + /// + [JsonProperty("year")] + public int Year { get; set; } = default!; + + /// + /// A brief tagline for the media item. + /// + [JsonProperty("tagline")] + public string Tagline { get; set; } = default!; + + /// + /// The thumbnail image URL for the media item. + /// + [JsonProperty("thumb")] + public string Thumb { get; set; } = default!; + + /// + /// The art image URL for the media item. + /// + [JsonProperty("art")] + public string Art { get; set; } = default!; + + /// + /// The theme URL for the media item. + /// + [JsonProperty("theme")] + public string Theme { get; set; } = default!; + + /// + /// The index position of the media item. + /// + [JsonProperty("index")] + public int Index { get; set; } = default!; + + /// + /// The number of leaf items (end nodes) under this media item. + /// + [JsonProperty("leafCount")] + public int? LeafCount { get; set; } + + /// + /// The number of leaf items that have been viewed. + /// + [JsonProperty("viewedLeafCount")] + public int? ViewedLeafCount { get; set; } + + /// + /// The number of child items associated with this media item. + /// + [JsonProperty("childCount")] + public int ChildCount { get; set; } = default!; + + /// + /// The total number of seasons (for TV shows). + /// + [JsonProperty("seasonCount")] + public int SeasonCount { get; set; } = default!; + + /// + /// The duration of the media item in milliseconds. + /// + [JsonProperty("duration")] + public int Duration { get; set; } = default!; + + /// + /// The original release date of the media item. + /// + [JsonProperty("originallyAvailableAt")] + public LocalDate OriginallyAvailableAt { get; set; } = default!; + + [JsonProperty("addedAt")] + public long AddedAt { get; set; } = default!; + + /// + /// Unix epoch datetime in seconds + /// + [JsonProperty("updatedAt")] + public long? UpdatedAt { get; set; } + + /// + /// The URL for the audience rating image. + /// + [JsonProperty("audienceRatingImage")] + public string? AudienceRatingImage { get; set; } + + /// + /// The source from which chapter data is derived. + /// + [JsonProperty("chapterSource")] + public string? ChapterSource { get; set; } + + /// + /// The primary extra key associated with this media item. + /// + [JsonProperty("primaryExtraKey")] + public string? PrimaryExtraKey { get; set; } + + /// + /// The original title of the media item (if different). + /// + [JsonProperty("originalTitle")] + public string? OriginalTitle { get; set; } + + /// + /// The rating key of the parent media item. + /// + [JsonProperty("parentRatingKey")] + public string? ParentRatingKey { get; set; } + + /// + /// The rating key of the grandparent media item. + /// + [JsonProperty("grandparentRatingKey")] + public string? GrandparentRatingKey { get; set; } + + /// + /// The GUID of the parent media item. + /// + [JsonProperty("parentGuid")] + public string? ParentGuid { get; set; } + + /// + /// The GUID of the grandparent media item. + /// + [JsonProperty("grandparentGuid")] + public string? GrandparentGuid { get; set; } + + /// + /// The slug for the grandparent media item. + /// + [JsonProperty("grandparentSlug")] + public string? GrandparentSlug { get; set; } + + /// + /// The key of the grandparent media item. + /// + [JsonProperty("grandparentKey")] + public string? GrandparentKey { get; set; } + + /// + /// The key of the parent media item. + /// + [JsonProperty("parentKey")] + public string? ParentKey { get; set; } + + /// + /// The title of the grandparent media item. + /// + [JsonProperty("grandparentTitle")] + public string? GrandparentTitle { get; set; } + + /// + /// The thumbnail URL for the grandparent media item. + /// + [JsonProperty("grandparentThumb")] + public string? GrandparentThumb { get; set; } + + /// + /// The theme URL for the grandparent media item. + /// + [JsonProperty("grandparentTheme")] + public string? GrandparentTheme { get; set; } + + /// + /// The art URL for the grandparent media item. + /// + [JsonProperty("grandparentArt")] + public string? GrandparentArt { get; set; } + + /// + /// The title of the parent media item. + /// + [JsonProperty("parentTitle")] + public string? ParentTitle { get; set; } + + /// + /// The index position of the parent media item. + /// + [JsonProperty("parentIndex")] + public int? ParentIndex { get; set; } + + /// + /// The thumbnail URL for the parent media item. + /// + [JsonProperty("parentThumb")] + public string? ParentThumb { get; set; } + + /// + /// The URL for the rating image. + /// + [JsonProperty("ratingImage")] + public string? RatingImage { get; set; } + + /// + /// The number of times this media item has been viewed. + /// + [JsonProperty("viewCount")] + public int? ViewCount { get; set; } + + /// + /// The current playback offset (in milliseconds). + /// + [JsonProperty("viewOffset")] + public int? ViewOffset { get; set; } + + /// + /// The number of times this media item has been skipped. + /// + [JsonProperty("skipCount")] + public int? SkipCount { get; set; } + + /// + /// A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip. + /// + [JsonProperty("subtype")] + public string? Subtype { get; set; } + + /// + /// The Unix timestamp representing the last time the item was rated. + /// + [JsonProperty("lastRatedAt")] + public long? LastRatedAt { get; set; } + + /// + /// The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available). + /// + [JsonProperty("createdAtAccuracy")] + public string? CreatedAtAccuracy { get; set; } + + /// + /// The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC. + /// + [JsonProperty("createdAtTZOffset")] + public string? CreatedAtTZOffset { get; set; } + + /// + /// Unix timestamp for when the media item was last viewed. + /// + [JsonProperty("lastViewedAt")] + public int? LastViewedAt { get; set; } + + /// + /// The rating provided by a user for the item. This value is expressed as a decimal number. + /// + [JsonProperty("userRating")] + public float? UserRating { get; set; } + + [JsonProperty("Image")] + public List? Image { get; set; } + + [JsonProperty("UltraBlurColors")] + public GetAllMediaLibraryUltraBlurColors? UltraBlurColors { get; set; } + + [JsonProperty("Media")] + public List? Media { get; set; } + + [JsonProperty("Genre")] + public List? Genre { get; set; } + + [JsonProperty("Country")] + public List? Country { get; set; } + + [JsonProperty("Director")] + public List? Director { get; set; } + + [JsonProperty("Writer")] + public List? Writer { get; set; } + + [JsonProperty("Role")] + public List? Role { get; set; } + + [JsonProperty("Guid")] + public List? Guids { get; set; } + + [JsonProperty("Collection")] + public List? Collection { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs new file mode 100644 index 0000000..2cc2573 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOperator.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryOperator + { + + [JsonProperty("key")] + public string Key { get; set; } = default!; + + [JsonProperty("title")] + public string Title { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs new file mode 100644 index 0000000..cd13eb0 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.cs @@ -0,0 +1,199 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using Newtonsoft.Json.Linq; + using System; + using System.Collections.Generic; + using System.Numerics; + using System.Reflection; + + + public class GetAllMediaLibraryOptimizedForStreamingType + { + private GetAllMediaLibraryOptimizedForStreamingType(string value) { Value = value; } + + public string Value { get; private set; } + public static GetAllMediaLibraryOptimizedForStreamingType One { get { return new GetAllMediaLibraryOptimizedForStreamingType("1"); } } + + public static GetAllMediaLibraryOptimizedForStreamingType Boolean { get { return new GetAllMediaLibraryOptimizedForStreamingType("boolean"); } } + + public static GetAllMediaLibraryOptimizedForStreamingType Null { get { return new GetAllMediaLibraryOptimizedForStreamingType("null"); } } + + public override string ToString() { return Value; } + public static implicit operator String(GetAllMediaLibraryOptimizedForStreamingType v) { return v.Value; } + public static GetAllMediaLibraryOptimizedForStreamingType FromString(string v) { + switch(v) { + case "1": return One; + case "boolean": return Boolean; + case "null": return Null; + default: throw new ArgumentException("Invalid value for GetAllMediaLibraryOptimizedForStreamingType"); + } + } + public override bool Equals(object? obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + return Value.Equals(((GetAllMediaLibraryOptimizedForStreamingType)obj).Value); + } + + public override int GetHashCode() + { + return Value.GetHashCode(); + } + } + + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonConverter(typeof(GetAllMediaLibraryOptimizedForStreaming.GetAllMediaLibraryOptimizedForStreamingConverter))] + public class GetAllMediaLibraryOptimizedForStreaming { + public GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType type) { + Type = type; + } + + [SpeakeasyMetadata("form:explode=true")] + public One? One { get; set; } + + [SpeakeasyMetadata("form:explode=true")] + public bool? Boolean { get; set; } + + public GetAllMediaLibraryOptimizedForStreamingType Type { get; set; } + + + public static GetAllMediaLibraryOptimizedForStreaming CreateOne(One one) { + GetAllMediaLibraryOptimizedForStreamingType typ = GetAllMediaLibraryOptimizedForStreamingType.One; + + GetAllMediaLibraryOptimizedForStreaming res = new GetAllMediaLibraryOptimizedForStreaming(typ); + res.One = one; + return res; + } + + public static GetAllMediaLibraryOptimizedForStreaming CreateBoolean(bool boolean) { + GetAllMediaLibraryOptimizedForStreamingType typ = GetAllMediaLibraryOptimizedForStreamingType.Boolean; + + GetAllMediaLibraryOptimizedForStreaming res = new GetAllMediaLibraryOptimizedForStreaming(typ); + res.Boolean = boolean; + return res; + } + + public static GetAllMediaLibraryOptimizedForStreaming CreateNull() { + GetAllMediaLibraryOptimizedForStreamingType typ = GetAllMediaLibraryOptimizedForStreamingType.Null; + return new GetAllMediaLibraryOptimizedForStreaming(typ); + } + + public class GetAllMediaLibraryOptimizedForStreamingConverter : JsonConverter + { + + public override bool CanConvert(System.Type objectType) => objectType == typeof(GetAllMediaLibraryOptimizedForStreaming); + + public override bool CanRead => true; + + public override object? ReadJson(JsonReader reader, System.Type objectType, object? existingValue, JsonSerializer serializer) + { + var json = JRaw.Create(reader).ToString(); + if (json == "null") + { + return null; + } + + var fallbackCandidates = new List<(System.Type, object, string)>(); + + try + { + return new GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType.One) + { + One = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) + }; + } + catch (ResponseBodyDeserializer.MissingMemberException) + { + fallbackCandidates.Add((typeof(One), new GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType.One), "One")); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next option + } + catch (Exception) + { + throw; + } + + try + { + var converted = Convert.ToBoolean(json); + return new GetAllMediaLibraryOptimizedForStreaming(GetAllMediaLibraryOptimizedForStreamingType.Boolean) + { + Boolean = converted + }; + } + catch (System.FormatException) + { + // try next option + } + + if (fallbackCandidates.Count > 0) + { + fallbackCandidates.Sort((a, b) => ResponseBodyDeserializer.CompareFallbackCandidates(a.Item1, b.Item1, json)); + foreach(var (deserializationType, returnObject, propertyName) in fallbackCandidates) + { + try + { + return ResponseBodyDeserializer.DeserializeUndiscriminatedUnionFallback(deserializationType, returnObject, propertyName, json); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next fallback option + } + catch (Exception) + { + throw; + } + } + } + + throw new InvalidOperationException("Could not deserialize into any supported types."); + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + if (value == null) { + writer.WriteRawValue("null"); + return; + } + GetAllMediaLibraryOptimizedForStreaming res = (GetAllMediaLibraryOptimizedForStreaming)value; + if (GetAllMediaLibraryOptimizedForStreamingType.FromString(res.Type).Equals(GetAllMediaLibraryOptimizedForStreamingType.Null)) + { + writer.WriteRawValue("null"); + return; + } + if (res.One != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.One)); + return; + } + if (res.Boolean != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.Boolean)); + return; + } + + } + + } + + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs new file mode 100644 index 0000000..5668009 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public enum GetAllMediaLibraryOptimizedForStreaming1 + { + Zero = 0, + One = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs new file mode 100644 index 0000000..056d903 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryPart.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class GetAllMediaLibraryPart + { + + /// + /// Indicates if the part is accessible. + /// + [JsonProperty("accessible")] + public bool? Accessible { get; set; } + + /// + /// Indicates if the part exists. + /// + [JsonProperty("exists")] + public bool? Exists { get; set; } + + /// + /// Unique part identifier. + /// + [JsonProperty("id")] + public long Id { get; set; } = default!; + + /// + /// Key to access this part. + /// + [JsonProperty("key")] + public string Key { get; set; } = default!; + + [JsonProperty("indexes")] + public string? Indexes { get; set; } + + /// + /// Duration of the part in milliseconds. + /// + [JsonProperty("duration")] + public int? Duration { get; set; } + + /// + /// File path for the part. + /// + [JsonProperty("file")] + public string File { get; set; } = default!; + + /// + /// File size in bytes. + /// + [JsonProperty("size")] + public long Size { get; set; } = default!; + + [JsonProperty("packetLength")] + public int? PacketLength { get; set; } + + /// + /// Container format of the part. + /// + [JsonProperty("container")] + public string? Container { get; set; } + + /// + /// Video profile for the part. + /// + [JsonProperty("videoProfile")] + public string? VideoProfile { get; set; } + + /// + /// The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). + /// + [JsonProperty("audioProfile")] + public string? AudioProfile { get; set; } + + [JsonProperty("has64bitOffsets")] + public bool? Has64bitOffsets { get; set; } + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonProperty("optimizedForStreaming")] + public GetAllMediaLibraryLibraryOptimizedForStreaming? OptimizedForStreaming { get; set; } + + [JsonProperty("hasThumbnail")] + public GetAllMediaLibraryHasThumbnail? HasThumbnail { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryHasThumbnail.False; + + /// + /// An array of streams for this part. + /// + [JsonProperty("Stream")] + public List? Stream { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs new file mode 100644 index 0000000..7cc3339 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Adds the Meta object to the response
+ /// + /// + /// + /// + ///
+ public enum GetAllMediaLibraryQueryParamIncludeMeta + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs new file mode 100644 index 0000000..a37d2ff --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryQueryParamType.cs @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// The type of media to retrieve or filter by.
+ /// + /// + /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
+ ///
+ public enum GetAllMediaLibraryQueryParamType + { + Movie = 1, + TvShow = 2, + Season = 3, + Episode = 4, + Audio = 8, + Album = 9, + Track = 10, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs new file mode 100644 index 0000000..8d7ce49 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRequest.cs @@ -0,0 +1,97 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + + public class GetAllMediaLibraryRequest + { + + /// + /// The unique key of the Plex library.
+ /// + /// + /// Note: This is unique in the context of the Plex server.
+ /// + ///
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=sectionKey")] + public int SectionKey { get; set; } = default!; + + /// + /// The type of media to retrieve or filter by.
+ /// + /// + /// 1 = movie
+ /// 2 = show
+ /// 3 = season
+ /// 4 = episode
+ /// E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=type")] + public GetAllMediaLibraryQueryParamType Type { get; set; } = default!; + + /// + /// Adds the Meta object to the response
+ /// + /// + /// + /// + ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeMeta")] + public GetAllMediaLibraryQueryParamIncludeMeta? IncludeMeta { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryQueryParamIncludeMeta.Disable; + + /// + /// Adds the Guid object to the response
+ /// + /// + /// + /// + ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGuids")] + public QueryParamIncludeGuids? IncludeGuids { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.QueryParamIncludeGuids.Disable; + + [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeAdvanced")] + public IncludeAdvanced? IncludeAdvanced { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.IncludeAdvanced.Disable; + + [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeCollections")] + public QueryParamIncludeCollections? IncludeCollections { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.QueryParamIncludeCollections.Disable; + + [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeExternalMedia")] + public QueryParamIncludeExternalMedia? IncludeExternalMedia { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.QueryParamIncludeExternalMedia.Disable; + + /// + /// The index of the first item to return. If not specified, the first item will be returned.
+ /// + /// + /// If the number of items exceeds the limit, the response will be paginated.
+ /// By default this is 0
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=X-Plex-Container-Start")] + public int? XPlexContainerStart { get; set; } = 0; + + /// + /// The number of items to return. If not specified, all items will be returned.
+ /// + /// + /// If the number of items exceeds the limit, the response will be paginated.
+ /// By default this is 50
+ /// + ///
+ ///
+ [SpeakeasyMetadata("queryParam:style=form,explode=true,name=X-Plex-Container-Size")] + public int? XPlexContainerSize { get; set; } = 50; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs new file mode 100644 index 0000000..f4af377 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponse.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using System; + using System.Net.Http; + + public class GetAllMediaLibraryResponse + { + + /// + /// HTTP response content type for this operation + /// + public string? ContentType { get; set; } = default!; + + /// + /// HTTP response status code for this operation + /// + public int StatusCode { get; set; } = default!; + + /// + /// Raw HTTP response; suitable for custom response parsing + /// + public HttpResponseMessage RawResponse { get; set; } = default!; + + /// + /// Successful response containing media container data. + /// + public GetAllMediaLibraryResponseBody? Object { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs new file mode 100644 index 0000000..540e690 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryResponseBody.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + /// + /// Successful response containing media container data. + /// + public class GetAllMediaLibraryResponseBody + { + + [JsonProperty("MediaContainer")] + public GetAllMediaLibraryMediaContainer? MediaContainer { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs new file mode 100644 index 0000000..7ef82be --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryRole.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryRole + { + + /// + /// The name of the actor for this role + /// + [JsonProperty("tag")] + public string Tag { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs new file mode 100644 index 0000000..8276839 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibrarySort.cs @@ -0,0 +1,57 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibrarySort + { + + [JsonProperty("default")] + public string? Default { get; set; } + + [JsonProperty("active")] + public bool? Active { get; set; } + + /// + /// The direction of the sort. Can be either `asc` or `desc`.
+ /// + /// + /// + /// + ///
+ [JsonProperty("activeDirection")] + public GetAllMediaLibraryActiveDirection? ActiveDirection { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryActiveDirection.Ascending; + + /// + /// The direction of the sort. Can be either `asc` or `desc`.
+ /// + /// + /// + /// + ///
+ [JsonProperty("defaultDirection")] + public GetAllMediaLibraryDefaultDirection? DefaultDirection { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetAllMediaLibraryDefaultDirection.Ascending; + + [JsonProperty("descKey")] + public string? DescKey { get; set; } + + [JsonProperty("firstCharacterKey")] + public string? FirstCharacterKey { get; set; } + + [JsonProperty("key")] + public string Key { get; set; } = default!; + + [JsonProperty("title")] + public string Title { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs new file mode 100644 index 0000000..99f8475 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryStream.cs @@ -0,0 +1,291 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryStream + { + + /// + /// Unique stream identifier. + /// + [JsonProperty("id")] + public long Id { get; set; } = default!; + + /// + /// Stream type (1=video, 2=audio, 3=subtitle). + /// + [JsonProperty("streamType")] + public int StreamType { get; set; } = default!; + + /// + /// Indicates if this stream is default. + /// + [JsonProperty("default")] + public bool? Default { get; set; } + + /// + /// Codec used by the stream. + /// + [JsonProperty("codec")] + public string Codec { get; set; } = default!; + + /// + /// Index of the stream. + /// + [JsonProperty("index")] + public int Index { get; set; } = default!; + + /// + /// Bitrate of the stream. + /// + [JsonProperty("bitrate")] + public int? Bitrate { get; set; } + + /// + /// Language of the stream. + /// + [JsonProperty("language")] + public string Language { get; set; } = default!; + + /// + /// Language tag (e.g., en). + /// + [JsonProperty("languageTag")] + public string LanguageTag { get; set; } = default!; + + /// + /// ISO language code. + /// + [JsonProperty("languageCode")] + public string LanguageCode { get; set; } = default!; + + /// + /// Indicates whether header compression is enabled. + /// + [JsonProperty("headerCompression")] + public bool? HeaderCompression { get; set; } + + /// + /// Dolby Vision BL compatibility ID. + /// + [JsonProperty("DOVIBLCompatID")] + public int? DOVIBLCompatID { get; set; } + + /// + /// Indicates if Dolby Vision BL is present. + /// + [JsonProperty("DOVIBLPresent")] + public bool? DOVIBLPresent { get; set; } + + /// + /// Indicates if Dolby Vision EL is present. + /// + [JsonProperty("DOVIELPresent")] + public bool? DOVIELPresent { get; set; } + + /// + /// Dolby Vision level. + /// + [JsonProperty("DOVILevel")] + public int? DOVILevel { get; set; } + + /// + /// Indicates if Dolby Vision is present. + /// + [JsonProperty("DOVIPresent")] + public bool? DOVIPresent { get; set; } + + /// + /// Dolby Vision profile. + /// + [JsonProperty("DOVIProfile")] + public int? DOVIProfile { get; set; } + + /// + /// Indicates if Dolby Vision RPU is present. + /// + [JsonProperty("DOVIRPUPresent")] + public bool? DOVIRPUPresent { get; set; } + + /// + /// Dolby Vision version. + /// + [JsonProperty("DOVIVersion")] + public string? DOVIVersion { get; set; } + + /// + /// Bit depth of the video stream. + /// + [JsonProperty("bitDepth")] + public int? BitDepth { get; set; } + + /// + /// Chroma sample location. + /// + [JsonProperty("chromaLocation")] + public string? ChromaLocation { get; set; } + + /// + /// Chroma subsampling format. + /// + [JsonProperty("chromaSubsampling")] + public string? ChromaSubsampling { get; set; } + + /// + /// Coded video height. + /// + [JsonProperty("codedHeight")] + public int? CodedHeight { get; set; } + + /// + /// Coded video width. + /// + [JsonProperty("codedWidth")] + public int? CodedWidth { get; set; } + + /// + /// Color primaries used. + /// + [JsonProperty("colorPrimaries")] + public string? ColorPrimaries { get; set; } + + /// + /// Color range (e.g., tv). + /// + [JsonProperty("colorRange")] + public string? ColorRange { get; set; } + + /// + /// Color space. + /// + [JsonProperty("colorSpace")] + public string? ColorSpace { get; set; } + + /// + /// Color transfer characteristics. + /// + [JsonProperty("colorTrc")] + public string? ColorTrc { get; set; } + + /// + /// Frame rate of the stream. + /// + [JsonProperty("frameRate")] + public float? FrameRate { get; set; } + + /// + /// Height of the video stream. + /// + [JsonProperty("height")] + public int? Height { get; set; } + + /// + /// Video level. + /// + [JsonProperty("level")] + public int? Level { get; set; } + + /// + /// Indicates if this is the original stream. + /// + [JsonProperty("original")] + public bool? Original { get; set; } + + [JsonProperty("hasScalingMatrix")] + public bool? HasScalingMatrix { get; set; } + + /// + /// Video profile. + /// + [JsonProperty("profile")] + public string? Profile { get; set; } + + [JsonProperty("scanType")] + public string? ScanType { get; set; } + + /// + /// Number of reference frames. + /// + [JsonProperty("refFrames")] + public int? RefFrames { get; set; } + + /// + /// Width of the video stream. + /// + [JsonProperty("width")] + public int? Width { get; set; } + + /// + /// Display title for the stream. + /// + [JsonProperty("displayTitle")] + public string DisplayTitle { get; set; } = default!; + + /// + /// Extended display title for the stream. + /// + [JsonProperty("extendedDisplayTitle")] + public string ExtendedDisplayTitle { get; set; } = default!; + + /// + /// Indicates if this stream is selected (applicable for audio streams). + /// + [JsonProperty("selected")] + public bool? Selected { get; set; } + + [JsonProperty("forced")] + public bool? Forced { get; set; } + + /// + /// Number of audio channels (for audio streams). + /// + [JsonProperty("channels")] + public int? Channels { get; set; } + + /// + /// Audio channel layout. + /// + [JsonProperty("audioChannelLayout")] + public string? AudioChannelLayout { get; set; } + + /// + /// Sampling rate for the audio stream. + /// + [JsonProperty("samplingRate")] + public int? SamplingRate { get; set; } + + /// + /// Indicates if the stream can auto-sync. + /// + [JsonProperty("canAutoSync")] + public bool? CanAutoSync { get; set; } + + /// + /// Indicates if the stream is for the hearing impaired. + /// + [JsonProperty("hearingImpaired")] + public bool? HearingImpaired { get; set; } + + /// + /// Indicates if the stream is a dub. + /// + [JsonProperty("dub")] + public bool? Dub { get; set; } + + /// + /// Optional title for the stream (e.g., language variant). + /// + [JsonProperty("title")] + public string? Title { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs new file mode 100644 index 0000000..74eb700 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryType.cs @@ -0,0 +1,44 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System.Collections.Generic; + + public class GetAllMediaLibraryType + { + + [JsonProperty("key")] + public string Key { get; set; } = default!; + + [JsonProperty("type")] + public string Type { get; set; } = default!; + + [JsonProperty("subtype")] + public string? Subtype { get; set; } + + [JsonProperty("title")] + public string Title { get; set; } = default!; + + [JsonProperty("active")] + public bool Active { get; set; } = default!; + + [JsonProperty("Filter")] + public List? Filter { get; set; } + + [JsonProperty("Sort")] + public List? Sort { get; set; } + + [JsonProperty("Field")] + public List? Field { get; set; } + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs new file mode 100644 index 0000000..9b9cf23 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryUltraBlurColors.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryUltraBlurColors + { + + [JsonProperty("topLeft")] + public string TopLeft { get; set; } = default!; + + [JsonProperty("topRight")] + public string TopRight { get; set; } = default!; + + [JsonProperty("bottomRight")] + public string BottomRight { get; set; } = default!; + + [JsonProperty("bottomLeft")] + public string BottomLeft { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs new file mode 100644 index 0000000..fa4d80b --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetAllMediaLibraryWriter.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetAllMediaLibraryWriter + { + + /// + /// The role of Writer + /// + [JsonProperty("tag")] + public string Tag { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryMediaContainer.cs index 77e6e80..f4aa943 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetCountriesLibraryMediaContainer.cs @@ -17,45 +17,75 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetCountriesLibraryMediaContainer { + /// + /// Number of media items returned in this response. + /// [JsonProperty("size")] - public double Size { get; set; } = default!; - - [JsonProperty("offset")] - public int? Offset { get; set; } - - [JsonProperty("totalSize")] - public int? TotalSize { get; set; } - - [JsonProperty("identifier")] - public string Identifier { get; set; } = default!; + public int Size { get; set; } = default!; + /// + /// Indicates whether syncing is allowed. + /// [JsonProperty("allowSync")] public bool AllowSync { get; set; } = default!; + /// + /// URL for the background artwork of the media container. + /// [JsonProperty("art")] public string Art { get; set; } = default!; + /// + /// The content type or mode. + /// [JsonProperty("content")] public string Content { get; set; } = default!; + /// + /// An plugin identifier for the media container. + /// + [JsonProperty("identifier")] + public string Identifier { get; set; } = default!; + + /// + /// The prefix used for media tag resource paths. + /// [JsonProperty("mediaTagPrefix")] public string MediaTagPrefix { get; set; } = default!; + /// + /// The version number for media tags. + /// [JsonProperty("mediaTagVersion")] public long MediaTagVersion { get; set; } = default!; + /// + /// Specifies whether caching is disabled. + /// [JsonProperty("nocache")] public bool Nocache { get; set; } = default!; + /// + /// URL for the thumbnail image of the media container. + /// [JsonProperty("thumb")] public string Thumb { get; set; } = default!; + /// + /// The primary title of the media container. + /// [JsonProperty("title1")] public string Title1 { get; set; } = default!; + /// + /// The secondary title of the media container. + /// [JsonProperty("title2")] public string Title2 { get; set; } = default!; + /// + /// Identifier for the view group layout. + /// [JsonProperty("viewGroup")] public string ViewGroup { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryMediaContainer.cs index 3ba899b..11ad990 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetGenresLibraryMediaContainer.cs @@ -17,45 +17,75 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetGenresLibraryMediaContainer { + /// + /// Number of media items returned in this response. + /// [JsonProperty("size")] - public double Size { get; set; } = default!; - - [JsonProperty("offset")] - public int? Offset { get; set; } - - [JsonProperty("totalSize")] - public int? TotalSize { get; set; } - - [JsonProperty("identifier")] - public string Identifier { get; set; } = default!; + public int Size { get; set; } = default!; + /// + /// Indicates whether syncing is allowed. + /// [JsonProperty("allowSync")] public bool AllowSync { get; set; } = default!; + /// + /// URL for the background artwork of the media container. + /// [JsonProperty("art")] public string Art { get; set; } = default!; + /// + /// The content type or mode. + /// [JsonProperty("content")] public string Content { get; set; } = default!; + /// + /// An plugin identifier for the media container. + /// + [JsonProperty("identifier")] + public string Identifier { get; set; } = default!; + + /// + /// The prefix used for media tag resource paths. + /// [JsonProperty("mediaTagPrefix")] public string MediaTagPrefix { get; set; } = default!; + /// + /// The version number for media tags. + /// [JsonProperty("mediaTagVersion")] public long MediaTagVersion { get; set; } = default!; + /// + /// Specifies whether caching is disabled. + /// [JsonProperty("nocache")] public bool Nocache { get; set; } = default!; + /// + /// URL for the thumbnail image of the media container. + /// [JsonProperty("thumb")] public string Thumb { get; set; } = default!; + /// + /// The primary title of the media container. + /// [JsonProperty("title1")] public string Title1 { get; set; } = default!; + /// + /// The secondary title of the media container. + /// [JsonProperty("title2")] public string Title2 { get; set; } = default!; + /// + /// Identifier for the view group layout. + /// [JsonProperty("viewGroup")] public string ViewGroup { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsFilter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsFilter.cs index 47244ed..e19cf17 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsFilter.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsFilter.cs @@ -29,5 +29,8 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("type")] public string Type { get; set; } = default!; + + [JsonProperty("advanced")] + public bool? Advanced { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs index 17f6d24..2f9e8ba 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsLibraryType.cs @@ -30,6 +30,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Season, [JsonProperty("episode")] Episode, + [JsonProperty("artist")] + Artist, + [JsonProperty("album")] + Album, } public static class GetLibraryItemsLibraryTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsType.cs index 8b13080..d7fcc16 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetLibraryItemsType.cs @@ -23,6 +23,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("type")] public string Type { get; set; } = default!; + [JsonProperty("subtype")] + public string? Subtype { get; set; } + [JsonProperty("title")] public string Title { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs index b08e7e6..ee5ab67 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataCountry.cs @@ -19,7 +19,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The unique country identifier. ///
[JsonProperty("id")] - public long Id { get; set; } = default!; + public int Id { get; set; } = default!; /// /// The filter string for the country. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs new file mode 100644 index 0000000..467389f --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataGuids.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + + public class GetMediaMetaDataGuids + { + + /// + /// The GUID value. + /// + [JsonProperty("id")] + public string Id { get; set; } = default!; + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataHasThumbnail.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataHasThumbnail.cs new file mode 100644 index 0000000..bb1d553 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataHasThumbnail.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using System; + + /// + /// Indicates if the part has a thumbnail. + /// + public enum GetMediaMetaDataHasThumbnail + { + [JsonProperty("0")] + False, + [JsonProperty("1")] + True, + } + + public static class GetMediaMetaDataHasThumbnailExtension + { + public static string Value(this GetMediaMetaDataHasThumbnail value) + { + return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString(); + } + + public static GetMediaMetaDataHasThumbnail ToEnum(this string value) + { + foreach(var field in typeof(GetMediaMetaDataHasThumbnail).GetFields()) + { + var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false); + if (attributes.Length == 0) + { + continue; + } + + var attribute = attributes[0] as JsonPropertyAttribute; + if (attribute != null && attribute.PropertyName == value) + { + var enumVal = field.GetValue(null); + + if (enumVal is GetMediaMetaDataHasThumbnail) + { + return (GetMediaMetaDataHasThumbnail)enumVal; + } + } + } + + throw new Exception($"Unknown value {value} for enum GetMediaMetaDataHasThumbnail"); + } + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.cs new file mode 100644 index 0000000..4fce970 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.cs @@ -0,0 +1,199 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using Newtonsoft.Json.Linq; + using System; + using System.Collections.Generic; + using System.Numerics; + using System.Reflection; + + + public class GetMediaMetaDataLibraryOptimizedForStreamingType + { + private GetMediaMetaDataLibraryOptimizedForStreamingType(string value) { Value = value; } + + public string Value { get; private set; } + public static GetMediaMetaDataLibraryOptimizedForStreamingType GetMediaMetaDataOptimizedForStreaming1 { get { return new GetMediaMetaDataLibraryOptimizedForStreamingType("get-media-meta-data_optimizedForStreaming_1"); } } + + public static GetMediaMetaDataLibraryOptimizedForStreamingType Boolean { get { return new GetMediaMetaDataLibraryOptimizedForStreamingType("boolean"); } } + + public static GetMediaMetaDataLibraryOptimizedForStreamingType Null { get { return new GetMediaMetaDataLibraryOptimizedForStreamingType("null"); } } + + public override string ToString() { return Value; } + public static implicit operator String(GetMediaMetaDataLibraryOptimizedForStreamingType v) { return v.Value; } + public static GetMediaMetaDataLibraryOptimizedForStreamingType FromString(string v) { + switch(v) { + case "get-media-meta-data_optimizedForStreaming_1": return GetMediaMetaDataOptimizedForStreaming1; + case "boolean": return Boolean; + case "null": return Null; + default: throw new ArgumentException("Invalid value for GetMediaMetaDataLibraryOptimizedForStreamingType"); + } + } + public override bool Equals(object? obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + return Value.Equals(((GetMediaMetaDataLibraryOptimizedForStreamingType)obj).Value); + } + + public override int GetHashCode() + { + return Value.GetHashCode(); + } + } + + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonConverter(typeof(GetMediaMetaDataLibraryOptimizedForStreaming.GetMediaMetaDataLibraryOptimizedForStreamingConverter))] + public class GetMediaMetaDataLibraryOptimizedForStreaming { + public GetMediaMetaDataLibraryOptimizedForStreaming(GetMediaMetaDataLibraryOptimizedForStreamingType type) { + Type = type; + } + + [SpeakeasyMetadata("form:explode=true")] + public GetMediaMetaDataOptimizedForStreaming1? GetMediaMetaDataOptimizedForStreaming1 { get; set; } + + [SpeakeasyMetadata("form:explode=true")] + public bool? Boolean { get; set; } + + public GetMediaMetaDataLibraryOptimizedForStreamingType Type { get; set; } + + + public static GetMediaMetaDataLibraryOptimizedForStreaming CreateGetMediaMetaDataOptimizedForStreaming1(GetMediaMetaDataOptimizedForStreaming1 getMediaMetaDataOptimizedForStreaming1) { + GetMediaMetaDataLibraryOptimizedForStreamingType typ = GetMediaMetaDataLibraryOptimizedForStreamingType.GetMediaMetaDataOptimizedForStreaming1; + + GetMediaMetaDataLibraryOptimizedForStreaming res = new GetMediaMetaDataLibraryOptimizedForStreaming(typ); + res.GetMediaMetaDataOptimizedForStreaming1 = getMediaMetaDataOptimizedForStreaming1; + return res; + } + + public static GetMediaMetaDataLibraryOptimizedForStreaming CreateBoolean(bool boolean) { + GetMediaMetaDataLibraryOptimizedForStreamingType typ = GetMediaMetaDataLibraryOptimizedForStreamingType.Boolean; + + GetMediaMetaDataLibraryOptimizedForStreaming res = new GetMediaMetaDataLibraryOptimizedForStreaming(typ); + res.Boolean = boolean; + return res; + } + + public static GetMediaMetaDataLibraryOptimizedForStreaming CreateNull() { + GetMediaMetaDataLibraryOptimizedForStreamingType typ = GetMediaMetaDataLibraryOptimizedForStreamingType.Null; + return new GetMediaMetaDataLibraryOptimizedForStreaming(typ); + } + + public class GetMediaMetaDataLibraryOptimizedForStreamingConverter : JsonConverter + { + + public override bool CanConvert(System.Type objectType) => objectType == typeof(GetMediaMetaDataLibraryOptimizedForStreaming); + + public override bool CanRead => true; + + public override object? ReadJson(JsonReader reader, System.Type objectType, object? existingValue, JsonSerializer serializer) + { + var json = JRaw.Create(reader).ToString(); + if (json == "null") + { + return null; + } + + var fallbackCandidates = new List<(System.Type, object, string)>(); + + try + { + return new GetMediaMetaDataLibraryOptimizedForStreaming(GetMediaMetaDataLibraryOptimizedForStreamingType.GetMediaMetaDataOptimizedForStreaming1) + { + GetMediaMetaDataOptimizedForStreaming1 = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) + }; + } + catch (ResponseBodyDeserializer.MissingMemberException) + { + fallbackCandidates.Add((typeof(GetMediaMetaDataOptimizedForStreaming1), new GetMediaMetaDataLibraryOptimizedForStreaming(GetMediaMetaDataLibraryOptimizedForStreamingType.GetMediaMetaDataOptimizedForStreaming1), "GetMediaMetaDataOptimizedForStreaming1")); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next option + } + catch (Exception) + { + throw; + } + + try + { + var converted = Convert.ToBoolean(json); + return new GetMediaMetaDataLibraryOptimizedForStreaming(GetMediaMetaDataLibraryOptimizedForStreamingType.Boolean) + { + Boolean = converted + }; + } + catch (System.FormatException) + { + // try next option + } + + if (fallbackCandidates.Count > 0) + { + fallbackCandidates.Sort((a, b) => ResponseBodyDeserializer.CompareFallbackCandidates(a.Item1, b.Item1, json)); + foreach(var (deserializationType, returnObject, propertyName) in fallbackCandidates) + { + try + { + return ResponseBodyDeserializer.DeserializeUndiscriminatedUnionFallback(deserializationType, returnObject, propertyName, json); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next fallback option + } + catch (Exception) + { + throw; + } + } + } + + throw new InvalidOperationException("Could not deserialize into any supported types."); + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + if (value == null) { + writer.WriteRawValue("null"); + return; + } + GetMediaMetaDataLibraryOptimizedForStreaming res = (GetMediaMetaDataLibraryOptimizedForStreaming)value; + if (GetMediaMetaDataLibraryOptimizedForStreamingType.FromString(res.Type).Equals(GetMediaMetaDataLibraryOptimizedForStreamingType.Null)) + { + writer.WriteRawValue("null"); + return; + } + if (res.GetMediaMetaDataOptimizedForStreaming1 != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.GetMediaMetaDataOptimizedForStreaming1)); + return; + } + if (res.Boolean != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.Boolean)); + return; + } + + } + + } + + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMedia.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMedia.cs index 742fb6f..0b96c1e 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMedia.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMedia.cs @@ -9,6 +9,7 @@ #nullable enable namespace LukeHagar.PlexAPI.SDK.Models.Requests { + using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Models.Requests; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; @@ -27,73 +28,80 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Duration of the media in milliseconds. /// [JsonProperty("duration")] - public long Duration { get; set; } = default!; + public int? Duration { get; set; } /// /// Bitrate in bits per second. /// [JsonProperty("bitrate")] - public long Bitrate { get; set; } = default!; + public int? Bitrate { get; set; } /// /// Video width in pixels. /// [JsonProperty("width")] - public long Width { get; set; } = default!; + public int? Width { get; set; } /// /// Video height in pixels. /// [JsonProperty("height")] - public long Height { get; set; } = default!; + public int? Height { get; set; } /// /// Aspect ratio of the video. /// [JsonProperty("aspectRatio")] - public float AspectRatio { get; set; } = default!; + public float? AspectRatio { get; set; } /// /// Number of audio channels. /// [JsonProperty("audioChannels")] - public long AudioChannels { get; set; } = default!; + public int? AudioChannels { get; set; } + + [JsonProperty("displayOffset")] + public int? DisplayOffset { get; set; } /// /// Audio codec used. /// [JsonProperty("audioCodec")] - public string AudioCodec { get; set; } = default!; + public string? AudioCodec { get; set; } /// /// Video codec used. /// [JsonProperty("videoCodec")] - public string VideoCodec { get; set; } = default!; + public string? VideoCodec { get; set; } /// /// Video resolution (e.g., 4k). /// [JsonProperty("videoResolution")] - public string VideoResolution { get; set; } = default!; + public string? VideoResolution { get; set; } /// /// File container type. /// [JsonProperty("container")] - public string Container { get; set; } = default!; + public string? Container { get; set; } /// - /// Frame rate of the video (e.g., 24p). + /// Frame rate of the video. Values found include NTSC, PAL, 24p
+ /// + /// + /// + /// ///
[JsonProperty("videoFrameRate")] - public string VideoFrameRate { get; set; } = default!; + public string? VideoFrameRate { get; set; } /// /// Video profile (e.g., main 10). /// [JsonProperty("videoProfile")] - public string VideoProfile { get; set; } = default!; + public string? VideoProfile { get; set; } /// /// Indicates whether voice activity is detected. @@ -101,6 +109,21 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("hasVoiceActivity")] public bool HasVoiceActivity { get; set; } = default!; + /// + /// The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). + /// + [JsonProperty("audioProfile")] + public string? AudioProfile { get; set; } + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonProperty("optimizedForStreaming")] + public GetMediaMetaDataOptimizedForStreaming? OptimizedForStreaming { get; set; } + + [JsonProperty("has64bitOffsets")] + public bool? Has64bitOffsets { get; set; } + /// /// An array of parts for this media item. /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMediaContainer.cs index c81d5db..b5a216a 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMediaContainer.cs @@ -17,8 +17,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests public class GetMediaMetaDataMediaContainer { + /// + /// Number of media items returned in this response. + /// [JsonProperty("size")] - public double Size { get; set; } = default!; + public int Size { get; set; } = default!; /// /// Indicates whether syncing is allowed. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs index 7063ae3..b6203e2 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataMetadata.cs @@ -130,7 +130,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The content rating (e.g., TV-MA). /// [JsonProperty("contentRating")] - public string ContentRating { get; set; } = default!; + public string? ContentRating { get; set; } /// /// A summary of the content. @@ -160,7 +160,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The audience rating for the content. /// [JsonProperty("audienceRating")] - public float AudienceRating { get; set; } = default!; + public float? AudienceRating { get; set; } /// /// The number of times the item has been viewed. @@ -184,7 +184,19 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The release year. /// [JsonProperty("year")] - public long Year { get; set; } = default!; + public int Year { get; set; } = default!; + + /// + /// The general rating + /// + [JsonProperty("rating")] + public float? Rating { get; set; } + + /// + /// The URL or identifier for the rating image (e.g., Rotten Tomatoes rating image). + /// + [JsonProperty("ratingImage")] + public string? RatingImage { get; set; } /// /// The tagline of the content. @@ -220,13 +232,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Duration of the content in milliseconds. /// [JsonProperty("duration")] - public long Duration { get; set; } = default!; + public int Duration { get; set; } = default!; /// /// The original release date. /// [JsonProperty("originallyAvailableAt")] - public LocalDate OriginallyAvailableAt { get; set; } = default!; + public LocalDate? OriginallyAvailableAt { get; set; } /// /// The total number of episodes (or leaves). @@ -244,17 +256,11 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The number of child items. /// [JsonProperty("childCount")] - public long? ChildCount { get; set; } + public int? ChildCount { get; set; } - /// - /// Unix timestamp when the item was added. - /// [JsonProperty("addedAt")] public long AddedAt { get; set; } = default!; - /// - /// Unix timestamp when the item was last updated. - /// [JsonProperty("updatedAt")] public long UpdatedAt { get; set; } = default!; @@ -262,7 +268,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// The URL for the audience rating image. /// [JsonProperty("audienceRatingImage")] - public string AudienceRatingImage { get; set; } = default!; + public string? AudienceRatingImage { get; set; } /// /// The index number of the parent entity, which could indicate its order or position. @@ -316,13 +322,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// An array of GUID objects. /// [JsonProperty("Guid")] - public List Guids { get; set; } = default!; + public List? Guids { get; set; } /// /// An array of rating objects. /// [JsonProperty("Rating")] - public List Rating { get; set; } = default!; + public List? Ratings { get; set; } /// /// An array of Actor roles. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming.cs new file mode 100644 index 0000000..fc3e36e --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming.cs @@ -0,0 +1,199 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Models.Requests; + using LukeHagar.PlexAPI.SDK.Utils; + using Newtonsoft.Json; + using Newtonsoft.Json.Linq; + using System; + using System.Collections.Generic; + using System.Numerics; + using System.Reflection; + + + public class GetMediaMetaDataOptimizedForStreamingType + { + private GetMediaMetaDataOptimizedForStreamingType(string value) { Value = value; } + + public string Value { get; private set; } + public static GetMediaMetaDataOptimizedForStreamingType OptimizedForStreaming1 { get { return new GetMediaMetaDataOptimizedForStreamingType("optimizedForStreaming_1"); } } + + public static GetMediaMetaDataOptimizedForStreamingType Boolean { get { return new GetMediaMetaDataOptimizedForStreamingType("boolean"); } } + + public static GetMediaMetaDataOptimizedForStreamingType Null { get { return new GetMediaMetaDataOptimizedForStreamingType("null"); } } + + public override string ToString() { return Value; } + public static implicit operator String(GetMediaMetaDataOptimizedForStreamingType v) { return v.Value; } + public static GetMediaMetaDataOptimizedForStreamingType FromString(string v) { + switch(v) { + case "optimizedForStreaming_1": return OptimizedForStreaming1; + case "boolean": return Boolean; + case "null": return Null; + default: throw new ArgumentException("Invalid value for GetMediaMetaDataOptimizedForStreamingType"); + } + } + public override bool Equals(object? obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + return Value.Equals(((GetMediaMetaDataOptimizedForStreamingType)obj).Value); + } + + public override int GetHashCode() + { + return Value.GetHashCode(); + } + } + + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonConverter(typeof(GetMediaMetaDataOptimizedForStreaming.GetMediaMetaDataOptimizedForStreamingConverter))] + public class GetMediaMetaDataOptimizedForStreaming { + public GetMediaMetaDataOptimizedForStreaming(GetMediaMetaDataOptimizedForStreamingType type) { + Type = type; + } + + [SpeakeasyMetadata("form:explode=true")] + public OptimizedForStreaming1? OptimizedForStreaming1 { get; set; } + + [SpeakeasyMetadata("form:explode=true")] + public bool? Boolean { get; set; } + + public GetMediaMetaDataOptimizedForStreamingType Type { get; set; } + + + public static GetMediaMetaDataOptimizedForStreaming CreateOptimizedForStreaming1(OptimizedForStreaming1 optimizedForStreaming1) { + GetMediaMetaDataOptimizedForStreamingType typ = GetMediaMetaDataOptimizedForStreamingType.OptimizedForStreaming1; + + GetMediaMetaDataOptimizedForStreaming res = new GetMediaMetaDataOptimizedForStreaming(typ); + res.OptimizedForStreaming1 = optimizedForStreaming1; + return res; + } + + public static GetMediaMetaDataOptimizedForStreaming CreateBoolean(bool boolean) { + GetMediaMetaDataOptimizedForStreamingType typ = GetMediaMetaDataOptimizedForStreamingType.Boolean; + + GetMediaMetaDataOptimizedForStreaming res = new GetMediaMetaDataOptimizedForStreaming(typ); + res.Boolean = boolean; + return res; + } + + public static GetMediaMetaDataOptimizedForStreaming CreateNull() { + GetMediaMetaDataOptimizedForStreamingType typ = GetMediaMetaDataOptimizedForStreamingType.Null; + return new GetMediaMetaDataOptimizedForStreaming(typ); + } + + public class GetMediaMetaDataOptimizedForStreamingConverter : JsonConverter + { + + public override bool CanConvert(System.Type objectType) => objectType == typeof(GetMediaMetaDataOptimizedForStreaming); + + public override bool CanRead => true; + + public override object? ReadJson(JsonReader reader, System.Type objectType, object? existingValue, JsonSerializer serializer) + { + var json = JRaw.Create(reader).ToString(); + if (json == "null") + { + return null; + } + + var fallbackCandidates = new List<(System.Type, object, string)>(); + + try + { + return new GetMediaMetaDataOptimizedForStreaming(GetMediaMetaDataOptimizedForStreamingType.OptimizedForStreaming1) + { + OptimizedForStreaming1 = ResponseBodyDeserializer.DeserializeUndiscriminatedUnionMember(json) + }; + } + catch (ResponseBodyDeserializer.MissingMemberException) + { + fallbackCandidates.Add((typeof(OptimizedForStreaming1), new GetMediaMetaDataOptimizedForStreaming(GetMediaMetaDataOptimizedForStreamingType.OptimizedForStreaming1), "OptimizedForStreaming1")); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next option + } + catch (Exception) + { + throw; + } + + try + { + var converted = Convert.ToBoolean(json); + return new GetMediaMetaDataOptimizedForStreaming(GetMediaMetaDataOptimizedForStreamingType.Boolean) + { + Boolean = converted + }; + } + catch (System.FormatException) + { + // try next option + } + + if (fallbackCandidates.Count > 0) + { + fallbackCandidates.Sort((a, b) => ResponseBodyDeserializer.CompareFallbackCandidates(a.Item1, b.Item1, json)); + foreach(var (deserializationType, returnObject, propertyName) in fallbackCandidates) + { + try + { + return ResponseBodyDeserializer.DeserializeUndiscriminatedUnionFallback(deserializationType, returnObject, propertyName, json); + } + catch (ResponseBodyDeserializer.DeserializationException) + { + // try next fallback option + } + catch (Exception) + { + throw; + } + } + } + + throw new InvalidOperationException("Could not deserialize into any supported types."); + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + if (value == null) { + writer.WriteRawValue("null"); + return; + } + GetMediaMetaDataOptimizedForStreaming res = (GetMediaMetaDataOptimizedForStreaming)value; + if (GetMediaMetaDataOptimizedForStreamingType.FromString(res.Type).Equals(GetMediaMetaDataOptimizedForStreamingType.Null)) + { + writer.WriteRawValue("null"); + return; + } + if (res.OptimizedForStreaming1 != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.OptimizedForStreaming1)); + return; + } + if (res.Boolean != null) + { + writer.WriteRawValue(Utilities.SerializeJSON(res.Boolean)); + return; + } + + } + + } + + } +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.cs new file mode 100644 index 0000000..a9fccbe --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public enum GetMediaMetaDataOptimizedForStreaming1 + { + Zero = 0, + One = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataPart.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataPart.cs index 17795b5..7a6b325 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataPart.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataPart.cs @@ -9,6 +9,7 @@ #nullable enable namespace LukeHagar.PlexAPI.SDK.Models.Requests { + using LukeHagar.PlexAPI.SDK.Models.Components; using LukeHagar.PlexAPI.SDK.Models.Requests; using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; @@ -48,7 +49,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Duration of the part in milliseconds. /// [JsonProperty("duration")] - public long Duration { get; set; } = default!; + public int? Duration { get; set; } /// /// File path for the part. @@ -62,22 +63,43 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("size")] public long Size { get; set; } = default!; + [JsonProperty("packetLength")] + public int? PacketLength { get; set; } + /// /// Container format of the part. /// [JsonProperty("container")] - public string Container { get; set; } = default!; + public string? Container { get; set; } /// /// Video profile for the part. /// [JsonProperty("videoProfile")] - public string VideoProfile { get; set; } = default!; + public string? VideoProfile { get; set; } + + /// + /// The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). + /// + [JsonProperty("audioProfile")] + public string? AudioProfile { get; set; } + + [JsonProperty("has64bitOffsets")] + public bool? Has64bitOffsets { get; set; } + + /// + /// Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + /// + [JsonProperty("optimizedForStreaming")] + public GetMediaMetaDataLibraryOptimizedForStreaming? OptimizedForStreaming { get; set; } + + [JsonProperty("hasThumbnail")] + public GetMediaMetaDataHasThumbnail? HasThumbnail { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetMediaMetaDataHasThumbnail.False; /// /// An array of streams for this part. /// [JsonProperty("Stream")] - public List Stream { get; set; } = default!; + public List? Stream { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataStream.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataStream.cs index 4c8f4e3..ffdd7a3 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataStream.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetMediaMetaDataStream.cs @@ -25,7 +25,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Stream type (1=video, 2=audio, 3=subtitle). /// [JsonProperty("streamType")] - public long StreamType { get; set; } = default!; + public int StreamType { get; set; } = default!; /// /// Indicates if this stream is default. @@ -43,13 +43,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Index of the stream. /// [JsonProperty("index")] - public long Index { get; set; } = default!; + public int Index { get; set; } = default!; /// /// Bitrate of the stream. /// [JsonProperty("bitrate")] - public long Bitrate { get; set; } = default!; + public int? Bitrate { get; set; } /// /// Language of the stream. @@ -69,11 +69,17 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("languageCode")] public string LanguageCode { get; set; } = default!; + /// + /// Indicates whether header compression is enabled. + /// + [JsonProperty("headerCompression")] + public bool? HeaderCompression { get; set; } + /// /// Dolby Vision BL compatibility ID. /// [JsonProperty("DOVIBLCompatID")] - public long? DOVIBLCompatID { get; set; } + public int? DOVIBLCompatID { get; set; } /// /// Indicates if Dolby Vision BL is present. @@ -91,7 +97,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Dolby Vision level. /// [JsonProperty("DOVILevel")] - public long? DOVILevel { get; set; } + public int? DOVILevel { get; set; } /// /// Indicates if Dolby Vision is present. @@ -103,7 +109,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Dolby Vision profile. /// [JsonProperty("DOVIProfile")] - public long? DOVIProfile { get; set; } + public int? DOVIProfile { get; set; } /// /// Indicates if Dolby Vision RPU is present. @@ -121,7 +127,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Bit depth of the video stream. /// [JsonProperty("bitDepth")] - public long? BitDepth { get; set; } + public int? BitDepth { get; set; } /// /// Chroma sample location. @@ -139,13 +145,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Coded video height. /// [JsonProperty("codedHeight")] - public long? CodedHeight { get; set; } + public int? CodedHeight { get; set; } /// /// Coded video width. /// [JsonProperty("codedWidth")] - public long? CodedWidth { get; set; } + public int? CodedWidth { get; set; } /// /// Color primaries used. @@ -181,13 +187,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Height of the video stream. /// [JsonProperty("height")] - public long? Height { get; set; } + public int? Height { get; set; } /// /// Video level. /// [JsonProperty("level")] - public long? Level { get; set; } + public int? Level { get; set; } /// /// Indicates if this is the original stream. @@ -211,13 +217,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Number of reference frames. /// [JsonProperty("refFrames")] - public long? RefFrames { get; set; } + public int? RefFrames { get; set; } /// /// Width of the video stream. /// [JsonProperty("width")] - public long? Width { get; set; } + public int? Width { get; set; } /// /// Display title for the stream. @@ -244,7 +250,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Number of audio channels (for audio streams). /// [JsonProperty("channels")] - public long? Channels { get; set; } + public int? Channels { get; set; } /// /// Audio channel layout. @@ -256,7 +262,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Sampling rate for the audio stream. /// [JsonProperty("samplingRate")] - public long? SamplingRate { get; set; } + public int? SamplingRate { get; set; } /// /// Indicates if the stream can auto-sync. diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedFilter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedFilter.cs index f456655..901a777 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedFilter.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedFilter.cs @@ -29,5 +29,8 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("type")] public string Type { get; set; } = default!; + + [JsonProperty("advanced")] + public bool? Advanced { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs index 6301faa..68a1c7d 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedHubsType.cs @@ -30,6 +30,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Season, [JsonProperty("episode")] Episode, + [JsonProperty("artist")] + Artist, + [JsonProperty("album")] + Album, } public static class GetRecentlyAddedHubsTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryFilter.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryFilter.cs index 0e88f88..863a527 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryFilter.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryFilter.cs @@ -29,5 +29,8 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("type")] public string Type { get; set; } = default!; + + [JsonProperty("advanced")] + public bool? Advanced { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryType.cs index f8bee36..5046011 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedLibraryType.cs @@ -23,6 +23,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("type")] public string Type { get; set; } = default!; + [JsonProperty("subtype")] + public string? Subtype { get; set; } + [JsonProperty("title")] public string Title { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMediaContainer.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMediaContainer.cs index ffa107d..5de82d8 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMediaContainer.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedMediaContainer.cs @@ -18,7 +18,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { [JsonProperty("size")] - public double Size { get; set; } = default!; + public long Size { get; set; } = default!; [JsonProperty("offset")] public int? Offset { get; set; } diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedType.cs index 91d3949..3d00985 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetRecentlyAddedType.cs @@ -23,6 +23,9 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests [JsonProperty("type")] public string Type { get; set; } = default!; + [JsonProperty("subtype")] + public string? Subtype { get; set; } + [JsonProperty("title")] public string Title { get; set; } = default!; diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.cs new file mode 100644 index 0000000..c6ae7c0 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Whether to include collections in the search results. + /// + public enum GetSearchAllLibrariesQueryParamIncludeCollections + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.cs new file mode 100644 index 0000000..10467fb --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Whether to include external media in the search results. + /// + public enum GetSearchAllLibrariesQueryParamIncludeExternalMedia + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesRequest.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesRequest.cs index 85258f3..a52993f 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesRequest.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesRequest.cs @@ -48,12 +48,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// Whether to include collections in the search results. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeCollections")] - public QueryParamIncludeCollections? IncludeCollections { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.QueryParamIncludeCollections.Disable; + public GetSearchAllLibrariesQueryParamIncludeCollections? IncludeCollections { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetSearchAllLibrariesQueryParamIncludeCollections.Disable; /// /// Whether to include external media in the search results. /// [SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeExternalMedia")] - public QueryParamIncludeExternalMedia? IncludeExternalMedia { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.QueryParamIncludeExternalMedia.Disable; + public GetSearchAllLibrariesQueryParamIncludeExternalMedia? IncludeExternalMedia { get; set; } = LukeHagar.PlexAPI.SDK.Models.Requests.GetSearchAllLibrariesQueryParamIncludeExternalMedia.Disable; } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs index 41f750f..18a68ae 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/GetSearchAllLibrariesType.cs @@ -30,6 +30,10 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Season, [JsonProperty("episode")] Episode, + [JsonProperty("artist")] + Artist, + [JsonProperty("album")] + Album, } public static class GetSearchAllLibrariesTypeExtension diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs index 58ad5c7..88a579b 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Guids.cs @@ -16,9 +16,13 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { /// - /// The GUID value. + /// The unique identifier for the Guid. Can be imdb://tt0286347, tmdb://1763, tvdb://2337
+ /// + /// + /// + /// ///
[JsonProperty("id")] - public string Id { get; set; } = default!; + public string? Id { get; set; } } } \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeAdvanced.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeAdvanced.cs new file mode 100644 index 0000000..b63dc42 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/IncludeAdvanced.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public enum IncludeAdvanced + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/One.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/One.cs new file mode 100644 index 0000000..293bd67 --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/One.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public enum One + { + Zero = 0, + One = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizedForStreaming1.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizedForStreaming1.cs new file mode 100644 index 0000000..85e5bab --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/OptimizedForStreaming1.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + public enum OptimizedForStreaming1 + { + Zero = 0, + One = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeCollections.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeCollections.cs index e9e32d8..3589e52 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeCollections.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeCollections.cs @@ -11,9 +11,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { using LukeHagar.PlexAPI.SDK.Utils; - /// - /// Whether to include collections in the search results. - /// public enum QueryParamIncludeCollections { Disable = 0, diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeExternalMedia.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeExternalMedia.cs index fe5ee5c..152e744 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeExternalMedia.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeExternalMedia.cs @@ -11,9 +11,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests { using LukeHagar.PlexAPI.SDK.Utils; - /// - /// Whether to include external media in the search results. - /// public enum QueryParamIncludeExternalMedia { Disable = 0, diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeGuids.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeGuids.cs new file mode 100644 index 0000000..4f79bba --- /dev/null +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/QueryParamIncludeGuids.cs @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. +// +// Changes to this file may cause incorrect behavior and will be lost when +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +namespace LukeHagar.PlexAPI.SDK.Models.Requests +{ + using LukeHagar.PlexAPI.SDK.Utils; + + /// + /// Adds the Guid object to the response
+ /// + /// + /// + /// + ///
+ public enum QueryParamIncludeGuids + { + Disable = 0, + Enable = 1, + } + +} \ No newline at end of file diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Ratings.cs similarity index 97% rename from LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs rename to LukeHagar/PlexAPI/SDK/Models/Requests/Ratings.cs index a6d5b7a..a6159f5 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Rating.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Ratings.cs @@ -12,7 +12,7 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests using LukeHagar.PlexAPI.SDK.Utils; using Newtonsoft.Json; - public class Rating + public class Ratings { /// diff --git a/LukeHagar/PlexAPI/SDK/Models/Requests/Tag.cs b/LukeHagar/PlexAPI/SDK/Models/Requests/Tag.cs index aa3da2f..52f11b9 100644 --- a/LukeHagar/PlexAPI/SDK/Models/Requests/Tag.cs +++ b/LukeHagar/PlexAPI/SDK/Models/Requests/Tag.cs @@ -18,8 +18,6 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests /// public enum Tag { - [JsonProperty("all")] - All, [JsonProperty("unwatched")] Unwatched, [JsonProperty("newest")] @@ -34,18 +32,12 @@ namespace LukeHagar.PlexAPI.SDK.Models.Requests Collection, [JsonProperty("edition")] Edition, - [JsonProperty("genre")] - Genre, [JsonProperty("year")] Year, [JsonProperty("decade")] Decade, [JsonProperty("director")] Director, - [JsonProperty("actor")] - Actor, - [JsonProperty("country")] - Country, [JsonProperty("contentRating")] ContentRating, [JsonProperty("rating")] diff --git a/LukeHagar/PlexAPI/SDK/Playlists.cs b/LukeHagar/PlexAPI/SDK/Playlists.cs index 0e5c868..905f88f 100644 --- a/LukeHagar/PlexAPI/SDK/Playlists.cs +++ b/LukeHagar/PlexAPI/SDK/Playlists.cs @@ -146,10 +146,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Plex.cs b/LukeHagar/PlexAPI/SDK/Plex.cs index 6970bda..e43591e 100644 --- a/LukeHagar/PlexAPI/SDK/Plex.cs +++ b/LukeHagar/PlexAPI/SDK/Plex.cs @@ -143,10 +143,10 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/PlexAPI.cs b/LukeHagar/PlexAPI/SDK/PlexAPI.cs index 9848503..6385766 100644 --- a/LukeHagar/PlexAPI/SDK/PlexAPI.cs +++ b/LukeHagar/PlexAPI/SDK/PlexAPI.cs @@ -327,10 +327,10 @@ namespace LukeHagar.PlexAPI.SDK public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private int _serverIndex = 0; private ISpeakeasyHttpClient _client; diff --git a/LukeHagar/PlexAPI/SDK/Search.cs b/LukeHagar/PlexAPI/SDK/Search.cs index 36bd5b7..20cec10 100644 --- a/LukeHagar/PlexAPI/SDK/Search.cs +++ b/LukeHagar/PlexAPI/SDK/Search.cs @@ -87,10 +87,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Server.cs b/LukeHagar/PlexAPI/SDK/Server.cs index 542e050..2a6490e 100644 --- a/LukeHagar/PlexAPI/SDK/Server.cs +++ b/LukeHagar/PlexAPI/SDK/Server.cs @@ -126,10 +126,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Sessions.cs b/LukeHagar/PlexAPI/SDK/Sessions.cs index 2453618..6c15b30 100644 --- a/LukeHagar/PlexAPI/SDK/Sessions.cs +++ b/LukeHagar/PlexAPI/SDK/Sessions.cs @@ -80,10 +80,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Statistics.cs b/LukeHagar/PlexAPI/SDK/Statistics.cs index d876d74..bbaaa16 100644 --- a/LukeHagar/PlexAPI/SDK/Statistics.cs +++ b/LukeHagar/PlexAPI/SDK/Statistics.cs @@ -71,10 +71,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Updater.cs b/LukeHagar/PlexAPI/SDK/Updater.cs index 00a3c67..4a0c38b 100644 --- a/LukeHagar/PlexAPI/SDK/Updater.cs +++ b/LukeHagar/PlexAPI/SDK/Updater.cs @@ -74,10 +74,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Users.cs b/LukeHagar/PlexAPI/SDK/Users.cs index c7c7677..08cf863 100644 --- a/LukeHagar/PlexAPI/SDK/Users.cs +++ b/LukeHagar/PlexAPI/SDK/Users.cs @@ -45,10 +45,10 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Video.cs b/LukeHagar/PlexAPI/SDK/Video.cs index a142372..45fd468 100644 --- a/LukeHagar/PlexAPI/SDK/Video.cs +++ b/LukeHagar/PlexAPI/SDK/Video.cs @@ -62,10 +62,10 @@ namespace LukeHagar.PlexAPI.SDK { public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/LukeHagar/PlexAPI/SDK/Watchlist.cs b/LukeHagar/PlexAPI/SDK/Watchlist.cs index 5162429..8270feb 100644 --- a/LukeHagar/PlexAPI/SDK/Watchlist.cs +++ b/LukeHagar/PlexAPI/SDK/Watchlist.cs @@ -59,10 +59,10 @@ namespace LukeHagar.PlexAPI.SDK }; public SDKConfig SDKConfiguration { get; private set; } private const string _language = "csharp"; - private const string _sdkVersion = "0.13.6"; + private const string _sdkVersion = "0.14.0"; private const string _sdkGenVersion = "2.506.0"; private const string _openapiDocVersion = "0.0.3"; - private const string _userAgent = "speakeasy-sdk/csharp 0.13.6 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; + private const string _userAgent = "speakeasy-sdk/csharp 0.14.0 2.506.0 0.0.3 LukeHagar.PlexAPI.SDK"; private string _serverUrl = ""; private ISpeakeasyHttpClient _client; private Func? _securitySource; diff --git a/README.md b/README.md index ed796b2..e5cddd2 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ var res = await sdk.Server.GetServerCapabilitiesAsync(); * [GetLibraryDetails](docs/sdks/library/README.md#getlibrarydetails) - Get Library Details * [DeleteLibrary](docs/sdks/library/README.md#deletelibrary) - Delete Library Section * [GetLibraryItems](docs/sdks/library/README.md#getlibraryitems) - Get Library Items +* [GetAllMediaLibrary](docs/sdks/library/README.md#getallmedialibrary) - Get all media of library * [GetRefreshLibraryMetadata](docs/sdks/library/README.md#getrefreshlibrarymetadata) - Refresh Metadata Of The Library * [GetSearchLibrary](docs/sdks/library/README.md#getsearchlibrary) - Search Library * [GetGenresLibrary](docs/sdks/library/README.md#getgenreslibrary) - Get Genres of library media diff --git a/RELEASES.md b/RELEASES.md index c56bebe..7adef95 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -484,4 +484,14 @@ Based on: ### Generated - [csharp v0.13.6] . ### Releases -- [NuGet v0.13.6] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.13.6 - . \ No newline at end of file +- [NuGet v0.13.6] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.13.6 - . + +## 2025-02-10 00:21:59 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.487.1 (2.506.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [csharp v0.14.0] . +### Releases +- [NuGet v0.14.0] https://www.nuget.org/packages/LukeHagar.PlexAPI.SDK/0.14.0 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index 5cb7212..402a203 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -684,6 +684,26 @@ actions: type: GetActorsLibraryQueryParamType.TvShow ); + // handle response + - target: $["paths"]["/library/sections/{sectionKey}/all"]["get"] + update: + x-codeSamples: + - lang: csharp + label: library + source: |- + using LukeHagar.PlexAPI.SDK; + using LukeHagar.PlexAPI.SDK.Models.Components; + using LukeHagar.PlexAPI.SDK.Models.Requests; + + var sdk = new PlexAPI(accessToken: ""); + + GetAllMediaLibraryRequest req = new GetAllMediaLibraryRequest() { + SectionKey = 9518, + Type = GetAllMediaLibraryQueryParamType.TvShow, + }; + + var res = await sdk.Library.GetAllMediaLibraryAsync(req); + // handle response - target: $["paths"]["/library/sections/{sectionKey}/country"]["get"] update: diff --git a/docs/Models/Errors/GetAllMediaLibraryBadRequest.md b/docs/Models/Errors/GetAllMediaLibraryBadRequest.md new file mode 100644 index 0000000..ba0dc44 --- /dev/null +++ b/docs/Models/Errors/GetAllMediaLibraryBadRequest.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[GetAllMediaLibraryErrors](../../Models/Errors/GetAllMediaLibraryErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Errors/GetAllMediaLibraryErrors.md b/docs/Models/Errors/GetAllMediaLibraryErrors.md new file mode 100644 index 0000000..250bf05 --- /dev/null +++ b/docs/Models/Errors/GetAllMediaLibraryErrors.md @@ -0,0 +1,10 @@ +# GetAllMediaLibraryErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1000 | +| `Message` | *string* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `Status` | *int* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md b/docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md new file mode 100644 index 0000000..0f4f674 --- /dev/null +++ b/docs/Models/Errors/GetAllMediaLibraryLibraryErrors.md @@ -0,0 +1,10 @@ +# GetAllMediaLibraryLibraryErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `Code` | *int* | :heavy_minus_sign: | N/A | 1001 | +| `Message` | *string* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `Status` | *int* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md b/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md new file mode 100644 index 0000000..db4bf44 --- /dev/null +++ b/docs/Models/Errors/GetAllMediaLibraryUnauthorized.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `Errors` | List<[GetAllMediaLibraryLibraryErrors](../../Models/Errors/GetAllMediaLibraryLibraryErrors.md)> | :heavy_minus_sign: | N/A | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/Models/Requests/GetActorsLibraryMediaContainer.md b/docs/Models/Requests/GetActorsLibraryMediaContainer.md index c3004ff..4faf185 100644 --- a/docs/Models/Requests/GetActorsLibraryMediaContainer.md +++ b/docs/Models/Requests/GetActorsLibraryMediaContainer.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `Size` | *double* | :heavy_check_mark: | N/A | 50 | +| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | | `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | | `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg | | `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | diff --git a/docs/Models/Requests/GetAllMediaLibraryActiveDirection.md b/docs/Models/Requests/GetAllMediaLibraryActiveDirection.md new file mode 100644 index 0000000..459c02e --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryActiveDirection.md @@ -0,0 +1,12 @@ +# GetAllMediaLibraryActiveDirection + +The direction of the sort. Can be either `asc` or `desc`. + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `Ascending` | asc | +| `Descending` | desc | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryCollection.md b/docs/Models/Requests/GetAllMediaLibraryCollection.md new file mode 100644 index 0000000..73bb1dd --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryCollection.md @@ -0,0 +1,8 @@ +# GetAllMediaLibraryCollection + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `Tag` | *string* | :heavy_check_mark: | The user-made collection this media item belongs to | My Awesome Collection | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryCountry.md b/docs/Models/Requests/GetAllMediaLibraryCountry.md new file mode 100644 index 0000000..4be36e5 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryCountry.md @@ -0,0 +1,8 @@ +# GetAllMediaLibraryCountry + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md b/docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md new file mode 100644 index 0000000..555c7c0 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryDefaultDirection.md @@ -0,0 +1,12 @@ +# GetAllMediaLibraryDefaultDirection + +The direction of the sort. Can be either `asc` or `desc`. + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `Ascending` | asc | +| `Descending` | desc | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryDirector.md b/docs/Models/Requests/GetAllMediaLibraryDirector.md new file mode 100644 index 0000000..9cbd384 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryDirector.md @@ -0,0 +1,8 @@ +# GetAllMediaLibraryDirector + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | +| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryField.md b/docs/Models/Requests/GetAllMediaLibraryField.md new file mode 100644 index 0000000..830b91e --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryField.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryField + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `Key` | *string* | :heavy_check_mark: | N/A | show.title | +| `Title` | *string* | :heavy_check_mark: | N/A | Show Title | +| `Type` | *string* | :heavy_check_mark: | N/A | string | +| `SubType` | *string* | :heavy_minus_sign: | N/A | rating | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryFieldType.md b/docs/Models/Requests/GetAllMediaLibraryFieldType.md new file mode 100644 index 0000000..c450cf9 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryFieldType.md @@ -0,0 +1,9 @@ +# GetAllMediaLibraryFieldType + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `Type` | *string* | :heavy_check_mark: | N/A | tag | +| `Operator` | List<[GetAllMediaLibraryOperator](../../Models/Requests/GetAllMediaLibraryOperator.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryFilter.md b/docs/Models/Requests/GetAllMediaLibraryFilter.md new file mode 100644 index 0000000..461b515 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryFilter.md @@ -0,0 +1,13 @@ +# GetAllMediaLibraryFilter + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `Filter` | *string* | :heavy_check_mark: | N/A | genre | +| `FilterType` | *string* | :heavy_check_mark: | N/A | string | +| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/genre?type=2 | +| `Title` | *string* | :heavy_check_mark: | N/A | Genre | +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Advanced` | *bool* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryGenre.md b/docs/Models/Requests/GetAllMediaLibraryGenre.md new file mode 100644 index 0000000..6e3962c --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryGenre.md @@ -0,0 +1,8 @@ +# GetAllMediaLibraryGenre + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md b/docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md new file mode 100644 index 0000000..7fd371e --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryHasThumbnail.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryHasThumbnail + +Indicates if the part has a thumbnail. + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryImage.md b/docs/Models/Requests/GetAllMediaLibraryImage.md new file mode 100644 index 0000000..05ae784 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryImage.md @@ -0,0 +1,10 @@ +# GetAllMediaLibraryImage + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| `Alt` | *string* | :heavy_check_mark: | N/A | Episode 1 | +| `Type` | [GetAllMediaLibraryLibraryResponseType](../../Models/Requests/GetAllMediaLibraryLibraryResponseType.md) | :heavy_check_mark: | N/A | background | +| `Url` | *string* | :heavy_check_mark: | N/A | /library/metadata/45521/thumb/1644710589 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md b/docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md new file mode 100644 index 0000000..5c6e563 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md @@ -0,0 +1,18 @@ +# GetAllMediaLibraryLibraryOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### GetAllMediaLibraryOptimizedForStreaming1 + +```csharp +GetAllMediaLibraryLibraryOptimizedForStreaming.CreateGetAllMediaLibraryOptimizedForStreaming1(/* values here */); +``` + +### Boolean + +```csharp +GetAllMediaLibraryLibraryOptimizedForStreaming.CreateBoolean(/* values here */); +``` diff --git a/docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md b/docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md new file mode 100644 index 0000000..891737d --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryLibraryResponseType.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryLibraryResponseType + + +## Values + +| Name | Value | +| ------------- | ------------- | +| `CoverPoster` | coverPoster | +| `Background` | background | +| `Snapshot` | snapshot | +| `ClearLogo` | clearLogo | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryLibraryType.md b/docs/Models/Requests/GetAllMediaLibraryLibraryType.md new file mode 100644 index 0000000..31fa60e --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryLibraryType.md @@ -0,0 +1,16 @@ +# GetAllMediaLibraryLibraryType + +The type of media content + + + +## Values + +| Name | Value | +| --------- | --------- | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMedia.md b/docs/Models/Requests/GetAllMediaLibraryMedia.md new file mode 100644 index 0000000..2c72307 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryMedia.md @@ -0,0 +1,26 @@ +# GetAllMediaLibraryMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | Unique media identifier. | 387322 | +| `Duration` | *int* | :heavy_minus_sign: | Duration of the media in milliseconds. | 9610350 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate in bits per second. | 25512 | +| `Width` | *int* | :heavy_minus_sign: | Video width in pixels. | 3840 | +| `Height` | *int* | :heavy_minus_sign: | Video height in pixels. | 1602 | +| `AspectRatio` | *float* | :heavy_minus_sign: | Aspect ratio of the video. | 2.35 | +| `AudioChannels` | *int* | :heavy_minus_sign: | Number of audio channels. | 6 | +| `DisplayOffset` | *int* | :heavy_minus_sign: | N/A | 50 | +| `AudioCodec` | *string* | :heavy_minus_sign: | Audio codec used. | eac3 | +| `VideoCodec` | *string* | :heavy_minus_sign: | Video codec used. | hevc | +| `VideoResolution` | *string* | :heavy_minus_sign: | Video resolution (e.g., 4k). | 4k | +| `Container` | *string* | :heavy_minus_sign: | File container type. | mkv | +| `VideoFrameRate` | *string* | :heavy_minus_sign: | Frame rate of the video. Values found include NTSC, PAL, 24p
| 24p | +| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile (e.g., main 10). | main 10 | +| `HasVoiceActivity` | *bool* | :heavy_check_mark: | Indicates whether voice activity is detected. | false | +| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | +| `OptimizedForStreaming` | [GetAllMediaLibraryOptimizedForStreaming](../../Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | +| `Part` | List<[GetAllMediaLibraryPart](../../Models/Requests/GetAllMediaLibraryPart.md)> | :heavy_check_mark: | An array of parts for this media item. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMediaContainer.md b/docs/Models/Requests/GetAllMediaLibraryMediaContainer.md new file mode 100644 index 0000000..3cc7be3 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryMediaContainer.md @@ -0,0 +1,26 @@ +# GetAllMediaLibraryMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | +| `TotalSize` | *int* | :heavy_check_mark: | Total number of media items in the library. | 50 | +| `Offset` | *long* | :heavy_check_mark: | Offset value for pagination. | 0 | +| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | +| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg | +| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary | +| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | +| `LibrarySectionID` | *long* | :heavy_check_mark: | The unique identifier for the library section. | 2 | +| `LibrarySectionTitle` | *string* | :heavy_check_mark: | The title of the library section. | TV Series | +| `LibrarySectionUUID` | *string* | :heavy_minus_sign: | The universally unique identifier for the library section. | e69655a2-ef48-4aba-bb19-0cc34d1e7d36 | +| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ | +| `MediaTagVersion` | *long* | :heavy_check_mark: | The version number for media tags. | 1734362201 | +| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png | +| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true | +| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series | +| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor | +| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary | +| `Meta` | [GetAllMediaLibraryMeta](../../Models/Requests/GetAllMediaLibraryMeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
| | +| `Metadata` | List<[GetAllMediaLibraryMetadata](../../Models/Requests/GetAllMediaLibraryMetadata.md)> | :heavy_minus_sign: | An array of metadata items. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMeta.md b/docs/Models/Requests/GetAllMediaLibraryMeta.md new file mode 100644 index 0000000..c1d1c5d --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryMeta.md @@ -0,0 +1,12 @@ +# GetAllMediaLibraryMeta + +The Meta object is only included in the response if the `includeMeta` parameter is set to `1`. + + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `Type` | List<[GetAllMediaLibraryType](../../Models/Requests/GetAllMediaLibraryType.md)> | :heavy_minus_sign: | N/A | +| `FieldType` | List<[GetAllMediaLibraryFieldType](../../Models/Requests/GetAllMediaLibraryFieldType.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryMetadata.md b/docs/Models/Requests/GetAllMediaLibraryMetadata.md new file mode 100644 index 0000000..4e3e7de --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryMetadata.md @@ -0,0 +1,74 @@ +# GetAllMediaLibraryMetadata + +Unknown + + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `RatingKey` | *string* | :heavy_check_mark: | The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API. | 58683 | +| `Key` | *string* | :heavy_check_mark: | The unique key for the media item. | /library/metadata/58683 | +| `Guid` | *string* | :heavy_check_mark: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `Slug` | *string* | :heavy_check_mark: | A URL‐friendly version of the media title. | 4-for-texas | +| `Studio` | *string* | :heavy_minus_sign: | The studio that produced the media item. | 20th Century Studios | +| `Type` | [GetAllMediaLibraryLibraryType](../../Models/Requests/GetAllMediaLibraryLibraryType.md) | :heavy_check_mark: | N/A | movie | +| `Title` | *string* | :heavy_check_mark: | The title of the media item. | Avatar: The Way of Water | +| `TitleSort` | *string* | :heavy_check_mark: | The sort title used for ordering media items. | Whale | +| `ContentRating` | *string* | :heavy_minus_sign: | The content rating for the media item. | PG-13 | +| `Summary` | *string* | :heavy_check_mark: | A synopsis of the media item. | Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.
Once a familiar threat returns to finish what was previously started, Jake must
work with Neytiri and the army of the Na'vi race to protect their home.
| +| `Rating` | *float* | :heavy_check_mark: | The critic rating for the media item. | 7.6 | +| `AudienceRating` | *double* | :heavy_check_mark: | The audience rating for the media item. | 9.2 | +| `Year` | *int* | :heavy_check_mark: | The release year of the media item. | 2022 | +| `Tagline` | *string* | :heavy_check_mark: | A brief tagline for the media item. | Return to Pandora. | +| `Thumb` | *string* | :heavy_check_mark: | The thumbnail image URL for the media item. | /library/metadata/58683/thumb/1703239236 | +| `Art` | *string* | :heavy_check_mark: | The art image URL for the media item. | /library/metadata/58683/art/1703239236 | +| `Theme` | *string* | :heavy_check_mark: | The theme URL for the media item. | /library/metadata/1/theme/1705636920 | +| `Index` | *int* | :heavy_check_mark: | The index position of the media item. | 1 | +| `LeafCount` | *int* | :heavy_minus_sign: | The number of leaf items (end nodes) under this media item. | 14 | +| `ViewedLeafCount` | *int* | :heavy_minus_sign: | The number of leaf items that have been viewed. | 0 | +| `ChildCount` | *int* | :heavy_check_mark: | The number of child items associated with this media item. | 1 | +| `SeasonCount` | *int* | :heavy_check_mark: | The total number of seasons (for TV shows). | 2022 | +| `Duration` | *int* | :heavy_check_mark: | The duration of the media item in milliseconds. | 11558112 | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_check_mark: | The original release date of the media item. | 2022-12-14 | +| `AddedAt` | *long* | :heavy_check_mark: | N/A | 1556281940 | +| `UpdatedAt` | *long* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | The URL for the audience rating image. | rottentomatoes://image.rating.upright | +| `ChapterSource` | *string* | :heavy_minus_sign: | The source from which chapter data is derived. | media | +| `PrimaryExtraKey` | *string* | :heavy_minus_sign: | The primary extra key associated with this media item. | /library/metadata/58684 | +| `OriginalTitle` | *string* | :heavy_minus_sign: | The original title of the media item (if different). | 映画 ブラッククローバー 魔法帝の剣 | +| `ParentRatingKey` | *string* | :heavy_minus_sign: | The rating key of the parent media item. | 66 | +| `GrandparentRatingKey` | *string* | :heavy_minus_sign: | The rating key of the grandparent media item. | 66 | +| `ParentGuid` | *string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentGuid` | *string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `GrandparentSlug` | *string* | :heavy_minus_sign: | The slug for the grandparent media item. | alice-in-borderland-2020 | +| `GrandparentKey` | *string* | :heavy_minus_sign: | The key of the grandparent media item. | /library/metadata/66 | +| `ParentKey` | *string* | :heavy_minus_sign: | The key of the parent media item. | /library/metadata/66 | +| `GrandparentTitle` | *string* | :heavy_minus_sign: | The title of the grandparent media item. | Caprica | +| `GrandparentThumb` | *string* | :heavy_minus_sign: | The thumbnail URL for the grandparent media item. | /library/metadata/66/thumb/1705716261 | +| `GrandparentTheme` | *string* | :heavy_minus_sign: | The theme URL for the grandparent media item. | /library/metadata/66/theme/1705716261 | +| `GrandparentArt` | *string* | :heavy_minus_sign: | The art URL for the grandparent media item. | /library/metadata/66/art/1705716261 | +| `ParentTitle` | *string* | :heavy_minus_sign: | The title of the parent media item. | Caprica | +| `ParentIndex` | *int* | :heavy_minus_sign: | The index position of the parent media item. | 1 | +| `ParentThumb` | *string* | :heavy_minus_sign: | The thumbnail URL for the parent media item. | /library/metadata/66/thumb/1705716261 | +| `RatingImage` | *string* | :heavy_minus_sign: | The URL for the rating image. | rottentomatoes://image.rating.ripe | +| `ViewCount` | *int* | :heavy_minus_sign: | The number of times this media item has been viewed. | 1 | +| `ViewOffset` | *int* | :heavy_minus_sign: | The current playback offset (in milliseconds). | 5222500 | +| `SkipCount` | *int* | :heavy_minus_sign: | The number of times this media item has been skipped. | 1 | +| `Subtype` | *string* | :heavy_minus_sign: | A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip. | clip | +| `LastRatedAt` | *long* | :heavy_minus_sign: | The Unix timestamp representing the last time the item was rated. | 1721813113 | +| `CreatedAtAccuracy` | *string* | :heavy_minus_sign: | The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available). | epoch,local | +| `CreatedAtTZOffset` | *string* | :heavy_minus_sign: | The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC. | 0 | +| `LastViewedAt` | *int* | :heavy_minus_sign: | Unix timestamp for when the media item was last viewed. | 1682752242 | +| `UserRating` | *float* | :heavy_minus_sign: | The rating provided by a user for the item. This value is expressed as a decimal number. | 10 | +| `Image` | List<[GetAllMediaLibraryImage](../../Models/Requests/GetAllMediaLibraryImage.md)> | :heavy_minus_sign: | N/A | | +| `UltraBlurColors` | [GetAllMediaLibraryUltraBlurColors](../../Models/Requests/GetAllMediaLibraryUltraBlurColors.md) | :heavy_minus_sign: | N/A | | +| `Media` | List<[GetAllMediaLibraryMedia](../../Models/Requests/GetAllMediaLibraryMedia.md)> | :heavy_minus_sign: | N/A | | +| `Genre` | List<[GetAllMediaLibraryGenre](../../Models/Requests/GetAllMediaLibraryGenre.md)> | :heavy_minus_sign: | N/A | | +| `Country` | List<[GetAllMediaLibraryCountry](../../Models/Requests/GetAllMediaLibraryCountry.md)> | :heavy_minus_sign: | N/A | | +| `Director` | List<[GetAllMediaLibraryDirector](../../Models/Requests/GetAllMediaLibraryDirector.md)> | :heavy_minus_sign: | N/A | | +| `Writer` | List<[GetAllMediaLibraryWriter](../../Models/Requests/GetAllMediaLibraryWriter.md)> | :heavy_minus_sign: | N/A | | +| `Role` | List<[GetAllMediaLibraryRole](../../Models/Requests/GetAllMediaLibraryRole.md)> | :heavy_minus_sign: | N/A | | +| `Guids` | List<[Guids](../../Models/Requests/Guids.md)> | :heavy_minus_sign: | N/A | | +| `Collection` | List<[GetAllMediaLibraryCollection](../../Models/Requests/GetAllMediaLibraryCollection.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryOperator.md b/docs/Models/Requests/GetAllMediaLibraryOperator.md new file mode 100644 index 0000000..f42bb21 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryOperator.md @@ -0,0 +1,9 @@ +# GetAllMediaLibraryOperator + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `Key` | *string* | :heavy_check_mark: | N/A | = | +| `Title` | *string* | :heavy_check_mark: | N/A | is | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md b/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md new file mode 100644 index 0000000..f724e54 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming.md @@ -0,0 +1,18 @@ +# GetAllMediaLibraryOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### One + +```csharp +GetAllMediaLibraryOptimizedForStreaming.CreateOne(/* values here */); +``` + +### Boolean + +```csharp +GetAllMediaLibraryOptimizedForStreaming.CreateBoolean(/* values here */); +``` diff --git a/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md b/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md new file mode 100644 index 0000000..44999d1 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryOptimizedForStreaming1.md @@ -0,0 +1,9 @@ +# GetAllMediaLibraryOptimizedForStreaming1 + + +## Values + +| Name | Value | +| ------ | ------ | +| `Zero` | 0 | +| `One` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryPart.md b/docs/Models/Requests/GetAllMediaLibraryPart.md new file mode 100644 index 0000000..eef31ae --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryPart.md @@ -0,0 +1,23 @@ +# GetAllMediaLibraryPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `Id` | *long* | :heavy_check_mark: | Unique part identifier. | 418385 | +| `Key` | *string* | :heavy_check_mark: | Key to access this part. | /library/parts/418385/1735864239/file.mkv | +| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | +| `Duration` | *int* | :heavy_minus_sign: | Duration of the part in milliseconds. | 9610350 | +| `File` | *string* | :heavy_check_mark: | File path for the part. | /mnt/Movies_1/W/Wicked (2024).mkv | +| `Size` | *long* | :heavy_check_mark: | File size in bytes. | 30649952104 | +| `PacketLength` | *int* | :heavy_minus_sign: | N/A | 188 | +| `Container` | *string* | :heavy_minus_sign: | Container format of the part. | mkv | +| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile for the part. | main 10 | +| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | +| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | +| `OptimizedForStreaming` | [GetAllMediaLibraryLibraryOptimizedForStreaming](../../Models/Requests/GetAllMediaLibraryLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `HasThumbnail` | [GetAllMediaLibraryHasThumbnail](../../Models/Requests/GetAllMediaLibraryHasThumbnail.md) | :heavy_minus_sign: | N/A | 1 | +| `Stream` | List<[GetAllMediaLibraryStream](../../Models/Requests/GetAllMediaLibraryStream.md)> | :heavy_minus_sign: | An array of streams for this part. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md b/docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md new file mode 100644 index 0000000..7991b44 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md @@ -0,0 +1,12 @@ +# GetAllMediaLibraryQueryParamIncludeMeta + +Adds the Meta object to the response + + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryQueryParamType.md b/docs/Models/Requests/GetAllMediaLibraryQueryParamType.md new file mode 100644 index 0000000..9cddd84 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryQueryParamType.md @@ -0,0 +1,22 @@ +# GetAllMediaLibraryQueryParamType + +The type of media to retrieve or filter by. +1 = movie +2 = show +3 = season +4 = episode +E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + + + +## Values + +| Name | Value | +| --------- | --------- | +| `Movie` | 1 | +| `TvShow` | 2 | +| `Season` | 3 | +| `Episode` | 4 | +| `Audio` | 8 | +| `Album` | 9 | +| `Track` | 10 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryRequest.md b/docs/Models/Requests/GetAllMediaLibraryRequest.md new file mode 100644 index 0000000..f3d0453 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryRequest.md @@ -0,0 +1,16 @@ +# GetAllMediaLibraryRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library.
Note: This is unique in the context of the Plex server.
| 9518 | +| `Type` | [GetAllMediaLibraryQueryParamType](../../Models/Requests/GetAllMediaLibraryQueryParamType.md) | :heavy_check_mark: | The type of media to retrieve or filter by.
1 = movie
2 = show
3 = season
4 = episode
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `IncludeMeta` | [GetAllMediaLibraryQueryParamIncludeMeta](../../Models/Requests/GetAllMediaLibraryQueryParamIncludeMeta.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | +| `IncludeGuids` | [QueryParamIncludeGuids](../../Models/Requests/QueryParamIncludeGuids.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | +| `IncludeAdvanced` | [IncludeAdvanced](../../Models/Requests/IncludeAdvanced.md) | :heavy_minus_sign: | N/A | 1 | +| `IncludeCollections` | [QueryParamIncludeCollections](../../Models/Requests/QueryParamIncludeCollections.md) | :heavy_minus_sign: | N/A | 1 | +| `IncludeExternalMedia` | [QueryParamIncludeExternalMedia](../../Models/Requests/QueryParamIncludeExternalMedia.md) | :heavy_minus_sign: | N/A | 1 | +| `XPlexContainerStart` | *int* | :heavy_minus_sign: | The index of the first item to return. If not specified, the first item will be returned.
If the number of items exceeds the limit, the response will be paginated.
By default this is 0
| 0 | +| `XPlexContainerSize` | *int* | :heavy_minus_sign: | The number of items to return. If not specified, all items will be returned.
If the number of items exceeds the limit, the response will be paginated.
By default this is 50
| 50 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryResponse.md b/docs/Models/Requests/GetAllMediaLibraryResponse.md new file mode 100644 index 0000000..89067a9 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryResponse.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `ContentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `StatusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `RawResponse` | [HttpResponseMessage](https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `Object` | [GetAllMediaLibraryResponseBody](../../Models/Requests/GetAllMediaLibraryResponseBody.md) | :heavy_minus_sign: | Successful response containing media container data. | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryResponseBody.md b/docs/Models/Requests/GetAllMediaLibraryResponseBody.md new file mode 100644 index 0000000..7556207 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryResponseBody.md @@ -0,0 +1,10 @@ +# GetAllMediaLibraryResponseBody + +Successful response containing media container data. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `MediaContainer` | [GetAllMediaLibraryMediaContainer](../../Models/Requests/GetAllMediaLibraryMediaContainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryRole.md b/docs/Models/Requests/GetAllMediaLibraryRole.md new file mode 100644 index 0000000..b82113f --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryRole.md @@ -0,0 +1,8 @@ +# GetAllMediaLibraryRole + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `Tag` | *string* | :heavy_check_mark: | The name of the actor for this role | Danny Boyle | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibrarySort.md b/docs/Models/Requests/GetAllMediaLibrarySort.md new file mode 100644 index 0000000..492ea79 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibrarySort.md @@ -0,0 +1,15 @@ +# GetAllMediaLibrarySort + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| `Default` | *string* | :heavy_minus_sign: | N/A | asc | +| `Active` | *bool* | :heavy_minus_sign: | N/A | false | +| `ActiveDirection` | [GetAllMediaLibraryActiveDirection](../../Models/Requests/GetAllMediaLibraryActiveDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | +| `DefaultDirection` | [GetAllMediaLibraryDefaultDirection](../../Models/Requests/GetAllMediaLibraryDefaultDirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.
| asc | +| `DescKey` | *string* | :heavy_minus_sign: | N/A | titleSort:desc | +| `FirstCharacterKey` | *string* | :heavy_minus_sign: | N/A | /library/sections/2/firstCharacter | +| `Key` | *string* | :heavy_check_mark: | N/A | titleSort | +| `Title` | *string* | :heavy_check_mark: | N/A | Title | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryStream.md b/docs/Models/Requests/GetAllMediaLibraryStream.md new file mode 100644 index 0000000..dc6e382 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryStream.md @@ -0,0 +1,54 @@ +# GetAllMediaLibraryStream + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `StreamType` | *int* | :heavy_check_mark: | Stream type (1=video, 2=audio, 3=subtitle). | 1 | +| `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true | +| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc | +| `Index` | *int* | :heavy_check_mark: | Index of the stream. | 0 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | +| `Language` | *string* | :heavy_check_mark: | Language of the stream. | English | +| `LanguageTag` | *string* | :heavy_check_mark: | Language tag (e.g., en). | en | +| `LanguageCode` | *string* | :heavy_check_mark: | ISO language code. | eng | +| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `DOVIBLCompatID` | *int* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | +| `DOVIBLPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true | +| `DOVIELPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false | +| `DOVILevel` | *int* | :heavy_minus_sign: | Dolby Vision level. | 6 | +| `DOVIPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true | +| `DOVIProfile` | *int* | :heavy_minus_sign: | Dolby Vision profile. | 8 | +| `DOVIRPUPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true | +| `DOVIVersion` | *string* | :heavy_minus_sign: | Dolby Vision version. | 1.0 | +| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `ChromaLocation` | *string* | :heavy_minus_sign: | Chroma sample location. | topleft | +| `ChromaSubsampling` | *string* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 | +| `CodedHeight` | *int* | :heavy_minus_sign: | Coded video height. | 1608 | +| `CodedWidth` | *int* | :heavy_minus_sign: | Coded video width. | 3840 | +| `ColorPrimaries` | *string* | :heavy_minus_sign: | Color primaries used. | bt2020 | +| `ColorRange` | *string* | :heavy_minus_sign: | Color range (e.g., tv). | tv | +| `ColorSpace` | *string* | :heavy_minus_sign: | Color space. | bt2020nc | +| `ColorTrc` | *string* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 | +| `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | +| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 | +| `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true | +| `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false | +| `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 | +| `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive | +| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `ExtendedDisplayTitle` | *string* | :heavy_check_mark: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | +| `Forced` | *bool* | :heavy_minus_sign: | N/A | true | +| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | +| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | +| `HearingImpaired` | *bool* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true | +| `Dub` | *bool* | :heavy_minus_sign: | Indicates if the stream is a dub. | true | +| `Title` | *string* | :heavy_minus_sign: | Optional title for the stream (e.g., language variant). | SDH | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryType.md b/docs/Models/Requests/GetAllMediaLibraryType.md new file mode 100644 index 0000000..97b64b0 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryType.md @@ -0,0 +1,15 @@ +# GetAllMediaLibraryType + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 | +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Subtype` | *string* | :heavy_minus_sign: | N/A | clip | +| `Title` | *string* | :heavy_check_mark: | N/A | TV Shows | +| `Active` | *bool* | :heavy_check_mark: | N/A | false | +| `Filter` | List<[GetAllMediaLibraryFilter](../../Models/Requests/GetAllMediaLibraryFilter.md)> | :heavy_minus_sign: | N/A | | +| `Sort` | List<[GetAllMediaLibrarySort](../../Models/Requests/GetAllMediaLibrarySort.md)> | :heavy_minus_sign: | N/A | | +| `Field` | List<[GetAllMediaLibraryField](../../Models/Requests/GetAllMediaLibraryField.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md b/docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md new file mode 100644 index 0000000..b515745 --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryUltraBlurColors.md @@ -0,0 +1,11 @@ +# GetAllMediaLibraryUltraBlurColors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `TopLeft` | *string* | :heavy_check_mark: | N/A | 11333b | +| `TopRight` | *string* | :heavy_check_mark: | N/A | 0a232d | +| `BottomRight` | *string* | :heavy_check_mark: | N/A | 73958 | +| `BottomLeft` | *string* | :heavy_check_mark: | N/A | 1f5066 | \ No newline at end of file diff --git a/docs/Models/Requests/GetAllMediaLibraryWriter.md b/docs/Models/Requests/GetAllMediaLibraryWriter.md new file mode 100644 index 0000000..520daef --- /dev/null +++ b/docs/Models/Requests/GetAllMediaLibraryWriter.md @@ -0,0 +1,8 @@ +# GetAllMediaLibraryWriter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `Tag` | *string* | :heavy_check_mark: | The role of Writer | Danny Boyle | \ No newline at end of file diff --git a/docs/Models/Requests/GetCountriesLibraryMediaContainer.md b/docs/Models/Requests/GetCountriesLibraryMediaContainer.md index 1f1124f..6c26afa 100644 --- a/docs/Models/Requests/GetCountriesLibraryMediaContainer.md +++ b/docs/Models/Requests/GetCountriesLibraryMediaContainer.md @@ -5,18 +5,16 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| `Size` | *double* | :heavy_check_mark: | N/A | 50 | -| `Offset` | *int* | :heavy_minus_sign: | N/A | | -| `TotalSize` | *int* | :heavy_minus_sign: | N/A | | -| `Identifier` | *string* | :heavy_check_mark: | N/A | com.plexapp.plugins.library | -| `AllowSync` | *bool* | :heavy_check_mark: | N/A | false | -| `Art` | *string* | :heavy_check_mark: | N/A | /:/resources/show-fanart.jpg | -| `Content` | *string* | :heavy_check_mark: | N/A | secondary | -| `MediaTagPrefix` | *string* | :heavy_check_mark: | N/A | /system/bundle/media/flags/ | -| `MediaTagVersion` | *long* | :heavy_check_mark: | N/A | 1734362201 | -| `Nocache` | *bool* | :heavy_check_mark: | N/A | true | -| `Thumb` | *string* | :heavy_check_mark: | N/A | /:/resources/show.png | -| `Title1` | *string* | :heavy_check_mark: | N/A | TV Series | -| `Title2` | *string* | :heavy_check_mark: | N/A | By Country | -| `ViewGroup` | *string* | :heavy_check_mark: | N/A | secondary | +| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | +| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | +| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg | +| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary | +| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | +| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ | +| `MediaTagVersion` | *long* | :heavy_check_mark: | The version number for media tags. | 1734362201 | +| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true | +| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png | +| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series | +| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor | +| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary | | `Directory` | List<[GetCountriesLibraryDirectory](../../Models/Requests/GetCountriesLibraryDirectory.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetGenresLibraryMediaContainer.md b/docs/Models/Requests/GetGenresLibraryMediaContainer.md index 2b9429c..79ff79c 100644 --- a/docs/Models/Requests/GetGenresLibraryMediaContainer.md +++ b/docs/Models/Requests/GetGenresLibraryMediaContainer.md @@ -5,18 +5,16 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `Size` | *double* | :heavy_check_mark: | N/A | 50 | -| `Offset` | *int* | :heavy_minus_sign: | N/A | | -| `TotalSize` | *int* | :heavy_minus_sign: | N/A | | -| `Identifier` | *string* | :heavy_check_mark: | N/A | com.plexapp.plugins.library | -| `AllowSync` | *bool* | :heavy_check_mark: | N/A | false | -| `Art` | *string* | :heavy_check_mark: | N/A | /:/resources/show-fanart.jpg | -| `Content` | *string* | :heavy_check_mark: | N/A | secondary | -| `MediaTagPrefix` | *string* | :heavy_check_mark: | N/A | /system/bundle/media/flags/ | -| `MediaTagVersion` | *long* | :heavy_check_mark: | N/A | 1734362201 | -| `Nocache` | *bool* | :heavy_check_mark: | N/A | true | -| `Thumb` | *string* | :heavy_check_mark: | N/A | /:/resources/show.png | -| `Title1` | *string* | :heavy_check_mark: | N/A | TV Shows (Reality) | -| `Title2` | *string* | :heavy_check_mark: | N/A | By Genre | -| `ViewGroup` | *string* | :heavy_check_mark: | N/A | secondary | +| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | +| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | +| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg | +| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary | +| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | +| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ | +| `MediaTagVersion` | *long* | :heavy_check_mark: | The version number for media tags. | 1734362201 | +| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true | +| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png | +| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series | +| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor | +| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary | | `Directory` | List<[GetGenresLibraryDirectory](../../Models/Requests/GetGenresLibraryDirectory.md)> | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryItemsFilter.md b/docs/Models/Requests/GetLibraryItemsFilter.md index 9585aa3..f40b545 100644 --- a/docs/Models/Requests/GetLibraryItemsFilter.md +++ b/docs/Models/Requests/GetLibraryItemsFilter.md @@ -9,4 +9,5 @@ | `FilterType` | *string* | :heavy_check_mark: | N/A | string | | `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/genre?type=2 | | `Title` | *string* | :heavy_check_mark: | N/A | Genre | -| `Type` | *string* | :heavy_check_mark: | N/A | filter | \ No newline at end of file +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Advanced` | *bool* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryItemsLibraryType.md b/docs/Models/Requests/GetLibraryItemsLibraryType.md index 8bb508d..eae5ecb 100644 --- a/docs/Models/Requests/GetLibraryItemsLibraryType.md +++ b/docs/Models/Requests/GetLibraryItemsLibraryType.md @@ -11,4 +11,6 @@ The type of media content | `Movie` | movie | | `TvShow` | show | | `Season` | season | -| `Episode` | episode | \ No newline at end of file +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | \ No newline at end of file diff --git a/docs/Models/Requests/GetLibraryItemsType.md b/docs/Models/Requests/GetLibraryItemsType.md index 82e4368..f30cbe3 100644 --- a/docs/Models/Requests/GetLibraryItemsType.md +++ b/docs/Models/Requests/GetLibraryItemsType.md @@ -6,7 +6,8 @@ | Field | Type | Required | Description | Example | | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 | -| `Type` | *string* | :heavy_check_mark: | N/A | show | +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Subtype` | *string* | :heavy_minus_sign: | N/A | clip | | `Title` | *string* | :heavy_check_mark: | N/A | TV Shows | | `Active` | *bool* | :heavy_check_mark: | N/A | false | | `Filter` | List<[GetLibraryItemsFilter](../../Models/Requests/GetLibraryItemsFilter.md)> | :heavy_minus_sign: | N/A | | diff --git a/docs/Models/Requests/GetMediaMetaDataCountry.md b/docs/Models/Requests/GetMediaMetaDataCountry.md index 9af7d82..c0172a4 100644 --- a/docs/Models/Requests/GetMediaMetaDataCountry.md +++ b/docs/Models/Requests/GetMediaMetaDataCountry.md @@ -5,6 +5,6 @@ | Field | Type | Required | Description | Example | | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | -| `Id` | *long* | :heavy_check_mark: | The unique country identifier. | 58591 | +| `Id` | *int* | :heavy_check_mark: | The unique country identifier. | 58591 | | `Filter` | *string* | :heavy_check_mark: | The filter string for the country. | country=58591 | | `Tag` | *string* | :heavy_check_mark: | The country name. | United States of America | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataGuids.md b/docs/Models/Requests/GetMediaMetaDataGuids.md new file mode 100644 index 0000000..fe4ab65 --- /dev/null +++ b/docs/Models/Requests/GetMediaMetaDataGuids.md @@ -0,0 +1,8 @@ +# GetMediaMetaDataGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `Id` | *string* | :heavy_check_mark: | The GUID value. | imdb://tt3032476 | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataHasThumbnail.md b/docs/Models/Requests/GetMediaMetaDataHasThumbnail.md new file mode 100644 index 0000000..94483bc --- /dev/null +++ b/docs/Models/Requests/GetMediaMetaDataHasThumbnail.md @@ -0,0 +1,11 @@ +# GetMediaMetaDataHasThumbnail + +Indicates if the part has a thumbnail. + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.md b/docs/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.md new file mode 100644 index 0000000..6e2fbea --- /dev/null +++ b/docs/Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.md @@ -0,0 +1,18 @@ +# GetMediaMetaDataLibraryOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### GetMediaMetaDataOptimizedForStreaming1 + +```csharp +GetMediaMetaDataLibraryOptimizedForStreaming.CreateGetMediaMetaDataOptimizedForStreaming1(/* values here */); +``` + +### Boolean + +```csharp +GetMediaMetaDataLibraryOptimizedForStreaming.CreateBoolean(/* values here */); +``` diff --git a/docs/Models/Requests/GetMediaMetaDataMedia.md b/docs/Models/Requests/GetMediaMetaDataMedia.md index 6900cae..682fdef 100644 --- a/docs/Models/Requests/GetMediaMetaDataMedia.md +++ b/docs/Models/Requests/GetMediaMetaDataMedia.md @@ -3,20 +3,24 @@ ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| `Id` | *long* | :heavy_check_mark: | Unique media identifier. | 387322 | -| `Duration` | *long* | :heavy_check_mark: | Duration of the media in milliseconds. | 9610350 | -| `Bitrate` | *long* | :heavy_check_mark: | Bitrate in bits per second. | 25512 | -| `Width` | *long* | :heavy_check_mark: | Video width in pixels. | 3840 | -| `Height` | *long* | :heavy_check_mark: | Video height in pixels. | 1602 | -| `AspectRatio` | *float* | :heavy_check_mark: | Aspect ratio of the video. | 2.35 | -| `AudioChannels` | *long* | :heavy_check_mark: | Number of audio channels. | 6 | -| `AudioCodec` | *string* | :heavy_check_mark: | Audio codec used. | eac3 | -| `VideoCodec` | *string* | :heavy_check_mark: | Video codec used. | hevc | -| `VideoResolution` | *string* | :heavy_check_mark: | Video resolution (e.g., 4k). | 4k | -| `Container` | *string* | :heavy_check_mark: | File container type. | mkv | -| `VideoFrameRate` | *string* | :heavy_check_mark: | Frame rate of the video (e.g., 24p). | 24p | -| `VideoProfile` | *string* | :heavy_check_mark: | Video profile (e.g., main 10). | main 10 | -| `HasVoiceActivity` | *bool* | :heavy_check_mark: | Indicates whether voice activity is detected. | false | -| `Part` | List<[GetMediaMetaDataPart](../../Models/Requests/GetMediaMetaDataPart.md)> | :heavy_check_mark: | An array of parts for this media item. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| `Id` | *long* | :heavy_check_mark: | Unique media identifier. | 387322 | +| `Duration` | *int* | :heavy_minus_sign: | Duration of the media in milliseconds. | 9610350 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate in bits per second. | 25512 | +| `Width` | *int* | :heavy_minus_sign: | Video width in pixels. | 3840 | +| `Height` | *int* | :heavy_minus_sign: | Video height in pixels. | 1602 | +| `AspectRatio` | *float* | :heavy_minus_sign: | Aspect ratio of the video. | 2.35 | +| `AudioChannels` | *int* | :heavy_minus_sign: | Number of audio channels. | 6 | +| `DisplayOffset` | *int* | :heavy_minus_sign: | N/A | 50 | +| `AudioCodec` | *string* | :heavy_minus_sign: | Audio codec used. | eac3 | +| `VideoCodec` | *string* | :heavy_minus_sign: | Video codec used. | hevc | +| `VideoResolution` | *string* | :heavy_minus_sign: | Video resolution (e.g., 4k). | 4k | +| `Container` | *string* | :heavy_minus_sign: | File container type. | mkv | +| `VideoFrameRate` | *string* | :heavy_minus_sign: | Frame rate of the video. Values found include NTSC, PAL, 24p
| 24p | +| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile (e.g., main 10). | main 10 | +| `HasVoiceActivity` | *bool* | :heavy_check_mark: | Indicates whether voice activity is detected. | false | +| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | +| `OptimizedForStreaming` | [GetMediaMetaDataOptimizedForStreaming](../../Models/Requests/GetMediaMetaDataOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | +| `Part` | List<[GetMediaMetaDataPart](../../Models/Requests/GetMediaMetaDataPart.md)> | :heavy_check_mark: | An array of parts for this media item. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataMediaContainer.md b/docs/Models/Requests/GetMediaMetaDataMediaContainer.md index 496ade2..b1e3765 100644 --- a/docs/Models/Requests/GetMediaMetaDataMediaContainer.md +++ b/docs/Models/Requests/GetMediaMetaDataMediaContainer.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | Example | | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `Size` | *double* | :heavy_check_mark: | N/A | 50 | +| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 | | `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false | | `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library | | `LibrarySectionID` | *long* | :heavy_check_mark: | The unique identifier for the library section. | 2 | diff --git a/docs/Models/Requests/GetMediaMetaDataMetadata.md b/docs/Models/Requests/GetMediaMetaDataMetadata.md index a584271..f198a2f 100644 --- a/docs/Models/Requests/GetMediaMetaDataMetadata.md +++ b/docs/Models/Requests/GetMediaMetaDataMetadata.md @@ -23,30 +23,32 @@ | `LibrarySectionTitle` | *string* | :heavy_check_mark: | The title of the library section. | TV Series | | `LibrarySectionID` | *long* | :heavy_check_mark: | The ID of the library section. | 2 | | `LibrarySectionKey` | *string* | :heavy_check_mark: | The key of the library section. | /library/sections/2 | -| `ContentRating` | *string* | :heavy_check_mark: | The content rating (e.g., TV-MA). | TV-MA | +| `ContentRating` | *string* | :heavy_minus_sign: | The content rating (e.g., TV-MA). | TV-MA | | `Summary` | *string* | :heavy_check_mark: | A summary of the content. | Before Saul Goodman, he was Jimmy McGill. And if you're calling Jimmy, you're in real trouble. The prequel to "Breaking Bad" follows small-time attorney, Jimmy McGill, as he transforms into Walter White's morally challenged lawyer, Saul Goodman. | | `Index` | *long* | :heavy_minus_sign: | The index or order of the item. | 1 | | `GrandparentTitle` | *string* | :heavy_minus_sign: | The title of the grandparent entity (typically the show's title). | Alice in Borderland | | `ParentTitle` | *string* | :heavy_minus_sign: | The title of the parent entity (typically the season's title). | Season 2 | -| `AudienceRating` | *float* | :heavy_check_mark: | The audience rating for the content. | 8.7 | +| `AudienceRating` | *float* | :heavy_minus_sign: | The audience rating for the content. | 8.7 | | `ViewCount` | *long* | :heavy_minus_sign: | The number of times the item has been viewed. | 4 | | `SkipCount` | *long* | :heavy_minus_sign: | The number of times the item has been skipped. | 1 | | `LastViewedAt` | *long* | :heavy_minus_sign: | Unix timestamp of when the item was last viewed. | 1625764795 | -| `Year` | *long* | :heavy_check_mark: | The release year. | 2015 | +| `Year` | *int* | :heavy_check_mark: | The release year. | 2015 | +| `Rating` | *float* | :heavy_minus_sign: | The general rating | 6 | +| `RatingImage` | *string* | :heavy_minus_sign: | The URL or identifier for the rating image (e.g., Rotten Tomatoes rating image). | rottentomatoes://image.rating.ripe | | `Tagline` | *string* | :heavy_minus_sign: | The tagline of the content. | Make the call | | `ChapterSource` | *string* | :heavy_minus_sign: | N/A | media | | `PrimaryExtraKey` | *string* | :heavy_minus_sign: | N/A | /library/metadata/134704 | | `Thumb` | *string* | :heavy_check_mark: | URL of the thumbnail image. | /library/metadata/44288/thumb/1736487993 | | `Art` | *string* | :heavy_check_mark: | URL of the art image. | /library/metadata/44288/art/1736487993 | | `Theme` | *string* | :heavy_minus_sign: | URL of the theme image. | /library/metadata/44288/theme/1736487993 | -| `Duration` | *long* | :heavy_check_mark: | Duration of the content in milliseconds. | 2700000 | -| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_check_mark: | The original release date. | 2015-02-08 | +| `Duration` | *int* | :heavy_check_mark: | Duration of the content in milliseconds. | 2700000 | +| `OriginallyAvailableAt` | [LocalDate](https://nodatime.org/3.1.x/api/NodaTime.LocalDate.html) | :heavy_minus_sign: | The original release date. | 2015-02-08 | | `LeafCount` | *long* | :heavy_minus_sign: | The total number of episodes (or leaves). | 63 | | `ViewedLeafCount` | *long* | :heavy_minus_sign: | The number of episodes that have been viewed. | 4 | -| `ChildCount` | *long* | :heavy_minus_sign: | The number of child items. | 6 | -| `AddedAt` | *long* | :heavy_check_mark: | Unix timestamp when the item was added. | 1625505101 | -| `UpdatedAt` | *long* | :heavy_check_mark: | Unix timestamp when the item was last updated. | 1736487993 | -| `AudienceRatingImage` | *string* | :heavy_check_mark: | The URL for the audience rating image. | themoviedb://image.rating | +| `ChildCount` | *int* | :heavy_minus_sign: | The number of child items. | 6 | +| `AddedAt` | *long* | :heavy_check_mark: | N/A | 1556281940 | +| `UpdatedAt` | *long* | :heavy_check_mark: | N/A | 1556281940 | +| `AudienceRatingImage` | *string* | :heavy_minus_sign: | The URL for the audience rating image. | themoviedb://image.rating | | `ParentIndex` | *long* | :heavy_minus_sign: | The index number of the parent entity, which could indicate its order or position. | 2 | | `ParentThumb` | *string* | :heavy_minus_sign: | The URL of the parent's thumbnail image. | /library/metadata/48047/thumb/1671800243 | | `GrandparentThumb` | *string* | :heavy_minus_sign: | The URL of the grandparent's thumbnail image. | /library/metadata/45520/thumb/1736488003 | @@ -56,8 +58,8 @@ | `UltraBlurColors` | [GetMediaMetaDataUltraBlurColors](../../Models/Requests/GetMediaMetaDataUltraBlurColors.md) | :heavy_check_mark: | N/A | | | `Genre` | List<[GetMediaMetaDataGenre](../../Models/Requests/GetMediaMetaDataGenre.md)> | :heavy_minus_sign: | An array of genre tags. | | | `Country` | List<[GetMediaMetaDataCountry](../../Models/Requests/GetMediaMetaDataCountry.md)> | :heavy_minus_sign: | An array of country tags. | | -| `Guids` | List<[Guids](../../Models/Requests/Guids.md)> | :heavy_check_mark: | An array of GUID objects. | | -| `Rating` | List<[Rating](../../Models/Requests/Rating.md)> | :heavy_check_mark: | An array of rating objects. | | +| `Guids` | List<[GetMediaMetaDataGuids](../../Models/Requests/GetMediaMetaDataGuids.md)> | :heavy_minus_sign: | An array of GUID objects. | | +| `Ratings` | List<[Ratings](../../Models/Requests/Ratings.md)> | :heavy_minus_sign: | An array of rating objects. | | | `Role` | List<[GetMediaMetaDataRole](../../Models/Requests/GetMediaMetaDataRole.md)> | :heavy_minus_sign: | An array of Actor roles. | | | `Director` | List<[GetMediaMetaDataDirector](../../Models/Requests/GetMediaMetaDataDirector.md)> | :heavy_minus_sign: | An array of Director roles. | | | `Writer` | List<[GetMediaMetaDataWriter](../../Models/Requests/GetMediaMetaDataWriter.md)> | :heavy_minus_sign: | An array of Writer roles. | | diff --git a/docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming.md b/docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming.md new file mode 100644 index 0000000..aae1284 --- /dev/null +++ b/docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming.md @@ -0,0 +1,18 @@ +# GetMediaMetaDataOptimizedForStreaming + +Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true + + +## Supported Types + +### OptimizedForStreaming1 + +```csharp +GetMediaMetaDataOptimizedForStreaming.CreateOptimizedForStreaming1(/* values here */); +``` + +### Boolean + +```csharp +GetMediaMetaDataOptimizedForStreaming.CreateBoolean(/* values here */); +``` diff --git a/docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.md b/docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.md new file mode 100644 index 0000000..009f128 --- /dev/null +++ b/docs/Models/Requests/GetMediaMetaDataOptimizedForStreaming1.md @@ -0,0 +1,9 @@ +# GetMediaMetaDataOptimizedForStreaming1 + + +## Values + +| Name | Value | +| ------ | ------ | +| `Zero` | 0 | +| `One` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataPart.md b/docs/Models/Requests/GetMediaMetaDataPart.md index 9cb3356..8ff2043 100644 --- a/docs/Models/Requests/GetMediaMetaDataPart.md +++ b/docs/Models/Requests/GetMediaMetaDataPart.md @@ -3,16 +3,21 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | -| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | -| `Id` | *long* | :heavy_check_mark: | Unique part identifier. | 418385 | -| `Key` | *string* | :heavy_check_mark: | Key to access this part. | /library/parts/418385/1735864239/file.mkv | -| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | -| `Duration` | *long* | :heavy_check_mark: | Duration of the part in milliseconds. | 9610350 | -| `File` | *string* | :heavy_check_mark: | File path for the part. | /mnt/Movies_1/W/Wicked (2024).mkv | -| `Size` | *long* | :heavy_check_mark: | File size in bytes. | 30649952104 | -| `Container` | *string* | :heavy_check_mark: | Container format of the part. | mkv | -| `VideoProfile` | *string* | :heavy_check_mark: | Video profile for the part. | main 10 | -| `Stream` | List<[GetMediaMetaDataStream](../../Models/Requests/GetMediaMetaDataStream.md)> | :heavy_check_mark: | An array of streams for this part. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `Accessible` | *bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `Exists` | *bool* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `Id` | *long* | :heavy_check_mark: | Unique part identifier. | 418385 | +| `Key` | *string* | :heavy_check_mark: | Key to access this part. | /library/parts/418385/1735864239/file.mkv | +| `Indexes` | *string* | :heavy_minus_sign: | N/A | sd | +| `Duration` | *int* | :heavy_minus_sign: | Duration of the part in milliseconds. | 9610350 | +| `File` | *string* | :heavy_check_mark: | File path for the part. | /mnt/Movies_1/W/Wicked (2024).mkv | +| `Size` | *long* | :heavy_check_mark: | File size in bytes. | 30649952104 | +| `PacketLength` | *int* | :heavy_minus_sign: | N/A | 188 | +| `Container` | *string* | :heavy_minus_sign: | Container format of the part. | mkv | +| `VideoProfile` | *string* | :heavy_minus_sign: | Video profile for the part. | main 10 | +| `AudioProfile` | *string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts | +| `Has64bitOffsets` | *bool* | :heavy_minus_sign: | N/A | false | +| `OptimizedForStreaming` | [GetMediaMetaDataLibraryOptimizedForStreaming](../../Models/Requests/GetMediaMetaDataLibraryOptimizedForStreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | | +| `HasThumbnail` | [GetMediaMetaDataHasThumbnail](../../Models/Requests/GetMediaMetaDataHasThumbnail.md) | :heavy_minus_sign: | N/A | 1 | +| `Stream` | List<[GetMediaMetaDataStream](../../Models/Requests/GetMediaMetaDataStream.md)> | :heavy_minus_sign: | An array of streams for this part. | | \ No newline at end of file diff --git a/docs/Models/Requests/GetMediaMetaDataStream.md b/docs/Models/Requests/GetMediaMetaDataStream.md index 81d4305..83e3c34 100644 --- a/docs/Models/Requests/GetMediaMetaDataStream.md +++ b/docs/Models/Requests/GetMediaMetaDataStream.md @@ -6,47 +6,48 @@ | Field | Type | Required | Description | Example | | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | | `Id` | *long* | :heavy_check_mark: | Unique stream identifier. | 1002625 | -| `StreamType` | *long* | :heavy_check_mark: | Stream type (1=video, 2=audio, 3=subtitle). | 1 | +| `StreamType` | *int* | :heavy_check_mark: | Stream type (1=video, 2=audio, 3=subtitle). | 1 | | `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true | | `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc | -| `Index` | *long* | :heavy_check_mark: | Index of the stream. | 0 | -| `Bitrate` | *long* | :heavy_check_mark: | Bitrate of the stream. | 24743 | +| `Index` | *int* | :heavy_check_mark: | Index of the stream. | 0 | +| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | | `Language` | *string* | :heavy_check_mark: | Language of the stream. | English | | `LanguageTag` | *string* | :heavy_check_mark: | Language tag (e.g., en). | en | | `LanguageCode` | *string* | :heavy_check_mark: | ISO language code. | eng | -| `DOVIBLCompatID` | *long* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | +| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `DOVIBLCompatID` | *int* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | | `DOVIBLPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true | | `DOVIELPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false | -| `DOVILevel` | *long* | :heavy_minus_sign: | Dolby Vision level. | 6 | +| `DOVILevel` | *int* | :heavy_minus_sign: | Dolby Vision level. | 6 | | `DOVIPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true | -| `DOVIProfile` | *long* | :heavy_minus_sign: | Dolby Vision profile. | 8 | +| `DOVIProfile` | *int* | :heavy_minus_sign: | Dolby Vision profile. | 8 | | `DOVIRPUPresent` | *bool* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true | | `DOVIVersion` | *string* | :heavy_minus_sign: | Dolby Vision version. | 1.0 | -| `BitDepth` | *long* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | | `ChromaLocation` | *string* | :heavy_minus_sign: | Chroma sample location. | topleft | | `ChromaSubsampling` | *string* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 | -| `CodedHeight` | *long* | :heavy_minus_sign: | Coded video height. | 1608 | -| `CodedWidth` | *long* | :heavy_minus_sign: | Coded video width. | 3840 | +| `CodedHeight` | *int* | :heavy_minus_sign: | Coded video height. | 1608 | +| `CodedWidth` | *int* | :heavy_minus_sign: | Coded video width. | 3840 | | `ColorPrimaries` | *string* | :heavy_minus_sign: | Color primaries used. | bt2020 | | `ColorRange` | *string* | :heavy_minus_sign: | Color range (e.g., tv). | tv | | `ColorSpace` | *string* | :heavy_minus_sign: | Color space. | bt2020nc | | `ColorTrc` | *string* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 | | `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | -| `Height` | *long* | :heavy_minus_sign: | Height of the video stream. | 1602 | -| `Level` | *long* | :heavy_minus_sign: | Video level. | 150 | +| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 | | `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true | | `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false | | `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 | | `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive | -| `RefFrames` | *long* | :heavy_minus_sign: | Number of reference frames. | 1 | -| `Width` | *long* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 | | `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | | `ExtendedDisplayTitle` | *string* | :heavy_check_mark: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | | `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | | `Forced` | *bool* | :heavy_minus_sign: | N/A | true | -| `Channels` | *long* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | | `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | -| `SamplingRate` | *long* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | | `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | | `HearingImpaired` | *bool* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true | | `Dub` | *bool* | :heavy_minus_sign: | Indicates if the stream is a dub. | true | diff --git a/docs/Models/Requests/GetRecentlyAddedFilter.md b/docs/Models/Requests/GetRecentlyAddedFilter.md index 256111d..7d1f91f 100644 --- a/docs/Models/Requests/GetRecentlyAddedFilter.md +++ b/docs/Models/Requests/GetRecentlyAddedFilter.md @@ -9,4 +9,5 @@ | `FilterType` | *string* | :heavy_check_mark: | N/A | string | | `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/genre?type=2 | | `Title` | *string* | :heavy_check_mark: | N/A | Genre | -| `Type` | *string* | :heavy_check_mark: | N/A | filter | \ No newline at end of file +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Advanced` | *bool* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/Models/Requests/GetRecentlyAddedHubsType.md b/docs/Models/Requests/GetRecentlyAddedHubsType.md index eec1b20..750ece0 100644 --- a/docs/Models/Requests/GetRecentlyAddedHubsType.md +++ b/docs/Models/Requests/GetRecentlyAddedHubsType.md @@ -11,4 +11,6 @@ The type of media content | `Movie` | movie | | `TvShow` | show | | `Season` | season | -| `Episode` | episode | \ No newline at end of file +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | \ No newline at end of file diff --git a/docs/Models/Requests/GetRecentlyAddedLibraryFilter.md b/docs/Models/Requests/GetRecentlyAddedLibraryFilter.md index 2b56e55..eadd4c5 100644 --- a/docs/Models/Requests/GetRecentlyAddedLibraryFilter.md +++ b/docs/Models/Requests/GetRecentlyAddedLibraryFilter.md @@ -9,4 +9,5 @@ | `FilterType` | *string* | :heavy_check_mark: | N/A | string | | `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/genre?type=2 | | `Title` | *string* | :heavy_check_mark: | N/A | Genre | -| `Type` | *string* | :heavy_check_mark: | N/A | filter | \ No newline at end of file +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Advanced` | *bool* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/Models/Requests/GetRecentlyAddedLibraryType.md b/docs/Models/Requests/GetRecentlyAddedLibraryType.md index 3c3ddbb..9c207b8 100644 --- a/docs/Models/Requests/GetRecentlyAddedLibraryType.md +++ b/docs/Models/Requests/GetRecentlyAddedLibraryType.md @@ -6,7 +6,8 @@ | Field | Type | Required | Description | Example | | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | | `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 | -| `Type` | *string* | :heavy_check_mark: | N/A | show | +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Subtype` | *string* | :heavy_minus_sign: | N/A | clip | | `Title` | *string* | :heavy_check_mark: | N/A | TV Shows | | `Active` | *bool* | :heavy_check_mark: | N/A | false | | `Filter` | List<[GetRecentlyAddedLibraryFilter](../../Models/Requests/GetRecentlyAddedLibraryFilter.md)> | :heavy_minus_sign: | N/A | | diff --git a/docs/Models/Requests/GetRecentlyAddedMediaContainer.md b/docs/Models/Requests/GetRecentlyAddedMediaContainer.md index 755b88b..3d03186 100644 --- a/docs/Models/Requests/GetRecentlyAddedMediaContainer.md +++ b/docs/Models/Requests/GetRecentlyAddedMediaContainer.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | Example | | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| `Size` | *double* | :heavy_check_mark: | N/A | 50 | +| `Size` | *long* | :heavy_check_mark: | N/A | 50 | | `Offset` | *int* | :heavy_minus_sign: | N/A | | | `TotalSize` | *int* | :heavy_minus_sign: | N/A | | | `Identifier` | *string* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | diff --git a/docs/Models/Requests/GetRecentlyAddedType.md b/docs/Models/Requests/GetRecentlyAddedType.md index b07a2af..7e953d0 100644 --- a/docs/Models/Requests/GetRecentlyAddedType.md +++ b/docs/Models/Requests/GetRecentlyAddedType.md @@ -6,7 +6,8 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | | `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 | -| `Type` | *string* | :heavy_check_mark: | N/A | show | +| `Type` | *string* | :heavy_check_mark: | N/A | filter | +| `Subtype` | *string* | :heavy_minus_sign: | N/A | clip | | `Title` | *string* | :heavy_check_mark: | N/A | TV Shows | | `Active` | *bool* | :heavy_check_mark: | N/A | false | | `Filter` | List<[GetRecentlyAddedFilter](../../Models/Requests/GetRecentlyAddedFilter.md)> | :heavy_minus_sign: | N/A | | diff --git a/docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.md b/docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.md new file mode 100644 index 0000000..d0bc130 --- /dev/null +++ b/docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.md @@ -0,0 +1,11 @@ +# GetSearchAllLibrariesQueryParamIncludeCollections + +Whether to include collections in the search results. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.md b/docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.md new file mode 100644 index 0000000..a5f85db --- /dev/null +++ b/docs/Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.md @@ -0,0 +1,11 @@ +# GetSearchAllLibrariesQueryParamIncludeExternalMedia + +Whether to include external media in the search results. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetSearchAllLibrariesRequest.md b/docs/Models/Requests/GetSearchAllLibrariesRequest.md index 2785619..88c8007 100644 --- a/docs/Models/Requests/GetSearchAllLibrariesRequest.md +++ b/docs/Models/Requests/GetSearchAllLibrariesRequest.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| `Query` | *string* | :heavy_check_mark: | The search query term. | | -| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 | -| `Limit` | *long* | :heavy_minus_sign: | Limit the number of results returned. | | -| `SearchTypes` | List<[SearchTypes](../../Models/Requests/SearchTypes.md)> | :heavy_minus_sign: | A comma-separated list of search types to include. Valid values are: movies, music, otherVideos, people, tv.
| movies,music,otherVideos,people,tv | -| `IncludeCollections` | [QueryParamIncludeCollections](../../Models/Requests/QueryParamIncludeCollections.md) | :heavy_minus_sign: | Whether to include collections in the search results. | 1 | -| `IncludeExternalMedia` | [QueryParamIncludeExternalMedia](../../Models/Requests/QueryParamIncludeExternalMedia.md) | :heavy_minus_sign: | Whether to include external media in the search results. | 1 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `Query` | *string* | :heavy_check_mark: | The search query term. | | +| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 | +| `Limit` | *long* | :heavy_minus_sign: | Limit the number of results returned. | | +| `SearchTypes` | List<[SearchTypes](../../Models/Requests/SearchTypes.md)> | :heavy_minus_sign: | A comma-separated list of search types to include. Valid values are: movies, music, otherVideos, people, tv.
| movies,music,otherVideos,people,tv | +| `IncludeCollections` | [GetSearchAllLibrariesQueryParamIncludeCollections](../../Models/Requests/GetSearchAllLibrariesQueryParamIncludeCollections.md) | :heavy_minus_sign: | Whether to include collections in the search results. | 1 | +| `IncludeExternalMedia` | [GetSearchAllLibrariesQueryParamIncludeExternalMedia](../../Models/Requests/GetSearchAllLibrariesQueryParamIncludeExternalMedia.md) | :heavy_minus_sign: | Whether to include external media in the search results. | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/GetSearchAllLibrariesType.md b/docs/Models/Requests/GetSearchAllLibrariesType.md index 6d5e31e..427226f 100644 --- a/docs/Models/Requests/GetSearchAllLibrariesType.md +++ b/docs/Models/Requests/GetSearchAllLibrariesType.md @@ -11,4 +11,6 @@ The type of media content | `Movie` | movie | | `TvShow` | show | | `Season` | season | -| `Episode` | episode | \ No newline at end of file +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | \ No newline at end of file diff --git a/docs/Models/Requests/Guids.md b/docs/Models/Requests/Guids.md index 38ff97a..4b447c8 100644 --- a/docs/Models/Requests/Guids.md +++ b/docs/Models/Requests/Guids.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | -| `Id` | *string* | :heavy_check_mark: | The GUID value. | imdb://tt3032476 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `Id` | *string* | :heavy_minus_sign: | The unique identifier for the Guid. Can be imdb://tt0286347, tmdb://1763, tvdb://2337
| tvdb://2337 | \ No newline at end of file diff --git a/docs/Models/Requests/IncludeAdvanced.md b/docs/Models/Requests/IncludeAdvanced.md new file mode 100644 index 0000000..b7c32d1 --- /dev/null +++ b/docs/Models/Requests/IncludeAdvanced.md @@ -0,0 +1,9 @@ +# IncludeAdvanced + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/One.md b/docs/Models/Requests/One.md new file mode 100644 index 0000000..d2f212e --- /dev/null +++ b/docs/Models/Requests/One.md @@ -0,0 +1,9 @@ +# One + + +## Values + +| Name | Value | +| ------ | ------ | +| `Zero` | 0 | +| `One` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/OptimizedForStreaming1.md b/docs/Models/Requests/OptimizedForStreaming1.md new file mode 100644 index 0000000..80b4911 --- /dev/null +++ b/docs/Models/Requests/OptimizedForStreaming1.md @@ -0,0 +1,9 @@ +# OptimizedForStreaming1 + + +## Values + +| Name | Value | +| ------ | ------ | +| `Zero` | 0 | +| `One` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/QueryParamIncludeCollections.md b/docs/Models/Requests/QueryParamIncludeCollections.md index a140d9e..8c4c18f 100644 --- a/docs/Models/Requests/QueryParamIncludeCollections.md +++ b/docs/Models/Requests/QueryParamIncludeCollections.md @@ -1,7 +1,5 @@ # QueryParamIncludeCollections -Whether to include collections in the search results. - ## Values diff --git a/docs/Models/Requests/QueryParamIncludeExternalMedia.md b/docs/Models/Requests/QueryParamIncludeExternalMedia.md index 3e9e78d..c70dd45 100644 --- a/docs/Models/Requests/QueryParamIncludeExternalMedia.md +++ b/docs/Models/Requests/QueryParamIncludeExternalMedia.md @@ -1,7 +1,5 @@ # QueryParamIncludeExternalMedia -Whether to include external media in the search results. - ## Values diff --git a/docs/Models/Requests/QueryParamIncludeGuids.md b/docs/Models/Requests/QueryParamIncludeGuids.md new file mode 100644 index 0000000..db71b5d --- /dev/null +++ b/docs/Models/Requests/QueryParamIncludeGuids.md @@ -0,0 +1,12 @@ +# QueryParamIncludeGuids + +Adds the Guid object to the response + + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/Models/Requests/Rating.md b/docs/Models/Requests/Ratings.md similarity index 99% rename from docs/Models/Requests/Rating.md rename to docs/Models/Requests/Ratings.md index 264bf3b..b8e5725 100644 --- a/docs/Models/Requests/Rating.md +++ b/docs/Models/Requests/Ratings.md @@ -1,4 +1,4 @@ -# Rating +# Ratings ## Fields diff --git a/docs/Models/Requests/Tag.md b/docs/Models/Requests/Tag.md index 8524353..5bbdca0 100644 --- a/docs/Models/Requests/Tag.md +++ b/docs/Models/Requests/Tag.md @@ -7,7 +7,6 @@ A key representing a specific tag within the section. | Name | Value | | ---------------- | ---------------- | -| `All` | all | | `Unwatched` | unwatched | | `Newest` | newest | | `RecentlyAdded` | recentlyAdded | @@ -15,12 +14,9 @@ A key representing a specific tag within the section. | `OnDeck` | onDeck | | `Collection` | collection | | `Edition` | edition | -| `Genre` | genre | | `Year` | year | | `Decade` | decade | | `Director` | director | -| `Actor` | actor | -| `Country` | country | | `ContentRating` | contentRating | | `Rating` | rating | | `Resolution` | resolution | diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md index 0cc4a17..9df4a4e 100644 --- a/docs/sdks/library/README.md +++ b/docs/sdks/library/README.md @@ -14,6 +14,7 @@ API Calls interacting with Plex Media Server Libraries * [GetLibraryDetails](#getlibrarydetails) - Get Library Details * [DeleteLibrary](#deletelibrary) - Delete Library Section * [GetLibraryItems](#getlibraryitems) - Get Library Items +* [GetAllMediaLibrary](#getallmedialibrary) - Get all media of library * [GetRefreshLibraryMetadata](#getrefreshlibrarymetadata) - Refresh Metadata Of The Library * [GetSearchLibrary](#getsearchlibrary) - Search Library * [GetGenresLibrary](#getgenreslibrary) - Get Genres of library media @@ -334,6 +335,48 @@ var res = await sdk.Library.GetLibraryItemsAsync(req); | LukeHagar.PlexAPI.SDK.Models.Errors.GetLibraryItemsUnauthorized | 401 | application/json | | LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | +## GetAllMediaLibrary + +Retrieves a list of all general media data for this library. + + +### Example Usage + +```csharp +using LukeHagar.PlexAPI.SDK; +using LukeHagar.PlexAPI.SDK.Models.Components; +using LukeHagar.PlexAPI.SDK.Models.Requests; + +var sdk = new PlexAPI(accessToken: ""); + +GetAllMediaLibraryRequest req = new GetAllMediaLibraryRequest() { + SectionKey = 9518, + Type = GetAllMediaLibraryQueryParamType.TvShow, +}; + +var res = await sdk.Library.GetAllMediaLibraryAsync(req); + +// handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `request` | [GetAllMediaLibraryRequest](../../Models/Requests/GetAllMediaLibraryRequest.md) | :heavy_check_mark: | The request object to use for the request. | + +### Response + +**[GetAllMediaLibraryResponse](../../Models/Requests/GetAllMediaLibraryResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetAllMediaLibraryBadRequest | 400 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.GetAllMediaLibraryUnauthorized | 401 | application/json | +| LukeHagar.PlexAPI.SDK.Models.Errors.SDKException | 4XX, 5XX | \*/\* | + ## GetRefreshLibraryMetadata This endpoint Refreshes all the Metadata of the library.