mirror of
https://github.com/LukeHagar/plexcsharp.git
synced 2025-12-09 20:47:50 +00:00
## Csharp SDK Changes:
* `PlexApi.LibraryPlaylists.AddPlaylistItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryPlaylists.ClearPlaylistItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryCollections.MoveCollectionItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryCollections.DeleteCollectionItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryCollections.AddCollectionItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Content.GetSonicallySimilar()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Butler.StopTask()`: `request` **Changed** **Breaking** ⚠️ * `PlexApi.Butler.StartTask()`: `request` **Changed** **Breaking** ⚠️ * `PlexApi.Content.GetSonicPath()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.DownloadQueue.GetItemDecision()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetAllHubs()`: * `request.OnlyTransient` **Changed** * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetContinueWatching()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetPromotedHubs()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetMetadataHubs()`: * `request.OnlyTransient` **Changed** * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetPostplayHubs()`: * `request.OnlyTransient` **Changed** * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetRelatedHubs()`: * `request.OnlyTransient` **Changed** * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Hubs.GetSectionHubs()`: * `request.OnlyTransient` **Changed** * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Content.GetAllLeaves()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Content.ListContent()`: * `request` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Search.SearchHubs()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Content.GetAlbums()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetLibraryItems()`: * `request.MediaQuery` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.IngestTransientItem()`: * `request` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetLibraryMatches()`: * `request` **Changed** **Breaking** ⚠️ * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Content.GetMetadataItem()`: * `request` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetSections()`: `response.mediaContainer.Directory.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.AddSection()`: * `request` **Changed** * `response.mediaContainer.Directory.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetTags()`: * `request.Type` **Changed** **Breaking** ⚠️ * `PlexApi.Content.GetCollectionItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetAllItemLeaves()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Status.ListSessions()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.MovePlayQueueItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetExtras()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.DeletePlayQueueItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.Unshuffle()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.ListMatches()`: * `request.Manual` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.ListSonicallySimilar()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.Shuffle()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetRelatedItems()`: `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.ListSimilar()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.ResetPlayQueue()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetItemTree()`: `response.mediaContainer.MetadataItem.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.ClearPlayQueue()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.AddToPlayQueue()`: * `request.Next` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetCommon()`: * `request.MediaQuery` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetPerson()`: `response.mediaContainer.Directory.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.ListPersonMedia()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.PlayQueue.GetPlayQueue()`: * `request` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetLibraryDetails()`: * `request.IncludeDetails` **Changed** * `response.mediaContainer.Directory.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryPlaylists.MovePlaylistItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.Autocomplete()`: * `request.MediaQuery` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Library.GetCollections()`: * `request.MediaQuery` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryPlaylists.GetPlaylistGeneratorItems()`: `response.mediaContainer.Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryPlaylists.DeletePlaylistItem()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Search.VoiceSearchHubs()`: * `request.Type` **Changed** **Breaking** ⚠️ * `response.mediaContainer.Hub.[].Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LibraryPlaylists.CreatePlaylist()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Playlist.GetPlaylistItems()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Playlist.GetPlaylist()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Playlist.ListPlaylists()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Collections.CreateCollection()`: * `request.Type` **Changed** **Breaking** ⚠️ * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.DvRs.TuneChannel()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LiveTv.GetSessions()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.LiveTv.GetLiveTvSession()`: `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Transcoder.MakeDecision()`: * `request` **Changed** * `response.mediaContainer.Metadata.[]` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.GetAllSubscriptions()`: * `request` **Changed** * `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.CreateSubscription()`: `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.GetScheduledRecordings()`: `response.mediaContainer.MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.GetTemplate()`: `response.mediaContainer.SubscriptionTemplate.[].MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.GetSubscription()`: * `request` **Changed** * `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.EditSubscriptionPreferences()`: `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Subscriptions.ReorderSubscription()`: `response.mediaContainer.MediaSubscription.[].MediaGrabOperation.[].Metadata` **Changed** **Breaking** ⚠️ * `PlexApi.Library.AddSubtitles()`: `request` **Changed** * `PlexApi.LibraryPlaylists.UploadPlaylist()`: * `request.Force` **Changed** * `PlexApi.Transcoder.TranscodeSubtitles()`: `request` **Changed** * `PlexApi.Transcoder.StartTranscodeSession()`: `request` **Changed** * `PlexApi.Library.GetMediaPart()`: * `request.Download` **Changed** * `PlexApi.Library.DetectIntros()`: * `request.Force` **Changed** * `PlexApi.Library.GetSectionImage()`: * `request.MediaQuery` **Changed** * `PlexApi.Library.DeleteMediaItem()`: * `request.Proxy` **Changed** * `PlexApi.Library.RefreshItemsMetadata()`: * `request.MarkUpdated` **Changed** * `PlexApi.Authentication.Post-Users-Sign-In-Data()`: **Added** * `PlexApi.Authentication.GetTokenDetails()`: **Added** * `PlexApi.Library.DetectCredits()`: `request` **Changed** * `PlexApi.Library.SetStreamSelection()`: * `request.AllParts` **Changed** * `PlexApi.Library.UpdateItems()`: * `request.Field.locked` **Changed** * `PlexApi.PlayQueue.CreatePlayQueue()`: `request` **Changed** * `PlexApi.Library.DeleteLibrarySection()`: * `request.Async` **Changed** * `PlexApi.Library.GetAugmentationStatus()`: * `request.Wait` **Changed** * `PlexApi.Transcoder.TranscodeImage()`: `request` **Changed** * `PlexApi.Devices.ModifyDevice()`: * `request.Enabled` **Changed** * `PlexApi.Library.DetectVoiceActivity()`: `request` **Changed** * `PlexApi.Library.GetStream()`: * `request.AutoAdjustSubtitle` **Changed** * `PlexApi.Library.StartBifGeneration()`: * `request.Force` **Changed** * `PlexApi.Library.GetFirstCharacters()`: * `request.MediaQuery` **Changed** * `PlexApi.UltraBlur.GetImage()`: * `request.Noise` **Changed** * `PlexApi.Library.GenerateThumbs()`: * `request.Force` **Changed** * `PlexApi.Updater.ApplyUpdates()`: `request` **Changed** * `PlexApi.Updater.CheckUpdates()`: * `request.Download` **Changed** * `PlexApi.Library.DeleteMetadataItem()`: * `request.Proxy` **Changed** * `PlexApi.Library.OptimizeDatabase()`: * `request.Async` **Changed** * `PlexApi.Library.RefreshSection()`: * `request.Force` **Changed** * `PlexApi.Hubs.UpdateHubVisibility()`: `request` **Changed** * `PlexApi.Hubs.CreateCustomHub()`: `request` **Changed** * `PlexApi.DownloadQueue.AddDownloadQueueItems()`: `request` **Changed** * `PlexApi.Timeline.Report()`: `request` **Changed** * `PlexApi.General.GetSourceConnectionInformation()`: * `request.Refresh` **Changed** * `PlexApi.Plex.Get-Server-Resources()`: **Added** * `PlexApi.Users.Get-Users()`: **Added**
This commit is contained in:
@@ -6,35 +6,58 @@
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `Default` | *bool* | :heavy_minus_sign: | N/A | true |
|
||||
| `AudioChannelLayout` | *object* | :heavy_minus_sign: | N/A | stereo |
|
||||
| `BitDepth` | *long* | :heavy_minus_sign: | N/A | 8 |
|
||||
| `Bitrate` | *long* | :heavy_minus_sign: | N/A | 5466 |
|
||||
| `CanAutoSync` | *bool* | :heavy_minus_sign: | For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. | true |
|
||||
| `ChromaLocation` | *object* | :heavy_minus_sign: | N/A | topleft |
|
||||
| `ChromaSubsampling` | *object* | :heavy_minus_sign: | N/A | 4:2:0 |
|
||||
| `Codec` | *object* | :heavy_minus_sign: | The codec of the stream, such as `h264` or `aac` | h264 |
|
||||
| `ColorPrimaries` | *object* | :heavy_minus_sign: | N/A | bt709 |
|
||||
| `ColorRange` | *object* | :heavy_minus_sign: | N/A | tv |
|
||||
| `ColorSpace` | *object* | :heavy_minus_sign: | N/A | bt709 |
|
||||
| `ColorTrc` | *object* | :heavy_minus_sign: | N/A | bt709 |
|
||||
| `DisplayTitle` | *object* | :heavy_minus_sign: | A friendly name for the stream, often comprised of the language and codec information | English (H.264 Main) |
|
||||
| `FrameRate` | *double* | :heavy_minus_sign: | N/A | 23.976 |
|
||||
| `HasScalingMatrix` | *object* | :heavy_minus_sign: | N/A | false |
|
||||
| `Height` | *long* | :heavy_minus_sign: | N/A | 544 |
|
||||
| `Id` | *long* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `Index` | *long* | :heavy_minus_sign: | If the stream is part of the `Part` and not an external resource, the index of the stream within that part | 0 |
|
||||
| `Key` | *object* | :heavy_minus_sign: | If the stream is independently streamable, the key from which it can be streamed | /library/streams/1 |
|
||||
| `Language` | *object* | :heavy_minus_sign: | N/A | English |
|
||||
| `LanguageCode` | *object* | :heavy_minus_sign: | The three character language code for the stream contents | eng |
|
||||
| `Level` | *long* | :heavy_minus_sign: | N/A | 31 |
|
||||
| `Profile` | *object* | :heavy_minus_sign: | N/A | main |
|
||||
| `RefFrames` | *long* | :heavy_minus_sign: | N/A | 2 |
|
||||
| `SamplingRate` | *long* | :heavy_minus_sign: | N/A | 48000 |
|
||||
| `Selected` | *bool* | :heavy_minus_sign: | N/A | |
|
||||
| `StreamIdentifier` | *long* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `StreamType` | *long* | :heavy_minus_sign: | A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics | 1 |
|
||||
| `Width` | *long* | :heavy_minus_sign: | N/A | 1280 |
|
||||
| `AdditionalProperties` | Dictionary<String, *object*> | :heavy_minus_sign: | N/A | |
|
||||
| Field | Type | Required | Description | Example |
|
||||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
||||
| `Default` | *bool* | :heavy_minus_sign: | Indicates if this stream is default. | true |
|
||||
| `AudioChannelLayout` | *string* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) |
|
||||
| `Channels` | *int* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 |
|
||||
| `BitDepth` | *int* | :heavy_minus_sign: | Bit depth of the video stream. | 10 |
|
||||
| `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 |
|
||||
| `Bitrate` | *int* | :heavy_minus_sign: | Bitrate of the stream. | 24743 |
|
||||
| `CanAutoSync` | *bool* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false |
|
||||
| `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 |
|
||||
| `ClosedCaptions` | *bool* | :heavy_minus_sign: | N/A | true |
|
||||
| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream. | hevc |
|
||||
| `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 |
|
||||
| `DisplayTitle` | *string* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) |
|
||||
| `ExtendedDisplayTitle` | *string* | :heavy_minus_sign: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) |
|
||||
| `FrameRate` | *float* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 |
|
||||
| `HasScalingMatrix` | *bool* | :heavy_minus_sign: | N/A | false |
|
||||
| `Height` | *int* | :heavy_minus_sign: | Height of the video stream. | 1602 |
|
||||
| `Id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 |
|
||||
| `Index` | *int* | :heavy_minus_sign: | Index of the stream. | 0 |
|
||||
| `Key` | *string* | :heavy_check_mark: | Key to access this stream part. | /library/streams/216389 |
|
||||
| `Language` | *string* | :heavy_minus_sign: | Language of the stream. | English |
|
||||
| `LanguageCode` | *string* | :heavy_minus_sign: | ISO language code. | eng |
|
||||
| `LanguageTag` | *string* | :heavy_minus_sign: | Language tag (e.g., en). | en |
|
||||
| `Format` | *string* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt |
|
||||
| `HeaderCompression` | *bool* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true |
|
||||
| `Level` | *int* | :heavy_minus_sign: | Video level. | 150 |
|
||||
| `Original` | *bool* | :heavy_minus_sign: | Indicates if this is the original stream. | true |
|
||||
| `Profile` | *string* | :heavy_minus_sign: | Video profile. | main 10 |
|
||||
| `RefFrames` | *int* | :heavy_minus_sign: | Number of reference frames. | 1 |
|
||||
| `SamplingRate` | *int* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 |
|
||||
| `ScanType` | *string* | :heavy_minus_sign: | N/A | progressive |
|
||||
| `EmbeddedInVideo` | *string* | :heavy_minus_sign: | N/A | progressive |
|
||||
| `Selected` | *bool* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true |
|
||||
| `Forced` | *bool* | :heavy_minus_sign: | N/A | true |
|
||||
| `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 |
|
||||
| `StreamIdentifier` | *int* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `StreamType` | *long* | :heavy_check_mark: | Stream type:<br/> - VIDEO = 1<br/> - AUDIO = 2<br/> - SUBTITLE = 3<br/> | |
|
||||
| `Width` | *int* | :heavy_minus_sign: | Width of the video stream. | 3840 |
|
||||
| `AdditionalProperties` | Dictionary<String, *object*> | :heavy_minus_sign: | N/A | |
|
||||
Reference in New Issue
Block a user