diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 60e4b703..46f9ddc7 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 1732900d-e173-47c1-a90d-d45182eb35d9 management: - docChecksum: e95c0e17d3e268dcd18d26ac8d0bfc98 + docChecksum: 40b5081b26bc3736b1710ebbcc9a05b7 docVersion: 1.1.1 speakeasyVersion: 1.615.2 generationVersion: 2.698.4 - releaseVersion: 0.21.1 - configChecksum: 7af145b778364c038a024a71c312f9e6 + releaseVersion: 0.22.1 + configChecksum: 1841da02dab5767f7f195c2dea579c39 repoURL: https://github.com/LukeHagar/plexjava.git published: true features: @@ -16,14 +16,20 @@ features: additionalProperties: 0.0.1 constsAndDefaults: 0.1.1 core: 3.47.2 + deprecations: 2.81.1 downloadStreams: 0.1.1 + enums: 2.81.2 + errors: 0.5.0 examples: 2.81.6 globalSecurity: 2.83.1 globalSecurityCallbacks: 0.1.0 globalSecurityFlattening: 0.1.0 globalServerURLs: 2.82.2 globals: 2.82.2 + methodServerURLs: 2.82.1 nameOverrides: 2.81.3 + nullables: 0.1.0 + openEnums: 0.2.0 sdkHooks: 1.1.0 unions: 0.0.6 uploadStreams: 0.1.0 @@ -31,6 +37,20 @@ generatedFiles: - .gitattributes - USAGE.md - build.gradle + - docs/models/errors/Errors.md + - docs/models/errors/GetServerResourcesErrors.md + - docs/models/errors/GetServerResourcesUnauthorized.md + - docs/models/errors/GetTokenDetailsBadRequest.md + - docs/models/errors/GetTokenDetailsErrors.md + - docs/models/errors/GetTokenDetailsUnauthorized.md + - docs/models/errors/GetUsersBadRequest.md + - docs/models/errors/GetUsersErrors.md + - docs/models/errors/GetUsersUnauthorized.md + - docs/models/errors/GetUsersUsersErrors.md + - docs/models/errors/PostUsersSignInDataAuthenticationErrors.md + - docs/models/errors/PostUsersSignInDataBadRequest.md + - docs/models/errors/PostUsersSignInDataErrors.md + - docs/models/errors/PostUsersSignInDataUnauthorized.md - docs/models/operations/Account.md - docs/models/operations/Action.md - docs/models/operations/Activity.md @@ -68,6 +88,12 @@ generatedFiles: - docs/models/operations/AddToPlayQueueResponse.md - docs/models/operations/AddedQueueItems.md - docs/models/operations/AdvancedSubtitles.md + - docs/models/operations/AllLibraries.md + - docs/models/operations/AllowCameraUpload.md + - docs/models/operations/AllowChannels.md + - docs/models/operations/AllowSubtitleAdmin.md + - docs/models/operations/AllowSync.md + - docs/models/operations/AllowTuners.md - docs/models/operations/AnalyzeMetadataRequest.md - docs/models/operations/AnalyzeMetadataResponse.md - docs/models/operations/ApplyUpdatesRequest.md @@ -78,6 +104,7 @@ generatedFiles: - docs/models/operations/AutocompleteResponse.md - docs/models/operations/Bandwidth.md - docs/models/operations/Bandwidths.md + - docs/models/operations/Billing.md - docs/models/operations/ButlerTask.md - docs/models/operations/ButlerTasks.md - docs/models/operations/CancelActivityRequest.md @@ -114,6 +141,7 @@ generatedFiles: - docs/models/operations/CreateDownloadQueueMediaContainer.md - docs/models/operations/CreateDownloadQueueResponse.md - docs/models/operations/CreateDownloadQueueResponseBody.md + - docs/models/operations/CreateDownloadQueueStatus.md - docs/models/operations/CreateMarkerMediaContainer.md - docs/models/operations/CreateMarkerRequest.md - docs/models/operations/CreateMarkerResponse.md @@ -370,6 +398,7 @@ generatedFiles: - docs/models/operations/GetPlayQueueRequest.md - docs/models/operations/GetPlayQueueResponse.md - docs/models/operations/GetPlaylistGeneratorDevice.md + - docs/models/operations/GetPlaylistGeneratorItemsGuids.md - docs/models/operations/GetPlaylistGeneratorItemsMediaContainer.md - docs/models/operations/GetPlaylistGeneratorItemsMetadata.md - docs/models/operations/GetPlaylistGeneratorItemsRequest.md @@ -432,6 +461,8 @@ generatedFiles: - docs/models/operations/GetSectionsResponseBody.md - docs/models/operations/GetServerInfoRequest.md - docs/models/operations/GetServerInfoResponse.md + - docs/models/operations/GetServerResourcesRequest.md + - docs/models/operations/GetServerResourcesResponse.md - docs/models/operations/GetSessionPlaylistIndexRequest.md - docs/models/operations/GetSessionPlaylistIndexResponse.md - docs/models/operations/GetSessionSegmentRequest.md @@ -460,6 +491,7 @@ generatedFiles: - docs/models/operations/GetTagsRequest.md - docs/models/operations/GetTagsResponse.md - docs/models/operations/GetTagsResponseBody.md + - docs/models/operations/GetTasksButlerTask.md - docs/models/operations/GetTasksResponse.md - docs/models/operations/GetTasksResponseBody.md - docs/models/operations/GetTemplateMediaContainer.md @@ -468,6 +500,8 @@ generatedFiles: - docs/models/operations/GetTemplateResponseBody.md - docs/models/operations/GetThumbRequest.md - docs/models/operations/GetThumbResponse.md + - docs/models/operations/GetTokenDetailsRequest.md + - docs/models/operations/GetTokenDetailsResponse.md - docs/models/operations/GetTransientTokenMediaContainer.md - docs/models/operations/GetTransientTokenRequest.md - docs/models/operations/GetTransientTokenResponse.md @@ -476,12 +510,22 @@ generatedFiles: - docs/models/operations/GetUpdatesStatusResponse.md - docs/models/operations/GetUpdatesStatusResponseBody.md - docs/models/operations/GetUpdatesStatusState.md + - docs/models/operations/GetUsersMediaContainer.md + - docs/models/operations/GetUsersRequest.md + - docs/models/operations/GetUsersResponse.md + - docs/models/operations/GetUsersResponseBody.md + - docs/models/operations/Guids.md - docs/models/operations/Hints.md + - docs/models/operations/Home.md - docs/models/operations/HomeVisibility.md - docs/models/operations/Hub.md + - docs/models/operations/IncludeHttps.md + - docs/models/operations/IncludeIPv6.md + - docs/models/operations/IncludeRelay.md - docs/models/operations/Index.md - docs/models/operations/IngestTransientItemRequest.md - docs/models/operations/IngestTransientItemResponse.md + - docs/models/operations/InternalPaymentMethod.md - docs/models/operations/Item.md - docs/models/operations/Language.md - docs/models/operations/Level.md @@ -536,6 +580,7 @@ generatedFiles: - docs/models/operations/ListTopUsersResponse.md - docs/models/operations/ListTopUsersResponseBody.md - docs/models/operations/Location.md + - docs/models/operations/MailingListStatus.md - docs/models/operations/MakeDecisionRequest.md - docs/models/operations/MakeDecisionResponse.md - docs/models/operations/MarkPlayedRequest.md @@ -563,17 +608,29 @@ generatedFiles: - docs/models/operations/MovePlaylistItemResponse.md - docs/models/operations/OptimizeDatabaseRequest.md - docs/models/operations/OptimizeDatabaseResponse.md + - docs/models/operations/Owned.md - docs/models/operations/Params.md + - docs/models/operations/PastSubscription.md + - docs/models/operations/PathParamButlerTask.md - docs/models/operations/PathParamElement.md - docs/models/operations/PathParamIndex.md - - docs/models/operations/PathParamTask.md + - docs/models/operations/Pending.md - docs/models/operations/PlayQueueGenerator.md - docs/models/operations/PlaylistType.md - docs/models/operations/Policy.md + - docs/models/operations/PostUsersSignInDataAuthenticationStatus.md + - docs/models/operations/PostUsersSignInDataRequest.md + - docs/models/operations/PostUsersSignInDataRequestBody.md + - docs/models/operations/PostUsersSignInDataResponse.md + - docs/models/operations/PostUsersSignInDataState.md + - docs/models/operations/PostUsersSignInDataStatus.md + - docs/models/operations/PostUsersSignInDataSubscription.md + - docs/models/operations/PostUsersSignInDataUserPlexAccount.md - docs/models/operations/Prefs.md - docs/models/operations/ProcessSubscriptionsResponse.md - docs/models/operations/ProcessingState.md - docs/models/operations/ProcessingStateContext.md + - docs/models/operations/Protected.md - docs/models/operations/Protocol.md - docs/models/operations/QueryParamArgs.md - docs/models/operations/QueryParamAttributes.md @@ -618,6 +675,7 @@ generatedFiles: - docs/models/operations/ResetSectionDefaultsResponse.md - docs/models/operations/RestartProcessingDownloadQueueItemsRequest.md - docs/models/operations/RestartProcessingDownloadQueueItemsResponse.md + - docs/models/operations/Restricted.md - docs/models/operations/ScanRequest.md - docs/models/operations/ScanResponse.md - docs/models/operations/Scope.md @@ -625,6 +683,8 @@ generatedFiles: - docs/models/operations/SearchHubsRequest.md - docs/models/operations/SearchHubsResponse.md - docs/models/operations/SearchHubsResponseBody.md + - docs/models/operations/Server.md + - docs/models/operations/Services.md - docs/models/operations/SetChannelmapRequest.md - docs/models/operations/SetChannelmapResponse.md - docs/models/operations/SetDVRPreferencesDVR.md @@ -676,9 +736,9 @@ generatedFiles: - docs/models/operations/StopTaskRequest.md - docs/models/operations/StopTaskResponse.md - docs/models/operations/StopTasksResponse.md + - docs/models/operations/Subscription.md - docs/models/operations/SubscriptionTemplate.md - docs/models/operations/Subtitles.md - - docs/models/operations/Task.md - docs/models/operations/TerminateSessionRequest.md - docs/models/operations/TerminateSessionResponse.md - docs/models/operations/Transcode.md @@ -687,6 +747,7 @@ generatedFiles: - docs/models/operations/TranscodeJob.md - docs/models/operations/TranscodeSubtitlesRequest.md - docs/models/operations/TranscodeSubtitlesResponse.md + - docs/models/operations/Trials.md - docs/models/operations/TriggerFallbackRequest.md - docs/models/operations/TriggerFallbackResponse.md - docs/models/operations/TuneChannelRequest.md @@ -709,6 +770,7 @@ generatedFiles: - docs/models/operations/UpdatePlaylistResponse.md - docs/models/operations/UploadPlaylistRequest.md - docs/models/operations/UploadPlaylistResponse.md + - docs/models/operations/User.md - docs/models/operations/VoiceSearchHubsMediaContainer.md - docs/models/operations/VoiceSearchHubsRequest.md - docs/models/operations/VoiceSearchHubsResponse.md @@ -719,15 +781,20 @@ generatedFiles: - docs/models/shared/Accepts.md - docs/models/shared/AdvancedSubtitles.md - docs/models/shared/AiringsType.md + - docs/models/shared/AutoSelectSubtitle.md - docs/models/shared/BoolInt.md - docs/models/shared/Channel.md - docs/models/shared/ChannelMapping.md - docs/models/shared/Composite.md - docs/models/shared/CompositeMedia.md + - docs/models/shared/Connections.md - docs/models/shared/Crop.md - docs/models/shared/Decision.md - docs/models/shared/Default.md + - docs/models/shared/DefaultAudioAccessibility.md - docs/models/shared/DefaultDirection.md + - docs/models/shared/DefaultSubtitleAccessibility.md + - docs/models/shared/DefaultSubtitleForced.md - docs/models/shared/Device.md - docs/models/shared/Directory.md - docs/models/shared/Dvr.md @@ -740,6 +807,7 @@ generatedFiles: - docs/models/shared/GetResponses200.md - docs/models/shared/GetResponses200Hub.md - docs/models/shared/GetResponses200MediaContainer.md + - docs/models/shared/Guids.md - docs/models/shared/HistoryAllGetResponses200.md - docs/models/shared/HistoryAllGetResponses200MediaContainer.md - docs/models/shared/HistoryAllGetResponses200Metadata.md @@ -748,6 +816,7 @@ generatedFiles: - docs/models/shared/Image.md - docs/models/shared/ImageType.md - docs/models/shared/Items.md + - docs/models/shared/ItemsGuids.md - docs/models/shared/LibrarySection.md - docs/models/shared/LibrarySectionLocation.md - docs/models/shared/LibrarySections.md @@ -756,6 +825,7 @@ generatedFiles: - docs/models/shared/Lineup.md - docs/models/shared/LineupType.md - docs/models/shared/Location.md + - docs/models/shared/MailingListStatus.md - docs/models/shared/Media.md - docs/models/shared/MediaContainer.md - docs/models/shared/MediaContainerWithArtwork.md @@ -764,6 +834,7 @@ generatedFiles: - docs/models/shared/MediaContainerWithArtworkType.md - docs/models/shared/MediaContainerWithDecision.md - docs/models/shared/MediaContainerWithDecisionDecision.md + - docs/models/shared/MediaContainerWithDecisionGuids.md - docs/models/shared/MediaContainerWithDecisionLocation.md - docs/models/shared/MediaContainerWithDecisionMedia.md - docs/models/shared/MediaContainerWithDecisionMediaContainer.md @@ -782,8 +853,10 @@ generatedFiles: - docs/models/shared/MediaContainerWithMetadata.md - docs/models/shared/MediaContainerWithMetadataMediaContainer.md - docs/models/shared/MediaContainerWithNestedMetadata.md + - docs/models/shared/MediaContainerWithNestedMetadataGuids.md - docs/models/shared/MediaContainerWithNestedMetadataMediaContainer.md - docs/models/shared/MediaContainerWithPlaylistMetadata.md + - docs/models/shared/MediaContainerWithPlaylistMetadataGuids.md - docs/models/shared/MediaContainerWithPlaylistMetadataMediaContainer.md - docs/models/shared/MediaContainerWithPlaylistMetadataMetadata.md - docs/models/shared/MediaContainerWithSettings.md @@ -792,19 +865,25 @@ generatedFiles: - docs/models/shared/MediaContainerWithSubscriptionMediaContainer.md - docs/models/shared/MediaGrabOperation.md - docs/models/shared/MediaQuery.md + - docs/models/shared/MediaReviewsVisibility.md - docs/models/shared/MediaSubscription.md + - docs/models/shared/MediaType.md + - docs/models/shared/MediaTypeString.md - docs/models/shared/Metadata.md - docs/models/shared/MetadataItem.md - docs/models/shared/Part.md - docs/models/shared/Pivot.md - docs/models/shared/Player.md - docs/models/shared/PlaylistType.md + - docs/models/shared/PlexDevice.md + - docs/models/shared/PlexDeviceProtocol.md - docs/models/shared/PostResponses200.md - docs/models/shared/PostResponses200MediaContainer.md - docs/models/shared/PostResponses200Type.md - docs/models/shared/Protocol.md - docs/models/shared/RecommendationsVisibility.md - docs/models/shared/Security.md + - docs/models/shared/Services.md - docs/models/shared/Session.md - docs/models/shared/SessionLocation.md - docs/models/shared/Setting.md @@ -815,14 +894,23 @@ generatedFiles: - docs/models/shared/SortPivot.md - docs/models/shared/Status.md - docs/models/shared/Stream.md + - docs/models/shared/Subscription.md - docs/models/shared/Subtitles.md - docs/models/shared/Tag.md - docs/models/shared/TranscodeSession.md - docs/models/shared/TranscodeType.md - docs/models/shared/Type.md - docs/models/shared/User.md + - docs/models/shared/UserPlexAccount.md + - docs/models/shared/UserPlexAccountStatus.md + - docs/models/shared/UserPlexAccountSubscription.md + - docs/models/shared/UserPlexAccountSubscriptionStatus.md + - docs/models/shared/UserPlexAccountSubscriptionsStatus.md + - docs/models/shared/UserProfile.md - docs/models/shared/Value.md + - docs/models/shared/WatchedIndicator.md - docs/sdks/activities/README.md + - docs/sdks/authentication/README.md - docs/sdks/butler/README.md - docs/sdks/collections/README.md - docs/sdks/content/README.md @@ -840,6 +928,7 @@ generatedFiles: - docs/sdks/log/README.md - docs/sdks/playlist/README.md - docs/sdks/playqueue/README.md + - docs/sdks/plex/README.md - docs/sdks/plexapi/README.md - docs/sdks/preferences/README.md - docs/sdks/provider/README.md @@ -851,6 +940,7 @@ generatedFiles: - docs/sdks/transcoder/README.md - docs/sdks/ultrablur/README.md - docs/sdks/updater/README.md + - docs/sdks/users/README.md - docs/utils/Blob.md - gradle.properties - gradle/wrapper/gradle-wrapper.jar @@ -860,6 +950,7 @@ generatedFiles: - settings.gradle - src/main/java/dev/plexapi/sdk/Activities.java - src/main/java/dev/plexapi/sdk/AsyncActivities.java + - src/main/java/dev/plexapi/sdk/AsyncAuthentication.java - src/main/java/dev/plexapi/sdk/AsyncButler.java - src/main/java/dev/plexapi/sdk/AsyncCollections.java - src/main/java/dev/plexapi/sdk/AsyncContent.java @@ -877,6 +968,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/AsyncLog.java - src/main/java/dev/plexapi/sdk/AsyncPlayQueue.java - src/main/java/dev/plexapi/sdk/AsyncPlaylist.java + - src/main/java/dev/plexapi/sdk/AsyncPlex.java - src/main/java/dev/plexapi/sdk/AsyncPlexAPI.java - src/main/java/dev/plexapi/sdk/AsyncPreferences.java - src/main/java/dev/plexapi/sdk/AsyncProvider.java @@ -888,6 +980,8 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/AsyncTranscoder.java - src/main/java/dev/plexapi/sdk/AsyncUltraBlur.java - src/main/java/dev/plexapi/sdk/AsyncUpdater.java + - src/main/java/dev/plexapi/sdk/AsyncUsers.java + - src/main/java/dev/plexapi/sdk/Authentication.java - src/main/java/dev/plexapi/sdk/Butler.java - src/main/java/dev/plexapi/sdk/Collections.java - src/main/java/dev/plexapi/sdk/Content.java @@ -905,6 +999,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/Log.java - src/main/java/dev/plexapi/sdk/PlayQueue.java - src/main/java/dev/plexapi/sdk/Playlist.java + - src/main/java/dev/plexapi/sdk/Plex.java - src/main/java/dev/plexapi/sdk/PlexAPI.java - src/main/java/dev/plexapi/sdk/Preferences.java - src/main/java/dev/plexapi/sdk/Provider.java @@ -918,9 +1013,31 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/Transcoder.java - src/main/java/dev/plexapi/sdk/UltraBlur.java - src/main/java/dev/plexapi/sdk/Updater.java + - src/main/java/dev/plexapi/sdk/Users.java - src/main/java/dev/plexapi/sdk/models/errors/AuthException.java + - src/main/java/dev/plexapi/sdk/models/errors/Errors.java + - src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesErrors.java + - src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesUnauthorized.java + - src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsBadRequest.java + - src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsErrors.java + - src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsUnauthorized.java + - src/main/java/dev/plexapi/sdk/models/errors/GetUsersBadRequest.java + - src/main/java/dev/plexapi/sdk/models/errors/GetUsersErrors.java + - src/main/java/dev/plexapi/sdk/models/errors/GetUsersUnauthorized.java + - src/main/java/dev/plexapi/sdk/models/errors/GetUsersUsersErrors.java + - src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataAuthenticationErrors.java + - src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataBadRequest.java + - src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataErrors.java + - src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataUnauthorized.java - src/main/java/dev/plexapi/sdk/models/errors/SDKError.java - src/main/java/dev/plexapi/sdk/models/errors/UncheckedSDKError.java + - src/main/java/dev/plexapi/sdk/models/errors/async/GetServerResourcesUnauthorized.java + - src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsBadRequest.java + - src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsUnauthorized.java + - src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersBadRequest.java + - src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersUnauthorized.java + - src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataBadRequest.java + - src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataUnauthorized.java - src/main/java/dev/plexapi/sdk/models/operations//async/AddCollectionItemsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/AddDeviceRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/AddDeviceToDVRRequestBuilder.java @@ -1058,6 +1175,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations//async/GetSectionsPrefsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetSectionsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetServerInfoRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations//async/GetServerResourcesRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetSessionPlaylistIndexRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetSessionSegmentRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetSessionsRequestBuilder.java @@ -1072,8 +1190,10 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations//async/GetTasksRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetTemplateRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetThumbRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations//async/GetTokenDetailsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetTransientTokenRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/GetUpdatesStatusRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations//async/GetUsersRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/IngestTransientItemRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/ListActivitiesRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/ListContentRequestBuilder.java @@ -1102,6 +1222,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations//async/MovePlayQueueItemRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/MovePlaylistItemRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/OptimizeDatabaseRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations//async/PostUsersSignInDataRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/ProcessSubscriptionsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/RefreshItemsMetadataRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations//async/RefreshPlaylistRequestBuilder.java @@ -1205,6 +1326,12 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/AddToPlayQueueResponse.java - src/main/java/dev/plexapi/sdk/models/operations/AddedQueueItems.java - src/main/java/dev/plexapi/sdk/models/operations/AdvancedSubtitles.java + - src/main/java/dev/plexapi/sdk/models/operations/AllLibraries.java + - src/main/java/dev/plexapi/sdk/models/operations/AllowCameraUpload.java + - src/main/java/dev/plexapi/sdk/models/operations/AllowChannels.java + - src/main/java/dev/plexapi/sdk/models/operations/AllowSubtitleAdmin.java + - src/main/java/dev/plexapi/sdk/models/operations/AllowSync.java + - src/main/java/dev/plexapi/sdk/models/operations/AllowTuners.java - src/main/java/dev/plexapi/sdk/models/operations/AnalyzeMetadataRequest.java - src/main/java/dev/plexapi/sdk/models/operations/AnalyzeMetadataRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/AnalyzeMetadataResponse.java @@ -1218,6 +1345,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/AutocompleteResponse.java - src/main/java/dev/plexapi/sdk/models/operations/Bandwidth.java - src/main/java/dev/plexapi/sdk/models/operations/Bandwidths.java + - src/main/java/dev/plexapi/sdk/models/operations/Billing.java - src/main/java/dev/plexapi/sdk/models/operations/ButlerTask.java - src/main/java/dev/plexapi/sdk/models/operations/ButlerTasks.java - src/main/java/dev/plexapi/sdk/models/operations/CancelActivityRequest.java @@ -1267,6 +1395,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueResponse.java - src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueResponseBody.java + - src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueStatus.java - src/main/java/dev/plexapi/sdk/models/operations/CreateMarkerMediaContainer.java - src/main/java/dev/plexapi/sdk/models/operations/CreateMarkerRequest.java - src/main/java/dev/plexapi/sdk/models/operations/CreateMarkerRequestBuilder.java @@ -1614,6 +1743,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/GetPlayQueueRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/GetPlayQueueResponse.java - src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorDevice.java + - src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsGuids.java - src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsMediaContainer.java - src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsMetadata.java - src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsRequest.java @@ -1695,6 +1825,9 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/GetServerInfoRequest.java - src/main/java/dev/plexapi/sdk/models/operations/GetServerInfoRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/GetServerInfoResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequest.java + - src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesResponse.java - src/main/java/dev/plexapi/sdk/models/operations/GetSessionPlaylistIndexRequest.java - src/main/java/dev/plexapi/sdk/models/operations/GetSessionPlaylistIndexRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/GetSessionPlaylistIndexResponse.java @@ -1734,6 +1867,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/GetTagsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/GetTagsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/GetTagsResponseBody.java + - src/main/java/dev/plexapi/sdk/models/operations/GetTasksButlerTask.java - src/main/java/dev/plexapi/sdk/models/operations/GetTasksRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/GetTasksResponse.java - src/main/java/dev/plexapi/sdk/models/operations/GetTasksResponseBody.java @@ -1745,6 +1879,9 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/GetThumbRequest.java - src/main/java/dev/plexapi/sdk/models/operations/GetThumbRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/GetThumbResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequest.java + - src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/GetTransientTokenMediaContainer.java - src/main/java/dev/plexapi/sdk/models/operations/GetTransientTokenRequest.java - src/main/java/dev/plexapi/sdk/models/operations/GetTransientTokenRequestBuilder.java @@ -1755,13 +1892,24 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/GetUpdatesStatusResponse.java - src/main/java/dev/plexapi/sdk/models/operations/GetUpdatesStatusResponseBody.java - src/main/java/dev/plexapi/sdk/models/operations/GetUpdatesStatusState.java + - src/main/java/dev/plexapi/sdk/models/operations/GetUsersMediaContainer.java + - src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequest.java + - src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponseBody.java + - src/main/java/dev/plexapi/sdk/models/operations/Guids.java - src/main/java/dev/plexapi/sdk/models/operations/Hints.java + - src/main/java/dev/plexapi/sdk/models/operations/Home.java - src/main/java/dev/plexapi/sdk/models/operations/HomeVisibility.java - src/main/java/dev/plexapi/sdk/models/operations/Hub.java + - src/main/java/dev/plexapi/sdk/models/operations/IncludeHttps.java + - src/main/java/dev/plexapi/sdk/models/operations/IncludeIPv6.java + - src/main/java/dev/plexapi/sdk/models/operations/IncludeRelay.java - src/main/java/dev/plexapi/sdk/models/operations/Index.java - src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemRequest.java - src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/InternalPaymentMethod.java - src/main/java/dev/plexapi/sdk/models/operations/Item.java - src/main/java/dev/plexapi/sdk/models/operations/Language.java - src/main/java/dev/plexapi/sdk/models/operations/Level.java @@ -1833,6 +1981,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/ListTopUsersResponse.java - src/main/java/dev/plexapi/sdk/models/operations/ListTopUsersResponseBody.java - src/main/java/dev/plexapi/sdk/models/operations/Location.java + - src/main/java/dev/plexapi/sdk/models/operations/MailingListStatus.java - src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionRequest.java - src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionResponse.java @@ -1870,18 +2019,31 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseRequest.java - src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/Owned.java - src/main/java/dev/plexapi/sdk/models/operations/Params.java + - src/main/java/dev/plexapi/sdk/models/operations/PastSubscription.java + - src/main/java/dev/plexapi/sdk/models/operations/PathParamButlerTask.java - src/main/java/dev/plexapi/sdk/models/operations/PathParamElement.java - src/main/java/dev/plexapi/sdk/models/operations/PathParamIndex.java - - src/main/java/dev/plexapi/sdk/models/operations/PathParamTask.java + - src/main/java/dev/plexapi/sdk/models/operations/Pending.java - src/main/java/dev/plexapi/sdk/models/operations/PlayQueueGenerator.java - src/main/java/dev/plexapi/sdk/models/operations/PlaylistType.java - src/main/java/dev/plexapi/sdk/models/operations/Policy.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataAuthenticationStatus.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequest.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBody.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBuilder.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataState.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataStatus.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataSubscription.java + - src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataUserPlexAccount.java - src/main/java/dev/plexapi/sdk/models/operations/Prefs.java - src/main/java/dev/plexapi/sdk/models/operations/ProcessSubscriptionsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/ProcessSubscriptionsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/ProcessingState.java - src/main/java/dev/plexapi/sdk/models/operations/ProcessingStateContext.java + - src/main/java/dev/plexapi/sdk/models/operations/Protected.java - src/main/java/dev/plexapi/sdk/models/operations/Protocol.java - src/main/java/dev/plexapi/sdk/models/operations/QueryParamArgs.java - src/main/java/dev/plexapi/sdk/models/operations/QueryParamAttributes.java @@ -1940,6 +2102,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/RestartProcessingDownloadQueueItemsRequest.java - src/main/java/dev/plexapi/sdk/models/operations/RestartProcessingDownloadQueueItemsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/RestartProcessingDownloadQueueItemsResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/Restricted.java - src/main/java/dev/plexapi/sdk/models/operations/ScanRequest.java - src/main/java/dev/plexapi/sdk/models/operations/ScanRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/ScanResponse.java @@ -1949,6 +2112,8 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/SearchHubsRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/SearchHubsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/SearchHubsResponseBody.java + - src/main/java/dev/plexapi/sdk/models/operations/Server.java + - src/main/java/dev/plexapi/sdk/models/operations/Services.java - src/main/java/dev/plexapi/sdk/models/operations/SetChannelmapRequest.java - src/main/java/dev/plexapi/sdk/models/operations/SetChannelmapRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/SetChannelmapResponse.java @@ -2022,9 +2187,9 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/StopTaskResponse.java - src/main/java/dev/plexapi/sdk/models/operations/StopTasksRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/StopTasksResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/Subscription.java - src/main/java/dev/plexapi/sdk/models/operations/SubscriptionTemplate.java - src/main/java/dev/plexapi/sdk/models/operations/Subtitles.java - - src/main/java/dev/plexapi/sdk/models/operations/Task.java - src/main/java/dev/plexapi/sdk/models/operations/TerminateSessionRequest.java - src/main/java/dev/plexapi/sdk/models/operations/TerminateSessionRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/TerminateSessionResponse.java @@ -2036,6 +2201,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesRequest.java - src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/Trials.java - src/main/java/dev/plexapi/sdk/models/operations/TriggerFallbackRequest.java - src/main/java/dev/plexapi/sdk/models/operations/TriggerFallbackRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/TriggerFallbackResponse.java @@ -2068,6 +2234,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistRequest.java - src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistRequestBuilder.java - src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/User.java - src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsMediaContainer.java - src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsRequest.java - src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsRequestBuilder.java @@ -2215,6 +2382,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/async/GetSectionsPrefsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetSectionsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetServerInfoResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetSessionPlaylistIndexResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetSessionSegmentResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetSessionsResponse.java @@ -2229,8 +2397,10 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/async/GetTasksResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetTemplateResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetThumbResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetTransientTokenResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/GetUpdatesStatusResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/IngestTransientItemResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/ListActivitiesResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/ListContentResponse.java @@ -2259,6 +2429,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/operations/async/MovePlayQueueItemResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/MovePlaylistItemResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/OptimizeDatabaseResponse.java + - src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/ProcessSubscriptionsResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/RefreshItemsMetadataResponse.java - src/main/java/dev/plexapi/sdk/models/operations/async/RefreshPlaylistResponse.java @@ -2317,15 +2488,20 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/Accepts.java - src/main/java/dev/plexapi/sdk/models/shared/AdvancedSubtitles.java - src/main/java/dev/plexapi/sdk/models/shared/AiringsType.java + - src/main/java/dev/plexapi/sdk/models/shared/AutoSelectSubtitle.java - src/main/java/dev/plexapi/sdk/models/shared/BoolInt.java - src/main/java/dev/plexapi/sdk/models/shared/Channel.java - src/main/java/dev/plexapi/sdk/models/shared/ChannelMapping.java - src/main/java/dev/plexapi/sdk/models/shared/Composite.java - src/main/java/dev/plexapi/sdk/models/shared/CompositeMedia.java + - src/main/java/dev/plexapi/sdk/models/shared/Connections.java - src/main/java/dev/plexapi/sdk/models/shared/Crop.java - src/main/java/dev/plexapi/sdk/models/shared/Decision.java - src/main/java/dev/plexapi/sdk/models/shared/Default.java + - src/main/java/dev/plexapi/sdk/models/shared/DefaultAudioAccessibility.java - src/main/java/dev/plexapi/sdk/models/shared/DefaultDirection.java + - src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleAccessibility.java + - src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleForced.java - src/main/java/dev/plexapi/sdk/models/shared/Device.java - src/main/java/dev/plexapi/sdk/models/shared/Directory.java - src/main/java/dev/plexapi/sdk/models/shared/Dvr.java @@ -2338,6 +2514,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/GetResponses200.java - src/main/java/dev/plexapi/sdk/models/shared/GetResponses200Hub.java - src/main/java/dev/plexapi/sdk/models/shared/GetResponses200MediaContainer.java + - src/main/java/dev/plexapi/sdk/models/shared/Guids.java - src/main/java/dev/plexapi/sdk/models/shared/HistoryAllGetResponses200.java - src/main/java/dev/plexapi/sdk/models/shared/HistoryAllGetResponses200MediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/HistoryAllGetResponses200Metadata.java @@ -2346,6 +2523,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/Image.java - src/main/java/dev/plexapi/sdk/models/shared/ImageType.java - src/main/java/dev/plexapi/sdk/models/shared/Items.java + - src/main/java/dev/plexapi/sdk/models/shared/ItemsGuids.java - src/main/java/dev/plexapi/sdk/models/shared/LibrarySection.java - src/main/java/dev/plexapi/sdk/models/shared/LibrarySectionLocation.java - src/main/java/dev/plexapi/sdk/models/shared/LibrarySections.java @@ -2354,6 +2532,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/Lineup.java - src/main/java/dev/plexapi/sdk/models/shared/LineupType.java - src/main/java/dev/plexapi/sdk/models/shared/Location.java + - src/main/java/dev/plexapi/sdk/models/shared/MailingListStatus.java - src/main/java/dev/plexapi/sdk/models/shared/Media.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithArtwork.java @@ -2362,6 +2541,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithArtworkType.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecision.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionDecision.java + - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionGuids.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionLocation.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMedia.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMediaContainer.java @@ -2380,8 +2560,10 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithMetadata.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithMetadataMediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithNestedMetadata.java + - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithNestedMetadataGuids.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithNestedMetadataMediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadata.java + - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataGuids.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataMediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataMetadata.java - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithSettings.java @@ -2390,19 +2572,25 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithSubscriptionMediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/MediaGrabOperation.java - src/main/java/dev/plexapi/sdk/models/shared/MediaQuery.java + - src/main/java/dev/plexapi/sdk/models/shared/MediaReviewsVisibility.java - src/main/java/dev/plexapi/sdk/models/shared/MediaSubscription.java + - src/main/java/dev/plexapi/sdk/models/shared/MediaType.java + - src/main/java/dev/plexapi/sdk/models/shared/MediaTypeString.java - src/main/java/dev/plexapi/sdk/models/shared/Metadata.java - src/main/java/dev/plexapi/sdk/models/shared/MetadataItem.java - src/main/java/dev/plexapi/sdk/models/shared/Part.java - src/main/java/dev/plexapi/sdk/models/shared/Pivot.java - src/main/java/dev/plexapi/sdk/models/shared/Player.java - src/main/java/dev/plexapi/sdk/models/shared/PlaylistType.java + - src/main/java/dev/plexapi/sdk/models/shared/PlexDevice.java + - src/main/java/dev/plexapi/sdk/models/shared/PlexDeviceProtocol.java - src/main/java/dev/plexapi/sdk/models/shared/PostResponses200.java - src/main/java/dev/plexapi/sdk/models/shared/PostResponses200MediaContainer.java - src/main/java/dev/plexapi/sdk/models/shared/PostResponses200Type.java - src/main/java/dev/plexapi/sdk/models/shared/Protocol.java - src/main/java/dev/plexapi/sdk/models/shared/RecommendationsVisibility.java - src/main/java/dev/plexapi/sdk/models/shared/Security.java + - src/main/java/dev/plexapi/sdk/models/shared/Services.java - src/main/java/dev/plexapi/sdk/models/shared/Session.java - src/main/java/dev/plexapi/sdk/models/shared/SessionLocation.java - src/main/java/dev/plexapi/sdk/models/shared/Setting.java @@ -2413,13 +2601,21 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/models/shared/SortPivot.java - src/main/java/dev/plexapi/sdk/models/shared/Status.java - src/main/java/dev/plexapi/sdk/models/shared/Stream.java + - src/main/java/dev/plexapi/sdk/models/shared/Subscription.java - src/main/java/dev/plexapi/sdk/models/shared/Subtitles.java - src/main/java/dev/plexapi/sdk/models/shared/Tag.java - src/main/java/dev/plexapi/sdk/models/shared/TranscodeSession.java - src/main/java/dev/plexapi/sdk/models/shared/TranscodeType.java - src/main/java/dev/plexapi/sdk/models/shared/Type.java - src/main/java/dev/plexapi/sdk/models/shared/User.java + - src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccount.java + - src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountStatus.java + - src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscription.java + - src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionStatus.java + - src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionsStatus.java + - src/main/java/dev/plexapi/sdk/models/shared/UserProfile.java - src/main/java/dev/plexapi/sdk/models/shared/Value.java + - src/main/java/dev/plexapi/sdk/models/shared/WatchedIndicator.java - src/main/java/dev/plexapi/sdk/operations/AddCollectionItems.java - src/main/java/dev/plexapi/sdk/operations/AddDevice.java - src/main/java/dev/plexapi/sdk/operations/AddDeviceToDVR.java @@ -2557,6 +2753,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/operations/GetSections.java - src/main/java/dev/plexapi/sdk/operations/GetSectionsPrefs.java - src/main/java/dev/plexapi/sdk/operations/GetServerInfo.java + - src/main/java/dev/plexapi/sdk/operations/GetServerResources.java - src/main/java/dev/plexapi/sdk/operations/GetSessionPlaylistIndex.java - src/main/java/dev/plexapi/sdk/operations/GetSessionSegment.java - src/main/java/dev/plexapi/sdk/operations/GetSessions.java @@ -2571,8 +2768,10 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/operations/GetTasks.java - src/main/java/dev/plexapi/sdk/operations/GetTemplate.java - src/main/java/dev/plexapi/sdk/operations/GetThumb.java + - src/main/java/dev/plexapi/sdk/operations/GetTokenDetails.java - src/main/java/dev/plexapi/sdk/operations/GetTransientToken.java - src/main/java/dev/plexapi/sdk/operations/GetUpdatesStatus.java + - src/main/java/dev/plexapi/sdk/operations/GetUsers.java - src/main/java/dev/plexapi/sdk/operations/IngestTransientItem.java - src/main/java/dev/plexapi/sdk/operations/ListActivities.java - src/main/java/dev/plexapi/sdk/operations/ListContent.java @@ -2602,6 +2801,7 @@ generatedFiles: - src/main/java/dev/plexapi/sdk/operations/MovePlaylistItem.java - src/main/java/dev/plexapi/sdk/operations/Operations.java - src/main/java/dev/plexapi/sdk/operations/OptimizeDatabase.java + - src/main/java/dev/plexapi/sdk/operations/PostUsersSignInData.java - src/main/java/dev/plexapi/sdk/operations/ProcessSubscriptions.java - src/main/java/dev/plexapi/sdk/operations/RefreshItemsMetadata.java - src/main/java/dev/plexapi/sdk/operations/RefreshPlaylist.java @@ -3046,6 +3246,7 @@ examples: path: taskName: "RefreshPeriodicMetadata" task: "RefreshLocalMedia" + butlerTask: "RefreshLocalMedia" header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -3069,6 +3270,7 @@ examples: path: taskName: "CleanOldCacheFiles" task: "CleanOldBundles" + butlerTask: "CleanOldBundles" header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -3145,7 +3347,8 @@ examples: includeRelay: 1 includeIPv6: 1 header: - X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" + X-Plex-Client-Identifier: "abc123" + accepts: "application/xml" responses: "200": application/json: [{"name": "", "product": "Ergonomic Plastic Hat", "productVersion": "", "platform": "", "platformVersion": "", "device": "Mobile", "clientIdentifier": "", "createdAt": "2019-06-24T11:38:02Z", "lastSeenAt": "2019-06-24T11:38:02Z", "provides": "", "ownerId": null, "sourceTitle": "", "publicAddress": "", "accessToken": "", "owned": true, "home": false, "synced": false, "relay": true, "presence": false, "httpsRequired": true, "publicAddressMatches": false, "dnsRebindingProtection": true, "natLoopbackSupported": false, "connections": [{"protocol": "http", "address": "5746 Mount Street", "port": 441996, "uri": "https://wide-kick.name/", "local": false, "relay": true, "IPv6": true}]}] @@ -3661,7 +3864,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/96/composite/1705724593", "duration": 141000, "key": "/playlists/96/items", "leafCount": 1, "playlistType": "video", "smart": false, "title": "A Great Playlist", "type": "playlist", "addedAt": 1705719589, "lastViewedAt": 1705719589, "ratingKey": "96", "summary": "What a great playlist", "updatedAt": 1705724593, "viewCount": 1, "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "icon": "playlist://image.smart"}]}} + application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/96/composite/1705724593", "duration": 141000, "key": "/playlists/96/items", "leafCount": 1, "playlistType": "video", "smart": false, "title": "A Great Playlist", "type": "playlist", "addedAt": 1705719589, "guid": "com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55", "lastViewedAt": 1705719589, "ratingKey": "96", "summary": "What a great playlist", "updatedAt": 1705724593, "viewCount": 1, "icon": "playlist://image.smart"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -3695,7 +3898,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/95/composite/1705717387", "duration": 282000, "key": "/playlists/95/items", "leafCount": 2, "playlistType": "video", "smart": true, "title": "Smart Movie Playlist", "type": "playlist", "addedAt": 1705716493, "ratingKey": "95", "summary": "", "updatedAt": 1705717387, "content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "icon": "playlist://image.smart"}]}} + application/json: {"MediaContainer": {"Metadata": [{"composite": "/playlists/95/composite/1705717387", "duration": 282000, "key": "/playlists/95/items", "leafCount": 2, "playlistType": "video", "smart": true, "title": "Smart Movie Playlist", "type": "playlist", "addedAt": 1705716493, "guid": "com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91", "ratingKey": "95", "summary": "", "updatedAt": 1705717387, "content": "library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1", "icon": "playlist://image.smart"}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -3861,9 +4064,22 @@ examples: application/json: {} getTokenDetails: speakeasy-default-get-token-details: + parameters: + header: + accepts: "application/xml" + X-Plex-Client-Identifier: "abc123" + X-Plex-Product: "Plex for Roku" + X-Plex-Version: "2.4.1" + X-Plex-Platform: "Roku" + X-Plex-Platform-Version: "4.3 build 1057" + X-Plex-Device: "Roku 3" + X-Plex-Model: "4200X" + X-Plex-Device-Vendor: "Roku" + X-Plex-Device-Name: "Living Room TV" + X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"adsConsent": true, "adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": ["[]"], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "locale": "it", "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "scrobbleTypes": "", "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptionDescription": "", "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null} + application/json: {"adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": [], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultAudioAccessibility": 0, "defaultAudioLanguages": null, "defaultSubtitleLanguage": "en", "defaultSubtitleLanguages": null, "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1, "mediaReviewsLanguages": null}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -3889,16 +4105,22 @@ examples: speakeasy-default-post-users-sign-in-data: parameters: header: - X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" + X-Plex-Client-Identifier: "abc123" X-Plex-Product: "Plex for Roku" X-Plex-Device: "Roku 3" X-Plex-Version: "2.4.1" X-Plex-Platform: "Roku" + accepts: "application/xml" + X-Plex-Platform-Version: "4.3 build 1057" + X-Plex-Model: "4200X" + X-Plex-Device-Vendor: "Roku" + X-Plex-Device-Name: "Living Room TV" + X-Plex-Marketplace: "googlePlay" requestBody: application/x-www-form-urlencoded: {"login": "username@email.com", "password": "password123", "rememberMe": false, "verificationCode": "123456"} responses: "201": - application/json: {"adsConsent": null, "adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": ["[]"], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "locale": "ru", "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "scrobbleTypes": "", "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptionDescription": "", "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null, "pastSubscriptions": [], "trials": []} + application/json: {"adsConsentReminderAt": 1556281940, "adsConsentSetAt": 1556281940, "anonymous": false, "authToken": "CxoUzBTSV5hsxjTpFKaf", "backupCodesCreated": false, "confirmed": false, "country": "US", "email": "username@email.com", "emailOnlyAuth": false, "experimentalFeatures": false, "friendlyName": "friendlyUsername", "entitlements": [], "guest": false, "hasPassword": true, "home": false, "homeAdmin": false, "homeSize": 1, "id": 13692262, "joinedAt": 1556281940, "mailingListActive": false, "mailingListStatus": "active", "maxHomeSize": 15, "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultAudioAccessibility": 0, "defaultAudioLanguages": null, "defaultSubtitleLanguage": "en", "defaultSubtitleLanguages": null, "autoSelectSubtitle": 1, "defaultSubtitleAccessibility": 1, "defaultSubtitleForced": 1, "watchedIndicator": 1, "mediaReviewsVisibility": 1, "mediaReviewsLanguages": null}, "protected": false, "rememberExpiresAt": 1556281940, "restricted": false, "services": [], "subscription": {"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}, "subscriptions": [{"active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "attributionPartner": null, "pastSubscriptions": [], "trials": []} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -3976,7 +4198,7 @@ examples: speakeasy-default-get-sessions: responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"title": "The American Dream Is Killing Me", "type": "track", "addedAt": 1705543312, "art": "/library/metadata/39904/art/1705310687", "duration": 186240, "grandparentArt": "/library/metadata/39904/art/1705310687", "grandparentKey": "/library/metadata/39904", "grandparentRatingKey": "39904", "grandparentThumb": "/library/metadata/39904/thumb/1705310687", "grandparentTitle": "Green Day", "index": 1, "key": "/library/metadata/67085", "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": 130355, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "id": 130625, "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "Stream": [{"audioChannelLayout": "stereo", "bitDepth": 16, "bitrate": 1014, "codec": "flac", "displayTitle": "FLAC (Stereo)", "id": 352487, "index": 0, "samplingRate": 44100, "selected": true, "streamType": 2, "albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "channels": 2, "extendedDisplayTitle": "FLAC (Stereo)", "gain": "-12.94", "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "location": "direct"}], "hasThumbnail": "1", "decision": "directplay", "selected": true}], "selected": true}], "originalTitle": "The American Dream Is Killing Me", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "ratingCount": 45885, "ratingKey": "67085", "thumb": "/library/metadata/67084/thumb/1705543314", "titleSort": "American Dream Is Killing Me", "updatedAt": 1705543314, "viewOffset": 1000, "grandparentGuid": "plex://artist/5d07bbfd403c6402904a6480", "guid": "plex://track/6535834f71f22f36f71a8e8f", "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentStudio": "Reprise Records", "parentYear": 2024, "sessionKey": "203", "User": {"id": "1", "thumb": "https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661", "title": "Blindkitty38"}, "Player": {"address": "10.10.10.171", "machineIdentifier": "3tsdzir85m2onc3qyr255aq1", "model": "standalone", "platform": "windows", "platformVersion": "10.0.22621", "product": "Plex for Windows", "profile": "Plex Desktop", "remotePublicAddress": "68.248.140.20", "state": "playing", "title": "DESKTOP-BL80MTD", "version": "1.85.0.4071-21128b56", "local": true, "relayed": false, "secure": true, "userID": 1}, "Session": {"id": "93h7e00ncblxncqw9lkfaoxi", "bandwidth": 1050, "location": "lan"}}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "The American Dream Is Killing Me", "type": "track", "addedAt": 1705543312, "art": "/library/metadata/39904/art/1705310687", "duration": 186240, "grandparentArt": "/library/metadata/39904/art/1705310687", "grandparentGuid": "plex://artist/5d07bbfd403c6402904a6480", "grandparentKey": "/library/metadata/39904", "grandparentRatingKey": "39904", "grandparentThumb": "/library/metadata/39904/thumb/1705310687", "grandparentTitle": "Green Day", "guid": "plex://track/6535834f71f22f36f71a8e8f", "index": 1, "key": "/library/metadata/67085", "Media": [{"audioChannels": 2, "audioCodec": "flac", "bitrate": 1014, "container": "flac", "duration": 186240, "id": 130355, "Part": [{"container": "flac", "duration": 186240, "file": "/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac", "id": 130625, "key": "/library/parts/130625/1705543268/file.flac", "size": 23644000, "Stream": [{"audioChannelLayout": "stereo", "channels": 2, "bitDepth": 16, "bitrate": 1014, "codec": "flac", "displayTitle": "FLAC (Stereo)", "extendedDisplayTitle": "FLAC (Stereo)", "id": 352487, "index": 0, "key": "/library/streams/216389", "samplingRate": 44100, "selected": true, "streamType": 1, "albumGain": "-12.94", "albumPeak": "1.000000", "albumRange": "4.751014", "gain": "-12.94", "loudness": "-5.94", "lra": "1.74", "peak": "1.000000", "location": "direct"}], "hasThumbnail": "1", "decision": "directplay", "selected": true}], "selected": true}], "originalTitle": "The American Dream Is Killing Me", "parentGuid": "plex://album/65394d6d472b8ab03ef47f12", "parentIndex": 1, "parentKey": "/library/metadata/67084", "parentRatingKey": "67084", "parentThumb": "/library/metadata/67084/thumb/1705543314", "parentTitle": "Saviors", "ratingCount": 45885, "ratingKey": "67085", "thumb": "/library/metadata/67084/thumb/1705543314", "titleSort": "American Dream Is Killing Me", "updatedAt": 1705543314, "viewOffset": 1000, "librarySectionID": "3", "librarySectionKey": "/library/sections/3", "librarySectionTitle": "Music", "musicAnalysisVersion": "1", "parentStudio": "Reprise Records", "parentYear": 2024, "sessionKey": "203", "User": {"id": "1", "thumb": "https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661", "title": "Blindkitty38"}, "Player": {"address": "10.10.10.171", "machineIdentifier": "3tsdzir85m2onc3qyr255aq1", "model": "standalone", "platform": "windows", "platformVersion": "10.0.22621", "product": "Plex for Windows", "profile": "Plex Desktop", "remotePublicAddress": "68.248.140.20", "state": "playing", "title": "DESKTOP-BL80MTD", "version": "1.85.0.4071-21128b56", "local": true, "relayed": false, "secure": true, "userID": 1}, "Session": {"id": "93h7e00ncblxncqw9lkfaoxi", "bandwidth": 1050, "location": "lan"}}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -4184,10 +4406,10 @@ examples: speakeasy-default-get-users: parameters: header: - X-Plex-Client-Identifier: "3381b62b-9ab7-4e37-827b-203e9809eb58" + X-Plex-Client-Identifier: "abc123" X-Plex-Product: "Plex for Roku" X-Plex-Device: "Roku 3" - X-Plex-Device-Name: "Chrome" + X-Plex-Device-Name: "Living Room TV" X-Plex-Device-Screen-Resolution: "1487x1165,2560x1440" X-Plex-Version: "2.4.1" X-Plex-Platform: "Roku" @@ -4197,9 +4419,13 @@ examples: X-Plex-Language: "en" X-Plex-Platform-Version: "4.3 build 1057" X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" + accepts: "application/xml" + X-Plex-Device-Vendor: "Roku" + X-Plex-Marketplace: "googlePlay" responses: "200": application/xml: "0xfD5052DbD1" + application/json: {"MediaContainer": {"friendlyName": "myPlex", "identifier": "com.plexapp.plugins.myplex", "machineIdentifier": "3dff4c4da3b1229a649aa574a9e2b419a684a20e", "totalSize": 30, "size": 30, "User": [{"id": 22526914, "title": "Plex User", "username": "zgfuc7krcqfimrmb9lsl5j", "email": "zgfuc7krcqfimrmb9lsl5j@protonmail.com", "recommendationsPlaylistId": "", "thumb": "https://plex.tv/users/3346028014e93acd/avatar?c=1731605021", "protected": 1, "home": 1, "allowTuners": 1, "allowSync": 1, "allowCameraUpload": 1, "allowChannels": 1, "allowSubtitleAdmin": 1, "filterAll": "", "filterMovies": "", "filterMusic": "", "filterPhotos": "", "filterTelevision": "", "restricted": 1, "Server": [{"id": 907759180, "serverId": 9999999, "machineIdentifier": "fbb8aa6be6e0c997c6268bc2b4431c8807f70a3", "name": "ConnectedUserFlix", "lastSeenAt": 1556281940, "numLibraries": 16, "allLibraries": 1, "owned": 1, "pending": 1}]}]}} "400": application/json: {"errors": [{"code": 1000, "message": "X-Plex-Client-Identifier is missing", "status": 400}]} "401": @@ -4514,7 +4740,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 231605, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getDownloadQueueMedia: speakeasy-default-get-download-queue-media: parameters: @@ -4609,7 +4835,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 406301, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getContinueWatching: speakeasy-default-get-continue-watching: parameters: @@ -4627,7 +4853,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 302705, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getHubItems: speakeasy-default-get-hub-items: parameters: @@ -4665,7 +4891,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 424115, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getMetadataHubs: speakeasy-default-get-metadata-hubs: parameters: @@ -4687,7 +4913,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 605482, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getPostplayHubs: speakeasy-default-get-postplay-hubs: parameters: @@ -4709,7 +4935,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 441419, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getRelatedHubs: speakeasy-default-get-related-hubs: parameters: @@ -4731,7 +4957,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 8858, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getSectionHubs: speakeasy-default-get-section-hubs: parameters: @@ -4753,7 +4979,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 336924, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} resetSectionDefaults: speakeasy-default-reset-section-defaults: parameters: @@ -4895,12 +5121,13 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 758235, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} voiceSearchHubs: speakeasy-default-voice-search-hubs: parameters: query: query: "" + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4915,10 +5142,12 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 594971, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} getLibraryItems: speakeasy-default-get-library-items: parameters: + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4933,7 +5162,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 159678, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deleteCaches: {} cleanBundles: {} ingestTransientItem: @@ -4958,7 +5187,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 82660, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getLibraryMatches: speakeasy-default-get-library-matches: parameters: @@ -4966,6 +5195,7 @@ examples: includeFullMetadata: 1 includeAncestorMetadata: 1 includeAlternateMetadataSources: 1 + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -4980,7 +5210,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 84198, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} optimizeDatabase: speakeasy-default-optimize-database: parameters: @@ -5022,7 +5252,7 @@ examples: speakeasy-default-get-sections: responses: "200": - application/json: {} + application/json: {"MediaContainer": {"Directory": [{"title": "Movies", "type": "movie", "contentChangedAt": 1556281940, "createdAt": 1556281940, "language": "", "uuid": "e69655a2-ef48-4aba-bb19-d3cc3401e7d6", "scannedAt": 1556281940, "updatedAt": 1556281940}]}} addSection: speakeasy-default-add-section: parameters: @@ -5049,7 +5279,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Directory": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Directory": [{"title": "", "type": "", "addedAt": 39544, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} stopAllRefreshes: speakeasy-default-stop-all-refreshes: responses: @@ -5093,6 +5323,8 @@ examples: getTags: speakeasy-default-get-tags: parameters: + query: + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5180,7 +5412,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 890240, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} analyzeMetadata: speakeasy-default-analyze-metadata: parameters: @@ -5256,7 +5488,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 713455, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} addExtras: speakeasy-default-add-extras: parameters: @@ -5397,7 +5629,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 419882, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} mergeItems: speakeasy-default-merge-items: parameters: @@ -5434,7 +5666,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 51724, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} setItemPreferences: speakeasy-default-set-item-preferences: parameters: @@ -5490,7 +5722,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} + application/json: {"MediaContainer": {"Hub": [{"type": "track", "context": "hub.home.onDeck", "hubIdentifier": "home.onDeck", "key": "/hubs/sections/home/onDeck", "Metadata": [{"title": "", "type": "", "addedAt": 138475, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}], "size": 1, "subtype": "podcast", "totalSize": 8}]}} listSimilar: speakeasy-default-list-similar: parameters: @@ -5510,7 +5742,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 976861, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} splitItem: speakeasy-default-split-item: parameters: @@ -5567,7 +5799,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MetadataItem": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "MetadataItem": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}]}} + application/json: {"MediaContainer": {"MetadataItem": [{"title": "", "type": "", "addedAt": 440490, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "MetadataItem": [{"title": "", "type": "", "addedAt": 405454, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}]}} unmatch: speakeasy-default-unmatch: parameters: @@ -5702,7 +5934,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 718998, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deleteLibrarySection: speakeasy-default-delete-library-section: parameters: @@ -5743,7 +5975,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Directory": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Directory": [{"title": "", "type": "", "addedAt": 704505, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} editSection: speakeasy-default-edit-section: parameters: @@ -5806,6 +6038,8 @@ examples: parameters: path: sectionId: 942007 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5820,12 +6054,14 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 942007, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getCollections: speakeasy-default-get-collections: parameters: path: sectionId: 348838 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5840,12 +6076,14 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 348838, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getCommon: speakeasy-default-get-common: parameters: path: sectionId: 298154 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -5860,7 +6098,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 298154, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} emptyTrash: speakeasy-default-empty-trash: parameters: @@ -5903,6 +6141,8 @@ examples: parameters: path: sectionId: 3947 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -6252,6 +6492,8 @@ examples: path: sectionId: 925611 updatedAt: 117413 + query: + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -6391,6 +6633,7 @@ examples: parameters: query: sectionId: "" + type: 2 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -6405,7 +6648,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 112848, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} listDVRs: speakeasy-default-list-DV-rs: responses: @@ -6588,7 +6831,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 834281, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} removeDeviceFromDVR: speakeasy-default-remove-device-from-DVR: parameters: @@ -6803,7 +7046,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 186347, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getSessionPlaylistIndex: speakeasy-default-get-session-playlist-index: parameters: @@ -7168,7 +7411,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 516979, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} createSubscription: speakeasy-default-create-subscription: parameters: @@ -7193,13 +7436,13 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 868201, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} processSubscriptions: {} getScheduledRecordings: speakeasy-default-get-scheduled-recordings: responses: "200": - application/json: {"MediaContainer": {"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}} + application/json: {"MediaContainer": {"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 478229, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}} getTemplate: speakeasy-default-get-template: parameters: @@ -7219,7 +7462,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"SubscriptionTemplate": [{"MediaSubscription": [{"title": "This Episode", "MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}]}} + application/json: {"MediaContainer": {"SubscriptionTemplate": [{"MediaSubscription": [{"title": "This Episode", "MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 655183, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}]}} cancelGrab: speakeasy-default-cancel-grab: parameters: @@ -7276,7 +7519,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 186713, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} editSubscriptionPreferences: speakeasy-default-edit-subscription-preferences: parameters: @@ -7298,7 +7541,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 673918, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} reorderSubscription: speakeasy-default-reorder-subscription: parameters: @@ -7318,7 +7561,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} + application/json: {"MediaContainer": {"MediaSubscription": [{"MediaGrabOperation": [{"Metadata": {"title": "", "type": "", "addedAt": 440634, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}]}]}} transcodeImage: speakeasy-default-transcode-image: parameters: @@ -7394,7 +7637,7 @@ examples: X-Plex-Client-Profile-Name: "generic" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 313548, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} triggerFallback: speakeasy-default-trigger-fallback: parameters: @@ -7525,7 +7768,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 511190, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getPlaylistItems: speakeasy-default-get-playlist-items: parameters: @@ -7545,7 +7788,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 118195, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getPlaylistGenerators: speakeasy-default-get-playlist-generators: parameters: @@ -7585,7 +7828,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 552140, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} addPlaylistItems: speakeasy-default-add-playlist-items: parameters: @@ -7605,7 +7848,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 533723, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deletePlaylistItem: speakeasy-default-delete-playlist-item: parameters: @@ -7626,7 +7869,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 981646, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getPlaylistGenerator: speakeasy-default-get-playlist-generator: parameters: @@ -7668,7 +7911,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": {"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}} + application/json: {"MediaContainer": {"Metadata": {"title": "", "type": "", "addedAt": 77230, "art": "/library/metadata/58683/art/1703239236", "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "chapterSource": "media", "childCount": 1, "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "grandparentGuid": "plex://show/5d9c081b170e24001f2a7be4", "guid": "plex://movie/5d7768ba96b655001fdc0408", "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "lastViewedAt": 1556281940, "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "originallyAvailableAt": "2022-12-14", "parentGuid": "plex://show/5d9c081b170e24001f2a7be4", "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "theme": "/library/metadata/1/theme/1705636920", "thumb": "/library/metadata/58683/thumb/1703239236", "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}}} movePlaylistItem: speakeasy-default-move-playlist-item: parameters: @@ -7689,7 +7932,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 940298, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} refreshPlaylist: speakeasy-default-refresh-playlist: parameters: @@ -7758,7 +8001,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 210646, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} addToPlayQueue: speakeasy-default-add-to-play-queue: parameters: @@ -7780,7 +8023,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 919248, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} clearPlayQueue: speakeasy-default-clear-play-queue: parameters: @@ -7800,7 +8043,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 86357, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} resetPlayQueue: speakeasy-default-reset-play-queue: parameters: @@ -7820,7 +8063,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 581891, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} shuffle: speakeasy-default-shuffle: parameters: @@ -7840,7 +8083,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 316150, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} unshuffle: speakeasy-default-unshuffle: parameters: @@ -7860,7 +8103,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 484388, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deletePlayQueueItem: speakeasy-default-delete-play-queue-item: parameters: @@ -7881,7 +8124,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 285738, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} movePlayQueueItem: speakeasy-default-move-play-queue-item: parameters: @@ -7902,7 +8145,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"key": "", "title": "", "type": "", "addedAt": 31341, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getColors: speakeasy-default-get-colors: parameters: @@ -7953,7 +8196,7 @@ examples: speakeasy-default-list-sessions: responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 103950, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getBackgroundTasks: speakeasy-default-get-background-tasks: responses: @@ -8078,7 +8321,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 314585, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getMetadataItem: speakeasy-default-get-metadata-item: parameters: @@ -8107,7 +8350,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 28609, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getAlbums: speakeasy-default-get-albums: parameters: @@ -8127,12 +8370,18 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 817133, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} listContent: speakeasy-default-list-content: parameters: path: sectionId: "" + query: + X-Plex-Container-Start: 0 + X-Plex-Container-Size: 50 + mediaQuery: {"type": 4, "sourceType": 2, "sort": "duration:desc,index"} + includeMeta: 1 + includeGuids: 1 header: accepts: "application/xml" X-Plex-Client-Identifier: "abc123" @@ -8147,7 +8396,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 813218, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getAllLeaves: speakeasy-default-get-all-leaves: parameters: @@ -8167,7 +8416,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 633197, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getArts: speakeasy-default-get-arts: parameters: @@ -8250,7 +8499,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 914549, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getFolders: speakeasy-default-get-folders: parameters: @@ -8312,7 +8561,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 525956, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} getCollectionImage: speakeasy-default-get-collection-image: parameters: @@ -8355,7 +8604,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 338144, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} deleteCollectionItem: speakeasy-default-delete-collection-item: parameters: @@ -8376,7 +8625,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 320928, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} moveCollectionItem: speakeasy-default-move-collection-item: parameters: @@ -8397,6 +8646,7 @@ examples: X-Plex-Marketplace: "googlePlay" responses: "200": - application/json: {"MediaContainer": {"Metadata": [{"Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} + application/json: {"MediaContainer": {"Metadata": [{"title": "", "type": "", "addedAt": 239532, "Autotag": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Country": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Director": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Genre": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Guid": [{"id": "{\"imdbExample\":{\"summary\":\"IMDB example\",\"value\":\"imdb://tt13015952\"},\"tmdbExample\":{\"summary\":\"TMDB example\",\"value\":\"tmdb://2434012\"},\"tvdbExample\":{\"summary\":\"TVDB example\",\"value\":\"tvdb://7945991\"}}"}], "key": "", "Media": [{"aspectRatio": 2.35, "audioChannels": 2, "audioCodec": "aac", "audioProfile": "lc", "bitrate": 5612, "container": "mov", "duration": 150192, "has64bitOffsets": false, "hasVoiceActivity": true, "height": 544, "id": 1, "optimizedForStreaming": false, "Part": [{"audioProfile": "lc", "container": "mov", "duration": 150192, "file": "/home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov", "has64bitOffsets": false, "id": 1, "key": "/library/parts/1/1531779263/file.mov", "optimizedForStreaming": false, "size": 105355654, "Stream": [{"default": true, "audioChannelLayout": "stereo", "bitDepth": 8, "bitrate": 5466, "canAutoSync": true, "chromaLocation": "topleft", "chromaSubsampling": "4:2:0", "codec": "h264", "colorPrimaries": "bt709", "colorRange": "tv", "colorSpace": "bt709", "colorTrc": "bt709", "displayTitle": "English (H.264 Main)", "frameRate": 23.976, "hasScalingMatrix": false, "height": 544, "id": 1, "index": 0, "key": "/library/streams/1", "language": "English", "languageCode": "eng", "level": 31, "profile": "main", "refFrames": 2, "samplingRate": 48000, "streamIdentifier": 1, "streamType": 1, "width": 1280}], "videoProfile": "main"}], "videoCodec": "h264", "videoFrameRate": "24p", "videoProfile": "main", "videoResolution": "720", "width": 1280}], "Rating": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Role": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}], "Writer": [{"filter": "actor=49", "role": "Secretary", "tag": "Shaun Lawton", "tagKey": "5d3ee12c4cde6a001c3e0b27", "thumb": "http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg"}]}]}} examplesVersion: 1.0.2 generatedTests: {} +releaseNotes: "## Java SDK Changes Detected:\n* `plex-api.libraryPlaylists.addPlaylistItems()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryPlaylists.clearPlaylistItems()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryCollections.moveCollectionItem()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryCollections.deleteCollectionItem()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryCollections.addCollectionItems()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.content.getSonicallySimilar()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.butler.stopTask()`: `request` **Changed** **Breaking** :warning:\n* `plex-api.butler.startTask()`: `request` **Changed** **Breaking** :warning:\n* `plex-api.content.getSonicPath()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.downloadQueue.getItemDecision()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getAllHubs()`: \n * `request.onlyTransient` **Changed**\n * `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getContinueWatching()`: `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getPromotedHubs()`: `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getMetadataHubs()`: \n * `request.onlyTransient` **Changed**\n * `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getPostplayHubs()`: \n * `request.onlyTransient` **Changed**\n * `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getRelatedHubs()`: \n * `request.onlyTransient` **Changed**\n * `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.hubs.getSectionHubs()`: \n * `request.onlyTransient` **Changed**\n * `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.content.getAllLeaves()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.content.listContent()`: \n * `request` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.search.searchHubs()`: `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.content.getAlbums()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getLibraryItems()`: \n * `request.mediaQuery` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.ingestTransientItem()`: \n * `request` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getLibraryMatches()`: \n * `request` **Changed** **Breaking** :warning:\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.content.getMetadataItem()`: \n * `request` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getSections()`: `response.mediacontainer.directory.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.addSection()`: \n * `request` **Changed**\n * `response.mediacontainer.directory.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getTags()`: \n * `request.type` **Changed** **Breaking** :warning:\n* `plex-api.content.getCollectionItems()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getAllItemLeaves()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.status.listSessions()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.movePlayQueueItem()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getExtras()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.deletePlayQueueItem()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.unshuffle()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.listMatches()`: \n * `request.manual` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.listSonicallySimilar()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.shuffle()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getRelatedItems()`: `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.listSimilar()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.resetPlayQueue()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getItemTree()`: `response.mediacontainer.metadataItem.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.clearPlayQueue()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.addToPlayQueue()`: \n * `request.next` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getCommon()`: \n * `request.mediaQuery` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getPerson()`: `response.mediacontainer.directory.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.listPersonMedia()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playQueue.getPlayQueue()`: \n * `request` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getLibraryDetails()`: \n * `request.includeDetails` **Changed**\n * `response.mediacontainer.directory.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryPlaylists.movePlaylistItem()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.autocomplete()`: \n * `request.mediaQuery` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.library.getCollections()`: \n * `request.mediaQuery` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryPlaylists.getPlaylistGeneratorItems()`: `response.mediacontainer.metadata` **Changed** **Breaking** :warning:\n* `plex-api.libraryPlaylists.deletePlaylistItem()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.search.voiceSearchHubs()`: \n * `request.type` **Changed** **Breaking** :warning:\n * `response.mediacontainer.hub.[].metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.libraryPlaylists.createPlaylist()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playlist.getPlaylistItems()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playlist.getPlaylist()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.playlist.listPlaylists()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.collections.createCollection()`: \n * `request.type` **Changed** **Breaking** :warning:\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.dvRs.tuneChannel()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.liveTv.getSessions()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.liveTv.getLiveTvSession()`: `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.transcoder.makeDecision()`: \n * `request` **Changed**\n * `response.mediacontainer.metadata.[]` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.getAllSubscriptions()`: \n * `request` **Changed**\n * `response.mediacontainer.mediaSubscription.[].mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.createSubscription()`: `response.mediacontainer.mediaSubscription.[].mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.getScheduledRecordings()`: `response.mediacontainer.mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.getTemplate()`: `response.mediacontainer.subscriptionTemplate.[].mediaSubscription.[].mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.getSubscription()`: \n * `request` **Changed**\n * `response.mediacontainer.mediaSubscription.[].mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.editSubscriptionPreferences()`: `response.mediacontainer.mediaSubscription.[].mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.subscriptions.reorderSubscription()`: `response.mediacontainer.mediaSubscription.[].mediaGrabOperation.[].metadata` **Changed** **Breaking** :warning:\n* `plex-api.library.addSubtitles()`: `request` **Changed**\n* `plex-api.libraryPlaylists.uploadPlaylist()`: \n * `request.force` **Changed**\n* `plex-api.transcoder.transcodeSubtitles()`: `request` **Changed**\n* `plex-api.transcoder.startTranscodeSession()`: `request` **Changed**\n* `plex-api.library.getMediaPart()`: \n * `request.download` **Changed**\n* `plex-api.library.detectIntros()`: \n * `request.force` **Changed**\n* `plex-api.library.getSectionImage()`: \n * `request.mediaQuery` **Changed**\n* `plex-api.library.deleteMediaItem()`: \n * `request.proxy` **Changed**\n* `plex-api.library.refreshItemsMetadata()`: \n * `request.markUpdated` **Changed**\n* `plex-api.authentication.postUsersSignInData()`: **Added**\n* `plex-api.authentication.getTokenDetails()`: **Added**\n* `plex-api.library.detectCredits()`: `request` **Changed**\n* `plex-api.library.setStreamSelection()`: \n * `request.allParts` **Changed**\n* `plex-api.library.updateItems()`: \n * `request.field.locked` **Changed**\n* `plex-api.playQueue.createPlayQueue()`: `request` **Changed**\n* `plex-api.library.deleteLibrarySection()`: \n * `request.async` **Changed**\n* `plex-api.library.getAugmentationStatus()`: \n * `request.wait` **Changed**\n* `plex-api.transcoder.transcodeImage()`: `request` **Changed**\n* `plex-api.devices.modifyDevice()`: \n * `request.enabled` **Changed**\n* `plex-api.library.detectVoiceActivity()`: `request` **Changed**\n* `plex-api.library.getStream()`: \n * `request.autoAdjustSubtitle` **Changed**\n* `plex-api.library.startBifGeneration()`: \n * `request.force` **Changed**\n* `plex-api.library.getFirstCharacters()`: \n * `request.mediaQuery` **Changed**\n* `plex-api.ultraBlur.getImage()`: \n * `request.noise` **Changed**\n* `plex-api.library.generateThumbs()`: \n * `request.force` **Changed**\n* `plex-api.updater.applyUpdates()`: `request` **Changed**\n* `plex-api.updater.checkUpdates()`: \n * `request.download` **Changed**\n* `plex-api.library.deleteMetadataItem()`: \n * `request.proxy` **Changed**\n* `plex-api.library.optimizeDatabase()`: \n * `request.async` **Changed**\n* `plex-api.library.refreshSection()`: \n * `request.force` **Changed**\n* `plex-api.hubs.updateHubVisibility()`: `request` **Changed**\n* `plex-api.hubs.createCustomHub()`: `request` **Changed**\n* `plex-api.downloadQueue.addDownloadQueueItems()`: `request` **Changed**\n* `plex-api.timeline.report()`: `request` **Changed**\n* `plex-api.general.getSourceConnectionInformation()`: \n * `request.refresh` **Changed**\n* `plex-api.plex.getServerResources()`: **Added**\n* `plex-api.users.getUsers()`: **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 470d91fc..5ba0fd5b 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -25,7 +25,7 @@ generation: schemas: allOfMergeStrategy: shallowMerge java: - version: 0.21.1 + version: 0.22.1 additionalDependencies: [] additionalPlugins: [] artifactID: plexapi @@ -37,8 +37,8 @@ java: companyURL: plexapi.dev defaultErrorName: SDKError enableCustomCodeRegions: false + enableSlf4jLogging: false enableStreamingUploads: false - enhancedUnionMemberResolution: true flattenGlobalSecurity: true generateOptionalUnionAccessors: false generateSpringBootStarter: true @@ -52,6 +52,7 @@ java: operations: models/operations shared: models/shared webhooks: models/webhooks + inferUnionDiscriminators: false inputModelSuffix: input languageVersion: 11 license: @@ -59,9 +60,12 @@ java: shortName: MIT url: https://mit-license.org/ maxMethodParams: 4 + multipartArrayFormat: legacy nullFriendlyParameters: false openUnions: true + operationScopedParams: true outputModelSuffix: output packageName: dev.plexapi.sdk projectName: plexapi templateVersion: v2 + unionStrategy: populated-fields diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index f2e4e637..ef9f6d51 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -8,20 +8,20 @@ sources: - latest plexapi: sourceNamespace: plexapi - sourceRevisionDigest: sha256:56fc783b16af019db4eb0fe52df504315e8e7c7ae41e319a61bba8823f19df4b - sourceBlobDigest: sha256:b62613477fd824bb42cf0bf5d0f9980448259c9c7456e03ca6a10eef39a3994f + sourceRevisionDigest: sha256:ace004a3b232e8ab9ca3d89f2da8e40470236e6d997073a16c3f8872d67a7383 + sourceBlobDigest: sha256:993bfb796a3833b0a3b813ad12469ca34db94f23c2d15ae988a26b4d1ed80fbe tags: - latest - - speakeasy-sdk-regen-1762993854 + - speakeasy-sdk-regen-1764549498 - 1.1.1 targets: plexjava: source: plexapi sourceNamespace: plexapi - sourceRevisionDigest: sha256:56fc783b16af019db4eb0fe52df504315e8e7c7ae41e319a61bba8823f19df4b - sourceBlobDigest: sha256:b62613477fd824bb42cf0bf5d0f9980448259c9c7456e03ca6a10eef39a3994f + sourceRevisionDigest: sha256:ace004a3b232e8ab9ca3d89f2da8e40470236e6d997073a16c3f8872d67a7383 + sourceBlobDigest: sha256:993bfb796a3833b0a3b813ad12469ca34db94f23c2d15ae988a26b4d1ed80fbe codeSamplesNamespace: code-samples-java-plexjava - codeSamplesRevisionDigest: sha256:d498e8e83e2cc9e1ffee0af580b876cb3f60cda1e757ed33a6b600395b9cfd78 + codeSamplesRevisionDigest: sha256:52ac94e7425f56352fc8c1cd029b144b79fa5a60027f1960b2d1ce83fa27701b workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index 75ba2f7f..769e81e1 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ The samples below show how a published SDK artifact is used: Gradle: ```groovy -implementation 'dev.plexapi:plexapi:0.21.1' +implementation 'dev.plexapi:plexapi:0.22.1' ``` Maven: @@ -52,7 +52,7 @@ Maven: dev.plexapi plexapi - 0.21.1 + 0.22.1 ``` @@ -109,13 +109,13 @@ public class Application { .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(StartTranscodeSessionQueryParamLocation.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) @@ -207,6 +207,11 @@ public class Application { * [listActivities](docs/sdks/activities/README.md#listactivities) - Get all activities * [cancelActivity](docs/sdks/activities/README.md#cancelactivity) - Cancel a running activity +### [authentication()](docs/sdks/authentication/README.md) + +* [getTokenDetails](docs/sdks/authentication/README.md#gettokendetails) - Get Token Details +* [postUsersSignInData](docs/sdks/authentication/README.md#postuserssignindata) - Get User Sign In Data + ### [butler()](docs/sdks/butler/README.md) * [stopTasks](docs/sdks/butler/README.md#stoptasks) - Stop all Butler tasks @@ -453,6 +458,10 @@ public class Application { * [deletePlayQueueItem](docs/sdks/playqueue/README.md#deleteplayqueueitem) - Delete an item from a play queue * [movePlayQueueItem](docs/sdks/playqueue/README.md#moveplayqueueitem) - Move an item in a play queue +### [plex()](docs/sdks/plex/README.md) + +* [getServerResources](docs/sdks/plex/README.md#getserverresources) - Get Server Resources + ### [preferences()](docs/sdks/preferences/README.md) @@ -523,6 +532,10 @@ public class Application { * [checkUpdates](docs/sdks/updater/README.md#checkupdates) - Checking for updates * [getUpdatesStatus](docs/sdks/updater/README.md#getupdatesstatus) - Querying status of updates +### [users()](docs/sdks/users/README.md) + +* [getUsers](docs/sdks/users/README.md#getusers) - Get list of all connected users + @@ -531,11 +544,13 @@ public class Application { Handling errors in this SDK should largely match your expectations. All operations return a response object or raise an exception. -By default, an API error will throw a `models/errors/SDKError` exception. When custom error responses are specified for an operation, the SDK may also throw their associated exception. You can refer to respective *Errors* tables in SDK docs for more details on possible exception types for each operation. For example, the `getServerInfo` method throws the following exceptions: +By default, an API error will throw a `models/errors/SDKError` exception. When custom error responses are specified for an operation, the SDK may also throw their associated exception. You can refer to respective *Errors* tables in SDK docs for more details on possible exception types for each operation. For example, the `getTokenDetails` method throws the following exceptions: -| Error Type | Status Code | Content Type | -| ---------------------- | ----------- | ------------ | -| models/errors/SDKError | 4XX, 5XX | \*/\* | +| Error Type | Status Code | Content Type | +| ----------------------------------------- | ----------- | ---------------- | +| models/errors/GetTokenDetailsBadRequest | 400 | application/json | +| models/errors/GetTokenDetailsUnauthorized | 401 | application/json | +| models/errors/SDKError | 4XX, 5XX | \*/\* | ### Example @@ -543,14 +558,16 @@ By default, an API error will throw a `models/errors/SDKError` exception. When c package hello.world; import dev.plexapi.sdk.PlexAPI; -import dev.plexapi.sdk.models.operations.GetServerInfoRequest; -import dev.plexapi.sdk.models.operations.GetServerInfoResponse; +import dev.plexapi.sdk.models.errors.GetTokenDetailsBadRequest; +import dev.plexapi.sdk.models.errors.GetTokenDetailsUnauthorized; +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.models.operations.GetTokenDetailsResponse; import dev.plexapi.sdk.models.shared.Accepts; import java.lang.Exception; public class Application { - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws GetTokenDetailsBadRequest, GetTokenDetailsUnauthorized, Exception { PlexAPI sdk = PlexAPI.builder() .accepts(Accepts.APPLICATION_XML) @@ -567,14 +584,14 @@ public class Application { .token(System.getenv().getOrDefault("TOKEN", "")) .build(); - GetServerInfoRequest req = GetServerInfoRequest.builder() + GetTokenDetailsRequest req = GetTokenDetailsRequest.builder() .build(); - GetServerInfoResponse res = sdk.general().getServerInfo() + GetTokenDetailsResponse res = sdk.authentication().getTokenDetails() .request(req) .call(); - if (res.mediaContainerWithDirectory().isPresent()) { + if (res.userPlexAccount().isPresent()) { // handle response } } @@ -699,6 +716,54 @@ public class Application { } } ``` + +### Override Server URL Per-Operation + +The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example: +```java +package hello.world; + +import dev.plexapi.sdk.PlexAPI; +import dev.plexapi.sdk.models.errors.GetTokenDetailsBadRequest; +import dev.plexapi.sdk.models.errors.GetTokenDetailsUnauthorized; +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.models.operations.GetTokenDetailsResponse; +import dev.plexapi.sdk.models.shared.Accepts; +import java.lang.Exception; + +public class Application { + + public static void main(String[] args) throws GetTokenDetailsBadRequest, GetTokenDetailsUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("abc123") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Living Room TV") + .marketplace("googlePlay") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetTokenDetailsRequest req = GetTokenDetailsRequest.builder() + .build(); + + GetTokenDetailsResponse res = sdk.authentication().getTokenDetails() + .request(req) + .serverURL("https://plex.tv/api/v2") + .call(); + + if (res.userPlexAccount().isPresent()) { + // handle response + } + } +} +``` diff --git a/RELEASES.md b/RELEASES.md index 0b9aeb57..ebf815b8 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -408,4 +408,14 @@ Based on: ### Generated - [java v0.21.1] . ### Releases -- [Maven Central v0.21.1] https://central.sonatype.com/artifact/dev.plexapi/plexapi/0.21.1 - . \ No newline at end of file +- [Maven Central v0.21.1] https://central.sonatype.com/artifact/dev.plexapi/plexapi/0.21.1 - . + +## 2025-12-01 00:37:57 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.615.2 (2.698.4) https://github.com/speakeasy-api/speakeasy +### Generated +- [java v0.22.1] . +### Releases +- [Maven Central v0.22.1] https://central.sonatype.com/artifact/dev.plexapi/plexapi/0.22.1 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index 9d060b0d..de41d049 100644 --- a/USAGE.md +++ b/USAGE.md @@ -32,13 +32,13 @@ public class Application { .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(StartTranscodeSessionQueryParamLocation.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) diff --git a/build.gradle b/build.gradle index 3e864fd6..09f1c436 100644 --- a/build.gradle +++ b/build.gradle @@ -105,7 +105,7 @@ publishing { // https://github.com/gradle/gradle/issues/18619 groupId = "dev.plexapi" artifactId = "plexapi" - version = "0.21.1" + version = "0.22.1" from components.java diff --git a/codeSamples.yaml b/codeSamples.yaml index 487cce9b..e31aea43 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -340,9 +340,9 @@ actions: .playQueueItemID("123") .time(0L) .duration(10000L) - .continuing(BoolInt.ONE) + .continuing(BoolInt.True) .updated(14200000L) - .offline(BoolInt.ONE) + .offline(BoolInt.True) .timeToFirstFrame(1000L) .timeStalled(1000L) .bandwidth(100L) @@ -600,7 +600,7 @@ actions: // handle response } } - - target: $["paths"]["/butler/{task}"]["delete"] + - target: $["paths"]["/butler/{butlerTask}"]["delete"] update: x-codeSamples: - lang: java @@ -633,7 +633,7 @@ actions: .build(); StopTaskRequest req = StopTaskRequest.builder() - .task(Task.CLEAN_OLD_BUNDLES) + .butlerTask(ButlerTask.CLEAN_OLD_BUNDLES) .build(); StopTaskResponse res = sdk.butler().stopTask() @@ -643,7 +643,7 @@ actions: // handle response } } - - target: $["paths"]["/butler/{task}"]["post"] + - target: $["paths"]["/butler/{butlerTask}"]["post"] update: x-codeSamples: - lang: java @@ -676,7 +676,7 @@ actions: .build(); StartTaskRequest req = StartTaskRequest.builder() - .task(PathParamTask.REFRESH_LOCAL_MEDIA) + .butlerTask(PathParamButlerTask.REFRESH_LOCAL_MEDIA) .build(); StartTaskResponse res = sdk.butler().startTask() @@ -802,13 +802,13 @@ actions: .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(Location.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) @@ -1157,7 +1157,7 @@ actions: .build(); GetAllHubsRequest req = GetAllHubsRequest.builder() - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetAllHubsResponse res = sdk.hubs().getAllHubs() @@ -1300,7 +1300,7 @@ actions: GetMetadataHubsRequest req = GetMetadataHubsRequest.builder() .metadataId(605482L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetMetadataHubsResponse res = sdk.hubs().getMetadataHubs() @@ -1348,7 +1348,7 @@ actions: GetPostplayHubsRequest req = GetPostplayHubsRequest.builder() .metadataId(441419L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetPostplayHubsResponse res = sdk.hubs().getPostplayHubs() @@ -1396,7 +1396,7 @@ actions: GetRelatedHubsRequest req = GetRelatedHubsRequest.builder() .metadataId(8858L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetRelatedHubsResponse res = sdk.hubs().getRelatedHubs() @@ -1512,6 +1512,7 @@ actions: import dev.plexapi.sdk.models.operations.VoiceSearchHubsRequest; import dev.plexapi.sdk.models.operations.VoiceSearchHubsResponse; import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.MediaType; import java.lang.Exception; public class Application { @@ -1535,6 +1536,7 @@ actions: VoiceSearchHubsRequest req = VoiceSearchHubsRequest.builder() .query("") + .type(MediaType.TvShow) .build(); VoiceSearchHubsResponse res = sdk.search().voiceSearchHubs() @@ -1582,7 +1584,7 @@ actions: GetSectionHubsRequest req = GetSectionHubsRequest.builder() .sectionId(336924L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetSectionHubsResponse res = sdk.hubs().getSectionHubs() @@ -1721,9 +1723,9 @@ actions: CreateCustomHubRequest req = CreateCustomHubRequest.builder() .sectionId(869922L) .metadataItemId(703843L) - .promotedToRecommended(BoolInt.ONE) - .promotedToOwnHome(BoolInt.ONE) - .promotedToSharedHome(BoolInt.ONE) + .promotedToRecommended(BoolInt.True) + .promotedToOwnHome(BoolInt.True) + .promotedToSharedHome(BoolInt.True) .build(); CreateCustomHubResponse res = sdk.hubs().createCustomHub() @@ -1862,9 +1864,9 @@ actions: UpdateHubVisibilityRequest req = UpdateHubVisibilityRequest.builder() .sectionId(341650L) .identifier("") - .promotedToRecommended(BoolInt.ONE) - .promotedToOwnHome(BoolInt.ONE) - .promotedToSharedHome(BoolInt.ONE) + .promotedToRecommended(BoolInt.True) + .promotedToOwnHome(BoolInt.True) + .promotedToSharedHome(BoolInt.True) .build(); UpdateHubVisibilityResponse res = sdk.hubs().updateHubVisibility() @@ -1912,7 +1914,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetLibraryItemsRequest; import dev.plexapi.sdk.models.operations.GetLibraryItemsResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -1935,6 +1937,11 @@ actions: .build(); GetLibraryItemsRequest req = GetLibraryItemsRequest.builder() + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetLibraryItemsResponse res = sdk.library().getLibraryItems() @@ -2010,6 +2017,7 @@ actions: import dev.plexapi.sdk.models.operations.CreateCollectionRequest; import dev.plexapi.sdk.models.operations.CreateCollectionResponse; import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.MediaType; import java.lang.Exception; public class Application { @@ -2033,6 +2041,7 @@ actions: CreateCollectionRequest req = CreateCollectionRequest.builder() .sectionId("") + .type(MediaType.TvShow) .build(); CreateCollectionResponse res = sdk.collections().createCollection() @@ -2315,8 +2324,8 @@ actions: IngestTransientItemRequest req = IngestTransientItemRequest.builder() .url("file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv") .virtualFilePath("/Avatar.mkv") - .computeHashes(BoolInt.ONE) - .ingestNonMatches(BoolInt.ONE) + .computeHashes(BoolInt.True) + .ingestNonMatches(BoolInt.True) .build(); IngestTransientItemResponse res = sdk.library().ingestTransientItem() @@ -2339,8 +2348,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetLibraryMatchesRequest; import dev.plexapi.sdk.models.operations.GetLibraryMatchesResponse; - import dev.plexapi.sdk.models.shared.Accepts; - import dev.plexapi.sdk.models.shared.BoolInt; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -2363,9 +2371,10 @@ actions: .build(); GetLibraryMatchesRequest req = GetLibraryMatchesRequest.builder() - .includeFullMetadata(BoolInt.ONE) - .includeAncestorMetadata(BoolInt.ONE) - .includeAlternateMetadataSources(BoolInt.ONE) + .type(MediaType.TvShow) + .includeFullMetadata(BoolInt.True) + .includeAncestorMetadata(BoolInt.True) + .includeAlternateMetadataSources(BoolInt.True) .build(); GetLibraryMatchesResponse res = sdk.library().getLibraryMatches() @@ -2460,7 +2469,7 @@ actions: GetAugmentationStatusRequest req = GetAugmentationStatusRequest.builder() .augmentationId("") - .wait_(BoolInt.ONE) + .wait_(BoolInt.True) .build(); GetAugmentationStatusResponse res = sdk.library().getAugmentationStatus() @@ -2506,7 +2515,7 @@ actions: DeleteMetadataItemRequest req = DeleteMetadataItemRequest.builder() .ids("") - .proxy(BoolInt.ONE) + .proxy(BoolInt.True) .build(); DeleteMetadataItemResponse res = sdk.library().deleteMetadataItem() @@ -2553,14 +2562,14 @@ actions: GetMetadataItemRequest req = GetMetadataItemRequest.builder() .ids(List.of()) - .asyncCheckFiles(BoolInt.ONE) - .asyncRefreshLocalMediaAgent(BoolInt.ONE) - .asyncRefreshAnalysis(BoolInt.ONE) - .checkFiles(BoolInt.ONE) - .skipRefresh(BoolInt.ONE) - .checkFileAvailability(BoolInt.ONE) - .asyncAugmentMetadata(BoolInt.ONE) - .augmentCount(BoolInt.ONE) + .asyncCheckFiles(BoolInt.True) + .asyncRefreshLocalMediaAgent(BoolInt.True) + .asyncRefreshAnalysis(BoolInt.True) + .checkFiles(BoolInt.True) + .skipRefresh(BoolInt.True) + .checkFileAvailability(BoolInt.True) + .asyncAugmentMetadata(BoolInt.True) + .augmentCount(BoolInt.True) .build(); GetMetadataItemResponse res = sdk.content().getMetadataItem() @@ -2789,7 +2798,7 @@ actions: GenerateThumbsRequest req = GenerateThumbsRequest.builder() .ids("") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); GenerateThumbsResponse res = sdk.library().generateThumbs() @@ -2835,8 +2844,8 @@ actions: DetectCreditsRequest req = DetectCreditsRequest.builder() .ids("") - .force(BoolInt.ONE) - .manual(BoolInt.ONE) + .force(BoolInt.True) + .manual(BoolInt.True) .build(); DetectCreditsResponse res = sdk.library().detectCredits() @@ -3019,7 +3028,7 @@ actions: StartBifGenerationRequest req = StartBifGenerationRequest.builder() .ids("") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); StartBifGenerationResponse res = sdk.library().startBifGeneration() @@ -3065,7 +3074,7 @@ actions: DetectIntrosRequest req = DetectIntrosRequest.builder() .ids("") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); DetectIntrosResponse res = sdk.library().detectIntros() @@ -3299,7 +3308,7 @@ actions: ListMatchesRequest req = ListMatchesRequest.builder() .ids("") - .manual(BoolInt.ONE) + .manual(BoolInt.True) .build(); ListMatchesResponse res = sdk.library().listMatches() @@ -3348,7 +3357,7 @@ actions: DeleteMediaItemRequest req = DeleteMediaItemRequest.builder() .ids("") .mediaItem("") - .proxy(BoolInt.ONE) + .proxy(BoolInt.True) .build(); DeleteMediaItemResponse res = sdk.library().deleteMediaItem() @@ -3537,7 +3546,7 @@ actions: RefreshItemsMetadataRequest req = RefreshItemsMetadataRequest.builder() .ids("") - .markUpdated(BoolInt.ONE) + .markUpdated(BoolInt.True) .build(); RefreshItemsMetadataResponse res = sdk.library().refreshItemsMetadata() @@ -3719,8 +3728,8 @@ actions: AddSubtitlesRequest req = AddSubtitlesRequest.builder() .ids("") - .forced(BoolInt.ONE) - .hearingImpaired(BoolInt.ONE) + .forced(BoolInt.True) + .hearingImpaired(BoolInt.True) .build(); AddSubtitlesResponse res = sdk.library().addSubtitles() @@ -3902,8 +3911,8 @@ actions: DetectVoiceActivityRequest req = DetectVoiceActivityRequest.builder() .ids("") - .force(BoolInt.ONE) - .manual(BoolInt.ONE) + .force(BoolInt.True) + .manual(BoolInt.True) .build(); DetectVoiceActivityResponse res = sdk.library().detectVoiceActivity() @@ -4083,7 +4092,7 @@ actions: .build(); OptimizeDatabaseRequest req = OptimizeDatabaseRequest.builder() - .async(BoolInt.ONE) + .async(BoolInt.True) .build(); OptimizeDatabaseResponse res = sdk.library().optimizeDatabase() @@ -4129,7 +4138,7 @@ actions: SetStreamSelectionRequest req = SetStreamSelectionRequest.builder() .partId(360489L) - .allParts(BoolInt.ONE) + .allParts(BoolInt.True) .build(); SetStreamSelectionResponse res = sdk.library().setStreamSelection() @@ -4270,7 +4279,7 @@ actions: .partId(877105L) .changestamp(970622L) .filename("example.file") - .download(BoolInt.ONE) + .download(BoolInt.True) .build(); GetMediaPartResponse res = sdk.library().getMediaPart() @@ -4493,8 +4502,8 @@ actions: "O:\fatboy\\Media\\My Music")) .prefs(QueryParamPrefs.builder() .build()) - .relative(BoolInt.ONE) - .importFromiTunes(BoolInt.ONE) + .relative(BoolInt.True) + .importFromiTunes(BoolInt.True) .build(); AddSectionResponse res = sdk.library().addSection() @@ -4659,7 +4668,7 @@ actions: DeleteLibrarySectionRequest req = DeleteLibrarySectionRequest.builder() .sectionId("") - .async(BoolInt.ONE) + .async(BoolInt.True) .build(); DeleteLibrarySectionResponse res = sdk.library().deleteLibrarySection() @@ -4705,7 +4714,7 @@ actions: GetLibraryDetailsRequest req = GetLibraryDetailsRequest.builder() .sectionId("") - .includeDetails(BoolInt.ONE) + .includeDetails(BoolInt.True) .build(); GetLibraryDetailsResponse res = sdk.library().getLibraryDetails() @@ -4824,7 +4833,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.ListContentRequest; import dev.plexapi.sdk.models.operations.ListContentResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -4848,6 +4857,13 @@ actions: ListContentRequest req = ListContentRequest.builder() .sectionId("") + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) + .includeMeta(BoolInt.True) + .includeGuids(BoolInt.True) .build(); ListContentResponse res = sdk.content().listContent() @@ -4895,7 +4911,7 @@ actions: UpdateItemsRequest req = UpdateItemsRequest.builder() .sectionId("") - .fieldLocked(BoolInt.ONE) + .fieldLocked(BoolInt.True) .build(); UpdateItemsResponse res = sdk.library().updateItems() @@ -5052,7 +5068,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.AutocompleteRequest; import dev.plexapi.sdk.models.operations.AutocompleteResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -5076,6 +5092,11 @@ actions: AutocompleteRequest req = AutocompleteRequest.builder() .sectionId(942007L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); AutocompleteResponse res = sdk.library().autocomplete() @@ -5235,7 +5256,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetCollectionsRequest; import dev.plexapi.sdk.models.operations.GetCollectionsResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -5259,6 +5280,11 @@ actions: GetCollectionsRequest req = GetCollectionsRequest.builder() .sectionId(348838L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetCollectionsResponse res = sdk.library().getCollections() @@ -5281,7 +5307,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetCommonRequest; import dev.plexapi.sdk.models.operations.GetCommonResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -5305,6 +5331,11 @@ actions: GetCommonRequest req = GetCommonRequest.builder() .sectionId(298154L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetCommonResponse res = sdk.library().getCommon() @@ -5327,7 +5358,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetSectionImageRequest; import dev.plexapi.sdk.models.operations.GetSectionImageResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -5352,6 +5383,11 @@ actions: GetSectionImageRequest req = GetSectionImageRequest.builder() .sectionId(925611L) .updatedAt(117413L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetSectionImageResponse res = sdk.library().getSectionImage() @@ -5510,7 +5546,7 @@ actions: import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetFirstCharactersRequest; import dev.plexapi.sdk.models.operations.GetFirstCharactersResponse; - import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -5534,6 +5570,11 @@ actions: GetFirstCharactersRequest req = GetFirstCharactersRequest.builder() .sectionId(3947L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetFirstCharactersResponse res = sdk.library().getFirstCharacters() @@ -5944,7 +5985,7 @@ actions: RefreshSectionRequest req = RefreshSectionRequest.builder() .sectionId(450300L) - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); RefreshSectionResponse res = sdk.library().refreshSection() @@ -6082,7 +6123,7 @@ actions: GetStreamRequest req = GetStreamRequest.builder() .streamId(314506L) .ext("") - .autoAdjustSubtitle(BoolInt.ONE) + .autoAdjustSubtitle(BoolInt.True) .build(); GetStreamResponse res = sdk.library().getStream() @@ -6241,6 +6282,7 @@ actions: import dev.plexapi.sdk.models.operations.GetTagsRequest; import dev.plexapi.sdk.models.operations.GetTagsResponse; import dev.plexapi.sdk.models.shared.Accepts; + import dev.plexapi.sdk.models.shared.MediaType; import java.lang.Exception; public class Application { @@ -6263,6 +6305,7 @@ actions: .build(); GetTagsRequest req = GetTagsRequest.builder() + .type(MediaType.TvShow) .build(); GetTagsResponse res = sdk.library().getTags() @@ -7805,7 +7848,7 @@ actions: ModifyDeviceRequest req = ModifyDeviceRequest.builder() .deviceId(879135L) - .enabled(BoolInt.ONE) + .enabled(BoolInt.True) .build(); ModifyDeviceResponse res = sdk.devices().modifyDevice() @@ -8331,8 +8374,8 @@ actions: .build(); GetAllSubscriptionsRequest req = GetAllSubscriptionsRequest.builder() - .includeGrabs(BoolInt.ONE) - .includeStorage(BoolInt.ONE) + .includeGrabs(BoolInt.True) + .includeStorage(BoolInt.True) .build(); GetAllSubscriptionsResponse res = sdk.subscriptions().getAllSubscriptions() @@ -8577,8 +8620,8 @@ actions: GetSubscriptionRequest req = GetSubscriptionRequest.builder() .subscriptionId(186713L) - .includeGrabs(BoolInt.ONE) - .includeStorage(BoolInt.ONE) + .includeGrabs(BoolInt.True) + .includeStorage(BoolInt.True) .build(); GetSubscriptionResponse res = sdk.subscriptions().getSubscription() @@ -8720,9 +8763,9 @@ actions: TranscodeImageRequest req = TranscodeImageRequest.builder() .url("/library/metadata/265/thumb/1715112705") .background("#ff5522") - .upscale(BoolInt.ONE) - .minSize(BoolInt.ONE) - .rotate(BoolInt.ONE) + .upscale(BoolInt.True) + .minSize(BoolInt.True) + .rotate(BoolInt.True) .blendColor("#ff5522") .build(); @@ -8770,11 +8813,11 @@ actions: CreatePlayQueueRequest req = CreatePlayQueueRequest.builder() .type(Type.AUDIO) - .shuffle(BoolInt.ONE) - .repeat(BoolInt.ONE) - .continuous(BoolInt.ONE) - .recursive(BoolInt.ONE) - .onDeck(BoolInt.ONE) + .shuffle(BoolInt.True) + .repeat(BoolInt.True) + .continuous(BoolInt.True) + .recursive(BoolInt.True) + .onDeck(BoolInt.True) .build(); CreatePlayQueueResponse res = sdk.playQueue().createPlayQueue() @@ -8822,9 +8865,9 @@ actions: GetPlayQueueRequest req = GetPlayQueueRequest.builder() .playQueueId(210646L) - .own(BoolInt.ONE) - .includeBefore(BoolInt.ONE) - .includeAfter(BoolInt.ONE) + .own(BoolInt.True) + .includeBefore(BoolInt.True) + .includeAfter(BoolInt.True) .build(); GetPlayQueueResponse res = sdk.playQueue().getPlayQueue() @@ -8872,7 +8915,7 @@ actions: AddToPlayQueueRequest req = AddToPlayQueueRequest.builder() .playQueueId(919248L) - .next(BoolInt.ONE) + .next(BoolInt.True) .build(); AddToPlayQueueResponse res = sdk.playQueue().addToPlayQueue() @@ -9288,7 +9331,7 @@ actions: UploadPlaylistRequest req = UploadPlaylistRequest.builder() .path("/home/barkley/playlist.m3u") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); UploadPlaylistResponse res = sdk.libraryPlaylists().uploadPlaylist() @@ -9850,6 +9893,45 @@ actions: } } } + - target: $["paths"]["/resources"]["get"] + update: + x-codeSamples: + - lang: java + label: PlexJava + source: |- + package hello.world; + + import dev.plexapi.sdk.PlexAPI; + import dev.plexapi.sdk.models.errors.GetServerResourcesUnauthorized; + import dev.plexapi.sdk.models.operations.*; + import dev.plexapi.sdk.models.shared.Accepts; + import java.lang.Exception; + + public class Application { + + public static void main(String[] args) throws GetServerResourcesUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("abc123") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetServerResourcesRequest req = GetServerResourcesRequest.builder() + .includeHttps(IncludeHttps.True) + .includeRelay(IncludeRelay.True) + .includeIPv6(IncludeIPv6.True) + .build(); + + GetServerResourcesResponse res = sdk.plex().getServerResources() + .request(req) + .call(); + + if (res.plexDevices().isPresent()) { + // handle response + } + } + } - target: $["paths"]["/security/resources"]["get"] update: x-codeSamples: @@ -9886,7 +9968,7 @@ actions: GetSourceConnectionInformationRequest req = GetSourceConnectionInformationRequest.builder() .source("") - .refresh(BoolInt.ONE) + .refresh(BoolInt.True) .build(); GetSourceConnectionInformationResponse res = sdk.general().getSourceConnectionInformation() @@ -10031,7 +10113,7 @@ actions: .bottomLeft("1c425d") .width(1920L) .height(1080L) - .noise(BoolInt.ONE) + .noise(BoolInt.True) .build(); GetImageResponse res = sdk.ultraBlur().getImage() @@ -10341,8 +10423,8 @@ actions: .build(); ApplyUpdatesRequest req = ApplyUpdatesRequest.builder() - .tonight(BoolInt.ONE) - .skip(BoolInt.ONE) + .tonight(BoolInt.True) + .skip(BoolInt.True) .build(); ApplyUpdatesResponse res = sdk.updater().applyUpdates() @@ -10387,7 +10469,7 @@ actions: .build(); CheckUpdatesRequest req = CheckUpdatesRequest.builder() - .download(BoolInt.ONE) + .download(BoolInt.True) .build(); CheckUpdatesResponse res = sdk.updater().checkUpdates() @@ -10425,6 +10507,150 @@ actions: } } } + - target: $["paths"]["/user"]["get"] + update: + x-codeSamples: + - lang: java + label: PlexJava + source: |- + package hello.world; + + import dev.plexapi.sdk.PlexAPI; + import dev.plexapi.sdk.models.errors.GetTokenDetailsBadRequest; + import dev.plexapi.sdk.models.errors.GetTokenDetailsUnauthorized; + import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; + import dev.plexapi.sdk.models.operations.GetTokenDetailsResponse; + import dev.plexapi.sdk.models.shared.Accepts; + import java.lang.Exception; + + public class Application { + + public static void main(String[] args) throws GetTokenDetailsBadRequest, GetTokenDetailsUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("abc123") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Living Room TV") + .marketplace("googlePlay") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetTokenDetailsRequest req = GetTokenDetailsRequest.builder() + .build(); + + GetTokenDetailsResponse res = sdk.authentication().getTokenDetails() + .request(req) + .call(); + + if (res.userPlexAccount().isPresent()) { + // handle response + } + } + } + - target: $["paths"]["/users"]["get"] + update: + x-codeSamples: + - lang: java + label: PlexJava + source: |- + package hello.world; + + import dev.plexapi.sdk.PlexAPI; + import dev.plexapi.sdk.models.errors.GetUsersBadRequest; + import dev.plexapi.sdk.models.errors.GetUsersUnauthorized; + import dev.plexapi.sdk.models.operations.GetUsersRequest; + import dev.plexapi.sdk.models.operations.GetUsersResponse; + import dev.plexapi.sdk.models.shared.Accepts; + import java.lang.Exception; + + public class Application { + + public static void main(String[] args) throws GetUsersBadRequest, GetUsersUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("abc123") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Living Room TV") + .marketplace("googlePlay") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetUsersRequest req = GetUsersRequest.builder() + .build(); + + GetUsersResponse res = sdk.users().getUsers() + .request(req) + .call(); + + if (res.object().isPresent()) { + // handle response + } + } + } + - target: $["paths"]["/users/signin"]["post"] + update: + x-codeSamples: + - lang: java + label: PlexJava + source: |- + package hello.world; + + import dev.plexapi.sdk.PlexAPI; + import dev.plexapi.sdk.models.errors.PostUsersSignInDataBadRequest; + import dev.plexapi.sdk.models.errors.PostUsersSignInDataUnauthorized; + import dev.plexapi.sdk.models.operations.*; + import dev.plexapi.sdk.models.shared.Accepts; + import java.lang.Exception; + + public class Application { + + public static void main(String[] args) throws PostUsersSignInDataBadRequest, PostUsersSignInDataUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("abc123") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Living Room TV") + .marketplace("googlePlay") + .build(); + + PostUsersSignInDataRequest req = PostUsersSignInDataRequest.builder() + .requestBody(PostUsersSignInDataRequestBody.builder() + .login("username@email.com") + .password("password123") + .verificationCode("123456") + .build()) + .build(); + + PostUsersSignInDataResponse res = sdk.authentication().postUsersSignInData() + .request(req) + .call(); + + if (res.userPlexAccount().isPresent()) { + // handle response + } + } + } - target: $["paths"]["/{transcodeType}/:/transcode/universal/decision"]["get"] update: x-codeSamples: @@ -10462,13 +10688,13 @@ actions: .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(Location.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) @@ -10580,13 +10806,13 @@ actions: .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(StartTranscodeSessionQueryParamLocation.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) @@ -10652,13 +10878,13 @@ actions: .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(QueryParamLocation.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) diff --git a/docs/models/errors/Errors.md b/docs/models/errors/Errors.md new file mode 100644 index 00000000..5b010b69 --- /dev/null +++ b/docs/models/errors/Errors.md @@ -0,0 +1,10 @@ +# Errors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1000 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/models/errors/GetServerResourcesErrors.md b/docs/models/errors/GetServerResourcesErrors.md new file mode 100644 index 00000000..77cf8b7f --- /dev/null +++ b/docs/models/errors/GetServerResourcesErrors.md @@ -0,0 +1,10 @@ +# GetServerResourcesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/GetServerResourcesUnauthorized.md b/docs/models/errors/GetServerResourcesUnauthorized.md new file mode 100644 index 00000000..216a5974 --- /dev/null +++ b/docs/models/errors/GetServerResourcesUnauthorized.md @@ -0,0 +1,11 @@ +# GetServerResourcesUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[GetServerResourcesErrors](../../models/errors/GetServerResourcesErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/GetTokenDetailsBadRequest.md b/docs/models/errors/GetTokenDetailsBadRequest.md new file mode 100644 index 00000000..1993ce2e --- /dev/null +++ b/docs/models/errors/GetTokenDetailsBadRequest.md @@ -0,0 +1,11 @@ +# GetTokenDetailsBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[Errors](../../models/errors/Errors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/GetTokenDetailsErrors.md b/docs/models/errors/GetTokenDetailsErrors.md new file mode 100644 index 00000000..7c822c7f --- /dev/null +++ b/docs/models/errors/GetTokenDetailsErrors.md @@ -0,0 +1,10 @@ +# GetTokenDetailsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/GetTokenDetailsUnauthorized.md b/docs/models/errors/GetTokenDetailsUnauthorized.md new file mode 100644 index 00000000..8ad2df5a --- /dev/null +++ b/docs/models/errors/GetTokenDetailsUnauthorized.md @@ -0,0 +1,11 @@ +# GetTokenDetailsUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[GetTokenDetailsErrors](../../models/errors/GetTokenDetailsErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/GetUsersBadRequest.md b/docs/models/errors/GetUsersBadRequest.md new file mode 100644 index 00000000..b1212684 --- /dev/null +++ b/docs/models/errors/GetUsersBadRequest.md @@ -0,0 +1,11 @@ +# GetUsersBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[GetUsersErrors](../../models/errors/GetUsersErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/GetUsersErrors.md b/docs/models/errors/GetUsersErrors.md new file mode 100644 index 00000000..95b00857 --- /dev/null +++ b/docs/models/errors/GetUsersErrors.md @@ -0,0 +1,10 @@ +# GetUsersErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1000 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/models/errors/GetUsersUnauthorized.md b/docs/models/errors/GetUsersUnauthorized.md new file mode 100644 index 00000000..3c154d28 --- /dev/null +++ b/docs/models/errors/GetUsersUnauthorized.md @@ -0,0 +1,11 @@ +# GetUsersUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[GetUsersUsersErrors](../../models/errors/GetUsersUsersErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/GetUsersUsersErrors.md b/docs/models/errors/GetUsersUsersErrors.md new file mode 100644 index 00000000..695bfc36 --- /dev/null +++ b/docs/models/errors/GetUsersUsersErrors.md @@ -0,0 +1,10 @@ +# GetUsersUsersErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/PostUsersSignInDataAuthenticationErrors.md b/docs/models/errors/PostUsersSignInDataAuthenticationErrors.md new file mode 100644 index 00000000..cf4726d7 --- /dev/null +++ b/docs/models/errors/PostUsersSignInDataAuthenticationErrors.md @@ -0,0 +1,10 @@ +# PostUsersSignInDataAuthenticationErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/PostUsersSignInDataBadRequest.md b/docs/models/errors/PostUsersSignInDataBadRequest.md new file mode 100644 index 00000000..b9cc25b0 --- /dev/null +++ b/docs/models/errors/PostUsersSignInDataBadRequest.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataBadRequest + +Bad Request - A parameter was not specified, or was specified incorrectly. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[PostUsersSignInDataErrors](../../models/errors/PostUsersSignInDataErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/PostUsersSignInDataErrors.md b/docs/models/errors/PostUsersSignInDataErrors.md new file mode 100644 index 00000000..4c661888 --- /dev/null +++ b/docs/models/errors/PostUsersSignInDataErrors.md @@ -0,0 +1,10 @@ +# PostUsersSignInDataErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `code` | *Optional\* | :heavy_minus_sign: | N/A | 1000 | +| `message` | *Optional\* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `status` | *Optional\* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/models/errors/PostUsersSignInDataUnauthorized.md b/docs/models/errors/PostUsersSignInDataUnauthorized.md new file mode 100644 index 00000000..20384591 --- /dev/null +++ b/docs/models/errors/PostUsersSignInDataUnauthorized.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataUnauthorized + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `errors` | List\<[PostUsersSignInDataAuthenticationErrors](../../models/errors/PostUsersSignInDataAuthenticationErrors.md)> | :heavy_minus_sign: | N/A | +| `rawResponse` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/AllLibraries.md b/docs/models/operations/AllLibraries.md new file mode 100644 index 00000000..393878a3 --- /dev/null +++ b/docs/models/operations/AllLibraries.md @@ -0,0 +1,11 @@ +# AllLibraries + +Indicates if the user has access to all libraries. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/AllowCameraUpload.md b/docs/models/operations/AllowCameraUpload.md new file mode 100644 index 00000000..b080e796 --- /dev/null +++ b/docs/models/operations/AllowCameraUpload.md @@ -0,0 +1,11 @@ +# AllowCameraUpload + +Indicates if the user is allowed to upload from a camera. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/AllowChannels.md b/docs/models/operations/AllowChannels.md new file mode 100644 index 00000000..72073287 --- /dev/null +++ b/docs/models/operations/AllowChannels.md @@ -0,0 +1,11 @@ +# AllowChannels + +Indicates if the user has access to channels. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/AllowSubtitleAdmin.md b/docs/models/operations/AllowSubtitleAdmin.md new file mode 100644 index 00000000..63bf969b --- /dev/null +++ b/docs/models/operations/AllowSubtitleAdmin.md @@ -0,0 +1,11 @@ +# AllowSubtitleAdmin + +Indicates if the user can manage subtitles. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/AllowSync.md b/docs/models/operations/AllowSync.md new file mode 100644 index 00000000..92557733 --- /dev/null +++ b/docs/models/operations/AllowSync.md @@ -0,0 +1,11 @@ +# AllowSync + +Indicates if the user is allowed to sync media. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/AllowTuners.md b/docs/models/operations/AllowTuners.md new file mode 100644 index 00000000..fe810e45 --- /dev/null +++ b/docs/models/operations/AllowTuners.md @@ -0,0 +1,11 @@ +# AllowTuners + +Indicates if the user is allowed to use tuners. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/AutocompleteRequest.md b/docs/models/operations/AutocompleteRequest.md index 774e6497..efcf7ac0 100644 --- a/docs/models/operations/AutocompleteRequest.md +++ b/docs/models/operations/AutocompleteRequest.md @@ -3,20 +3,20 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `type` | *Optional\* | :heavy_minus_sign: | Item type | | -| `fieldQuery` | *Optional\* | :heavy_minus_sign: | The "field" stands in for any field, the value is a partial string for matching | | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `type` | *Optional\* | :heavy_minus_sign: | Item type | | +| `fieldQuery` | *Optional\* | :heavy_minus_sign: | The "field" stands in for any field, the value is a partial string for matching | | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/models/operations/Billing.md b/docs/models/operations/Billing.md new file mode 100644 index 00000000..67e98971 --- /dev/null +++ b/docs/models/operations/Billing.md @@ -0,0 +1,9 @@ +# Billing + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `internalPaymentMethod` | [InternalPaymentMethod](../../models/operations/InternalPaymentMethod.md) | :heavy_check_mark: | N/A | +| `paymentMethodId` | *Optional\* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/ButlerTask.md b/docs/models/operations/ButlerTask.md index 772131ec..03b9db4a 100644 --- a/docs/models/operations/ButlerTask.md +++ b/docs/models/operations/ButlerTask.md @@ -1,13 +1,31 @@ # ButlerTask +The task name -## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `description` | *Optional\* | :heavy_minus_sign: | A user-friendly description of the task | -| `enabled` | *Optional\* | :heavy_minus_sign: | Whether this task is enabled or not | -| `interval` | *Optional\* | :heavy_minus_sign: | The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. | -| `name` | *Optional\* | :heavy_minus_sign: | The name of the task | -| `scheduleRandomized` | *Optional\* | :heavy_minus_sign: | Indicates whether the timing of the task is randomized within the butler interval | -| `title` | *Optional\* | :heavy_minus_sign: | A user-friendly title of the task | \ No newline at end of file +## Values + +| Name | Value | +| -------------------------------------- | -------------------------------------- | +| `AUTOMATIC_UPDATES` | AutomaticUpdates | +| `BACKUP_DATABASE` | BackupDatabase | +| `BUTLER_TASK_GENERATE_AD_MARKERS` | ButlerTaskGenerateAdMarkers | +| `BUTLER_TASK_GENERATE_CREDITS_MARKERS` | ButlerTaskGenerateCreditsMarkers | +| `BUTLER_TASK_GENERATE_INTRO_MARKERS` | ButlerTaskGenerateIntroMarkers | +| `BUTLER_TASK_GENERATE_VOICE_ACTIVITY` | ButlerTaskGenerateVoiceActivity | +| `CLEAN_OLD_BUNDLES` | CleanOldBundles | +| `CLEAN_OLD_CACHE_FILES` | CleanOldCacheFiles | +| `DEEP_MEDIA_ANALYSIS` | DeepMediaAnalysis | +| `GARBAGE_COLLECT_BLOBS` | GarbageCollectBlobs | +| `GARBAGE_COLLECT_LIBRARY_MEDIA` | GarbageCollectLibraryMedia | +| `GENERATE_BLUR_HASHES` | GenerateBlurHashes | +| `GENERATE_CHAPTER_THUMBS` | GenerateChapterThumbs | +| `GENERATE_MEDIA_INDEX_FILES` | GenerateMediaIndexFiles | +| `LOUDNESS_ANALYSIS` | LoudnessAnalysis | +| `MUSIC_ANALYSIS` | MusicAnalysis | +| `OPTIMIZE_DATABASE` | OptimizeDatabase | +| `REFRESH_EPG_GUIDES` | RefreshEpgGuides | +| `REFRESH_LIBRARIES` | RefreshLibraries | +| `REFRESH_LOCAL_MEDIA` | RefreshLocalMedia | +| `REFRESH_PERIODIC_METADATA` | RefreshPeriodicMetadata | +| `UPGRADE_MEDIA_ANALYSIS` | UpgradeMediaAnalysis | \ No newline at end of file diff --git a/docs/models/operations/ButlerTasks.md b/docs/models/operations/ButlerTasks.md index 25cc89b2..427b600f 100644 --- a/docs/models/operations/ButlerTasks.md +++ b/docs/models/operations/ButlerTasks.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | -| `butlerTask` | List\<[ButlerTask](../../models/operations/ButlerTask.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `butlerTask` | List\<[GetTasksButlerTask](../../models/operations/GetTasksButlerTask.md)> | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/CreateCollectionRequest.md b/docs/models/operations/CreateCollectionRequest.md index 0805bb20..0ed01e4c 100644 --- a/docs/models/operations/CreateCollectionRequest.md +++ b/docs/models/operations/CreateCollectionRequest.md @@ -3,21 +3,21 @@ ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `sectionId` | *String* | :heavy_check_mark: | The section where this collection will be created | | -| `title` | *Optional\* | :heavy_minus_sign: | The title to filter by or assign | | -| `smart` | *Optional\* | :heavy_minus_sign: | Whether this is a smart collection/playlist | | -| `uri` | *Optional\* | :heavy_minus_sign: | The URI for processing the smart collection. Required for a smart collection | | -| `type` | *Optional\* | :heavy_minus_sign: | The metadata type to filter by | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `sectionId` | *String* | :heavy_check_mark: | The section where this collection will be created | | +| `title` | *Optional\* | :heavy_minus_sign: | The title to filter by or assign | | +| `smart` | *Optional\* | :heavy_minus_sign: | Whether this is a smart collection/playlist | | +| `uri` | *Optional\* | :heavy_minus_sign: | The URI for processing the smart collection. Required for a smart collection | | +| `type` | [Optional\](../../models/shared/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | \ No newline at end of file diff --git a/docs/models/operations/CreateDownloadQueueStatus.md b/docs/models/operations/CreateDownloadQueueStatus.md new file mode 100644 index 00000000..c01b0f7e --- /dev/null +++ b/docs/models/operations/CreateDownloadQueueStatus.md @@ -0,0 +1,20 @@ +# CreateDownloadQueueStatus + +The state of this queue + - deciding: At least one item is still being decided + - waiting: At least one item is waiting for transcode and none are currently transcoding + - processing: At least one item is being transcoded + - done: All items are available (or potentially expired) + - error: At least one item has encountered an error + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `DECIDING` | deciding | +| `WAITING` | waiting | +| `PROCESSING` | processing | +| `DONE` | done | +| `ERROR` | error | \ No newline at end of file diff --git a/docs/models/operations/DownloadQueue.md b/docs/models/operations/DownloadQueue.md index 2d515f6a..ba78b1e4 100644 --- a/docs/models/operations/DownloadQueue.md +++ b/docs/models/operations/DownloadQueue.md @@ -7,4 +7,4 @@ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *Optional\* | :heavy_minus_sign: | N/A | | `itemCount` | *Optional\* | :heavy_minus_sign: | N/A | -| `status` | [Optional\](../../models/operations/Status.md) | :heavy_minus_sign: | The state of this queue
- deciding: At least one item is still being decided
- waiting: At least one item is waiting for transcode and none are currently transcoding
- processing: At least one item is being transcoded
- done: All items are available (or potentially expired)
- error: At least one item has encountered an error
| \ No newline at end of file +| `status` | [Optional\](../../models/operations/CreateDownloadQueueStatus.md) | :heavy_minus_sign: | The state of this queue
- deciding: At least one item is still being decided
- waiting: At least one item is waiting for transcode and none are currently transcoding
- processing: At least one item is being transcoded
- done: All items are available (or potentially expired)
- error: At least one item has encountered an error
| \ No newline at end of file diff --git a/docs/models/operations/GetCollectionsRequest.md b/docs/models/operations/GetCollectionsRequest.md index cd8eee68..2ded404c 100644 --- a/docs/models/operations/GetCollectionsRequest.md +++ b/docs/models/operations/GetCollectionsRequest.md @@ -3,18 +3,18 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/models/operations/GetCommonRequest.md b/docs/models/operations/GetCommonRequest.md index c163665f..9f275eaa 100644 --- a/docs/models/operations/GetCommonRequest.md +++ b/docs/models/operations/GetCommonRequest.md @@ -3,19 +3,19 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `type` | *Optional\* | :heavy_minus_sign: | Item type | | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `type` | *Optional\* | :heavy_minus_sign: | Item type | | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/models/operations/GetFirstCharactersRequest.md b/docs/models/operations/GetFirstCharactersRequest.md index c9a93660..cfd40115 100644 --- a/docs/models/operations/GetFirstCharactersRequest.md +++ b/docs/models/operations/GetFirstCharactersRequest.md @@ -3,20 +3,20 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `type` | *Optional\* | :heavy_minus_sign: | The metadata type to filter on | | -| `sort` | *Optional\* | :heavy_minus_sign: | The metadata type to filter on | | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `type` | *Optional\* | :heavy_minus_sign: | The metadata type to filter on | | +| `sort` | *Optional\* | :heavy_minus_sign: | The metadata type to filter on | | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/models/operations/GetLibraryItemsRequest.md b/docs/models/operations/GetLibraryItemsRequest.md index a64ef2fe..758c7e42 100644 --- a/docs/models/operations/GetLibraryItemsRequest.md +++ b/docs/models/operations/GetLibraryItemsRequest.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | \ No newline at end of file diff --git a/docs/models/operations/GetLibraryMatchesRequest.md b/docs/models/operations/GetLibraryMatchesRequest.md index 89fd73e6..c8b2833a 100644 --- a/docs/models/operations/GetLibraryMatchesRequest.md +++ b/docs/models/operations/GetLibraryMatchesRequest.md @@ -3,30 +3,30 @@ ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `type` | *Optional\* | :heavy_minus_sign: | The metadata type to filter by | | -| `includeFullMetadata` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | -| `includeAncestorMetadata` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | -| `includeAlternateMetadataSources` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | -| `guid` | *Optional\* | :heavy_minus_sign: | Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. | | -| `title` | *Optional\* | :heavy_minus_sign: | The title to filter by or assign | | -| `year` | *Optional\* | :heavy_minus_sign: | Used for movies shows, and albums. Optional. | | -| `path` | *Optional\* | :heavy_minus_sign: | Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. | | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. | | -| `grandparentYear` | *Optional\* | :heavy_minus_sign: | Used for episodes. The year of the show. | | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | Used for episodes and tracks. The season/album number. | | -| `index` | *Optional\* | :heavy_minus_sign: | Used for episodes and tracks. The episode/tracks number in the season/album. | | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | Used for episodes. In the format `YYYY-MM-DD`. | | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | Used for albums and tracks. The artist name for albums or the album name for tracks. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `type` | [Optional\](../../models/shared/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `includeFullMetadata` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | +| `includeAncestorMetadata` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | +| `includeAlternateMetadataSources` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | N/A | 1 | +| `guid` | *Optional\* | :heavy_minus_sign: | Used for movies, shows, artists, albums, and tracks. Allowed for various URI schemes, to be defined. | | +| `title` | *Optional\* | :heavy_minus_sign: | The title to filter by or assign | | +| `year` | *Optional\* | :heavy_minus_sign: | Used for movies shows, and albums. Optional. | | +| `path` | *Optional\* | :heavy_minus_sign: | Used for movies, episodes, and tracks. The full path to the media file, used for "cloud-scanning" an item. | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | Used for episodes and tracks. The title of the show/artist. Required if `path` isn't passed. | | +| `grandparentYear` | *Optional\* | :heavy_minus_sign: | Used for episodes. The year of the show. | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | Used for episodes and tracks. The season/album number. | | +| `index` | *Optional\* | :heavy_minus_sign: | Used for episodes and tracks. The episode/tracks number in the season/album. | | +| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | Used for episodes. In the format `YYYY-MM-DD`. | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | Used for albums and tracks. The artist name for albums or the album name for tracks. | | \ No newline at end of file diff --git a/docs/models/operations/GetPlaylistGeneratorItemsGuids.md b/docs/models/operations/GetPlaylistGeneratorItemsGuids.md new file mode 100644 index 00000000..59adc08c --- /dev/null +++ b/docs/models/operations/GetPlaylistGeneratorItemsGuids.md @@ -0,0 +1,8 @@ +# GetPlaylistGeneratorItemsGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/operations/GetPlaylistGeneratorItemsMetadata.md b/docs/models/operations/GetPlaylistGeneratorItemsMetadata.md index 758657b2..e616efe9 100644 --- a/docs/models/operations/GetPlaylistGeneratorItemsMetadata.md +++ b/docs/models/operations/GetPlaylistGeneratorItemsMetadata.md @@ -10,75 +10,79 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `processingState` | [Optional\](../../models/operations/ProcessingState.md) | :heavy_minus_sign: | The state of processing if this generator is part of an optimizer playlist | -| `processingStateContext` | [Optional\](../../models/operations/ProcessingStateContext.md) | :heavy_minus_sign: | The error which could have occurred (or `good`) | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[GetPlaylistGeneratorItemsGuids](../../models/operations/GetPlaylistGeneratorItemsGuids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `processingState` | [Optional\](../../models/operations/ProcessingState.md) | :heavy_minus_sign: | The state of processing if this generator is part of an optimizer playlist | | +| `processingStateContext` | [Optional\](../../models/operations/ProcessingStateContext.md) | :heavy_minus_sign: | The error which could have occurred (or `good`) | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/GetSectionImageRequest.md b/docs/models/operations/GetSectionImageRequest.md index 67a6b206..bafec55d 100644 --- a/docs/models/operations/GetSectionImageRequest.md +++ b/docs/models/operations/GetSectionImageRequest.md @@ -3,20 +3,20 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | -| `updatedAt` | *long* | :heavy_check_mark: | The update time of the image. Used for busting cache. | | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | -| `composite` | [Optional\](../../models/shared/Composite.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `sectionId` | *long* | :heavy_check_mark: | Section identifier | | +| `updatedAt` | *long* | :heavy_check_mark: | The update time of the image. Used for busting cache. | | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | +| `composite` | [Optional\](../../models/shared/Composite.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/GetServerResourcesRequest.md b/docs/models/operations/GetServerResourcesRequest.md new file mode 100644 index 00000000..db23bcde --- /dev/null +++ b/docs/models/operations/GetServerResourcesRequest.md @@ -0,0 +1,12 @@ +# GetServerResourcesRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `includeHttps` | [Optional\](../../models/operations/IncludeHttps.md) | :heavy_minus_sign: | Include Https entries in the results | 1 | +| `includeRelay` | [Optional\](../../models/operations/IncludeRelay.md) | :heavy_minus_sign: | Include Relay addresses in the results
E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400
| 1 | +| `includeIPv6` | [Optional\](../../models/operations/IncludeIPv6.md) | :heavy_minus_sign: | Include IPv6 entries in the results | 1 | \ No newline at end of file diff --git a/docs/models/operations/GetServerResourcesResponse.md b/docs/models/operations/GetServerResourcesResponse.md new file mode 100644 index 00000000..369f4175 --- /dev/null +++ b/docs/models/operations/GetServerResourcesResponse.md @@ -0,0 +1,11 @@ +# GetServerResourcesResponse + + +## 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` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `plexDevices` | List\<[PlexDevice](../../models/shared/PlexDevice.md)> | :heavy_minus_sign: | List of Plex Devices. This includes Plex hosted servers and clients | \ No newline at end of file diff --git a/docs/models/operations/GetTagsRequest.md b/docs/models/operations/GetTagsRequest.md index e0f123cd..d045ed62 100644 --- a/docs/models/operations/GetTagsRequest.md +++ b/docs/models/operations/GetTagsRequest.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `type` | *Optional\* | :heavy_minus_sign: | The metadata type to filter by | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `type` | [Optional\](../../models/shared/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | \ No newline at end of file diff --git a/docs/models/operations/GetTasksButlerTask.md b/docs/models/operations/GetTasksButlerTask.md new file mode 100644 index 00000000..64f44519 --- /dev/null +++ b/docs/models/operations/GetTasksButlerTask.md @@ -0,0 +1,13 @@ +# GetTasksButlerTask + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `description` | *Optional\* | :heavy_minus_sign: | A user-friendly description of the task | +| `enabled` | *Optional\* | :heavy_minus_sign: | Whether this task is enabled or not | +| `interval` | *Optional\* | :heavy_minus_sign: | The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. | +| `name` | *Optional\* | :heavy_minus_sign: | The name of the task | +| `scheduleRandomized` | *Optional\* | :heavy_minus_sign: | Indicates whether the timing of the task is randomized within the butler interval | +| `title` | *Optional\* | :heavy_minus_sign: | A user-friendly title of the task | \ No newline at end of file diff --git a/docs/models/operations/GetTokenDetailsRequest.md b/docs/models/operations/GetTokenDetailsRequest.md new file mode 100644 index 00000000..411196c2 --- /dev/null +++ b/docs/models/operations/GetTokenDetailsRequest.md @@ -0,0 +1,18 @@ +# GetTokenDetailsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | \ No newline at end of file diff --git a/docs/models/operations/GetTokenDetailsResponse.md b/docs/models/operations/GetTokenDetailsResponse.md new file mode 100644 index 00000000..3e69fd8d --- /dev/null +++ b/docs/models/operations/GetTokenDetailsResponse.md @@ -0,0 +1,11 @@ +# GetTokenDetailsResponse + + +## 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` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `userPlexAccount` | [Optional\](../../models/shared/UserPlexAccount.md) | :heavy_minus_sign: | Logged in user details | \ No newline at end of file diff --git a/docs/models/operations/GetUsersMediaContainer.md b/docs/models/operations/GetUsersMediaContainer.md new file mode 100644 index 00000000..9f8a9294 --- /dev/null +++ b/docs/models/operations/GetUsersMediaContainer.md @@ -0,0 +1,15 @@ +# GetUsersMediaContainer + +Container holding user and server details. + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `friendlyName` | *String* | :heavy_check_mark: | The friendly name of the Plex instance. | myPlex | +| `identifier` | *String* | :heavy_check_mark: | N/A | com.plexapp.plugins.myplex | +| `machineIdentifier` | *String* | :heavy_check_mark: | Unique Machine identifier of the Plex server. | 3dff4c4da3b1229a649aa574a9e2b419a684a20e | +| `totalSize` | *long* | :heavy_check_mark: | Total number of users. | 30 | +| `size` | *long* | :heavy_check_mark: | Number of users in the current response. | 30 | +| `user` | List\<[User](../../models/operations/User.md)> | :heavy_check_mark: | List of users with access to the Plex server. | | \ No newline at end of file diff --git a/docs/models/operations/GetUsersRequest.md b/docs/models/operations/GetUsersRequest.md new file mode 100644 index 00000000..4cdf9ad7 --- /dev/null +++ b/docs/models/operations/GetUsersRequest.md @@ -0,0 +1,18 @@ +# GetUsersRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | \ No newline at end of file diff --git a/docs/models/operations/GetUsersResponse.md b/docs/models/operations/GetUsersResponse.md new file mode 100644 index 00000000..97c7fcff --- /dev/null +++ b/docs/models/operations/GetUsersResponse.md @@ -0,0 +1,11 @@ +# GetUsersResponse + + +## 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` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional\](../../models/operations/GetUsersResponseBody.md) | :heavy_minus_sign: | Successful response with media container data in JSON | \ No newline at end of file diff --git a/docs/models/operations/GetUsersResponseBody.md b/docs/models/operations/GetUsersResponseBody.md new file mode 100644 index 00000000..5bb02a21 --- /dev/null +++ b/docs/models/operations/GetUsersResponseBody.md @@ -0,0 +1,10 @@ +# GetUsersResponseBody + +Successful response with media container data in JSON + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `mediaContainer` | [Optional\](../../models/operations/GetUsersMediaContainer.md) | :heavy_minus_sign: | Container holding user and server details. | \ No newline at end of file diff --git a/docs/models/operations/Guids.md b/docs/models/operations/Guids.md new file mode 100644 index 00000000..cd6b0ff7 --- /dev/null +++ b/docs/models/operations/Guids.md @@ -0,0 +1,8 @@ +# Guids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/operations/Home.md b/docs/models/operations/Home.md new file mode 100644 index 00000000..6733522f --- /dev/null +++ b/docs/models/operations/Home.md @@ -0,0 +1,11 @@ +# Home + +Indicates if the user is part of a home group. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/IncludeHttps.md b/docs/models/operations/IncludeHttps.md new file mode 100644 index 00000000..cee26271 --- /dev/null +++ b/docs/models/operations/IncludeHttps.md @@ -0,0 +1,11 @@ +# IncludeHttps + +Include Https entries in the results + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/models/operations/IncludeIPv6.md b/docs/models/operations/IncludeIPv6.md new file mode 100644 index 00000000..0672352e --- /dev/null +++ b/docs/models/operations/IncludeIPv6.md @@ -0,0 +1,11 @@ +# IncludeIPv6 + +Include IPv6 entries in the results + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/models/operations/IncludeRelay.md b/docs/models/operations/IncludeRelay.md new file mode 100644 index 00000000..136ab44e --- /dev/null +++ b/docs/models/operations/IncludeRelay.md @@ -0,0 +1,13 @@ +# IncludeRelay + +Include Relay addresses in the results +E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + + + +## Values + +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/models/operations/InternalPaymentMethod.md b/docs/models/operations/InternalPaymentMethod.md new file mode 100644 index 00000000..f1103c25 --- /dev/null +++ b/docs/models/operations/InternalPaymentMethod.md @@ -0,0 +1,7 @@ +# InternalPaymentMethod + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/ListContentRequest.md b/docs/models/operations/ListContentRequest.md index ec870dac..56178e31 100644 --- a/docs/models/operations/ListContentRequest.md +++ b/docs/models/operations/ListContentRequest.md @@ -3,18 +3,22 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries | | -| `sectionId` | *String* | :heavy_check_mark: | The id of the section | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `xPlexContainerStart` | *Optional\* | :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` | *Optional\* | :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 | +| `mediaQuery` | [Optional\](../../models/shared/MediaQuery.md) | :heavy_minus_sign: | A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic.

The query supports:
- Fields: integer, boolean, tag, string, date, language
- Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type)
- Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR)
- Sorting: sort parameter with :desc, :nullsLast modifiers
- Grouping: group parameter
- Limits: limit parameter

Examples:
- Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24`
- String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24"
- Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries.
| {
"type": 4,
"sourceType": 2,
"sort": "duration:desc,index"
} | +| `includeMeta` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | Adds the Meta object to the response
| 1 | +| `includeGuids` | [Optional\](../../models/shared/BoolInt.md) | :heavy_minus_sign: | Adds the Guid object to the response
| 1 | +| `sectionId` | *String* | :heavy_check_mark: | The id of the section | | \ No newline at end of file diff --git a/docs/models/operations/MailingListStatus.md b/docs/models/operations/MailingListStatus.md new file mode 100644 index 00000000..25033dec --- /dev/null +++ b/docs/models/operations/MailingListStatus.md @@ -0,0 +1,12 @@ +# MailingListStatus + +Your current mailing list status + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `Active` | active | +| `Unsubscribed` | unsubscribed | +| `Removed` | removed | \ No newline at end of file diff --git a/docs/models/operations/Metadata.md b/docs/models/operations/Metadata.md index ce7adb47..2f21635c 100644 --- a/docs/models/operations/Metadata.md +++ b/docs/models/operations/Metadata.md @@ -10,76 +10,80 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `player` | [Optional\](../../models/shared/Player.md) | :heavy_minus_sign: | Information about the player being used for playback | -| `session` | [Optional\](../../models/shared/Session.md) | :heavy_minus_sign: | Information about the playback session | -| `user` | [Optional\](../../models/shared/User.md) | :heavy_minus_sign: | The user playing the content | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `player` | [Optional\](../../models/shared/Player.md) | :heavy_minus_sign: | Information about the player being used for playback | | +| `session` | [Optional\](../../models/shared/Session.md) | :heavy_minus_sign: | Information about the playback session | | +| `user` | [Optional\](../../models/shared/User.md) | :heavy_minus_sign: | The user playing the content | | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[Guids](../../models/operations/Guids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/Owned.md b/docs/models/operations/Owned.md new file mode 100644 index 00000000..6f7fa480 --- /dev/null +++ b/docs/models/operations/Owned.md @@ -0,0 +1,11 @@ +# Owned + +Indicates if the user owns the server. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/PastSubscription.md b/docs/models/operations/PastSubscription.md new file mode 100644 index 00000000..47f96380 --- /dev/null +++ b/docs/models/operations/PastSubscription.md @@ -0,0 +1,22 @@ +# PastSubscription + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `id` | *Optional\* | :heavy_check_mark: | N/A | | +| `mode` | *Optional\* | :heavy_check_mark: | N/A | | +| `renewsAt` | *Optional\* | :heavy_check_mark: | N/A | 1556281940 | +| `endsAt` | *Optional\* | :heavy_check_mark: | N/A | 1556281940 | +| `canceled` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `gracePeriod` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `onHold` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `canReactivate` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `canUpgrade` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `canDowngrade` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `canConvert` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `type` | *String* | :heavy_check_mark: | N/A | plexpass | +| `transfer` | *Optional\* | :heavy_check_mark: | N/A | | +| `state` | [PostUsersSignInDataState](../../models/operations/PostUsersSignInDataState.md) | :heavy_check_mark: | N/A | ended | +| `billing` | [Billing](../../models/operations/Billing.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/PathParamTask.md b/docs/models/operations/PathParamButlerTask.md similarity index 98% rename from docs/models/operations/PathParamTask.md rename to docs/models/operations/PathParamButlerTask.md index 6d8e80da..15681595 100644 --- a/docs/models/operations/PathParamTask.md +++ b/docs/models/operations/PathParamButlerTask.md @@ -1,4 +1,4 @@ -# PathParamTask +# PathParamButlerTask The task name diff --git a/docs/models/operations/Pending.md b/docs/models/operations/Pending.md new file mode 100644 index 00000000..53885102 --- /dev/null +++ b/docs/models/operations/Pending.md @@ -0,0 +1,11 @@ +# Pending + +Indicates if the server is pending approval. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataAuthenticationStatus.md b/docs/models/operations/PostUsersSignInDataAuthenticationStatus.md new file mode 100644 index 00000000..b0c9a810 --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataAuthenticationStatus.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataAuthenticationStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `INACTIVE` | Inactive | +| `ACTIVE` | Active | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataRequest.md b/docs/models/operations/PostUsersSignInDataRequest.md new file mode 100644 index 00000000..3477e13a --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataRequest.md @@ -0,0 +1,19 @@ +# PostUsersSignInDataRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `requestBody` | [Optional\](../../models/operations/PostUsersSignInDataRequestBody.md) | :heavy_minus_sign: | Login credentials | | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataRequestBody.md b/docs/models/operations/PostUsersSignInDataRequestBody.md new file mode 100644 index 00000000..5771bd44 --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataRequestBody.md @@ -0,0 +1,13 @@ +# PostUsersSignInDataRequestBody + +Login credentials + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------- | -------------------- | -------------------- | -------------------- | -------------------- | +| `login` | *String* | :heavy_check_mark: | N/A | username@email.com | +| `password` | *String* | :heavy_check_mark: | N/A | password123 | +| `rememberMe` | *Optional\* | :heavy_minus_sign: | N/A | | +| `verificationCode` | *Optional\* | :heavy_minus_sign: | N/A | 123456 | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataResponse.md b/docs/models/operations/PostUsersSignInDataResponse.md new file mode 100644 index 00000000..44687333 --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataResponse.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataResponse + + +## 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` | [HttpResponse\](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpResponse.html) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `userPlexAccount` | [Optional\](../../models/operations/PostUsersSignInDataUserPlexAccount.md) | :heavy_minus_sign: | Returns the user account data with a valid auth token | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataState.md b/docs/models/operations/PostUsersSignInDataState.md new file mode 100644 index 00000000..d31f6b64 --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataState.md @@ -0,0 +1,8 @@ +# PostUsersSignInDataState + + +## Values + +| Name | Value | +| ------- | ------- | +| `ENDED` | ended | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataStatus.md b/docs/models/operations/PostUsersSignInDataStatus.md new file mode 100644 index 00000000..ca8100ee --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataStatus.md @@ -0,0 +1,11 @@ +# PostUsersSignInDataStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `Inactive` | Inactive | +| `Active` | Active | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataSubscription.md b/docs/models/operations/PostUsersSignInDataSubscription.md new file mode 100644 index 00000000..516b4e22 --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataSubscription.md @@ -0,0 +1,13 @@ +# PostUsersSignInDataSubscription + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `features` | List\<*String*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `active` | *Optional\* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `subscribedAt` | *JsonNullable\* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `status` | [Optional\](../../models/operations/PostUsersSignInDataAuthenticationStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `paymentService` | *JsonNullable\* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `plan` | *JsonNullable\* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/models/operations/PostUsersSignInDataUserPlexAccount.md b/docs/models/operations/PostUsersSignInDataUserPlexAccount.md new file mode 100644 index 00000000..ba092118 --- /dev/null +++ b/docs/models/operations/PostUsersSignInDataUserPlexAccount.md @@ -0,0 +1,52 @@ +# PostUsersSignInDataUserPlexAccount + +Returns the user account data with a valid auth token + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `adsConsent` | *JsonNullable\* | :heavy_minus_sign: | Unknown | | +| `adsConsentReminderAt` | *JsonNullable\* | :heavy_minus_sign: | N/A | 1556281940 | +| `adsConsentSetAt` | *JsonNullable\* | :heavy_minus_sign: | N/A | 1556281940 | +| `anonymous` | *JsonNullable\* | :heavy_minus_sign: | Unknown | | +| `authToken` | *String* | :heavy_check_mark: | The account token | CxoUzBTSV5hsxjTpFKaf | +| `backupCodesCreated` | *Optional\* | :heavy_minus_sign: | If the two-factor authentication backup codes have been created | | +| `confirmed` | *Optional\* | :heavy_minus_sign: | If the account has been confirmed | | +| `country` | *Optional\* | :heavy_minus_sign: | The account country | US | +| `email` | *String* | :heavy_check_mark: | The account email address | username@email.com | +| `emailOnlyAuth` | *Optional\* | :heavy_minus_sign: | If login with email only is enabled | | +| `experimentalFeatures` | *Optional\* | :heavy_minus_sign: | If experimental features are enabled | | +| `friendlyName` | *String* | :heavy_check_mark: | Your account full name | friendlyUsername | +| `entitlements` | List\<*String*> | :heavy_minus_sign: | List of devices your allowed to use with this account | [] | +| `guest` | *Optional\* | :heavy_minus_sign: | If the account is a Plex Home guest user | | +| `hasPassword` | *Optional\* | :heavy_minus_sign: | If the account has a password | | +| `home` | *Optional\* | :heavy_minus_sign: | If the account is a Plex Home user | | +| `homeAdmin` | *Optional\* | :heavy_minus_sign: | If the account is the Plex Home admin | | +| `homeSize` | *Optional\* | :heavy_minus_sign: | The number of accounts in the Plex Home | 1 | +| `id` | *int* | :heavy_check_mark: | The Plex account ID | 13692262 | +| `joinedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 | +| `locale` | *JsonNullable\* | :heavy_minus_sign: | The account locale | | +| `mailingListActive` | *Optional\* | :heavy_minus_sign: | If you are subscribed to the Plex newsletter | | +| `mailingListStatus` | [Optional\](../../models/operations/MailingListStatus.md) | :heavy_minus_sign: | Your current mailing list status | active | +| `maxHomeSize` | *Optional\* | :heavy_minus_sign: | The maximum number of accounts allowed in the Plex Home | 15 | +| ~~`pin`~~ | *Optional\* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

[Might be removed] The hashed Plex Home PIN | | +| `profile` | [Optional\](../../models/shared/UserProfile.md) | :heavy_minus_sign: | N/A | | +| `protected_` | *Optional\* | :heavy_minus_sign: | If the account has a Plex Home PIN enabled | | +| `rememberExpiresAt` | *Optional\* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 | +| `restricted` | *Optional\* | :heavy_minus_sign: | If the account is a Plex Home managed user | | +| `roles` | List\<*String*> | :heavy_minus_sign: | [Might be removed] List of account roles. Plexpass membership listed here | | +| `scrobbleTypes` | *Optional\* | :heavy_minus_sign: | Unknown | | +| `services` | List\<[Services](../../models/operations/Services.md)> | :heavy_minus_sign: | N/A | | +| `subscription` | [Optional\](../../models/operations/Subscription.md) | :heavy_minus_sign: | If the account's Plex Pass subscription is active | | +| `subscriptionDescription` | *JsonNullable\* | :heavy_minus_sign: | Description of the Plex Pass subscription | | +| `subscriptions` | List\<[PostUsersSignInDataSubscription](../../models/operations/PostUsersSignInDataSubscription.md)> | :heavy_minus_sign: | N/A | | +| `thumb` | *Optional\* | :heavy_minus_sign: | URL of the account thumbnail | https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 | +| `title` | *String* | :heavy_check_mark: | The title of the account (username or friendly name) | UsernameTitle | +| `twoFactorEnabled` | *Optional\* | :heavy_minus_sign: | If two-factor authentication is enabled | | +| `username` | *String* | :heavy_check_mark: | The account username | Username | +| `uuid` | *String* | :heavy_check_mark: | The account UUID | dae343c1f45beb4f | +| `attributionPartner` | *JsonNullable\* | :heavy_minus_sign: | N/A | | +| `pastSubscriptions` | List\<[PastSubscription](../../models/operations/PastSubscription.md)> | :heavy_check_mark: | N/A | | +| `trials` | List\<[Trials](../../models/operations/Trials.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/Protected.md b/docs/models/operations/Protected.md new file mode 100644 index 00000000..5e37e852 --- /dev/null +++ b/docs/models/operations/Protected.md @@ -0,0 +1,11 @@ +# Protected + +Indicates whether the account is protected. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/Restricted.md b/docs/models/operations/Restricted.md new file mode 100644 index 00000000..bbbb3665 --- /dev/null +++ b/docs/models/operations/Restricted.md @@ -0,0 +1,11 @@ +# Restricted + +Indicates if the user has restricted access. + + +## Values + +| Name | Value | +| --------- | --------- | +| `Disable` | 0 | +| `Enable` | 1 | \ No newline at end of file diff --git a/docs/models/operations/Server.md b/docs/models/operations/Server.md new file mode 100644 index 00000000..70f14e42 --- /dev/null +++ b/docs/models/operations/Server.md @@ -0,0 +1,16 @@ +# Server + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `id` | *long* | :heavy_check_mark: | Unique ID of the server of the connected user | 907759180 | +| `serverId` | *long* | :heavy_check_mark: | ID of the actual Plex server. | 9999999 | +| `machineIdentifier` | *String* | :heavy_check_mark: | Machine identifier of the Plex server. | fbb8aa6be6e0c997c6268bc2b4431c8807f70a3 | +| `name` | *String* | :heavy_check_mark: | Name of the Plex server of the connected user. | ConnectedUserFlix | +| `lastSeenAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 | +| `numLibraries` | *long* | :heavy_check_mark: | Number of libraries in the server this user has access to. | 16 | +| `allLibraries` | [Optional\](../../models/operations/AllLibraries.md) | :heavy_minus_sign: | N/A | 1 | +| `owned` | [Optional\](../../models/operations/Owned.md) | :heavy_minus_sign: | N/A | 1 | +| `pending` | [Optional\](../../models/operations/Pending.md) | :heavy_minus_sign: | N/A | 1 | \ No newline at end of file diff --git a/docs/models/operations/Services.md b/docs/models/operations/Services.md new file mode 100644 index 00000000..c68712b0 --- /dev/null +++ b/docs/models/operations/Services.md @@ -0,0 +1,12 @@ +# Services + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `identifier` | *String* | :heavy_check_mark: | N/A | metadata-dev | +| `endpoint` | *String* | :heavy_check_mark: | N/A | https://epg.provider.plex.tv | +| `token` | *Optional\* | :heavy_check_mark: | N/A | DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv | +| `secret` | *Optional\* | :heavy_check_mark: | N/A | | +| `status` | [Status](../../models/operations/Status.md) | :heavy_check_mark: | N/A | online | \ No newline at end of file diff --git a/docs/models/operations/StartTaskRequest.md b/docs/models/operations/StartTaskRequest.md index 58933900..42042758 100644 --- a/docs/models/operations/StartTaskRequest.md +++ b/docs/models/operations/StartTaskRequest.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `task` | [PathParamTask](../../models/operations/PathParamTask.md) | :heavy_check_mark: | The task name | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `butlerTask` | [PathParamButlerTask](../../models/operations/PathParamButlerTask.md) | :heavy_check_mark: | The task name | | \ No newline at end of file diff --git a/docs/models/operations/Status.md b/docs/models/operations/Status.md index 821f2701..3545d933 100644 --- a/docs/models/operations/Status.md +++ b/docs/models/operations/Status.md @@ -1,20 +1,9 @@ # Status -The state of this queue - - deciding: At least one item is still being decided - - waiting: At least one item is waiting for transcode and none are currently transcoding - - processing: At least one item is being transcoded - - done: All items are available (or potentially expired) - - error: At least one item has encountered an error - - ## Values -| Name | Value | -| ------------ | ------------ | -| `DECIDING` | deciding | -| `WAITING` | waiting | -| `PROCESSING` | processing | -| `DONE` | done | -| `ERROR` | error | \ No newline at end of file +| Name | Value | +| --------- | --------- | +| `Online` | online | +| `Offline` | offline | \ No newline at end of file diff --git a/docs/models/operations/StopTaskRequest.md b/docs/models/operations/StopTaskRequest.md index 14a192d0..207df5d8 100644 --- a/docs/models/operations/StopTaskRequest.md +++ b/docs/models/operations/StopTaskRequest.md @@ -16,4 +16,4 @@ | `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | | `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | | `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `task` | [Task](../../models/operations/Task.md) | :heavy_check_mark: | The task name | | \ No newline at end of file +| `butlerTask` | [ButlerTask](../../models/operations/ButlerTask.md) | :heavy_check_mark: | The task name | | \ No newline at end of file diff --git a/docs/models/operations/Subscription.md b/docs/models/operations/Subscription.md new file mode 100644 index 00000000..cad7fb6e --- /dev/null +++ b/docs/models/operations/Subscription.md @@ -0,0 +1,15 @@ +# Subscription + +If the account's Plex Pass subscription is active + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `features` | List\<*String*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `active` | *Optional\* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `subscribedAt` | *JsonNullable\* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `status` | [Optional\](../../models/operations/PostUsersSignInDataStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `paymentService` | *JsonNullable\* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `plan` | *JsonNullable\* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/models/operations/Task.md b/docs/models/operations/Task.md deleted file mode 100644 index e9d63f20..00000000 --- a/docs/models/operations/Task.md +++ /dev/null @@ -1,31 +0,0 @@ -# Task - -The task name - - -## Values - -| Name | Value | -| -------------------------------------- | -------------------------------------- | -| `AUTOMATIC_UPDATES` | AutomaticUpdates | -| `BACKUP_DATABASE` | BackupDatabase | -| `BUTLER_TASK_GENERATE_AD_MARKERS` | ButlerTaskGenerateAdMarkers | -| `BUTLER_TASK_GENERATE_CREDITS_MARKERS` | ButlerTaskGenerateCreditsMarkers | -| `BUTLER_TASK_GENERATE_INTRO_MARKERS` | ButlerTaskGenerateIntroMarkers | -| `BUTLER_TASK_GENERATE_VOICE_ACTIVITY` | ButlerTaskGenerateVoiceActivity | -| `CLEAN_OLD_BUNDLES` | CleanOldBundles | -| `CLEAN_OLD_CACHE_FILES` | CleanOldCacheFiles | -| `DEEP_MEDIA_ANALYSIS` | DeepMediaAnalysis | -| `GARBAGE_COLLECT_BLOBS` | GarbageCollectBlobs | -| `GARBAGE_COLLECT_LIBRARY_MEDIA` | GarbageCollectLibraryMedia | -| `GENERATE_BLUR_HASHES` | GenerateBlurHashes | -| `GENERATE_CHAPTER_THUMBS` | GenerateChapterThumbs | -| `GENERATE_MEDIA_INDEX_FILES` | GenerateMediaIndexFiles | -| `LOUDNESS_ANALYSIS` | LoudnessAnalysis | -| `MUSIC_ANALYSIS` | MusicAnalysis | -| `OPTIMIZE_DATABASE` | OptimizeDatabase | -| `REFRESH_EPG_GUIDES` | RefreshEpgGuides | -| `REFRESH_LIBRARIES` | RefreshLibraries | -| `REFRESH_LOCAL_MEDIA` | RefreshLocalMedia | -| `REFRESH_PERIODIC_METADATA` | RefreshPeriodicMetadata | -| `UPGRADE_MEDIA_ANALYSIS` | UpgradeMediaAnalysis | \ No newline at end of file diff --git a/docs/models/operations/Trials.md b/docs/models/operations/Trials.md new file mode 100644 index 00000000..1b9b77de --- /dev/null +++ b/docs/models/operations/Trials.md @@ -0,0 +1,7 @@ +# Trials + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/User.md b/docs/models/operations/User.md new file mode 100644 index 00000000..dcebe0d6 --- /dev/null +++ b/docs/models/operations/User.md @@ -0,0 +1,27 @@ +# User + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `id` | *long* | :heavy_check_mark: | User's unique ID. | 22526914 | +| `title` | *String* | :heavy_check_mark: | User's display name. | Plex User | +| `username` | *String* | :heavy_check_mark: | User's username. | zgfuc7krcqfimrmb9lsl5j | +| `email` | *String* | :heavy_check_mark: | User's email address. | zgfuc7krcqfimrmb9lsl5j@protonmail.com | +| `recommendationsPlaylistId` | *JsonNullable\* | :heavy_minus_sign: | ID of the user's recommendation playlist. | | +| `thumb` | *String* | :heavy_check_mark: | URL to the user's avatar image. | https://plex.tv/users/3346028014e93acd/avatar?c=1731605021 | +| `protected_` | [Optional\](../../models/operations/Protected.md) | :heavy_minus_sign: | N/A | 1 | +| `home` | [Optional\](../../models/operations/Home.md) | :heavy_minus_sign: | N/A | 1 | +| `allowTuners` | [Optional\](../../models/operations/AllowTuners.md) | :heavy_minus_sign: | N/A | 1 | +| `allowSync` | [Optional\](../../models/operations/AllowSync.md) | :heavy_minus_sign: | N/A | 1 | +| `allowCameraUpload` | [Optional\](../../models/operations/AllowCameraUpload.md) | :heavy_minus_sign: | N/A | 1 | +| `allowChannels` | [Optional\](../../models/operations/AllowChannels.md) | :heavy_minus_sign: | N/A | 1 | +| `allowSubtitleAdmin` | [Optional\](../../models/operations/AllowSubtitleAdmin.md) | :heavy_minus_sign: | N/A | 1 | +| `filterAll` | *JsonNullable\* | :heavy_minus_sign: | Filters applied for all content. | | +| `filterMovies` | *JsonNullable\* | :heavy_minus_sign: | Filters applied for movies. | | +| `filterMusic` | *JsonNullable\* | :heavy_minus_sign: | Filters applied for music. | | +| `filterPhotos` | *JsonNullable\* | :heavy_minus_sign: | Filters applied for photos. | | +| `filterTelevision` | *Optional\* | :heavy_minus_sign: | Filters applied for television. | | +| `restricted` | [Optional\](../../models/operations/Restricted.md) | :heavy_minus_sign: | N/A | 1 | +| `server` | List\<[Server](../../models/operations/Server.md)> | :heavy_check_mark: | List of servers owned by the user. | | \ No newline at end of file diff --git a/docs/models/operations/VoiceSearchHubsRequest.md b/docs/models/operations/VoiceSearchHubsRequest.md index 9265b372..44a66034 100644 --- a/docs/models/operations/VoiceSearchHubsRequest.md +++ b/docs/models/operations/VoiceSearchHubsRequest.md @@ -3,19 +3,19 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | -| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | -| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | -| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | -| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | -| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | -| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | -| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | -| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | -| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | -| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | -| `query` | *String* | :heavy_check_mark: | The query term | | -| `type` | *Optional\* | :heavy_minus_sign: | The metadata type to filter by | | -| `limit` | *Optional\* | :heavy_minus_sign: | The number of items to return per hub. 3 if not specified | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accepts` | [Optional\](../../models/shared/Accepts.md) | :heavy_minus_sign: | Indicates the client accepts the indicated media types | | +| `clientIdentifier` | *Optional\* | :heavy_minus_sign: | An opaque identifier unique to the client | abc123 | +| `product` | *Optional\* | :heavy_minus_sign: | The name of the client product | Plex for Roku | +| `version` | *Optional\* | :heavy_minus_sign: | The version of the client application | 2.4.1 | +| `platform` | *Optional\* | :heavy_minus_sign: | The platform of the client | Roku | +| `platformVersion` | *Optional\* | :heavy_minus_sign: | The version of the platform | 4.3 build 1057 | +| `device` | *Optional\* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 | +| `model` | *Optional\* | :heavy_minus_sign: | A potentially less friendly identifier for the device model | 4200X | +| `deviceVendor` | *Optional\* | :heavy_minus_sign: | The device vendor | Roku | +| `deviceName` | *Optional\* | :heavy_minus_sign: | A friendly name for the client | Living Room TV | +| `marketplace` | *Optional\* | :heavy_minus_sign: | The marketplace on which the client application is distributed | googlePlay | +| `query` | *String* | :heavy_check_mark: | The query term | | +| `type` | [Optional\](../../models/shared/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `limit` | *Optional\* | :heavy_minus_sign: | The number of items to return per hub. 3 if not specified | | \ No newline at end of file diff --git a/docs/models/shared/AutoSelectSubtitle.md b/docs/models/shared/AutoSelectSubtitle.md new file mode 100644 index 00000000..0c8ee9ee --- /dev/null +++ b/docs/models/shared/AutoSelectSubtitle.md @@ -0,0 +1,12 @@ +# AutoSelectSubtitle + +The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled) + + +## Values + +| Name | Value | +| ----------------------- | ----------------------- | +| `ManuallySelected` | 0 | +| `ShownWithForeignAudio` | 1 | +| `AlwaysEnabled` | 2 | \ No newline at end of file diff --git a/docs/models/shared/BoolInt.md b/docs/models/shared/BoolInt.md index 46f2b33d..5d0159ad 100644 --- a/docs/models/shared/BoolInt.md +++ b/docs/models/shared/BoolInt.md @@ -3,7 +3,7 @@ ## Values -| Name | Value | -| ------ | ------ | -| `ZERO` | 0 | -| `ONE` | 1 | \ No newline at end of file +| Name | Value | +| ------- | ------- | +| `False` | 0 | +| `True` | 1 | \ No newline at end of file diff --git a/docs/models/shared/Connections.md b/docs/models/shared/Connections.md new file mode 100644 index 00000000..72ab606d --- /dev/null +++ b/docs/models/shared/Connections.md @@ -0,0 +1,14 @@ +# Connections + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `protocol` | [PlexDeviceProtocol](../../models/shared/PlexDeviceProtocol.md) | :heavy_check_mark: | The protocol used for the connection (http, https, etc) | http | +| `address` | *String* | :heavy_check_mark: | The (ip) address or domain name used for the connection | | +| `port` | *int* | :heavy_check_mark: | The port used for the connection | | +| `uri` | *String* | :heavy_check_mark: | The full URI of the connection | | +| `local` | *boolean* | :heavy_check_mark: | If the connection is local address | | +| `relay` | *boolean* | :heavy_check_mark: | If the connection is relayed through plex.direct | | +| `iPv6` | *boolean* | :heavy_check_mark: | If the connection is using IPv6 | | \ No newline at end of file diff --git a/docs/models/shared/DefaultAudioAccessibility.md b/docs/models/shared/DefaultAudioAccessibility.md new file mode 100644 index 00000000..a43a75ec --- /dev/null +++ b/docs/models/shared/DefaultAudioAccessibility.md @@ -0,0 +1,13 @@ +# DefaultAudioAccessibility + +The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio) + + +## Values + +| Name | Value | +| ------------------------ | ------------------------ | +| `PreferNonAccessibility` | 0 | +| `PreferAccessibility` | 1 | +| `OnlyAccessibility` | 2 | +| `OnlyNonAccessibility` | 3 | \ No newline at end of file diff --git a/docs/models/shared/DefaultSubtitleAccessibility.md b/docs/models/shared/DefaultSubtitleAccessibility.md new file mode 100644 index 00000000..942a8eb3 --- /dev/null +++ b/docs/models/shared/DefaultSubtitleAccessibility.md @@ -0,0 +1,13 @@ +# DefaultSubtitleAccessibility + +The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles) + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `PreferNonSdh` | 0 | +| `PreferSdh` | 1 | +| `OnlySdh` | 2 | +| `OnlyNonSdh` | 3 | \ No newline at end of file diff --git a/docs/models/shared/DefaultSubtitleForced.md b/docs/models/shared/DefaultSubtitleForced.md new file mode 100644 index 00000000..7a189f3d --- /dev/null +++ b/docs/models/shared/DefaultSubtitleForced.md @@ -0,0 +1,13 @@ +# DefaultSubtitleForced + +The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles) + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `PreferNonForced` | 0 | +| `PreferForced` | 1 | +| `OnlyForced` | 2 | +| `OnlyNonForced` | 3 | \ No newline at end of file diff --git a/docs/models/shared/Guids.md b/docs/models/shared/Guids.md new file mode 100644 index 00000000..cd6b0ff7 --- /dev/null +++ b/docs/models/shared/Guids.md @@ -0,0 +1,8 @@ +# Guids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/shared/Items.md b/docs/models/shared/Items.md index d0bb8611..94a75404 100644 --- a/docs/models/shared/Items.md +++ b/docs/models/shared/Items.md @@ -10,74 +10,78 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `metadataItem` | List\<[Items](../../models/shared/Items.md)> | :heavy_minus_sign: | N/A | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[ItemsGuids](../../models/shared/ItemsGuids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `metadataItem` | List\<[Items](../../models/shared/Items.md)> | :heavy_minus_sign: | N/A | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/ItemsGuids.md b/docs/models/shared/ItemsGuids.md new file mode 100644 index 00000000..e784b0ca --- /dev/null +++ b/docs/models/shared/ItemsGuids.md @@ -0,0 +1,8 @@ +# ItemsGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/shared/LibrarySection.md b/docs/models/shared/LibrarySection.md index 313f2b21..b5153f7e 100644 --- a/docs/models/shared/LibrarySection.md +++ b/docs/models/shared/LibrarySection.md @@ -3,25 +3,26 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `title` | *Optional\* | :heavy_minus_sign: | N/A | -| `type` | *Optional\* | :heavy_minus_sign: | N/A | -| `agent` | *Optional\* | :heavy_minus_sign: | N/A | -| `allowSync` | *Optional\* | :heavy_minus_sign: | N/A | -| `art` | *Optional\* | :heavy_minus_sign: | N/A | -| `composite` | *Optional\* | :heavy_minus_sign: | N/A | -| `content` | *Optional\* | :heavy_minus_sign: | N/A | -| `contentChangedAt` | *Optional\* | :heavy_minus_sign: | N/A | -| `createdAt` | *Optional\* | :heavy_minus_sign: | N/A | -| `directory` | *Optional\* | :heavy_minus_sign: | N/A | -| `filters` | *Optional\* | :heavy_minus_sign: | Indicates whether this section has filtering capabilities | -| `hidden` | *Optional\* | :heavy_minus_sign: | N/A | -| `key` | *Optional\* | :heavy_minus_sign: | N/A | -| `language` | *Optional\* | :heavy_minus_sign: | N/A | -| `location` | List\<[LibrarySectionLocation](../../models/shared/LibrarySectionLocation.md)> | :heavy_minus_sign: | N/A | -| `refreshing` | *Optional\* | :heavy_minus_sign: | Indicates whether this library section is currently scanning | -| `scannedAt` | *Optional\* | :heavy_minus_sign: | N/A | -| `scanner` | *Optional\* | :heavy_minus_sign: | N/A | -| `thumb` | *Optional\* | :heavy_minus_sign: | N/A | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `title` | *Optional\* | :heavy_minus_sign: | The title of the library | Movies | +| `type` | [MediaTypeString](../../models/shared/MediaTypeString.md) | :heavy_check_mark: | The type of media content in the Plex library. This can represent videos, music, or photos.
| movie | +| `agent` | *Optional\* | :heavy_minus_sign: | N/A | | +| `allowSync` | *Optional\* | :heavy_minus_sign: | N/A | | +| `art` | *Optional\* | :heavy_minus_sign: | N/A | | +| `composite` | *Optional\* | :heavy_minus_sign: | N/A | | +| `content` | *Optional\* | :heavy_minus_sign: | N/A | | +| `contentChangedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `createdAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `directory` | *Optional\* | :heavy_minus_sign: | N/A | | +| `filters` | *Optional\* | :heavy_minus_sign: | Indicates whether this section has filtering capabilities | | +| `hidden` | *Optional\* | :heavy_minus_sign: | N/A | | +| `key` | *Optional\* | :heavy_minus_sign: | N/A | | +| `language` | *String* | :heavy_check_mark: | N/A | | +| `uuid` | *String* | :heavy_check_mark: | The universally unique identifier for the library. | e69655a2-ef48-4aba-bb19-d3cc3401e7d6 | +| `location` | List\<[LibrarySectionLocation](../../models/shared/LibrarySectionLocation.md)> | :heavy_minus_sign: | N/A | | +| `refreshing` | *Optional\* | :heavy_minus_sign: | Indicates whether this library section is currently scanning | | +| `scannedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `scanner` | *Optional\* | :heavy_minus_sign: | N/A | | +| `thumb` | *Optional\* | :heavy_minus_sign: | N/A | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | \ No newline at end of file diff --git a/docs/models/shared/MailingListStatus.md b/docs/models/shared/MailingListStatus.md new file mode 100644 index 00000000..25033dec --- /dev/null +++ b/docs/models/shared/MailingListStatus.md @@ -0,0 +1,12 @@ +# MailingListStatus + +Your current mailing list status + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `Active` | active | +| `Unsubscribed` | unsubscribed | +| `Removed` | removed | \ No newline at end of file diff --git a/docs/models/shared/Media.md b/docs/models/shared/Media.md index ca1338a6..0ca0ef32 100644 --- a/docs/models/shared/Media.md +++ b/docs/models/shared/Media.md @@ -8,22 +8,22 @@ | Field | Type | Required | Description | Example | | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | -| `aspectRatio` | *Optional\* | :heavy_minus_sign: | N/A | 2.35 | -| `audioChannels` | *Optional\* | :heavy_minus_sign: | N/A | 2 | -| `audioCodec` | *Optional\* | :heavy_minus_sign: | N/A | aac | -| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | -| `bitrate` | *Optional\* | :heavy_minus_sign: | N/A | 5612 | -| `container` | *Optional\* | :heavy_minus_sign: | N/A | mov | -| `duration` | *Optional\* | :heavy_minus_sign: | N/A | 150192 | +| `aspectRatio` | *Optional\* | :heavy_minus_sign: | N/A | 2.35 | +| `audioChannels` | *Optional\* | :heavy_minus_sign: | N/A | 2 | +| `audioCodec` | *Optional\* | :heavy_minus_sign: | N/A | aac | +| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | +| `bitrate` | *Optional\* | :heavy_minus_sign: | N/A | 5612 | +| `container` | *Optional\* | :heavy_minus_sign: | N/A | mov | +| `duration` | *Optional\* | :heavy_minus_sign: | N/A | 150192 | | `has64bitOffsets` | *Optional\* | :heavy_minus_sign: | N/A | false | | `hasVoiceActivity` | *Optional\* | :heavy_minus_sign: | N/A | true | -| `height` | *Optional\* | :heavy_minus_sign: | N/A | 544 | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | 1 | +| `height` | *Optional\* | :heavy_minus_sign: | N/A | 544 | +| `id` | *long* | :heavy_check_mark: | N/A | 1 | | `optimizedForStreaming` | *Optional\* | :heavy_minus_sign: | N/A | false | | `part` | List\<[Part](../../models/shared/Part.md)> | :heavy_minus_sign: | N/A | | -| `videoCodec` | *Optional\* | :heavy_minus_sign: | N/A | h264 | -| `videoFrameRate` | *Optional\* | :heavy_minus_sign: | N/A | 24p | -| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | -| `videoResolution` | *Optional\* | :heavy_minus_sign: | N/A | 720 | -| `width` | *Optional\* | :heavy_minus_sign: | N/A | 1280 | +| `videoCodec` | *Optional\* | :heavy_minus_sign: | N/A | h264 | +| `videoFrameRate` | *Optional\* | :heavy_minus_sign: | N/A | 24p | +| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | +| `videoResolution` | *Optional\* | :heavy_minus_sign: | N/A | 720 | +| `width` | *Optional\* | :heavy_minus_sign: | N/A | 1280 | | `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithDecisionGuids.md b/docs/models/shared/MediaContainerWithDecisionGuids.md new file mode 100644 index 00000000..ada59844 --- /dev/null +++ b/docs/models/shared/MediaContainerWithDecisionGuids.md @@ -0,0 +1,8 @@ +# MediaContainerWithDecisionGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithDecisionMedia.md b/docs/models/shared/MediaContainerWithDecisionMedia.md index c7cee602..43ea845c 100644 --- a/docs/models/shared/MediaContainerWithDecisionMedia.md +++ b/docs/models/shared/MediaContainerWithDecisionMedia.md @@ -8,24 +8,24 @@ | Field | Type | Required | Description | Example | | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `aspectRatio` | *Optional\* | :heavy_minus_sign: | N/A | 2.35 | -| `audioChannels` | *Optional\* | :heavy_minus_sign: | N/A | 2 | -| `audioCodec` | *Optional\* | :heavy_minus_sign: | N/A | aac | -| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | -| `bitrate` | *Optional\* | :heavy_minus_sign: | N/A | 5612 | -| `container` | *Optional\* | :heavy_minus_sign: | N/A | mov | -| `duration` | *Optional\* | :heavy_minus_sign: | N/A | 150192 | +| `aspectRatio` | *Optional\* | :heavy_minus_sign: | N/A | 2.35 | +| `audioChannels` | *Optional\* | :heavy_minus_sign: | N/A | 2 | +| `audioCodec` | *Optional\* | :heavy_minus_sign: | N/A | aac | +| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | +| `bitrate` | *Optional\* | :heavy_minus_sign: | N/A | 5612 | +| `container` | *Optional\* | :heavy_minus_sign: | N/A | mov | +| `duration` | *Optional\* | :heavy_minus_sign: | N/A | 150192 | | `has64bitOffsets` | *Optional\* | :heavy_minus_sign: | N/A | false | | `hasVoiceActivity` | *Optional\* | :heavy_minus_sign: | N/A | true | -| `height` | *Optional\* | :heavy_minus_sign: | N/A | 544 | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | 1 | +| `height` | *Optional\* | :heavy_minus_sign: | N/A | 544 | +| `id` | *long* | :heavy_check_mark: | N/A | 1 | | `optimizedForStreaming` | *Optional\* | :heavy_minus_sign: | N/A | false | | `part` | List\<[MediaContainerWithDecisionPart](../../models/shared/MediaContainerWithDecisionPart.md)> | :heavy_minus_sign: | N/A | | -| `videoCodec` | *Optional\* | :heavy_minus_sign: | N/A | h264 | -| `videoFrameRate` | *Optional\* | :heavy_minus_sign: | N/A | 24p | -| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | -| `videoResolution` | *Optional\* | :heavy_minus_sign: | N/A | 720 | -| `width` | *Optional\* | :heavy_minus_sign: | N/A | 1280 | +| `videoCodec` | *Optional\* | :heavy_minus_sign: | N/A | h264 | +| `videoFrameRate` | *Optional\* | :heavy_minus_sign: | N/A | 24p | +| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | +| `videoResolution` | *Optional\* | :heavy_minus_sign: | N/A | 720 | +| `width` | *Optional\* | :heavy_minus_sign: | N/A | 1280 | | `abr` | *Optional\* | :heavy_minus_sign: | N/A | | | `resourceSession` | *Optional\* | :heavy_minus_sign: | N/A | | | `selected` | *Optional\* | :heavy_minus_sign: | N/A | | diff --git a/docs/models/shared/MediaContainerWithDecisionMetadata.md b/docs/models/shared/MediaContainerWithDecisionMetadata.md index 483e136f..3f95d4b3 100644 --- a/docs/models/shared/MediaContainerWithDecisionMetadata.md +++ b/docs/models/shared/MediaContainerWithDecisionMetadata.md @@ -10,73 +10,77 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `media` | List\<[MediaContainerWithDecisionMedia](../../models/shared/MediaContainerWithDecisionMedia.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[MediaContainerWithDecisionGuids](../../models/shared/MediaContainerWithDecisionGuids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `media` | List\<[MediaContainerWithDecisionMedia](../../models/shared/MediaContainerWithDecisionMedia.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithDecisionPart.md b/docs/models/shared/MediaContainerWithDecisionPart.md index d3e6a901..a7ef56dc 100644 --- a/docs/models/shared/MediaContainerWithDecisionPart.md +++ b/docs/models/shared/MediaContainerWithDecisionPart.md @@ -8,17 +8,20 @@ | Field | Type | Required | Description | Example | | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | -| `container` | *Optional\* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | -| `duration` | *Optional\* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | -| `file` | *Optional\* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | +| `accessible` | *Optional\* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional\* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | +| `duration` | *Optional\* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | +| `exists` | *Optional\* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `file` | *Optional\* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | | `has64bitOffsets` | *Optional\* | :heavy_minus_sign: | N/A | false | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | 1 | -| `key` | *Optional\* | :heavy_minus_sign: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | +| `id` | *long* | :heavy_check_mark: | N/A | 1 | +| `indexes` | *Optional\* | :heavy_minus_sign: | N/A | sd | +| `key` | *String* | :heavy_check_mark: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | | `optimizedForStreaming` | *Optional\* | :heavy_minus_sign: | N/A | false | | `size` | *Optional\* | :heavy_minus_sign: | The size of the media, in bytes | 105355654 | | `stream` | List\<[MediaContainerWithDecisionStream](../../models/shared/MediaContainerWithDecisionStream.md)> | :heavy_minus_sign: | N/A | | -| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | +| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | | `decision` | [Optional\](../../models/shared/Decision.md) | :heavy_minus_sign: | N/A | | | `selected` | *Optional\* | :heavy_minus_sign: | N/A | | | `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithDecisionStream.md b/docs/models/shared/MediaContainerWithDecisionStream.md index 3cf44d5b..6ad37da4 100644 --- a/docs/models/shared/MediaContainerWithDecisionStream.md +++ b/docs/models/shared/MediaContainerWithDecisionStream.md @@ -6,37 +6,60 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `default_` | *Optional\* | :heavy_minus_sign: | N/A | true | -| `audioChannelLayout` | *Optional\* | :heavy_minus_sign: | N/A | stereo | -| `bitDepth` | *Optional\* | :heavy_minus_sign: | N/A | 8 | -| `bitrate` | *Optional\* | :heavy_minus_sign: | N/A | 5466 | -| `canAutoSync` | *Optional\* | :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` | *Optional\* | :heavy_minus_sign: | N/A | topleft | -| `chromaSubsampling` | *Optional\* | :heavy_minus_sign: | N/A | 4:2:0 | -| `codec` | *Optional\* | :heavy_minus_sign: | The codec of the stream, such as `h264` or `aac` | h264 | -| `colorPrimaries` | *Optional\* | :heavy_minus_sign: | N/A | bt709 | -| `colorRange` | *Optional\* | :heavy_minus_sign: | N/A | tv | -| `colorSpace` | *Optional\* | :heavy_minus_sign: | N/A | bt709 | -| `colorTrc` | *Optional\* | :heavy_minus_sign: | N/A | bt709 | -| `displayTitle` | *Optional\* | :heavy_minus_sign: | A friendly name for the stream, often comprised of the language and codec information | English (H.264 Main) | -| `frameRate` | *Optional\* | :heavy_minus_sign: | N/A | 23.976 | -| `hasScalingMatrix` | *Optional\* | :heavy_minus_sign: | N/A | false | -| `height` | *Optional\* | :heavy_minus_sign: | N/A | 544 | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | 1 | -| `index` | *Optional\* | :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` | *Optional\* | :heavy_minus_sign: | If the stream is independently streamable, the key from which it can be streamed | /library/streams/1 | -| `language` | *Optional\* | :heavy_minus_sign: | N/A | English | -| `languageCode` | *Optional\* | :heavy_minus_sign: | The three character language code for the stream contents | eng | -| `level` | *Optional\* | :heavy_minus_sign: | N/A | 31 | -| `profile` | *Optional\* | :heavy_minus_sign: | N/A | main | -| `refFrames` | *Optional\* | :heavy_minus_sign: | N/A | 2 | -| `samplingRate` | *Optional\* | :heavy_minus_sign: | N/A | 48000 | -| `selected` | *Optional\* | :heavy_minus_sign: | N/A | | -| `streamIdentifier` | *Optional\* | :heavy_minus_sign: | N/A | 1 | -| `streamType` | *Optional\* | :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` | *Optional\* | :heavy_minus_sign: | N/A | 1280 | -| `decision` | [Optional\](../../models/shared/MediaContainerWithDecisionDecision.md) | :heavy_minus_sign: | N/A | | -| `location` | [Optional\](../../models/shared/MediaContainerWithDecisionLocation.md) | :heavy_minus_sign: | N/A | | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `default_` | *Optional\* | :heavy_minus_sign: | Indicates if this stream is default. | true | +| `audioChannelLayout` | *Optional\* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | +| `channels` | *Optional\* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `bitDepth` | *Optional\* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `doviblCompatID` | *Optional\* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | +| `doviblPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true | +| `dovielPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false | +| `doviLevel` | *Optional\* | :heavy_minus_sign: | Dolby Vision level. | 6 | +| `doviPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true | +| `doviProfile` | *Optional\* | :heavy_minus_sign: | Dolby Vision profile. | 8 | +| `dovirpuPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true | +| `doviVersion` | *Optional\* | :heavy_minus_sign: | Dolby Vision version. | 1.0 | +| `bitrate` | *Optional\* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | +| `canAutoSync` | *Optional\* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | +| `chromaLocation` | *Optional\* | :heavy_minus_sign: | Chroma sample location. | topleft | +| `chromaSubsampling` | *Optional\* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 | +| `codedHeight` | *Optional\* | :heavy_minus_sign: | Coded video height. | 1608 | +| `codedWidth` | *Optional\* | :heavy_minus_sign: | Coded video width. | 3840 | +| `closedCaptions` | *Optional\* | :heavy_minus_sign: | N/A | true | +| `codec` | *String* | :heavy_check_mark: | Codec used by the stream. | hevc | +| `colorPrimaries` | *Optional\* | :heavy_minus_sign: | Color primaries used. | bt2020 | +| `colorRange` | *Optional\* | :heavy_minus_sign: | Color range (e.g., tv). | tv | +| `colorSpace` | *Optional\* | :heavy_minus_sign: | Color space. | bt2020nc | +| `colorTrc` | *Optional\* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 | +| `displayTitle` | *String* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `extendedDisplayTitle` | *Optional\* | :heavy_minus_sign: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `frameRate` | *Optional\* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | +| `hasScalingMatrix` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `height` | *Optional\* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `index` | *Optional\* | :heavy_minus_sign: | Index of the stream. | 0 | +| `key` | *String* | :heavy_check_mark: | Key to access this stream part. | /library/streams/216389 | +| `language` | *Optional\* | :heavy_minus_sign: | Language of the stream. | English | +| `languageCode` | *Optional\* | :heavy_minus_sign: | ISO language code. | eng | +| `languageTag` | *Optional\* | :heavy_minus_sign: | Language tag (e.g., en). | en | +| `format` | *Optional\* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt | +| `headerCompression` | *Optional\* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `level` | *Optional\* | :heavy_minus_sign: | Video level. | 150 | +| `original` | *Optional\* | :heavy_minus_sign: | Indicates if this is the original stream. | true | +| `profile` | *Optional\* | :heavy_minus_sign: | Video profile. | main 10 | +| `refFrames` | *Optional\* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `samplingRate` | *Optional\* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `scanType` | *Optional\* | :heavy_minus_sign: | N/A | progressive | +| `embeddedInVideo` | *Optional\* | :heavy_minus_sign: | N/A | progressive | +| `selected` | *Optional\* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | +| `forced` | *Optional\* | :heavy_minus_sign: | N/A | true | +| `hearingImpaired` | *Optional\* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true | +| `dub` | *Optional\* | :heavy_minus_sign: | Indicates if the stream is a dub. | true | +| `title` | *Optional\* | :heavy_minus_sign: | Optional title for the stream (e.g., language variant). | SDH | +| `streamIdentifier` | *Optional\* | :heavy_minus_sign: | N/A | 1 | +| `streamType` | *long* | :heavy_check_mark: | Stream type:
- VIDEO = 1
- AUDIO = 2
- SUBTITLE = 3
| | +| `width` | *Optional\* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `decision` | [Optional\](../../models/shared/MediaContainerWithDecisionDecision.md) | :heavy_minus_sign: | N/A | | +| `location` | [Optional\](../../models/shared/MediaContainerWithDecisionLocation.md) | :heavy_minus_sign: | N/A | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithNestedMetadataGuids.md b/docs/models/shared/MediaContainerWithNestedMetadataGuids.md new file mode 100644 index 00000000..ded5c229 --- /dev/null +++ b/docs/models/shared/MediaContainerWithNestedMetadataGuids.md @@ -0,0 +1,8 @@ +# MediaContainerWithNestedMetadataGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithPlaylistMetadataGuids.md b/docs/models/shared/MediaContainerWithPlaylistMetadataGuids.md new file mode 100644 index 00000000..0ff0e229 --- /dev/null +++ b/docs/models/shared/MediaContainerWithPlaylistMetadataGuids.md @@ -0,0 +1,8 @@ +# MediaContainerWithPlaylistMetadataGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *String* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://
| {
"imdbExample": {
"summary": "IMDB example",
"value": "imdb://tt13015952"
},
"tmdbExample": {
"summary": "TMDB example",
"value": "tmdb://2434012"
},
"tvdbExample": {
"summary": "TVDB example",
"value": "tvdb://7945991"
}
} | \ No newline at end of file diff --git a/docs/models/shared/MediaContainerWithPlaylistMetadataMetadata.md b/docs/models/shared/MediaContainerWithPlaylistMetadataMetadata.md index 09dc7bd1..969d7cde 100644 --- a/docs/models/shared/MediaContainerWithPlaylistMetadataMetadata.md +++ b/docs/models/shared/MediaContainerWithPlaylistMetadataMetadata.md @@ -10,77 +10,81 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `readOnly` | *Optional\* | :heavy_minus_sign: | If we return this as true then this playlist cannot be altered or deleted directly by the client. | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `playlistType` | [Optional\](../../models/shared/PlaylistType.md) | :heavy_minus_sign: | The type of the playlist. | -| `smart` | *Optional\* | :heavy_minus_sign: | Whether or not the playlist is smart. | -| `specialPlaylistType` | *Optional\* | :heavy_minus_sign: | If this is a special playlist, this returns its type (e.g. favorites). | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `readOnly` | *Optional\* | :heavy_minus_sign: | If we return this as true then this playlist cannot be altered or deleted directly by the client. | | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `playlistType` | [Optional\](../../models/shared/PlaylistType.md) | :heavy_minus_sign: | The type of the playlist. | | +| `smart` | *Optional\* | :heavy_minus_sign: | Whether or not the playlist is smart. | | +| `specialPlaylistType` | *Optional\* | :heavy_minus_sign: | If this is a special playlist, this returns its type (e.g. favorites). | | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[MediaContainerWithPlaylistMetadataGuids](../../models/shared/MediaContainerWithPlaylistMetadataGuids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/MediaQuery.md b/docs/models/shared/MediaQuery.md index 72cbb9c2..3b3b08bb 100644 --- a/docs/models/shared/MediaQuery.md +++ b/docs/models/shared/MediaQuery.md @@ -1,7 +1,17 @@ # MediaQuery +A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. + +Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` + + ## Fields -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [Optional\](../../models/shared/MediaType.md) | :heavy_minus_sign: | The type of media to retrieve or filter by.

1 = movie
2 = show
3 = season
4 = episode
5 = artist
6 = album
7 = track
8 = photo_album
9 = photo

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
| 2 | +| `sourceType` | *Optional\* | :heavy_minus_sign: | Change the default level to which fields refer (used with type for hierarchical queries) | | +| `sort` | *Optional\* | :heavy_minus_sign: | Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") | | +| `group` | *Optional\* | :heavy_minus_sign: | Field to group results by (similar to SQL GROUP BY) | | +| `limit` | *Optional\* | :heavy_minus_sign: | Maximum number of results to return | | \ No newline at end of file diff --git a/docs/models/shared/MediaReviewsVisibility.md b/docs/models/shared/MediaReviewsVisibility.md new file mode 100644 index 00000000..3914d92d --- /dev/null +++ b/docs/models/shared/MediaReviewsVisibility.md @@ -0,0 +1,13 @@ +# MediaReviewsVisibility + +Whether or not the account has media reviews visibility enabled + + +## Values + +| Name | Value | +| --------------------- | --------------------- | +| `NoOne` | 0 | +| `CriticsOnly` | 1 | +| `PlexUsersOnly` | 2 | +| `PlexUsersAndCritics` | 3 | \ No newline at end of file diff --git a/docs/models/shared/MediaType.md b/docs/models/shared/MediaType.md new file mode 100644 index 00000000..c2338c96 --- /dev/null +++ b/docs/models/shared/MediaType.md @@ -0,0 +1,31 @@ +# MediaType + +The type of media to retrieve or filter by. + +1 = movie +2 = show +3 = season +4 = episode +5 = artist +6 = album +7 = track +8 = photo_album +9 = photo + +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 | +| `Artist` | 5 | +| `Album` | 6 | +| `Track` | 7 | +| `PhotoAlbum` | 8 | +| `Photo` | 9 | \ No newline at end of file diff --git a/docs/models/shared/MediaTypeString.md b/docs/models/shared/MediaTypeString.md new file mode 100644 index 00000000..d8879594 --- /dev/null +++ b/docs/models/shared/MediaTypeString.md @@ -0,0 +1,20 @@ +# MediaTypeString + +The type of media content in the Plex library. This can represent videos, music, or photos. + + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `Movie` | movie | +| `TvShow` | show | +| `Season` | season | +| `Episode` | episode | +| `Artist` | artist | +| `Album` | album | +| `Track` | track | +| `PhotoAlbum` | photoalbum | +| `Photo` | photo | +| `Collection` | collection | \ No newline at end of file diff --git a/docs/models/shared/Metadata.md b/docs/models/shared/Metadata.md index 685c008e..9ac3a266 100644 --- a/docs/models/shared/Metadata.md +++ b/docs/models/shared/Metadata.md @@ -10,73 +10,77 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[Guids](../../models/shared/Guids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/MetadataItem.md b/docs/models/shared/MetadataItem.md index 97e674d3..a23804c6 100644 --- a/docs/models/shared/MetadataItem.md +++ b/docs/models/shared/MetadataItem.md @@ -10,74 +10,78 @@ Metadata items can often live in a hierarchy with relationships between them. F ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `title` | *Optional\* | :heavy_minus_sign: | The title of the item (e.g. “300” or “The Simpsons”) | -| `type` | *Optional\* | :heavy_minus_sign: | The type of the video item, such as `movie`, `episode`, or `clip`. | -| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | -| `addedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was added to the library. | -| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | -| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | -| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | -| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | -| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | -| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | -| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | -| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | -| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | -| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | -| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | -| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | -| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | -| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | -| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | -| `guid` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | -| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | -| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | -| `key` | *Optional\* | :heavy_minus_sign: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | -| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. | -| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | -| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | -| `originallyAvailableAt` | *Optional\* | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | -| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | -| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | -| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | -| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | -| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | -| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | -| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | -| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | -| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | -| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | -| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | -| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | -| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | -| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | -| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | -| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | -| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | -| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | -| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | -| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | -| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | -| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | -| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | -| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | -| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | -| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | -| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | -| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | -| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | -| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | -| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | -| `metadataItem` | List\<[Items](../../models/shared/Items.md)> | :heavy_minus_sign: | N/A | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | *String* | :heavy_check_mark: | The title of the item (e.g. “300” or “The Simpsons”) | | +| `type` | *String* | :heavy_check_mark: | The type of the video item, such as `movie`, `episode`, or `clip`. | | +| `absoluteIndex` | *Optional\* | :heavy_minus_sign: | When present, contains the disc number for a track on multi-disc albums. | | +| `addedAt` | *long* | :heavy_check_mark: | In units of seconds since the epoch, returns the time at which the item was added to the library. | | +| `art` | *Optional\* | :heavy_minus_sign: | When present, the URL for the background artwork for the item. | /library/metadata/58683/art/1703239236 | +| `audienceRating` | *Optional\* | :heavy_minus_sign: | Some rating systems separate reviewer ratings from audience ratings | | +| `audienceRatingImage` | *Optional\* | :heavy_minus_sign: | A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). | | +| `autotag` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `banner` | *Optional\* | :heavy_minus_sign: | When present, the URL for a banner graphic for the item. | | +| `chapterSource` | *Optional\* | :heavy_minus_sign: | When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). | media | +| `childCount` | *Optional\* | :heavy_minus_sign: | The number of child items associated with this media item. | 1 | +| `composite` | *Optional\* | :heavy_minus_sign: | When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). | | +| `contentRating` | *Optional\* | :heavy_minus_sign: | If known, the content rating (e.g. MPAA) for an item. | | +| `country` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `director` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `duration` | *Optional\* | :heavy_minus_sign: | When present, the duration for the item, in units of milliseconds. | | +| `filter` | List\<[Filter](../../models/shared/Filter.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `genre` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `grandparentArt` | *Optional\* | :heavy_minus_sign: | The `art` of the grandparent | | +| `grandparentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the grandparent | | +| `grandparentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the grandparent | | +| `grandparentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the grandparent | | +| `grandparentTheme` | *Optional\* | :heavy_minus_sign: | The `theme` of the grandparent | | +| `grandparentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the grandparent | | +| `grandparentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the grandparent | | +| `guid` | *Optional\* | :heavy_minus_sign: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 | +| `guids` | List\<[MediaContainerWithNestedMetadataGuids](../../models/shared/MediaContainerWithNestedMetadataGuids.md)> | :heavy_minus_sign: | N/A | | +| `hero` | *Optional\* | :heavy_minus_sign: | When present, the URL for a hero image for the item. | | +| `image` | List\<[Image](../../models/shared/Image.md)> | :heavy_minus_sign: | N/A | | +| `index` | *Optional\* | :heavy_minus_sign: | When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. | | +| `key` | *String* | :heavy_check_mark: | The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. | | +| `lastViewedAt` | *Optional\* | :heavy_minus_sign: | N/A | 1556281940 | +| `leafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of total episodes. | | +| `media` | List\<[Media](../../models/shared/Media.md)> | :heavy_minus_sign: | N/A | | +| `originallyAvailableAt` | [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) | :heavy_minus_sign: | When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. | 2022-12-14 | +| `originalTitle` | *Optional\* | :heavy_minus_sign: | When present, used to indicate an item's original title, e.g. a movie's foreign title. | | +| `parentGuid` | *Optional\* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 | +| `parentHero` | *Optional\* | :heavy_minus_sign: | The `hero` of the parent | | +| `parentIndex` | *Optional\* | :heavy_minus_sign: | The `index` of the parent | | +| `parentKey` | *Optional\* | :heavy_minus_sign: | The `key` of the parent | | +| `parentRatingKey` | *Optional\* | :heavy_minus_sign: | The `ratingKey` of the parent | | +| `parentThumb` | *Optional\* | :heavy_minus_sign: | The `thumb` of the parent | | +| `parentTitle` | *Optional\* | :heavy_minus_sign: | The `title` of the parent | | +| `primaryExtraKey` | *Optional\* | :heavy_minus_sign: | Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. | | +| `prompt` | *Optional\* | :heavy_minus_sign: | Prompt to give the user for this directory (such as `Search Movies`) | | +| `rating` | *Optional\* | :heavy_minus_sign: | When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. | | +| `ratingArray` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `ratingCount` | *Optional\* | :heavy_minus_sign: | Number of ratings under this metadata | | +| `ratingImage` | *Optional\* | :heavy_minus_sign: | When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. | | +| `role` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `search` | *Optional\* | :heavy_minus_sign: | Indicates this is a search directory | | +| `secondary` | *Optional\* | :heavy_minus_sign: | Used by old clients to provide nested menus allowing for primative (but structured) navigation. | | +| `skipChildren` | *Optional\* | :heavy_minus_sign: | When found on a show item, indicates that the children (seasons) should be skipped in favor of the grandchildren (episodes). Useful for mini-series, etc. | | +| `skipParent` | *Optional\* | :heavy_minus_sign: | When present on an episode or track item, indicates parent should be skipped in favor of grandparent (show). | | +| `sort` | List\<[Sort](../../models/shared/Sort.md)> | :heavy_minus_sign: | Typically only seen in metadata at a library's top level | | +| `studio` | *Optional\* | :heavy_minus_sign: | When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). | | +| `subtype` | *Optional\* | :heavy_minus_sign: | The subtype of the video item, such as `photo` when the video item is in a photo library | | +| `summary` | *Optional\* | :heavy_minus_sign: | When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). | | +| `tagline` | *Optional\* | :heavy_minus_sign: | When present, a pithy one-liner about the item (usually only seen for movies). | | +| `theme` | *Optional\* | :heavy_minus_sign: | When present, the URL for theme music for the item (usually only for TV shows). | /library/metadata/1/theme/1705636920 | +| `thumb` | *Optional\* | :heavy_minus_sign: | When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. | /library/metadata/58683/thumb/1703239236 | +| `titleSort` | *Optional\* | :heavy_minus_sign: | Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). | | +| `updatedAt` | *Optional\* | :heavy_minus_sign: | In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). | | +| `userRating` | *Optional\* | :heavy_minus_sign: | When the user has rated an item, this contains the user rating | | +| `viewCount` | *Optional\* | :heavy_minus_sign: | When a users has completed watched or listened to an item, this attribute contains the number of consumptions. | | +| `viewedLeafCount` | *Optional\* | :heavy_minus_sign: | For shows and seasons, contains the number of viewed episodes. | | +| `viewOffset` | *Optional\* | :heavy_minus_sign: | When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. | | +| `writer` | List\<[Tag](../../models/shared/Tag.md)> | :heavy_minus_sign: | N/A | | +| `year` | *Optional\* | :heavy_minus_sign: | When present, the year associated with the item's release (e.g. release year for a movie). | | +| `metadataItem` | List\<[Items](../../models/shared/Items.md)> | :heavy_minus_sign: | N/A | | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/Part.md b/docs/models/shared/Part.md index bdce894d..d6f55b20 100644 --- a/docs/models/shared/Part.md +++ b/docs/models/shared/Part.md @@ -8,15 +8,18 @@ | Field | Type | Required | Description | Example | | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | -| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | -| `container` | *Optional\* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | -| `duration` | *Optional\* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | -| `file` | *Optional\* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | +| `accessible` | *Optional\* | :heavy_minus_sign: | Indicates if the part is accessible. | true | +| `audioProfile` | *Optional\* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional\* | :heavy_minus_sign: | The container of the media file, such as `mp4` or `mkv` | mov | +| `duration` | *Optional\* | :heavy_minus_sign: | The duration of the media item, in milliseconds | 150192 | +| `exists` | *Optional\* | :heavy_minus_sign: | Indicates if the part exists. | true | +| `file` | *Optional\* | :heavy_minus_sign: | The local file path at which the part is stored on the server | /home/schuyler/Videos/Trailers/Cloud Atlas (2012).mov | | `has64bitOffsets` | *Optional\* | :heavy_minus_sign: | N/A | false | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | 1 | -| `key` | *Optional\* | :heavy_minus_sign: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | +| `id` | *long* | :heavy_check_mark: | N/A | 1 | +| `indexes` | *Optional\* | :heavy_minus_sign: | N/A | sd | +| `key` | *String* | :heavy_check_mark: | The key from which the media can be streamed | /library/parts/1/1531779263/file.mov | | `optimizedForStreaming` | *Optional\* | :heavy_minus_sign: | N/A | false | | `size` | *Optional\* | :heavy_minus_sign: | The size of the media, in bytes | 105355654 | | `stream` | List\<[Stream](../../models/shared/Stream.md)> | :heavy_minus_sign: | N/A | | -| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | +| `videoProfile` | *Optional\* | :heavy_minus_sign: | N/A | main | | `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/PlexDevice.md b/docs/models/shared/PlexDevice.md new file mode 100644 index 00000000..145d3cda --- /dev/null +++ b/docs/models/shared/PlexDevice.md @@ -0,0 +1,31 @@ +# PlexDevice + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `name` | *String* | :heavy_check_mark: | N/A | | +| `product` | *String* | :heavy_check_mark: | N/A | | +| `productVersion` | *String* | :heavy_check_mark: | N/A | | +| `platform` | *Optional\* | :heavy_check_mark: | N/A | | +| `platformVersion` | *Optional\* | :heavy_check_mark: | N/A | | +| `device` | *Optional\* | :heavy_check_mark: | N/A | | +| `clientIdentifier` | *String* | :heavy_check_mark: | N/A | | +| `createdAt` | [OffsetDateTime](https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html) | :heavy_check_mark: | N/A | 2019-06-24T11:38:02Z | +| `lastSeenAt` | [OffsetDateTime](https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html) | :heavy_check_mark: | N/A | 2019-06-24T11:38:02Z | +| `provides` | *String* | :heavy_check_mark: | N/A | | +| `ownerId` | *Optional\* | :heavy_check_mark: | ownerId is null when the device is owned by the token used to send the request | | +| `sourceTitle` | *Optional\* | :heavy_check_mark: | N/A | | +| `publicAddress` | *String* | :heavy_check_mark: | N/A | | +| `accessToken` | *String* | :heavy_check_mark: | N/A | | +| `owned` | *boolean* | :heavy_check_mark: | N/A | | +| `home` | *boolean* | :heavy_check_mark: | N/A | | +| `synced` | *boolean* | :heavy_check_mark: | N/A | | +| `relay` | *boolean* | :heavy_check_mark: | N/A | | +| `presence` | *boolean* | :heavy_check_mark: | N/A | | +| `httpsRequired` | *boolean* | :heavy_check_mark: | N/A | | +| `publicAddressMatches` | *boolean* | :heavy_check_mark: | N/A | | +| `dnsRebindingProtection` | *boolean* | :heavy_check_mark: | N/A | | +| `natLoopbackSupported` | *boolean* | :heavy_check_mark: | N/A | | +| `connections` | List\<[Connections](../../models/shared/Connections.md)> | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/PlexDeviceProtocol.md b/docs/models/shared/PlexDeviceProtocol.md new file mode 100644 index 00000000..2d603cbd --- /dev/null +++ b/docs/models/shared/PlexDeviceProtocol.md @@ -0,0 +1,11 @@ +# PlexDeviceProtocol + +The protocol used for the connection (http, https, etc) + + +## Values + +| Name | Value | +| ------- | ------- | +| `HTTP` | http | +| `HTTPS` | https | \ No newline at end of file diff --git a/docs/models/shared/Services.md b/docs/models/shared/Services.md new file mode 100644 index 00000000..b273e00d --- /dev/null +++ b/docs/models/shared/Services.md @@ -0,0 +1,12 @@ +# Services + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `identifier` | *String* | :heavy_check_mark: | N/A | metadata-dev | +| `endpoint` | *String* | :heavy_check_mark: | N/A | https://epg.provider.plex.tv | +| `token` | *Optional\* | :heavy_check_mark: | N/A | DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv | +| `secret` | *Optional\* | :heavy_check_mark: | N/A | | +| `status` | [UserPlexAccountStatus](../../models/shared/UserPlexAccountStatus.md) | :heavy_check_mark: | N/A | online | \ No newline at end of file diff --git a/docs/models/shared/Stream.md b/docs/models/shared/Stream.md index db715ec4..0b411154 100644 --- a/docs/models/shared/Stream.md +++ b/docs/models/shared/Stream.md @@ -6,35 +6,58 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -| `default_` | *Optional\* | :heavy_minus_sign: | N/A | true | -| `audioChannelLayout` | *Optional\* | :heavy_minus_sign: | N/A | stereo | -| `bitDepth` | *Optional\* | :heavy_minus_sign: | N/A | 8 | -| `bitrate` | *Optional\* | :heavy_minus_sign: | N/A | 5466 | -| `canAutoSync` | *Optional\* | :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` | *Optional\* | :heavy_minus_sign: | N/A | topleft | -| `chromaSubsampling` | *Optional\* | :heavy_minus_sign: | N/A | 4:2:0 | -| `codec` | *Optional\* | :heavy_minus_sign: | The codec of the stream, such as `h264` or `aac` | h264 | -| `colorPrimaries` | *Optional\* | :heavy_minus_sign: | N/A | bt709 | -| `colorRange` | *Optional\* | :heavy_minus_sign: | N/A | tv | -| `colorSpace` | *Optional\* | :heavy_minus_sign: | N/A | bt709 | -| `colorTrc` | *Optional\* | :heavy_minus_sign: | N/A | bt709 | -| `displayTitle` | *Optional\* | :heavy_minus_sign: | A friendly name for the stream, often comprised of the language and codec information | English (H.264 Main) | -| `frameRate` | *Optional\* | :heavy_minus_sign: | N/A | 23.976 | -| `hasScalingMatrix` | *Optional\* | :heavy_minus_sign: | N/A | false | -| `height` | *Optional\* | :heavy_minus_sign: | N/A | 544 | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | 1 | -| `index` | *Optional\* | :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` | *Optional\* | :heavy_minus_sign: | If the stream is independently streamable, the key from which it can be streamed | /library/streams/1 | -| `language` | *Optional\* | :heavy_minus_sign: | N/A | English | -| `languageCode` | *Optional\* | :heavy_minus_sign: | The three character language code for the stream contents | eng | -| `level` | *Optional\* | :heavy_minus_sign: | N/A | 31 | -| `profile` | *Optional\* | :heavy_minus_sign: | N/A | main | -| `refFrames` | *Optional\* | :heavy_minus_sign: | N/A | 2 | -| `samplingRate` | *Optional\* | :heavy_minus_sign: | N/A | 48000 | -| `selected` | *Optional\* | :heavy_minus_sign: | N/A | | -| `streamIdentifier` | *Optional\* | :heavy_minus_sign: | N/A | 1 | -| `streamType` | *Optional\* | :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` | *Optional\* | :heavy_minus_sign: | N/A | 1280 | -| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `default_` | *Optional\* | :heavy_minus_sign: | Indicates if this stream is default. | true | +| `audioChannelLayout` | *Optional\* | :heavy_minus_sign: | Audio channel layout. | 5.1(side) | +| `channels` | *Optional\* | :heavy_minus_sign: | Number of audio channels (for audio streams). | 6 | +| `bitDepth` | *Optional\* | :heavy_minus_sign: | Bit depth of the video stream. | 10 | +| `doviblCompatID` | *Optional\* | :heavy_minus_sign: | Dolby Vision BL compatibility ID. | 1 | +| `doviblPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision BL is present. | true | +| `dovielPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision EL is present. | false | +| `doviLevel` | *Optional\* | :heavy_minus_sign: | Dolby Vision level. | 6 | +| `doviPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision is present. | true | +| `doviProfile` | *Optional\* | :heavy_minus_sign: | Dolby Vision profile. | 8 | +| `dovirpuPresent` | *Optional\* | :heavy_minus_sign: | Indicates if Dolby Vision RPU is present. | true | +| `doviVersion` | *Optional\* | :heavy_minus_sign: | Dolby Vision version. | 1.0 | +| `bitrate` | *Optional\* | :heavy_minus_sign: | Bitrate of the stream. | 24743 | +| `canAutoSync` | *Optional\* | :heavy_minus_sign: | Indicates if the stream can auto-sync. | false | +| `chromaLocation` | *Optional\* | :heavy_minus_sign: | Chroma sample location. | topleft | +| `chromaSubsampling` | *Optional\* | :heavy_minus_sign: | Chroma subsampling format. | 4:2:0 | +| `codedHeight` | *Optional\* | :heavy_minus_sign: | Coded video height. | 1608 | +| `codedWidth` | *Optional\* | :heavy_minus_sign: | Coded video width. | 3840 | +| `closedCaptions` | *Optional\* | :heavy_minus_sign: | N/A | true | +| `codec` | *String* | :heavy_check_mark: | Codec used by the stream. | hevc | +| `colorPrimaries` | *Optional\* | :heavy_minus_sign: | Color primaries used. | bt2020 | +| `colorRange` | *Optional\* | :heavy_minus_sign: | Color range (e.g., tv). | tv | +| `colorSpace` | *Optional\* | :heavy_minus_sign: | Color space. | bt2020nc | +| `colorTrc` | *Optional\* | :heavy_minus_sign: | Color transfer characteristics. | smpte2084 | +| `displayTitle` | *String* | :heavy_check_mark: | Display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `extendedDisplayTitle` | *Optional\* | :heavy_minus_sign: | Extended display title for the stream. | 4K DoVi/HDR10 (HEVC Main 10) | +| `frameRate` | *Optional\* | :heavy_minus_sign: | Frame rate of the stream. | 23.976 | +| `hasScalingMatrix` | *Optional\* | :heavy_minus_sign: | N/A | false | +| `height` | *Optional\* | :heavy_minus_sign: | Height of the video stream. | 1602 | +| `id` | *int* | :heavy_check_mark: | Unique stream identifier. | 1002625 | +| `index` | *Optional\* | :heavy_minus_sign: | Index of the stream. | 0 | +| `key` | *String* | :heavy_check_mark: | Key to access this stream part. | /library/streams/216389 | +| `language` | *Optional\* | :heavy_minus_sign: | Language of the stream. | English | +| `languageCode` | *Optional\* | :heavy_minus_sign: | ISO language code. | eng | +| `languageTag` | *Optional\* | :heavy_minus_sign: | Language tag (e.g., en). | en | +| `format` | *Optional\* | :heavy_minus_sign: | Format of the stream (e.g., srt). | srt | +| `headerCompression` | *Optional\* | :heavy_minus_sign: | Indicates whether header compression is enabled. | true | +| `level` | *Optional\* | :heavy_minus_sign: | Video level. | 150 | +| `original` | *Optional\* | :heavy_minus_sign: | Indicates if this is the original stream. | true | +| `profile` | *Optional\* | :heavy_minus_sign: | Video profile. | main 10 | +| `refFrames` | *Optional\* | :heavy_minus_sign: | Number of reference frames. | 1 | +| `samplingRate` | *Optional\* | :heavy_minus_sign: | Sampling rate for the audio stream. | 48000 | +| `scanType` | *Optional\* | :heavy_minus_sign: | N/A | progressive | +| `embeddedInVideo` | *Optional\* | :heavy_minus_sign: | N/A | progressive | +| `selected` | *Optional\* | :heavy_minus_sign: | Indicates if this stream is selected (applicable for audio streams). | true | +| `forced` | *Optional\* | :heavy_minus_sign: | N/A | true | +| `hearingImpaired` | *Optional\* | :heavy_minus_sign: | Indicates if the stream is for the hearing impaired. | true | +| `dub` | *Optional\* | :heavy_minus_sign: | Indicates if the stream is a dub. | true | +| `title` | *Optional\* | :heavy_minus_sign: | Optional title for the stream (e.g., language variant). | SDH | +| `streamIdentifier` | *Optional\* | :heavy_minus_sign: | N/A | 1 | +| `streamType` | *long* | :heavy_check_mark: | Stream type:
- VIDEO = 1
- AUDIO = 2
- SUBTITLE = 3
| | +| `width` | *Optional\* | :heavy_minus_sign: | Width of the video stream. | 3840 | +| `additionalProperties` | Map\ | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/Subscription.md b/docs/models/shared/Subscription.md new file mode 100644 index 00000000..1aeaa32b --- /dev/null +++ b/docs/models/shared/Subscription.md @@ -0,0 +1,15 @@ +# Subscription + +If the account's Plex Pass subscription is active + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `features` | List\<*String*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `active` | *Optional\* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `subscribedAt` | *JsonNullable\* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `status` | [Optional\](../../models/shared/UserPlexAccountSubscriptionStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `paymentService` | *JsonNullable\* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `plan` | *JsonNullable\* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/models/shared/Tag.md b/docs/models/shared/Tag.md index 386b5475..f03d51a1 100644 --- a/docs/models/shared/Tag.md +++ b/docs/models/shared/Tag.md @@ -6,15 +6,15 @@ A variety of extra information about a metadata item is included as tags. These ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| `confidence` | *Optional\* | :heavy_minus_sign: | Measure of the confidence of an automatic tag | | -| `context` | *Optional\* | :heavy_minus_sign: | N/A | | -| `filter` | *Optional\* | :heavy_minus_sign: | A filter parameter that can be used to query for more content that matches this tag value. | actor=49 | -| `id` | *Optional\* | :heavy_minus_sign: | N/A | | -| `ratingKey` | *Optional\* | :heavy_minus_sign: | N/A | | -| `role` | *Optional\* | :heavy_minus_sign: | The role this actor played | Secretary | -| `tag` | *Optional\* | :heavy_minus_sign: | The value of the tag (the name) | Shaun Lawton | -| `tagKey` | *Optional\* | :heavy_minus_sign: | Plex identifier for this tag which can be used to fetch additional information from plex.tv | 5d3ee12c4cde6a001c3e0b27 | -| `tagType` | *Optional\* | :heavy_minus_sign: | N/A | | -| `thumb` | *Optional\* | :heavy_minus_sign: | N/A | http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `confidence` | *Optional\* | :heavy_minus_sign: | Measure of the confidence of an automatic tag | | +| `context` | *Optional\* | :heavy_minus_sign: | N/A | | +| `filter` | *Optional\* | :heavy_minus_sign: | A filter parameter that can be used to query for more content that matches this tag value. | actor=49 | +| `id` | *Optional\* | :heavy_minus_sign: | N/A | | +| `ratingKey` | *Optional\* | :heavy_minus_sign: | 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 | +| `role` | *Optional\* | :heavy_minus_sign: | The role this actor played | Secretary | +| `tag` | *String* | :heavy_check_mark: | The value of the tag (the name) | Shaun Lawton | +| `tagKey` | *Optional\* | :heavy_minus_sign: | Plex identifier for this tag which can be used to fetch additional information from plex.tv | 5d3ee12c4cde6a001c3e0b27 | +| `tagType` | *Optional\* | :heavy_minus_sign: | N/A | | +| `thumb` | *Optional\* | :heavy_minus_sign: | N/A | http://image.tmdb.org/t/p/original/lcJ8qM51ClAR2UzXU1mkZGfnn3o.jpg | \ No newline at end of file diff --git a/docs/models/shared/UserPlexAccount.md b/docs/models/shared/UserPlexAccount.md new file mode 100644 index 00000000..e9371b74 --- /dev/null +++ b/docs/models/shared/UserPlexAccount.md @@ -0,0 +1,48 @@ +# UserPlexAccount + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `adsConsent` | *JsonNullable\* | :heavy_minus_sign: | Unknown | | +| `adsConsentReminderAt` | *JsonNullable\* | :heavy_minus_sign: | N/A | 1556281940 | +| `adsConsentSetAt` | *JsonNullable\* | :heavy_minus_sign: | N/A | 1556281940 | +| `anonymous` | *JsonNullable\* | :heavy_minus_sign: | Unknown | | +| `authToken` | *String* | :heavy_check_mark: | The account token | CxoUzBTSV5hsxjTpFKaf | +| `backupCodesCreated` | *Optional\* | :heavy_minus_sign: | If the two-factor authentication backup codes have been created | | +| `confirmed` | *Optional\* | :heavy_minus_sign: | If the account has been confirmed | | +| `country` | *Optional\* | :heavy_minus_sign: | The account country | US | +| `email` | *String* | :heavy_check_mark: | The account email address | username@email.com | +| `emailOnlyAuth` | *Optional\* | :heavy_minus_sign: | If login with email only is enabled | | +| `experimentalFeatures` | *Optional\* | :heavy_minus_sign: | If experimental features are enabled | | +| `friendlyName` | *String* | :heavy_check_mark: | Your account full name | friendlyUsername | +| `entitlements` | List\<*String*> | :heavy_minus_sign: | List of devices your allowed to use with this account | [] | +| `guest` | *Optional\* | :heavy_minus_sign: | If the account is a Plex Home guest user | | +| `hasPassword` | *Optional\* | :heavy_minus_sign: | If the account has a password | | +| `home` | *Optional\* | :heavy_minus_sign: | If the account is a Plex Home user | | +| `homeAdmin` | *Optional\* | :heavy_minus_sign: | If the account is the Plex Home admin | | +| `homeSize` | *Optional\* | :heavy_minus_sign: | The number of accounts in the Plex Home | 1 | +| `id` | *int* | :heavy_check_mark: | The Plex account ID | 13692262 | +| `joinedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 | +| `locale` | *JsonNullable\* | :heavy_minus_sign: | The account locale | | +| `mailingListActive` | *Optional\* | :heavy_minus_sign: | If you are subscribed to the Plex newsletter | | +| `mailingListStatus` | [Optional\](../../models/shared/MailingListStatus.md) | :heavy_minus_sign: | Your current mailing list status | active | +| `maxHomeSize` | *Optional\* | :heavy_minus_sign: | The maximum number of accounts allowed in the Plex Home | 15 | +| ~~`pin`~~ | *Optional\* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

[Might be removed] The hashed Plex Home PIN | | +| `profile` | [Optional\](../../models/shared/UserProfile.md) | :heavy_minus_sign: | N/A | | +| `protected_` | *Optional\* | :heavy_minus_sign: | If the account has a Plex Home PIN enabled | | +| `rememberExpiresAt` | *Optional\* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 | +| `restricted` | *Optional\* | :heavy_minus_sign: | If the account is a Plex Home managed user | | +| `roles` | List\<*String*> | :heavy_minus_sign: | [Might be removed] List of account roles. Plexpass membership listed here | | +| `scrobbleTypes` | *Optional\* | :heavy_minus_sign: | Unknown | | +| `services` | List\<[Services](../../models/shared/Services.md)> | :heavy_minus_sign: | N/A | | +| `subscription` | [Optional\](../../models/shared/Subscription.md) | :heavy_minus_sign: | If the account's Plex Pass subscription is active | | +| `subscriptionDescription` | *JsonNullable\* | :heavy_minus_sign: | Description of the Plex Pass subscription | | +| `subscriptions` | List\<[UserPlexAccountSubscription](../../models/shared/UserPlexAccountSubscription.md)> | :heavy_minus_sign: | N/A | | +| `thumb` | *Optional\* | :heavy_minus_sign: | URL of the account thumbnail | https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 | +| `title` | *String* | :heavy_check_mark: | The title of the account (username or friendly name) | UsernameTitle | +| `twoFactorEnabled` | *Optional\* | :heavy_minus_sign: | If two-factor authentication is enabled | | +| `username` | *String* | :heavy_check_mark: | The account username | Username | +| `uuid` | *String* | :heavy_check_mark: | The account UUID | dae343c1f45beb4f | +| `attributionPartner` | *JsonNullable\* | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/shared/UserPlexAccountStatus.md b/docs/models/shared/UserPlexAccountStatus.md new file mode 100644 index 00000000..eef031ce --- /dev/null +++ b/docs/models/shared/UserPlexAccountStatus.md @@ -0,0 +1,9 @@ +# UserPlexAccountStatus + + +## Values + +| Name | Value | +| --------- | --------- | +| `Online` | online | +| `Offline` | offline | \ No newline at end of file diff --git a/docs/models/shared/UserPlexAccountSubscription.md b/docs/models/shared/UserPlexAccountSubscription.md new file mode 100644 index 00000000..15727dd7 --- /dev/null +++ b/docs/models/shared/UserPlexAccountSubscription.md @@ -0,0 +1,13 @@ +# UserPlexAccountSubscription + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `features` | List\<*String*> | :heavy_minus_sign: | List of features allowed on your Plex Pass subscription | | +| `active` | *Optional\* | :heavy_minus_sign: | If the account's Plex Pass subscription is active | true | +| `subscribedAt` | *JsonNullable\* | :heavy_minus_sign: | Date the account subscribed to Plex Pass | 2021-04-12T18:21:12Z | +| `status` | [Optional\](../../models/shared/UserPlexAccountSubscriptionsStatus.md) | :heavy_minus_sign: | String representation of subscriptionActive | Inactive | +| `paymentService` | *JsonNullable\* | :heavy_minus_sign: | Payment service used for your Plex Pass subscription | | +| `plan` | *JsonNullable\* | :heavy_minus_sign: | Name of Plex Pass subscription plan | | \ No newline at end of file diff --git a/docs/models/shared/UserPlexAccountSubscriptionStatus.md b/docs/models/shared/UserPlexAccountSubscriptionStatus.md new file mode 100644 index 00000000..6f7bbe14 --- /dev/null +++ b/docs/models/shared/UserPlexAccountSubscriptionStatus.md @@ -0,0 +1,11 @@ +# UserPlexAccountSubscriptionStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `Inactive` | Inactive | +| `Active` | Active | \ No newline at end of file diff --git a/docs/models/shared/UserPlexAccountSubscriptionsStatus.md b/docs/models/shared/UserPlexAccountSubscriptionsStatus.md new file mode 100644 index 00000000..6ab6f88a --- /dev/null +++ b/docs/models/shared/UserPlexAccountSubscriptionsStatus.md @@ -0,0 +1,11 @@ +# UserPlexAccountSubscriptionsStatus + +String representation of subscriptionActive + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `INACTIVE` | Inactive | +| `ACTIVE` | Active | \ No newline at end of file diff --git a/docs/models/shared/UserProfile.md b/docs/models/shared/UserProfile.md new file mode 100644 index 00000000..9ba65847 --- /dev/null +++ b/docs/models/shared/UserProfile.md @@ -0,0 +1,19 @@ +# UserProfile + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `autoSelectAudio` | *Optional\* | :heavy_minus_sign: | If the account has automatically select audio and subtitle tracks enabled | true | +| `defaultAudioLanguage` | *Optional\* | :heavy_check_mark: | The preferred audio language for the account | ja | +| `defaultAudioAccessibility` | [Optional\](../../models/shared/DefaultAudioAccessibility.md) | :heavy_minus_sign: | N/A | 0 | +| `defaultAudioLanguages` | List\<*String*> | :heavy_minus_sign: | The preferred audio languages for the account | | +| `defaultSubtitleLanguage` | *Optional\* | :heavy_check_mark: | The preferred subtitle language for the account | en | +| `defaultSubtitleLanguages` | List\<*String*> | :heavy_minus_sign: | The preferred subtitle languages for the account | | +| `autoSelectSubtitle` | [Optional\](../../models/shared/AutoSelectSubtitle.md) | :heavy_minus_sign: | N/A | 1 | +| `defaultSubtitleAccessibility` | [Optional\](../../models/shared/DefaultSubtitleAccessibility.md) | :heavy_minus_sign: | N/A | 1 | +| `defaultSubtitleForced` | [Optional\](../../models/shared/DefaultSubtitleForced.md) | :heavy_minus_sign: | N/A | 1 | +| `watchedIndicator` | [Optional\](../../models/shared/WatchedIndicator.md) | :heavy_minus_sign: | N/A | 1 | +| `mediaReviewsVisibility` | [Optional\](../../models/shared/MediaReviewsVisibility.md) | :heavy_minus_sign: | N/A | 1 | +| `mediaReviewsLanguages` | List\<*String*> | :heavy_minus_sign: | The languages for media reviews visibility | | \ No newline at end of file diff --git a/docs/models/shared/WatchedIndicator.md b/docs/models/shared/WatchedIndicator.md new file mode 100644 index 00000000..203ae6a6 --- /dev/null +++ b/docs/models/shared/WatchedIndicator.md @@ -0,0 +1,13 @@ +# WatchedIndicator + +Whether or not media watched indicators are enabled (little orange dot on media) + + +## Values + +| Name | Value | +| ------------------ | ------------------ | +| `None` | 0 | +| `MoviesAndTvShows` | 1 | +| `Movies` | 2 | +| `TvShows` | 3 | \ No newline at end of file diff --git a/docs/sdks/authentication/README.md b/docs/sdks/authentication/README.md new file mode 100644 index 00000000..6b79e712 --- /dev/null +++ b/docs/sdks/authentication/README.md @@ -0,0 +1,152 @@ +# Authentication +(*authentication()*) + +## Overview + +### Available Operations + +* [getTokenDetails](#gettokendetails) - Get Token Details +* [postUsersSignInData](#postuserssignindata) - Get User Sign In Data + +## getTokenDetails + +Get the User data from the provided X-Plex-Token + +### Example Usage + + +```java +package hello.world; + +import dev.plexapi.sdk.PlexAPI; +import dev.plexapi.sdk.models.errors.GetTokenDetailsBadRequest; +import dev.plexapi.sdk.models.errors.GetTokenDetailsUnauthorized; +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.models.operations.GetTokenDetailsResponse; +import dev.plexapi.sdk.models.shared.Accepts; +import java.lang.Exception; + +public class Application { + + public static void main(String[] args) throws GetTokenDetailsBadRequest, GetTokenDetailsUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("abc123") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Living Room TV") + .marketplace("googlePlay") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetTokenDetailsRequest req = GetTokenDetailsRequest.builder() + .build(); + + GetTokenDetailsResponse res = sdk.authentication().getTokenDetails() + .request(req) + .call(); + + if (res.userPlexAccount().isPresent()) { + // handle response + } + } +} +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `request` | [GetTokenDetailsRequest](../../models/operations/GetTokenDetailsRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *String* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[GetTokenDetailsResponse](../../models/operations/GetTokenDetailsResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| models/errors/GetTokenDetailsBadRequest | 400 | application/json | +| models/errors/GetTokenDetailsUnauthorized | 401 | application/json | +| models/errors/SDKError | 4XX, 5XX | \*/\* | + +## postUsersSignInData + +Sign in user with username and password and return user data with Plex authentication token + +### Example Usage + + +```java +package hello.world; + +import dev.plexapi.sdk.PlexAPI; +import dev.plexapi.sdk.models.errors.PostUsersSignInDataBadRequest; +import dev.plexapi.sdk.models.errors.PostUsersSignInDataUnauthorized; +import dev.plexapi.sdk.models.operations.*; +import dev.plexapi.sdk.models.shared.Accepts; +import java.lang.Exception; + +public class Application { + + public static void main(String[] args) throws PostUsersSignInDataBadRequest, PostUsersSignInDataUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("3381b62b-9ab7-4e37-827b-203e9809eb58") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Living Room TV") + .marketplace("googlePlay") + .build(); + + PostUsersSignInDataRequest req = PostUsersSignInDataRequest.builder() + .requestBody(PostUsersSignInDataRequestBody.builder() + .login("username@email.com") + .password("password123") + .verificationCode("123456") + .build()) + .build(); + + PostUsersSignInDataResponse res = sdk.authentication().postUsersSignInData() + .request(req) + .call(); + + if (res.userPlexAccount().isPresent()) { + // handle response + } + } +} +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `request` | [PostUsersSignInDataRequest](../../models/operations/PostUsersSignInDataRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *String* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[PostUsersSignInDataResponse](../../models/operations/PostUsersSignInDataResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| models/errors/PostUsersSignInDataBadRequest | 400 | application/json | +| models/errors/PostUsersSignInDataUnauthorized | 401 | application/json | +| models/errors/SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/butler/README.md b/docs/sdks/butler/README.md index 88daca2a..e1614ab4 100644 --- a/docs/sdks/butler/README.md +++ b/docs/sdks/butler/README.md @@ -149,7 +149,7 @@ This endpoint will stop a currently running task by name, or remove it from the ### Example Usage - + ```java package hello.world; @@ -178,7 +178,7 @@ public class Application { .build(); StopTaskRequest req = StopTaskRequest.builder() - .task(Task.CLEAN_OLD_BUNDLES) + .butlerTask(ButlerTask.CLEAN_OLD_BUNDLES) .build(); StopTaskResponse res = sdk.butler().stopTask() @@ -213,7 +213,7 @@ This endpoint will attempt to start a specific Butler task by name. ### Example Usage - + ```java package hello.world; @@ -242,7 +242,7 @@ public class Application { .build(); StartTaskRequest req = StartTaskRequest.builder() - .task(PathParamTask.REFRESH_LOCAL_MEDIA) + .butlerTask(PathParamButlerTask.REFRESH_LOCAL_MEDIA) .build(); StartTaskResponse res = sdk.butler().startTask() diff --git a/docs/sdks/collections/README.md b/docs/sdks/collections/README.md index e3620364..b76d9a82 100644 --- a/docs/sdks/collections/README.md +++ b/docs/sdks/collections/README.md @@ -23,6 +23,7 @@ import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.CreateCollectionRequest; import dev.plexapi.sdk.models.operations.CreateCollectionResponse; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.MediaType; import java.lang.Exception; public class Application { @@ -46,6 +47,7 @@ public class Application { CreateCollectionRequest req = CreateCollectionRequest.builder() .sectionId("") + .type(MediaType.TvShow) .build(); CreateCollectionResponse res = sdk.collections().createCollection() diff --git a/docs/sdks/content/README.md b/docs/sdks/content/README.md index dfe05a98..0bfa4cf2 100644 --- a/docs/sdks/content/README.md +++ b/docs/sdks/content/README.md @@ -126,14 +126,14 @@ public class Application { GetMetadataItemRequest req = GetMetadataItemRequest.builder() .ids(List.of()) - .asyncCheckFiles(BoolInt.ONE) - .asyncRefreshLocalMediaAgent(BoolInt.ONE) - .asyncRefreshAnalysis(BoolInt.ONE) - .checkFiles(BoolInt.ONE) - .skipRefresh(BoolInt.ONE) - .checkFileAvailability(BoolInt.ONE) - .asyncAugmentMetadata(BoolInt.ONE) - .augmentCount(BoolInt.ONE) + .asyncCheckFiles(BoolInt.True) + .asyncRefreshLocalMediaAgent(BoolInt.True) + .asyncRefreshAnalysis(BoolInt.True) + .checkFiles(BoolInt.True) + .skipRefresh(BoolInt.True) + .checkFileAvailability(BoolInt.True) + .asyncAugmentMetadata(BoolInt.True) + .augmentCount(BoolInt.True) .build(); GetMetadataItemResponse res = sdk.content().getMetadataItem() @@ -242,7 +242,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.ListContentRequest; import dev.plexapi.sdk.models.operations.ListContentResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -266,6 +266,13 @@ public class Application { ListContentRequest req = ListContentRequest.builder() .sectionId("") + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) + .includeMeta(BoolInt.True) + .includeGuids(BoolInt.True) .build(); ListContentResponse res = sdk.content().listContent() diff --git a/docs/sdks/devices/README.md b/docs/sdks/devices/README.md index 57989738..ebbe7aa4 100644 --- a/docs/sdks/devices/README.md +++ b/docs/sdks/devices/README.md @@ -441,7 +441,7 @@ public class Application { ModifyDeviceRequest req = ModifyDeviceRequest.builder() .deviceId(879135L) - .enabled(BoolInt.ONE) + .enabled(BoolInt.True) .build(); ModifyDeviceResponse res = sdk.devices().modifyDevice() diff --git a/docs/sdks/downloadqueue/README.md b/docs/sdks/downloadqueue/README.md index 9250960f..0d2753c1 100644 --- a/docs/sdks/downloadqueue/README.md +++ b/docs/sdks/downloadqueue/README.md @@ -178,13 +178,13 @@ public class Application { .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(Location.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) diff --git a/docs/sdks/general/README.md b/docs/sdks/general/README.md index 0dd2c433..9fcb795f 100644 --- a/docs/sdks/general/README.md +++ b/docs/sdks/general/README.md @@ -156,7 +156,7 @@ public class Application { GetSourceConnectionInformationRequest req = GetSourceConnectionInformationRequest.builder() .source("server://client-identifier") - .refresh(BoolInt.ONE) + .refresh(BoolInt.True) .build(); GetSourceConnectionInformationResponse res = sdk.general().getSourceConnectionInformation() diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md index d41d4ce3..a3ed9bfa 100644 --- a/docs/sdks/hubs/README.md +++ b/docs/sdks/hubs/README.md @@ -59,7 +59,7 @@ public class Application { .build(); GetAllHubsRequest req = GetAllHubsRequest.builder() - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetAllHubsResponse res = sdk.hubs().getAllHubs() @@ -327,7 +327,7 @@ public class Application { GetMetadataHubsRequest req = GetMetadataHubsRequest.builder() .metadataId(605482L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetMetadataHubsResponse res = sdk.hubs().getMetadataHubs() @@ -395,7 +395,7 @@ public class Application { GetPostplayHubsRequest req = GetPostplayHubsRequest.builder() .metadataId(441419L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetPostplayHubsResponse res = sdk.hubs().getPostplayHubs() @@ -463,7 +463,7 @@ public class Application { GetRelatedHubsRequest req = GetRelatedHubsRequest.builder() .metadataId(8858L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetRelatedHubsResponse res = sdk.hubs().getRelatedHubs() @@ -531,7 +531,7 @@ public class Application { GetSectionHubsRequest req = GetSectionHubsRequest.builder() .sectionId(336924L) - .onlyTransient(BoolInt.ONE) + .onlyTransient(BoolInt.True) .build(); GetSectionHubsResponse res = sdk.hubs().getSectionHubs() @@ -730,9 +730,9 @@ public class Application { CreateCustomHubRequest req = CreateCustomHubRequest.builder() .sectionId(869922L) .metadataItemId(703843L) - .promotedToRecommended(BoolInt.ONE) - .promotedToOwnHome(BoolInt.ONE) - .promotedToSharedHome(BoolInt.ONE) + .promotedToRecommended(BoolInt.True) + .promotedToOwnHome(BoolInt.True) + .promotedToSharedHome(BoolInt.True) .build(); CreateCustomHubResponse res = sdk.hubs().createCustomHub() @@ -931,9 +931,9 @@ public class Application { UpdateHubVisibilityRequest req = UpdateHubVisibilityRequest.builder() .sectionId(341650L) .identifier("") - .promotedToRecommended(BoolInt.ONE) - .promotedToOwnHome(BoolInt.ONE) - .promotedToSharedHome(BoolInt.ONE) + .promotedToRecommended(BoolInt.True) + .promotedToOwnHome(BoolInt.True) + .promotedToSharedHome(BoolInt.True) .build(); UpdateHubVisibilityResponse res = sdk.hubs().updateHubVisibility() diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md index 887d8e70..8f9bcb1e 100644 --- a/docs/sdks/library/README.md +++ b/docs/sdks/library/README.md @@ -100,7 +100,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetLibraryItemsRequest; import dev.plexapi.sdk.models.operations.GetLibraryItemsResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -123,6 +123,11 @@ public class Application { .build(); GetLibraryItemsRequest req = GetLibraryItemsRequest.builder() + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetLibraryItemsResponse res = sdk.library().getLibraryItems() @@ -272,8 +277,8 @@ public class Application { IngestTransientItemRequest req = IngestTransientItemRequest.builder() .url("file:///storage%2Femulated%2F0%2FArcher-S01E01.mkv") .virtualFilePath("/Avatar.mkv") - .computeHashes(BoolInt.ONE) - .ingestNonMatches(BoolInt.ONE) + .computeHashes(BoolInt.True) + .ingestNonMatches(BoolInt.True) .build(); IngestTransientItemResponse res = sdk.library().ingestTransientItem() @@ -320,8 +325,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetLibraryMatchesRequest; import dev.plexapi.sdk.models.operations.GetLibraryMatchesResponse; -import dev.plexapi.sdk.models.shared.Accepts; -import dev.plexapi.sdk.models.shared.BoolInt; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -344,9 +348,10 @@ public class Application { .build(); GetLibraryMatchesRequest req = GetLibraryMatchesRequest.builder() - .includeFullMetadata(BoolInt.ONE) - .includeAncestorMetadata(BoolInt.ONE) - .includeAlternateMetadataSources(BoolInt.ONE) + .type(MediaType.TvShow) + .includeFullMetadata(BoolInt.True) + .includeAncestorMetadata(BoolInt.True) + .includeAlternateMetadataSources(BoolInt.True) .build(); GetLibraryMatchesResponse res = sdk.library().getLibraryMatches() @@ -413,7 +418,7 @@ public class Application { .build(); OptimizeDatabaseRequest req = OptimizeDatabaseRequest.builder() - .async(BoolInt.ONE) + .async(BoolInt.True) .build(); OptimizeDatabaseResponse res = sdk.library().optimizeDatabase() @@ -602,8 +607,8 @@ public class Application { "O:\fatboy\\Media\\My Music")) .prefs(QueryParamPrefs.builder() .build()) - .relative(BoolInt.ONE) - .importFromiTunes(BoolInt.ONE) + .relative(BoolInt.True) + .importFromiTunes(BoolInt.True) .build(); AddSectionResponse res = sdk.library().addSection() @@ -818,6 +823,7 @@ import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetTagsRequest; import dev.plexapi.sdk.models.operations.GetTagsResponse; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.MediaType; import java.lang.Exception; public class Application { @@ -840,6 +846,7 @@ public class Application { .build(); GetTagsRequest req = GetTagsRequest.builder() + .type(MediaType.TvShow) .build(); GetTagsResponse res = sdk.library().getTags() @@ -907,7 +914,7 @@ public class Application { DeleteMetadataItemRequest req = DeleteMetadataItemRequest.builder() .ids("") - .proxy(BoolInt.ONE) + .proxy(BoolInt.True) .build(); DeleteMetadataItemResponse res = sdk.library().deleteMetadataItem() @@ -1234,7 +1241,7 @@ public class Application { GenerateThumbsRequest req = GenerateThumbsRequest.builder() .ids("") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); GenerateThumbsResponse res = sdk.library().generateThumbs() @@ -1300,8 +1307,8 @@ public class Application { DetectCreditsRequest req = DetectCreditsRequest.builder() .ids("") - .force(BoolInt.ONE) - .manual(BoolInt.ONE) + .force(BoolInt.True) + .manual(BoolInt.True) .build(); DetectCreditsResponse res = sdk.library().detectCredits() @@ -1564,7 +1571,7 @@ public class Application { StartBifGenerationRequest req = StartBifGenerationRequest.builder() .ids("") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); StartBifGenerationResponse res = sdk.library().startBifGeneration() @@ -1630,7 +1637,7 @@ public class Application { DetectIntrosRequest req = DetectIntrosRequest.builder() .ids("") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); DetectIntrosResponse res = sdk.library().detectIntros() @@ -1829,7 +1836,7 @@ public class Application { ListMatchesRequest req = ListMatchesRequest.builder() .ids("") - .manual(BoolInt.ONE) + .manual(BoolInt.True) .build(); ListMatchesResponse res = sdk.library().listMatches() @@ -2100,7 +2107,7 @@ public class Application { RefreshItemsMetadataRequest req = RefreshItemsMetadataRequest.builder() .ids("") - .markUpdated(BoolInt.ONE) + .markUpdated(BoolInt.True) .build(); RefreshItemsMetadataResponse res = sdk.library().refreshItemsMetadata() @@ -2362,8 +2369,8 @@ public class Application { AddSubtitlesRequest req = AddSubtitlesRequest.builder() .ids("") - .forced(BoolInt.ONE) - .hearingImpaired(BoolInt.ONE) + .forced(BoolInt.True) + .hearingImpaired(BoolInt.True) .build(); AddSubtitlesResponse res = sdk.library().addSubtitles() @@ -2625,8 +2632,8 @@ public class Application { DetectVoiceActivityRequest req = DetectVoiceActivityRequest.builder() .ids("") - .force(BoolInt.ONE) - .manual(BoolInt.ONE) + .force(BoolInt.True) + .manual(BoolInt.True) .build(); DetectVoiceActivityResponse res = sdk.library().detectVoiceActivity() @@ -2692,7 +2699,7 @@ public class Application { GetAugmentationStatusRequest req = GetAugmentationStatusRequest.builder() .augmentationId("") - .wait_(BoolInt.ONE) + .wait_(BoolInt.True) .build(); GetAugmentationStatusResponse res = sdk.library().getAugmentationStatus() @@ -2758,7 +2765,7 @@ public class Application { SetStreamSelectionRequest req = SetStreamSelectionRequest.builder() .partId(360489L) - .allParts(BoolInt.ONE) + .allParts(BoolInt.True) .build(); SetStreamSelectionResponse res = sdk.library().setStreamSelection() @@ -2956,7 +2963,7 @@ public class Application { DeleteLibrarySectionRequest req = DeleteLibrarySectionRequest.builder() .sectionId("") - .async(BoolInt.ONE) + .async(BoolInt.True) .build(); DeleteLibrarySectionResponse res = sdk.library().deleteLibrarySection() @@ -3022,7 +3029,7 @@ public class Application { GetLibraryDetailsRequest req = GetLibraryDetailsRequest.builder() .sectionId("") - .includeDetails(BoolInt.ONE) + .includeDetails(BoolInt.True) .build(); GetLibraryDetailsResponse res = sdk.library().getLibraryDetails() @@ -3204,7 +3211,7 @@ public class Application { UpdateItemsRequest req = UpdateItemsRequest.builder() .sectionId("") - .fieldLocked(BoolInt.ONE) + .fieldLocked(BoolInt.True) .build(); UpdateItemsResponse res = sdk.library().updateItems() @@ -3310,7 +3317,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.AutocompleteRequest; import dev.plexapi.sdk.models.operations.AutocompleteResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -3334,6 +3341,11 @@ public class Application { AutocompleteRequest req = AutocompleteRequest.builder() .sectionId(942007L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); AutocompleteResponse res = sdk.library().autocomplete() @@ -3376,7 +3388,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetCollectionsRequest; import dev.plexapi.sdk.models.operations.GetCollectionsResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -3400,6 +3412,11 @@ public class Application { GetCollectionsRequest req = GetCollectionsRequest.builder() .sectionId(348838L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetCollectionsResponse res = sdk.library().getCollections() @@ -3443,7 +3460,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetCommonRequest; import dev.plexapi.sdk.models.operations.GetCommonResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -3467,6 +3484,11 @@ public class Application { GetCommonRequest req = GetCommonRequest.builder() .sectionId(298154L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetCommonResponse res = sdk.library().getCommon() @@ -3639,7 +3661,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetFirstCharactersRequest; import dev.plexapi.sdk.models.operations.GetFirstCharactersResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -3663,6 +3685,11 @@ public class Application { GetFirstCharactersRequest req = GetFirstCharactersRequest.builder() .sectionId(3947L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetFirstCharactersResponse res = sdk.library().getFirstCharacters() @@ -4053,7 +4080,7 @@ public class Application { RefreshSectionRequest req = RefreshSectionRequest.builder() .sectionId(450300L) - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); RefreshSectionResponse res = sdk.library().refreshSection() @@ -4650,7 +4677,7 @@ public class Application { DeleteMediaItemRequest req = DeleteMediaItemRequest.builder() .ids("") .mediaItem("") - .proxy(BoolInt.ONE) + .proxy(BoolInt.True) .build(); DeleteMediaItemResponse res = sdk.library().deleteMediaItem() @@ -4822,7 +4849,7 @@ package hello.world; import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.GetSectionImageRequest; import dev.plexapi.sdk.models.operations.GetSectionImageResponse; -import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.*; import java.lang.Exception; public class Application { @@ -4847,6 +4874,11 @@ public class Application { GetSectionImageRequest req = GetSectionImageRequest.builder() .sectionId(925611L) .updatedAt(117413L) + .mediaQuery(MediaQuery.builder() + .type(MediaType.Episode) + .sourceType(2L) + .sort("duration:desc,index") + .build()) .build(); GetSectionImageResponse res = sdk.library().getSectionImage() @@ -4978,7 +5010,7 @@ public class Application { GetStreamRequest req = GetStreamRequest.builder() .streamId(314506L) .ext("") - .autoAdjustSubtitle(BoolInt.ONE) + .autoAdjustSubtitle(BoolInt.True) .build(); GetStreamResponse res = sdk.library().getStream() @@ -5181,7 +5213,7 @@ public class Application { .partId(877105L) .changestamp(970622L) .filename("example.file") - .download(BoolInt.ONE) + .download(BoolInt.True) .build(); GetMediaPartResponse res = sdk.library().getMediaPart() diff --git a/docs/sdks/libraryplaylists/README.md b/docs/sdks/libraryplaylists/README.md index c31f7eaf..d821f25f 100644 --- a/docs/sdks/libraryplaylists/README.md +++ b/docs/sdks/libraryplaylists/README.md @@ -124,7 +124,7 @@ public class Application { UploadPlaylistRequest req = UploadPlaylistRequest.builder() .path("/home/barkley/playlist.m3u") - .force(BoolInt.ONE) + .force(BoolInt.True) .build(); UploadPlaylistResponse res = sdk.libraryPlaylists().uploadPlaylist() diff --git a/docs/sdks/playqueue/README.md b/docs/sdks/playqueue/README.md index 6d8b042f..0cef9f7d 100644 --- a/docs/sdks/playqueue/README.md +++ b/docs/sdks/playqueue/README.md @@ -60,11 +60,11 @@ public class Application { CreatePlayQueueRequest req = CreatePlayQueueRequest.builder() .type(Type.AUDIO) - .shuffle(BoolInt.ONE) - .repeat(BoolInt.ONE) - .continuous(BoolInt.ONE) - .recursive(BoolInt.ONE) - .onDeck(BoolInt.ONE) + .shuffle(BoolInt.True) + .repeat(BoolInt.True) + .continuous(BoolInt.True) + .recursive(BoolInt.True) + .onDeck(BoolInt.True) .build(); CreatePlayQueueResponse res = sdk.playQueue().createPlayQueue() @@ -132,9 +132,9 @@ public class Application { GetPlayQueueRequest req = GetPlayQueueRequest.builder() .playQueueId(210646L) - .own(BoolInt.ONE) - .includeBefore(BoolInt.ONE) - .includeAfter(BoolInt.ONE) + .own(BoolInt.True) + .includeBefore(BoolInt.True) + .includeAfter(BoolInt.True) .build(); GetPlayQueueResponse res = sdk.playQueue().getPlayQueue() @@ -202,7 +202,7 @@ public class Application { AddToPlayQueueRequest req = AddToPlayQueueRequest.builder() .playQueueId(919248L) - .next(BoolInt.ONE) + .next(BoolInt.True) .build(); AddToPlayQueueResponse res = sdk.playQueue().addToPlayQueue() diff --git a/docs/sdks/plex/README.md b/docs/sdks/plex/README.md new file mode 100644 index 00000000..47cc3a0d --- /dev/null +++ b/docs/sdks/plex/README.md @@ -0,0 +1,69 @@ +# Plex +(*plex()*) + +## Overview + +### Available Operations + +* [getServerResources](#getserverresources) - Get Server Resources + +## getServerResources + +Get Plex server access tokens and server connections + +### Example Usage + + +```java +package hello.world; + +import dev.plexapi.sdk.PlexAPI; +import dev.plexapi.sdk.models.errors.GetServerResourcesUnauthorized; +import dev.plexapi.sdk.models.operations.*; +import dev.plexapi.sdk.models.shared.Accepts; +import java.lang.Exception; + +public class Application { + + public static void main(String[] args) throws GetServerResourcesUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("3381b62b-9ab7-4e37-827b-203e9809eb58") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetServerResourcesRequest req = GetServerResourcesRequest.builder() + .includeHttps(IncludeHttps.True) + .includeRelay(IncludeRelay.True) + .includeIPv6(IncludeIPv6.True) + .build(); + + GetServerResourcesResponse res = sdk.plex().getServerResources() + .request(req) + .call(); + + if (res.plexDevices().isPresent()) { + // handle response + } + } +} +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `request` | [GetServerResourcesRequest](../../models/operations/GetServerResourcesRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *String* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[GetServerResourcesResponse](../../models/operations/GetServerResourcesResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| models/errors/GetServerResourcesUnauthorized | 401 | application/json | +| models/errors/SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/search/README.md b/docs/sdks/search/README.md index 659fc2b8..b3bcdd6e 100644 --- a/docs/sdks/search/README.md +++ b/docs/sdks/search/README.md @@ -110,6 +110,7 @@ import dev.plexapi.sdk.PlexAPI; import dev.plexapi.sdk.models.operations.VoiceSearchHubsRequest; import dev.plexapi.sdk.models.operations.VoiceSearchHubsResponse; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.MediaType; import java.lang.Exception; public class Application { @@ -133,6 +134,7 @@ public class Application { VoiceSearchHubsRequest req = VoiceSearchHubsRequest.builder() .query("") + .type(MediaType.TvShow) .build(); VoiceSearchHubsResponse res = sdk.search().voiceSearchHubs() diff --git a/docs/sdks/subscriptions/README.md b/docs/sdks/subscriptions/README.md index c14a1dec..af2f8ef8 100644 --- a/docs/sdks/subscriptions/README.md +++ b/docs/sdks/subscriptions/README.md @@ -56,8 +56,8 @@ public class Application { .build(); GetAllSubscriptionsRequest req = GetAllSubscriptionsRequest.builder() - .includeGrabs(BoolInt.ONE) - .includeStorage(BoolInt.ONE) + .includeGrabs(BoolInt.True) + .includeStorage(BoolInt.True) .build(); GetAllSubscriptionsResponse res = sdk.subscriptions().getAllSubscriptions() @@ -475,8 +475,8 @@ public class Application { GetSubscriptionRequest req = GetSubscriptionRequest.builder() .subscriptionId(186713L) - .includeGrabs(BoolInt.ONE) - .includeStorage(BoolInt.ONE) + .includeGrabs(BoolInt.True) + .includeStorage(BoolInt.True) .build(); GetSubscriptionResponse res = sdk.subscriptions().getSubscription() diff --git a/docs/sdks/timeline/README.md b/docs/sdks/timeline/README.md index 9df08298..b72a12c5 100644 --- a/docs/sdks/timeline/README.md +++ b/docs/sdks/timeline/README.md @@ -120,9 +120,9 @@ public class Application { .playQueueItemID("123") .time(0L) .duration(10000L) - .continuing(BoolInt.ONE) + .continuing(BoolInt.True) .updated(14200000L) - .offline(BoolInt.ONE) + .offline(BoolInt.True) .timeToFirstFrame(1000L) .timeStalled(1000L) .bandwidth(100L) diff --git a/docs/sdks/transcoder/README.md b/docs/sdks/transcoder/README.md index 6e8cbdaa..768eb747 100644 --- a/docs/sdks/transcoder/README.md +++ b/docs/sdks/transcoder/README.md @@ -52,9 +52,9 @@ public class Application { TranscodeImageRequest req = TranscodeImageRequest.builder() .url("/library/metadata/265/thumb/1715112705") .background("#ff5522") - .upscale(BoolInt.ONE) - .minSize(BoolInt.ONE) - .rotate(BoolInt.ONE) + .upscale(BoolInt.True) + .minSize(BoolInt.True) + .rotate(BoolInt.True) .blendColor("#ff5522") .build(); @@ -124,13 +124,13 @@ public class Application { .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(Location.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) @@ -281,13 +281,13 @@ public class Application { .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(QueryParamLocation.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) @@ -372,13 +372,13 @@ public class Application { .advancedSubtitles(AdvancedSubtitles.BURN) .audioBoost(50L) .audioChannelCount(5L) - .autoAdjustQuality(BoolInt.ONE) - .autoAdjustSubtitle(BoolInt.ONE) - .directPlay(BoolInt.ONE) - .directStream(BoolInt.ONE) - .directStreamAudio(BoolInt.ONE) - .disableResolutionRotation(BoolInt.ONE) - .hasMDE(BoolInt.ONE) + .autoAdjustQuality(BoolInt.True) + .autoAdjustSubtitle(BoolInt.True) + .directPlay(BoolInt.True) + .directStream(BoolInt.True) + .directStreamAudio(BoolInt.True) + .disableResolutionRotation(BoolInt.True) + .hasMDE(BoolInt.True) .location(StartTranscodeSessionQueryParamLocation.WAN) .mediaBufferSize(102400L) .mediaIndex(0L) diff --git a/docs/sdks/ultrablur/README.md b/docs/sdks/ultrablur/README.md index 77d1d908..c3ff977e 100644 --- a/docs/sdks/ultrablur/README.md +++ b/docs/sdks/ultrablur/README.md @@ -119,7 +119,7 @@ public class Application { .bottomLeft("1c425d") .width(1920L) .height(1080L) - .noise(BoolInt.ONE) + .noise(BoolInt.True) .build(); GetImageResponse res = sdk.ultraBlur().getImage() diff --git a/docs/sdks/updater/README.md b/docs/sdks/updater/README.md index 4b6863fb..df543c06 100644 --- a/docs/sdks/updater/README.md +++ b/docs/sdks/updater/README.md @@ -50,8 +50,8 @@ public class Application { .build(); ApplyUpdatesRequest req = ApplyUpdatesRequest.builder() - .tonight(BoolInt.ONE) - .skip(BoolInt.ONE) + .tonight(BoolInt.True) + .skip(BoolInt.True) .build(); ApplyUpdatesResponse res = sdk.updater().applyUpdates() @@ -116,7 +116,7 @@ public class Application { .build(); CheckUpdatesRequest req = CheckUpdatesRequest.builder() - .download(BoolInt.ONE) + .download(BoolInt.True) .build(); CheckUpdatesResponse res = sdk.updater().checkUpdates() diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md new file mode 100644 index 00000000..fb6e3833 --- /dev/null +++ b/docs/sdks/users/README.md @@ -0,0 +1,78 @@ +# Users +(*users()*) + +## Overview + +### Available Operations + +* [getUsers](#getusers) - Get list of all connected users + +## getUsers + +Get list of all users that are friends and have library access with the provided Plex authentication token + +### Example Usage + + +```java +package hello.world; + +import dev.plexapi.sdk.PlexAPI; +import dev.plexapi.sdk.models.errors.GetUsersBadRequest; +import dev.plexapi.sdk.models.errors.GetUsersUnauthorized; +import dev.plexapi.sdk.models.operations.GetUsersRequest; +import dev.plexapi.sdk.models.operations.GetUsersResponse; +import dev.plexapi.sdk.models.shared.Accepts; +import java.lang.Exception; + +public class Application { + + public static void main(String[] args) throws GetUsersBadRequest, GetUsersUnauthorized, Exception { + + PlexAPI sdk = PlexAPI.builder() + .accepts(Accepts.APPLICATION_XML) + .clientIdentifier("3381b62b-9ab7-4e37-827b-203e9809eb58") + .product("Plex for Roku") + .version("2.4.1") + .platform("Roku") + .platformVersion("4.3 build 1057") + .device("Roku 3") + .model("4200X") + .deviceVendor("Roku") + .deviceName("Chrome") + .marketplace("googlePlay") + .token(System.getenv().getOrDefault("TOKEN", "")) + .build(); + + GetUsersRequest req = GetUsersRequest.builder() + .build(); + + GetUsersResponse res = sdk.users().getUsers() + .request(req) + .call(); + + if (res.object().isPresent()) { + // handle response + } + } +} +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `request` | [GetUsersRequest](../../models/operations/GetUsersRequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `serverURL` | *String* | :heavy_minus_sign: | An optional server URL to use. | + +### Response + +**[GetUsersResponse](../../models/operations/GetUsersResponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| models/errors/GetUsersBadRequest | 400 | application/json | +| models/errors/GetUsersUnauthorized | 401 | application/json | +| models/errors/SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ede217db..b6c566be 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ groupId=dev.plexapi artifactId=plexapi -version=0.21.1 +version=0.22.1 org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g diff --git a/src/main/java/dev/plexapi/sdk/AsyncAuthentication.java b/src/main/java/dev/plexapi/sdk/AsyncAuthentication.java new file mode 100644 index 00000000..c41f990a --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/AsyncAuthentication.java @@ -0,0 +1,119 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataRequest; +import dev.plexapi.sdk.models.operations.async.GetTokenDetailsRequestBuilder; +import dev.plexapi.sdk.models.operations.async.GetTokenDetailsResponse; +import dev.plexapi.sdk.models.operations.async.PostUsersSignInDataRequestBuilder; +import dev.plexapi.sdk.models.operations.async.PostUsersSignInDataResponse; +import dev.plexapi.sdk.operations.GetTokenDetails; +import dev.plexapi.sdk.operations.PostUsersSignInData; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + + +public class AsyncAuthentication { + private final SDKConfiguration sdkConfiguration; + private final Authentication syncSDK; + + AsyncAuthentication(Authentication syncSDK, SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + this.syncSDK = syncSDK; + } + + /** + * Switches to the sync SDK. + * + * @return The sync SDK + */ + public Authentication sync() { + return syncSDK; + } + + + /** + * Get Token Details + * + *

Get the User data from the provided X-Plex-Token + * + * @return The async call builder + */ + public GetTokenDetailsRequestBuilder getTokenDetails() { + return new GetTokenDetailsRequestBuilder(sdkConfiguration); + } + + /** + * Get Token Details + * + *

Get the User data from the provided X-Plex-Token + * + * @param request The request object containing all the parameters for the API call. + * @return CompletableFuture<GetTokenDetailsResponse> - The async response + */ + public CompletableFuture getTokenDetails(GetTokenDetailsRequest request) { + return getTokenDetails(request, Optional.empty()); + } + + /** + * Get Token Details + * + *

Get the User data from the provided X-Plex-Token + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return CompletableFuture<GetTokenDetailsResponse> - The async response + */ + public CompletableFuture getTokenDetails(GetTokenDetailsRequest request, Optional serverURL) { + AsyncRequestOperation operation + = new GetTokenDetails.Async(sdkConfiguration, serverURL); + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } + + + /** + * Get User Sign In Data + * + *

Sign in user with username and password and return user data with Plex authentication token + * + * @return The async call builder + */ + public PostUsersSignInDataRequestBuilder postUsersSignInData() { + return new PostUsersSignInDataRequestBuilder(sdkConfiguration); + } + + /** + * Get User Sign In Data + * + *

Sign in user with username and password and return user data with Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @return CompletableFuture<PostUsersSignInDataResponse> - The async response + */ + public CompletableFuture postUsersSignInData(PostUsersSignInDataRequest request) { + return postUsersSignInData(request, Optional.empty()); + } + + /** + * Get User Sign In Data + * + *

Sign in user with username and password and return user data with Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return CompletableFuture<PostUsersSignInDataResponse> - The async response + */ + public CompletableFuture postUsersSignInData(PostUsersSignInDataRequest request, Optional serverURL) { + AsyncRequestOperation operation + = new PostUsersSignInData.Async(sdkConfiguration, serverURL); + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } + +} diff --git a/src/main/java/dev/plexapi/sdk/AsyncPlex.java b/src/main/java/dev/plexapi/sdk/AsyncPlex.java new file mode 100644 index 00000000..c6374e01 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/AsyncPlex.java @@ -0,0 +1,75 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.models.operations.GetServerResourcesRequest; +import dev.plexapi.sdk.models.operations.async.GetServerResourcesRequestBuilder; +import dev.plexapi.sdk.models.operations.async.GetServerResourcesResponse; +import dev.plexapi.sdk.operations.GetServerResources; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + + +public class AsyncPlex { + private final SDKConfiguration sdkConfiguration; + private final Plex syncSDK; + + AsyncPlex(Plex syncSDK, SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + this.syncSDK = syncSDK; + } + + /** + * Switches to the sync SDK. + * + * @return The sync SDK + */ + public Plex sync() { + return syncSDK; + } + + + /** + * Get Server Resources + * + *

Get Plex server access tokens and server connections + * + * @return The async call builder + */ + public GetServerResourcesRequestBuilder getServerResources() { + return new GetServerResourcesRequestBuilder(sdkConfiguration); + } + + /** + * Get Server Resources + * + *

Get Plex server access tokens and server connections + * + * @param request The request object containing all the parameters for the API call. + * @return CompletableFuture<GetServerResourcesResponse> - The async response + */ + public CompletableFuture getServerResources(GetServerResourcesRequest request) { + return getServerResources(request, Optional.empty()); + } + + /** + * Get Server Resources + * + *

Get Plex server access tokens and server connections + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return CompletableFuture<GetServerResourcesResponse> - The async response + */ + public CompletableFuture getServerResources(GetServerResourcesRequest request, Optional serverURL) { + AsyncRequestOperation operation + = new GetServerResources.Async(sdkConfiguration, serverURL); + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } + +} diff --git a/src/main/java/dev/plexapi/sdk/AsyncPlexAPI.java b/src/main/java/dev/plexapi/sdk/AsyncPlexAPI.java index 5be5d422..d1508268 100644 --- a/src/main/java/dev/plexapi/sdk/AsyncPlexAPI.java +++ b/src/main/java/dev/plexapi/sdk/AsyncPlexAPI.java @@ -152,6 +152,12 @@ public class AsyncPlexAPI { * Updates to the status can be observed via the Event API. */ private final AsyncUpdater updater; + + private final AsyncAuthentication authentication; + + private final AsyncUsers users; + + private final AsyncPlex plex; /** * The actual content of the media provider */ @@ -361,6 +367,18 @@ public class AsyncPlexAPI { public AsyncUpdater updater() { return updater; } + + public AsyncAuthentication authentication() { + return authentication; + } + + public AsyncUsers users() { + return users; + } + + public AsyncPlex plex() { + return plex; + } /** * The actual content of the media provider */ @@ -406,6 +424,9 @@ public class AsyncPlexAPI { this.ultraBlur = new AsyncUltraBlur(syncSDK.ultraBlur(), sdkConfiguration); this.status = new AsyncStatus(syncSDK.status(), sdkConfiguration); this.updater = new AsyncUpdater(syncSDK.updater(), sdkConfiguration); + this.authentication = new AsyncAuthentication(syncSDK.authentication(), sdkConfiguration); + this.users = new AsyncUsers(syncSDK.users(), sdkConfiguration); + this.plex = new AsyncPlex(syncSDK.plex(), sdkConfiguration); this.content = new AsyncContent(syncSDK.content(), sdkConfiguration); this.libraryCollections = new AsyncLibraryCollections(syncSDK.libraryCollections(), sdkConfiguration); } diff --git a/src/main/java/dev/plexapi/sdk/AsyncUsers.java b/src/main/java/dev/plexapi/sdk/AsyncUsers.java new file mode 100644 index 00000000..982c0b35 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/AsyncUsers.java @@ -0,0 +1,75 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.models.operations.GetUsersRequest; +import dev.plexapi.sdk.models.operations.async.GetUsersRequestBuilder; +import dev.plexapi.sdk.models.operations.async.GetUsersResponse; +import dev.plexapi.sdk.operations.GetUsers; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + + +public class AsyncUsers { + private final SDKConfiguration sdkConfiguration; + private final Users syncSDK; + + AsyncUsers(Users syncSDK, SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + this.syncSDK = syncSDK; + } + + /** + * Switches to the sync SDK. + * + * @return The sync SDK + */ + public Users sync() { + return syncSDK; + } + + + /** + * Get list of all connected users + * + *

Get list of all users that are friends and have library access with the provided Plex authentication token + * + * @return The async call builder + */ + public GetUsersRequestBuilder getUsers() { + return new GetUsersRequestBuilder(sdkConfiguration); + } + + /** + * Get list of all connected users + * + *

Get list of all users that are friends and have library access with the provided Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @return CompletableFuture<GetUsersResponse> - The async response + */ + public CompletableFuture getUsers(GetUsersRequest request) { + return getUsers(request, Optional.empty()); + } + + /** + * Get list of all connected users + * + *

Get list of all users that are friends and have library access with the provided Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return CompletableFuture<GetUsersResponse> - The async response + */ + public CompletableFuture getUsers(GetUsersRequest request, Optional serverURL) { + AsyncRequestOperation operation + = new GetUsers.Async(sdkConfiguration, serverURL); + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } + +} diff --git a/src/main/java/dev/plexapi/sdk/Authentication.java b/src/main/java/dev/plexapi/sdk/Authentication.java new file mode 100644 index 00000000..c8a3c2d2 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/Authentication.java @@ -0,0 +1,119 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequestBuilder; +import dev.plexapi.sdk.models.operations.GetTokenDetailsResponse; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataRequest; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataRequestBuilder; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataResponse; +import dev.plexapi.sdk.operations.GetTokenDetails; +import dev.plexapi.sdk.operations.PostUsersSignInData; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + + +public class Authentication { + private final SDKConfiguration sdkConfiguration; + private final AsyncAuthentication asyncSDK; + + Authentication(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + this.asyncSDK = new AsyncAuthentication(this, sdkConfiguration); + } + + /** + * Switches to the async SDK. + * + * @return The async SDK + */ + public AsyncAuthentication async() { + return asyncSDK; + } + + /** + * Get Token Details + * + *

Get the User data from the provided X-Plex-Token + * + * @return The call builder + */ + public GetTokenDetailsRequestBuilder getTokenDetails() { + return new GetTokenDetailsRequestBuilder(sdkConfiguration); + } + + /** + * Get Token Details + * + *

Get the User data from the provided X-Plex-Token + * + * @param request The request object containing all the parameters for the API call. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public GetTokenDetailsResponse getTokenDetails(GetTokenDetailsRequest request) throws Exception { + return getTokenDetails(request, Optional.empty()); + } + + /** + * Get Token Details + * + *

Get the User data from the provided X-Plex-Token + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public GetTokenDetailsResponse getTokenDetails(GetTokenDetailsRequest request, Optional serverURL) throws Exception { + RequestOperation operation + = new GetTokenDetails.Sync(sdkConfiguration, serverURL); + return operation.handleResponse(operation.doRequest(request)); + } + + /** + * Get User Sign In Data + * + *

Sign in user with username and password and return user data with Plex authentication token + * + * @return The call builder + */ + public PostUsersSignInDataRequestBuilder postUsersSignInData() { + return new PostUsersSignInDataRequestBuilder(sdkConfiguration); + } + + /** + * Get User Sign In Data + * + *

Sign in user with username and password and return user data with Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public PostUsersSignInDataResponse postUsersSignInData(PostUsersSignInDataRequest request) throws Exception { + return postUsersSignInData(request, Optional.empty()); + } + + /** + * Get User Sign In Data + * + *

Sign in user with username and password and return user data with Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public PostUsersSignInDataResponse postUsersSignInData(PostUsersSignInDataRequest request, Optional serverURL) throws Exception { + RequestOperation operation + = new PostUsersSignInData.Sync(sdkConfiguration, serverURL); + return operation.handleResponse(operation.doRequest(request)); + } + +} diff --git a/src/main/java/dev/plexapi/sdk/Plex.java b/src/main/java/dev/plexapi/sdk/Plex.java new file mode 100644 index 00000000..ba0b48a1 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/Plex.java @@ -0,0 +1,75 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.models.operations.GetServerResourcesRequest; +import dev.plexapi.sdk.models.operations.GetServerResourcesRequestBuilder; +import dev.plexapi.sdk.models.operations.GetServerResourcesResponse; +import dev.plexapi.sdk.operations.GetServerResources; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + + +public class Plex { + private final SDKConfiguration sdkConfiguration; + private final AsyncPlex asyncSDK; + + Plex(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + this.asyncSDK = new AsyncPlex(this, sdkConfiguration); + } + + /** + * Switches to the async SDK. + * + * @return The async SDK + */ + public AsyncPlex async() { + return asyncSDK; + } + + /** + * Get Server Resources + * + *

Get Plex server access tokens and server connections + * + * @return The call builder + */ + public GetServerResourcesRequestBuilder getServerResources() { + return new GetServerResourcesRequestBuilder(sdkConfiguration); + } + + /** + * Get Server Resources + * + *

Get Plex server access tokens and server connections + * + * @param request The request object containing all the parameters for the API call. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public GetServerResourcesResponse getServerResources(GetServerResourcesRequest request) throws Exception { + return getServerResources(request, Optional.empty()); + } + + /** + * Get Server Resources + * + *

Get Plex server access tokens and server connections + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public GetServerResourcesResponse getServerResources(GetServerResourcesRequest request, Optional serverURL) throws Exception { + RequestOperation operation + = new GetServerResources.Sync(sdkConfiguration, serverURL); + return operation.handleResponse(operation.doRequest(request)); + } + +} diff --git a/src/main/java/dev/plexapi/sdk/PlexAPI.java b/src/main/java/dev/plexapi/sdk/PlexAPI.java index e5690a78..63a86271 100644 --- a/src/main/java/dev/plexapi/sdk/PlexAPI.java +++ b/src/main/java/dev/plexapi/sdk/PlexAPI.java @@ -204,6 +204,15 @@ public class PlexAPI { */ private final Updater updater; + + private final Authentication authentication; + + + private final Users users; + + + private final Plex plex; + /** * The actual content of the media provider */ @@ -441,6 +450,21 @@ public class PlexAPI { return updater; } + + public Authentication authentication() { + return authentication; + } + + + public Users users() { + return users; + } + + + public Plex plex() { + return plex; + } + /** * The actual content of the media provider */ @@ -856,6 +880,9 @@ public class PlexAPI { this.ultraBlur = new UltraBlur(sdkConfiguration); this.status = new Status(sdkConfiguration); this.updater = new Updater(sdkConfiguration); + this.authentication = new Authentication(sdkConfiguration); + this.users = new Users(sdkConfiguration); + this.plex = new Plex(sdkConfiguration); this.content = new Content(sdkConfiguration); this.libraryCollections = new LibraryCollections(sdkConfiguration); SdkInitData data = this.sdkConfiguration.hooks().sdkInit( diff --git a/src/main/java/dev/plexapi/sdk/SDKConfiguration.java b/src/main/java/dev/plexapi/sdk/SDKConfiguration.java index d820c57c..f6c67210 100644 --- a/src/main/java/dev/plexapi/sdk/SDKConfiguration.java +++ b/src/main/java/dev/plexapi/sdk/SDKConfiguration.java @@ -25,7 +25,7 @@ public class SDKConfiguration { private static final String LANGUAGE = "java"; public static final String OPENAPI_DOC_VERSION = "1.1.1"; - public static final String SDK_VERSION = "0.21.1"; + public static final String SDK_VERSION = "0.22.1"; public static final String GEN_VERSION = "2.698.4"; private static final String BASE_PACKAGE = "dev.plexapi.sdk"; public static final String USER_AGENT = diff --git a/src/main/java/dev/plexapi/sdk/Users.java b/src/main/java/dev/plexapi/sdk/Users.java new file mode 100644 index 00000000..c307aa47 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/Users.java @@ -0,0 +1,75 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.models.operations.GetUsersRequest; +import dev.plexapi.sdk.models.operations.GetUsersRequestBuilder; +import dev.plexapi.sdk.models.operations.GetUsersResponse; +import dev.plexapi.sdk.operations.GetUsers; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + + +public class Users { + private final SDKConfiguration sdkConfiguration; + private final AsyncUsers asyncSDK; + + Users(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + this.asyncSDK = new AsyncUsers(this, sdkConfiguration); + } + + /** + * Switches to the async SDK. + * + * @return The async SDK + */ + public AsyncUsers async() { + return asyncSDK; + } + + /** + * Get list of all connected users + * + *

Get list of all users that are friends and have library access with the provided Plex authentication token + * + * @return The call builder + */ + public GetUsersRequestBuilder getUsers() { + return new GetUsersRequestBuilder(sdkConfiguration); + } + + /** + * Get list of all connected users + * + *

Get list of all users that are friends and have library access with the provided Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public GetUsersResponse getUsers(GetUsersRequest request) throws Exception { + return getUsers(request, Optional.empty()); + } + + /** + * Get list of all connected users + * + *

Get list of all users that are friends and have library access with the provided Plex authentication token + * + * @param request The request object containing all the parameters for the API call. + * @param serverURL Overrides the server URL. + * @return The response from the API call + * @throws Exception if the API call fails + */ + public GetUsersResponse getUsers(GetUsersRequest request, Optional serverURL) throws Exception { + RequestOperation operation + = new GetUsers.Sync(sdkConfiguration, serverURL); + return operation.handleResponse(operation.doRequest(request)); + } + +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/Errors.java b/src/main/java/dev/plexapi/sdk/models/errors/Errors.java new file mode 100644 index 00000000..b29dd1e6 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/Errors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class Errors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public Errors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public Errors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public Errors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public Errors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public Errors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public Errors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public Errors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public Errors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Errors other = (Errors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(Errors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public Errors build() { + + return new Errors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesErrors.java b/src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesErrors.java new file mode 100644 index 00000000..8ffc345c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesErrors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class GetServerResourcesErrors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public GetServerResourcesErrors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public GetServerResourcesErrors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetServerResourcesErrors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public GetServerResourcesErrors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public GetServerResourcesErrors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public GetServerResourcesErrors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public GetServerResourcesErrors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public GetServerResourcesErrors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetServerResourcesErrors other = (GetServerResourcesErrors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(GetServerResourcesErrors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public GetServerResourcesErrors build() { + + return new GetServerResourcesErrors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesUnauthorized.java new file mode 100644 index 00000000..84894291 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetServerResourcesUnauthorized.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetServerResourcesUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class GetServerResourcesUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetServerResourcesUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetServerResourcesUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetServerResourcesUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetServerResourcesUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetServerResourcesUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetServerResourcesUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetServerResourcesUnauthorized other = (GetServerResourcesUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetServerResourcesUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetServerResourcesUnauthorized build() { + + return new GetServerResourcesUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsBadRequest.java b/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsBadRequest.java new file mode 100644 index 00000000..5478115f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsBadRequest.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetTokenDetailsBadRequest + * + *

Bad Request - A parameter was not specified, or was specified incorrectly. + */ +@SuppressWarnings("serial") +public class GetTokenDetailsBadRequest extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetTokenDetailsBadRequest( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetTokenDetailsBadRequest() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetTokenDetailsBadRequest withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetTokenDetailsBadRequest withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsBadRequest withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsBadRequest withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsBadRequest other = (GetTokenDetailsBadRequest) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsBadRequest.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetTokenDetailsBadRequest build() { + + return new GetTokenDetailsBadRequest( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsErrors.java b/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsErrors.java new file mode 100644 index 00000000..e6d7315b --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsErrors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class GetTokenDetailsErrors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public GetTokenDetailsErrors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public GetTokenDetailsErrors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetTokenDetailsErrors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public GetTokenDetailsErrors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public GetTokenDetailsErrors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public GetTokenDetailsErrors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public GetTokenDetailsErrors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public GetTokenDetailsErrors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsErrors other = (GetTokenDetailsErrors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsErrors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public GetTokenDetailsErrors build() { + + return new GetTokenDetailsErrors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsUnauthorized.java new file mode 100644 index 00000000..caee2f79 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetTokenDetailsUnauthorized.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetTokenDetailsUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class GetTokenDetailsUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetTokenDetailsUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetTokenDetailsUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetTokenDetailsUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetTokenDetailsUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsUnauthorized other = (GetTokenDetailsUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetTokenDetailsUnauthorized build() { + + return new GetTokenDetailsUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetUsersBadRequest.java b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersBadRequest.java new file mode 100644 index 00000000..779c9445 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersBadRequest.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetUsersBadRequest + * + *

Bad Request - A parameter was not specified, or was specified incorrectly. + */ +@SuppressWarnings("serial") +public class GetUsersBadRequest extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetUsersBadRequest( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetUsersBadRequest() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetUsersBadRequest withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetUsersBadRequest withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersBadRequest withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersBadRequest withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersBadRequest other = (GetUsersBadRequest) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetUsersBadRequest.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetUsersBadRequest build() { + + return new GetUsersBadRequest( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetUsersErrors.java b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersErrors.java new file mode 100644 index 00000000..000c5a00 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersErrors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class GetUsersErrors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public GetUsersErrors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public GetUsersErrors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetUsersErrors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public GetUsersErrors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public GetUsersErrors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public GetUsersErrors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public GetUsersErrors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public GetUsersErrors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersErrors other = (GetUsersErrors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(GetUsersErrors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public GetUsersErrors build() { + + return new GetUsersErrors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetUsersUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersUnauthorized.java new file mode 100644 index 00000000..4c6188be --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersUnauthorized.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetUsersUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class GetUsersUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetUsersUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetUsersUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetUsersUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetUsersUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersUnauthorized other = (GetUsersUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetUsersUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetUsersUnauthorized build() { + + return new GetUsersUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/GetUsersUsersErrors.java b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersUsersErrors.java new file mode 100644 index 00000000..dcce047e --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/GetUsersUsersErrors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class GetUsersUsersErrors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public GetUsersUsersErrors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public GetUsersUsersErrors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetUsersUsersErrors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public GetUsersUsersErrors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public GetUsersUsersErrors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public GetUsersUsersErrors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public GetUsersUsersErrors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public GetUsersUsersErrors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersUsersErrors other = (GetUsersUsersErrors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(GetUsersUsersErrors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public GetUsersUsersErrors build() { + + return new GetUsersUsersErrors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataAuthenticationErrors.java b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataAuthenticationErrors.java new file mode 100644 index 00000000..a2a3bf96 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataAuthenticationErrors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class PostUsersSignInDataAuthenticationErrors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public PostUsersSignInDataAuthenticationErrors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public PostUsersSignInDataAuthenticationErrors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataAuthenticationErrors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public PostUsersSignInDataAuthenticationErrors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public PostUsersSignInDataAuthenticationErrors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public PostUsersSignInDataAuthenticationErrors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public PostUsersSignInDataAuthenticationErrors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public PostUsersSignInDataAuthenticationErrors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataAuthenticationErrors other = (PostUsersSignInDataAuthenticationErrors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataAuthenticationErrors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public PostUsersSignInDataAuthenticationErrors build() { + + return new PostUsersSignInDataAuthenticationErrors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataBadRequest.java b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataBadRequest.java new file mode 100644 index 00000000..3276d5b4 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataBadRequest.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * PostUsersSignInDataBadRequest + * + *

Bad Request - A parameter was not specified, or was specified incorrectly. + */ +@SuppressWarnings("serial") +public class PostUsersSignInDataBadRequest extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public PostUsersSignInDataBadRequest( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public PostUsersSignInDataBadRequest() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataBadRequest withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public PostUsersSignInDataBadRequest withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataBadRequest withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataBadRequest withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataBadRequest other = (PostUsersSignInDataBadRequest) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataBadRequest.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public PostUsersSignInDataBadRequest build() { + + return new PostUsersSignInDataBadRequest( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataErrors.java b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataErrors.java new file mode 100644 index 00000000..540ccfb9 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataErrors.java @@ -0,0 +1,198 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class PostUsersSignInDataErrors { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("code") + private Optional code; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("message") + private Optional message; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + @JsonCreator + public PostUsersSignInDataErrors( + @JsonProperty("code") Optional code, + @JsonProperty("message") Optional message, + @JsonProperty("status") Optional status) { + Utils.checkNotNull(code, "code"); + Utils.checkNotNull(message, "message"); + Utils.checkNotNull(status, "status"); + this.code = code; + this.message = message; + this.status = status; + } + + public PostUsersSignInDataErrors() { + this(Optional.empty(), Optional.empty(), Optional.empty()); + } + + @JsonIgnore + public Optional code() { + return code; + } + + @JsonIgnore + public Optional message() { + return message; + } + + @JsonIgnore + public Optional status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataErrors withCode(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + + public PostUsersSignInDataErrors withCode(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + public PostUsersSignInDataErrors withMessage(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + + public PostUsersSignInDataErrors withMessage(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + public PostUsersSignInDataErrors withStatus(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + public PostUsersSignInDataErrors withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataErrors other = (PostUsersSignInDataErrors) o; + return + Utils.enhancedDeepEquals(this.code, other.code) && + Utils.enhancedDeepEquals(this.message, other.message) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + code, message, status); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataErrors.class, + "code", code, + "message", message, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional code = Optional.empty(); + + private Optional message = Optional.empty(); + + private Optional status = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder code(int code) { + Utils.checkNotNull(code, "code"); + this.code = Optional.ofNullable(code); + return this; + } + + public Builder code(Optional code) { + Utils.checkNotNull(code, "code"); + this.code = code; + return this; + } + + + public Builder message(String message) { + Utils.checkNotNull(message, "message"); + this.message = Optional.ofNullable(message); + return this; + } + + public Builder message(Optional message) { + Utils.checkNotNull(message, "message"); + this.message = message; + return this; + } + + + public Builder status(int status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public PostUsersSignInDataErrors build() { + + return new PostUsersSignInDataErrors( + code, message, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataUnauthorized.java new file mode 100644 index 00000000..5c5b622f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/PostUsersSignInDataUnauthorized.java @@ -0,0 +1,185 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * PostUsersSignInDataUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class PostUsersSignInDataUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public PostUsersSignInDataUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public PostUsersSignInDataUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public PostUsersSignInDataUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataUnauthorized other = (PostUsersSignInDataUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public PostUsersSignInDataUnauthorized build() { + + return new PostUsersSignInDataUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/GetServerResourcesUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/async/GetServerResourcesUnauthorized.java new file mode 100644 index 00000000..6da8e9bc --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/GetServerResourcesUnauthorized.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.GetServerResourcesErrors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetServerResourcesUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class GetServerResourcesUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetServerResourcesUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetServerResourcesUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetServerResourcesUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetServerResourcesUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetServerResourcesUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetServerResourcesUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetServerResourcesUnauthorized other = (GetServerResourcesUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetServerResourcesUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetServerResourcesUnauthorized build() { + + return new GetServerResourcesUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsBadRequest.java b/src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsBadRequest.java new file mode 100644 index 00000000..d033b82f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsBadRequest.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.Errors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetTokenDetailsBadRequest + * + *

Bad Request - A parameter was not specified, or was specified incorrectly. + */ +@SuppressWarnings("serial") +public class GetTokenDetailsBadRequest extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetTokenDetailsBadRequest( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetTokenDetailsBadRequest() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetTokenDetailsBadRequest withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetTokenDetailsBadRequest withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsBadRequest withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsBadRequest withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsBadRequest other = (GetTokenDetailsBadRequest) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsBadRequest.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetTokenDetailsBadRequest build() { + + return new GetTokenDetailsBadRequest( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsUnauthorized.java new file mode 100644 index 00000000..64015158 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/GetTokenDetailsUnauthorized.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.GetTokenDetailsErrors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetTokenDetailsUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class GetTokenDetailsUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetTokenDetailsUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetTokenDetailsUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetTokenDetailsUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetTokenDetailsUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsUnauthorized other = (GetTokenDetailsUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetTokenDetailsUnauthorized build() { + + return new GetTokenDetailsUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersBadRequest.java b/src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersBadRequest.java new file mode 100644 index 00000000..8f9bbc0f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersBadRequest.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.GetUsersErrors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetUsersBadRequest + * + *

Bad Request - A parameter was not specified, or was specified incorrectly. + */ +@SuppressWarnings("serial") +public class GetUsersBadRequest extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetUsersBadRequest( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetUsersBadRequest() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetUsersBadRequest withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetUsersBadRequest withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersBadRequest withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersBadRequest withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersBadRequest other = (GetUsersBadRequest) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetUsersBadRequest.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetUsersBadRequest build() { + + return new GetUsersBadRequest( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersUnauthorized.java new file mode 100644 index 00000000..de9f10cb --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/GetUsersUnauthorized.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.GetUsersUsersErrors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * GetUsersUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class GetUsersUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public GetUsersUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public GetUsersUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public GetUsersUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public GetUsersUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersUnauthorized other = (GetUsersUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(GetUsersUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public GetUsersUnauthorized build() { + + return new GetUsersUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataBadRequest.java b/src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataBadRequest.java new file mode 100644 index 00000000..83ac2655 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataBadRequest.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.PostUsersSignInDataErrors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * PostUsersSignInDataBadRequest + * + *

Bad Request - A parameter was not specified, or was specified incorrectly. + */ +@SuppressWarnings("serial") +public class PostUsersSignInDataBadRequest extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public PostUsersSignInDataBadRequest( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public PostUsersSignInDataBadRequest() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataBadRequest withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public PostUsersSignInDataBadRequest withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataBadRequest withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataBadRequest withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataBadRequest other = (PostUsersSignInDataBadRequest) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataBadRequest.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public PostUsersSignInDataBadRequest build() { + + return new PostUsersSignInDataBadRequest( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataUnauthorized.java b/src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataUnauthorized.java new file mode 100644 index 00000000..7a6476f9 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/errors/async/PostUsersSignInDataUnauthorized.java @@ -0,0 +1,186 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.errors.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.models.errors.PostUsersSignInDataAuthenticationErrors; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + +/** + * PostUsersSignInDataUnauthorized + * + *

Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + */ +@SuppressWarnings("serial") +public class PostUsersSignInDataUnauthorized extends RuntimeException { + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("errors") + private Optional> errors; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("RawResponse") + private Optional> rawResponse; + + @JsonCreator + public PostUsersSignInDataUnauthorized( + @JsonProperty("errors") Optional> errors, + @JsonProperty("RawResponse") Optional> rawResponse) { + super("API error occurred"); + Utils.checkNotNull(errors, "errors"); + Utils.checkNotNull(rawResponse, "rawResponse"); + this.errors = errors; + this.rawResponse = rawResponse; + } + + public PostUsersSignInDataUnauthorized() { + this(Optional.empty(), Optional.empty()); + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> errors() { + return (Optional>) errors; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> rawResponse() { + return (Optional>) rawResponse; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataUnauthorized withErrors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + + public PostUsersSignInDataUnauthorized withErrors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataUnauthorized withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataUnauthorized withRawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataUnauthorized other = (PostUsersSignInDataUnauthorized) o; + return + Utils.enhancedDeepEquals(this.errors, other.errors) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + errors, rawResponse); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataUnauthorized.class, + "errors", errors, + "rawResponse", rawResponse); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> errors = Optional.empty(); + + private Optional> rawResponse; + + private Builder() { + // force use of static builder() method + } + + + public Builder errors(List errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = Optional.ofNullable(errors); + return this; + } + + public Builder errors(Optional> errors) { + Utils.checkNotNull(errors, "errors"); + this.errors = errors; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = Optional.ofNullable(rawResponse); + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(Optional> rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + public PostUsersSignInDataUnauthorized build() { + + return new PostUsersSignInDataUnauthorized( + errors, rawResponse); + } + + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AddDownloadQueueItemsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/AddDownloadQueueItemsRequest.java index 82847419..04afc9b6 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/AddDownloadQueueItemsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/AddDownloadQueueItemsRequest.java @@ -1596,19 +1596,19 @@ public class AddDownloadQueueItemsRequest { private Optional audioChannelCount = Optional.empty(); - private Optional autoAdjustQuality = Optional.empty(); + private Optional autoAdjustQuality; - private Optional autoAdjustSubtitle = Optional.empty(); + private Optional autoAdjustSubtitle; - private Optional directPlay = Optional.empty(); + private Optional directPlay; - private Optional directStream = Optional.empty(); + private Optional directStream; - private Optional directStreamAudio = Optional.empty(); + private Optional directStreamAudio; - private Optional disableResolutionRotation = Optional.empty(); + private Optional disableResolutionRotation; - private Optional hasMDE = Optional.empty(); + private Optional hasMDE; private Optional location = Optional.empty(); @@ -2373,6 +2373,27 @@ public class AddDownloadQueueItemsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (autoAdjustQuality == null) { + autoAdjustQuality = _SINGLETON_VALUE_AutoAdjustQuality.value(); + } + if (autoAdjustSubtitle == null) { + autoAdjustSubtitle = _SINGLETON_VALUE_AutoAdjustSubtitle.value(); + } + if (directPlay == null) { + directPlay = _SINGLETON_VALUE_DirectPlay.value(); + } + if (directStream == null) { + directStream = _SINGLETON_VALUE_DirectStream.value(); + } + if (directStreamAudio == null) { + directStreamAudio = _SINGLETON_VALUE_DirectStreamAudio.value(); + } + if (disableResolutionRotation == null) { + disableResolutionRotation = _SINGLETON_VALUE_DisableResolutionRotation.value(); + } + if (hasMDE == null) { + hasMDE = _SINGLETON_VALUE_HasMDE.value(); + } return new AddDownloadQueueItemsRequest( accepts, clientIdentifier, product, @@ -2396,5 +2417,47 @@ public class AddDownloadQueueItemsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustQuality = + new LazySingletonValue<>( + "autoAdjustQuality", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustSubtitle = + new LazySingletonValue<>( + "autoAdjustSubtitle", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectPlay = + new LazySingletonValue<>( + "directPlay", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStream = + new LazySingletonValue<>( + "directStream", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStreamAudio = + new LazySingletonValue<>( + "directStreamAudio", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DisableResolutionRotation = + new LazySingletonValue<>( + "disableResolutionRotation", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HasMDE = + new LazySingletonValue<>( + "hasMDE", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AddSectionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/AddSectionRequest.java index e7a19141..2bc77d4e 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/AddSectionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/AddSectionRequest.java @@ -876,9 +876,9 @@ public class AddSectionRequest { private Optional prefs = Optional.empty(); - private Optional relative = Optional.empty(); + private Optional relative; - private Optional importFromiTunes = Optional.empty(); + private Optional importFromiTunes; private Builder() { // force use of static builder() method @@ -1251,6 +1251,12 @@ public class AddSectionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (relative == null) { + relative = _SINGLETON_VALUE_Relative.value(); + } + if (importFromiTunes == null) { + importFromiTunes = _SINGLETON_VALUE_ImportFromiTunes.value(); + } return new AddSectionRequest( accepts, clientIdentifier, product, @@ -1268,5 +1274,17 @@ public class AddSectionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Relative = + new LazySingletonValue<>( + "relative", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_ImportFromiTunes = + new LazySingletonValue<>( + "importFromiTunes", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AddSubtitlesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/AddSubtitlesRequest.java index 05774874..cb1f7bcc 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/AddSubtitlesRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/AddSubtitlesRequest.java @@ -746,9 +746,9 @@ public class AddSubtitlesRequest { private Optional format = Optional.empty(); - private Optional forced = Optional.empty(); + private Optional forced; - private Optional hearingImpaired = Optional.empty(); + private Optional hearingImpaired; private Builder() { // force use of static builder() method @@ -1071,6 +1071,12 @@ public class AddSubtitlesRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (forced == null) { + forced = _SINGLETON_VALUE_Forced.value(); + } + if (hearingImpaired == null) { + hearingImpaired = _SINGLETON_VALUE_HearingImpaired.value(); + } return new AddSubtitlesRequest( accepts, clientIdentifier, product, @@ -1088,5 +1094,17 @@ public class AddSubtitlesRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Forced = + new LazySingletonValue<>( + "forced", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HearingImpaired = + new LazySingletonValue<>( + "hearingImpaired", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AddToPlayQueueRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/AddToPlayQueueRequest.java index 0427ea93..c1092d9b 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/AddToPlayQueueRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/AddToPlayQueueRequest.java @@ -657,7 +657,7 @@ public class AddToPlayQueueRequest { private Optional playlistID = Optional.empty(); - private Optional next = Optional.empty(); + private Optional next; private Builder() { // force use of static builder() method @@ -943,6 +943,9 @@ public class AddToPlayQueueRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (next == null) { + next = _SINGLETON_VALUE_Next.value(); + } return new AddToPlayQueueRequest( accepts, clientIdentifier, product, @@ -958,5 +961,11 @@ public class AddToPlayQueueRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Next = + new LazySingletonValue<>( + "next", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AllLibraries.java b/src/main/java/dev/plexapi/sdk/models/operations/AllLibraries.java new file mode 100644 index 00000000..c1abe1a9 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/AllLibraries.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AllLibraries + * + *

Indicates if the user has access to all libraries. + */ +public enum AllLibraries { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + AllLibraries(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AllLibraries o: AllLibraries.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AllowCameraUpload.java b/src/main/java/dev/plexapi/sdk/models/operations/AllowCameraUpload.java new file mode 100644 index 00000000..a8d7337c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/AllowCameraUpload.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AllowCameraUpload + * + *

Indicates if the user is allowed to upload from a camera. + */ +public enum AllowCameraUpload { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + AllowCameraUpload(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AllowCameraUpload o: AllowCameraUpload.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AllowChannels.java b/src/main/java/dev/plexapi/sdk/models/operations/AllowChannels.java new file mode 100644 index 00000000..c9babd16 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/AllowChannels.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AllowChannels + * + *

Indicates if the user has access to channels. + */ +public enum AllowChannels { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + AllowChannels(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AllowChannels o: AllowChannels.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AllowSubtitleAdmin.java b/src/main/java/dev/plexapi/sdk/models/operations/AllowSubtitleAdmin.java new file mode 100644 index 00000000..6294583c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/AllowSubtitleAdmin.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AllowSubtitleAdmin + * + *

Indicates if the user can manage subtitles. + */ +public enum AllowSubtitleAdmin { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + AllowSubtitleAdmin(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AllowSubtitleAdmin o: AllowSubtitleAdmin.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AllowSync.java b/src/main/java/dev/plexapi/sdk/models/operations/AllowSync.java new file mode 100644 index 00000000..d95b9d70 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/AllowSync.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AllowSync + * + *

Indicates if the user is allowed to sync media. + */ +public enum AllowSync { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + AllowSync(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AllowSync o: AllowSync.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AllowTuners.java b/src/main/java/dev/plexapi/sdk/models/operations/AllowTuners.java new file mode 100644 index 00000000..48d98770 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/AllowTuners.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AllowTuners + * + *

Indicates if the user is allowed to use tuners. + */ +public enum AllowTuners { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + AllowTuners(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AllowTuners o: AllowTuners.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ApplyUpdatesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/ApplyUpdatesRequest.java index 03306833..f45842b8 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ApplyUpdatesRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ApplyUpdatesRequest.java @@ -584,9 +584,9 @@ public class ApplyUpdatesRequest { private Optional marketplace = Optional.empty(); - private Optional tonight = Optional.empty(); + private Optional tonight; - private Optional skip = Optional.empty(); + private Optional skip; private Builder() { // force use of static builder() method @@ -843,6 +843,12 @@ public class ApplyUpdatesRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (tonight == null) { + tonight = _SINGLETON_VALUE_Tonight.value(); + } + if (skip == null) { + skip = _SINGLETON_VALUE_Skip.value(); + } return new ApplyUpdatesRequest( accepts, clientIdentifier, product, @@ -858,5 +864,17 @@ public class ApplyUpdatesRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Tonight = + new LazySingletonValue<>( + "tonight", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Skip = + new LazySingletonValue<>( + "skip", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/AutocompleteRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/AutocompleteRequest.java index fddfd209..ae508014 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/AutocompleteRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/AutocompleteRequest.java @@ -104,7 +104,22 @@ public class AutocompleteRequest { private Optional fieldQuery; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; @@ -281,7 +296,22 @@ public class AutocompleteRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -551,7 +581,22 @@ public class AutocompleteRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public AutocompleteRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -561,7 +606,22 @@ public class AutocompleteRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public AutocompleteRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -922,7 +982,22 @@ public class AutocompleteRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -931,7 +1006,22 @@ public class AutocompleteRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Billing.java b/src/main/java/dev/plexapi/sdk/models/operations/Billing.java new file mode 100644 index 00000000..c08bed1e --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Billing.java @@ -0,0 +1,142 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class Billing { + + @JsonProperty("internalPaymentMethod") + private InternalPaymentMethod internalPaymentMethod; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("paymentMethodId") + private Optional paymentMethodId; + + @JsonCreator + public Billing( + @JsonProperty("internalPaymentMethod") InternalPaymentMethod internalPaymentMethod, + @JsonProperty("paymentMethodId") Optional paymentMethodId) { + Utils.checkNotNull(internalPaymentMethod, "internalPaymentMethod"); + Utils.checkNotNull(paymentMethodId, "paymentMethodId"); + this.internalPaymentMethod = internalPaymentMethod; + this.paymentMethodId = paymentMethodId; + } + + public Billing( + InternalPaymentMethod internalPaymentMethod) { + this(internalPaymentMethod, Optional.empty()); + } + + @JsonIgnore + public InternalPaymentMethod internalPaymentMethod() { + return internalPaymentMethod; + } + + @JsonIgnore + public Optional paymentMethodId() { + return paymentMethodId; + } + + public static Builder builder() { + return new Builder(); + } + + + public Billing withInternalPaymentMethod(InternalPaymentMethod internalPaymentMethod) { + Utils.checkNotNull(internalPaymentMethod, "internalPaymentMethod"); + this.internalPaymentMethod = internalPaymentMethod; + return this; + } + + public Billing withPaymentMethodId(long paymentMethodId) { + Utils.checkNotNull(paymentMethodId, "paymentMethodId"); + this.paymentMethodId = Optional.ofNullable(paymentMethodId); + return this; + } + + + public Billing withPaymentMethodId(Optional paymentMethodId) { + Utils.checkNotNull(paymentMethodId, "paymentMethodId"); + this.paymentMethodId = paymentMethodId; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Billing other = (Billing) o; + return + Utils.enhancedDeepEquals(this.internalPaymentMethod, other.internalPaymentMethod) && + Utils.enhancedDeepEquals(this.paymentMethodId, other.paymentMethodId); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + internalPaymentMethod, paymentMethodId); + } + + @Override + public String toString() { + return Utils.toString(Billing.class, + "internalPaymentMethod", internalPaymentMethod, + "paymentMethodId", paymentMethodId); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private InternalPaymentMethod internalPaymentMethod; + + private Optional paymentMethodId = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder internalPaymentMethod(InternalPaymentMethod internalPaymentMethod) { + Utils.checkNotNull(internalPaymentMethod, "internalPaymentMethod"); + this.internalPaymentMethod = internalPaymentMethod; + return this; + } + + + public Builder paymentMethodId(long paymentMethodId) { + Utils.checkNotNull(paymentMethodId, "paymentMethodId"); + this.paymentMethodId = Optional.ofNullable(paymentMethodId); + return this; + } + + public Builder paymentMethodId(Optional paymentMethodId) { + Utils.checkNotNull(paymentMethodId, "paymentMethodId"); + this.paymentMethodId = paymentMethodId; + return this; + } + + public Billing build() { + + return new Billing( + internalPaymentMethod, paymentMethodId); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ButlerTask.java b/src/main/java/dev/plexapi/sdk/models/operations/ButlerTask.java index 586c23ed..a9f46ec4 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ButlerTask.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ButlerTask.java @@ -3,431 +3,58 @@ */ package dev.plexapi.sdk.models.operations; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import dev.plexapi.sdk.utils.Utils; -import java.lang.Boolean; -import java.lang.Long; -import java.lang.Override; +import com.fasterxml.jackson.annotation.JsonValue; import java.lang.String; +import java.util.Objects; import java.util.Optional; +/** + * ButlerTask + * + *

The task name + */ +public enum ButlerTask { + AUTOMATIC_UPDATES("AutomaticUpdates"), + BACKUP_DATABASE("BackupDatabase"), + BUTLER_TASK_GENERATE_AD_MARKERS("ButlerTaskGenerateAdMarkers"), + BUTLER_TASK_GENERATE_CREDITS_MARKERS("ButlerTaskGenerateCreditsMarkers"), + BUTLER_TASK_GENERATE_INTRO_MARKERS("ButlerTaskGenerateIntroMarkers"), + BUTLER_TASK_GENERATE_VOICE_ACTIVITY("ButlerTaskGenerateVoiceActivity"), + CLEAN_OLD_BUNDLES("CleanOldBundles"), + CLEAN_OLD_CACHE_FILES("CleanOldCacheFiles"), + DEEP_MEDIA_ANALYSIS("DeepMediaAnalysis"), + GARBAGE_COLLECT_BLOBS("GarbageCollectBlobs"), + GARBAGE_COLLECT_LIBRARY_MEDIA("GarbageCollectLibraryMedia"), + GENERATE_BLUR_HASHES("GenerateBlurHashes"), + GENERATE_CHAPTER_THUMBS("GenerateChapterThumbs"), + GENERATE_MEDIA_INDEX_FILES("GenerateMediaIndexFiles"), + LOUDNESS_ANALYSIS("LoudnessAnalysis"), + MUSIC_ANALYSIS("MusicAnalysis"), + OPTIMIZE_DATABASE("OptimizeDatabase"), + REFRESH_EPG_GUIDES("RefreshEpgGuides"), + REFRESH_LIBRARIES("RefreshLibraries"), + REFRESH_LOCAL_MEDIA("RefreshLocalMedia"), + REFRESH_PERIODIC_METADATA("RefreshPeriodicMetadata"), + UPGRADE_MEDIA_ANALYSIS("UpgradeMediaAnalysis"); -public class ButlerTask { - /** - * A user-friendly description of the task - */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("description") - private Optional description; + @JsonValue + private final String value; - /** - * Whether this task is enabled or not - */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("enabled") - private Optional enabled; - - /** - * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("interval") - private Optional interval; - - /** - * The name of the task - */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("name") - private Optional name; - - /** - * Indicates whether the timing of the task is randomized within the butler interval - */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("scheduleRandomized") - private Optional scheduleRandomized; - - /** - * A user-friendly title of the task - */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("title") - private Optional title; - - @JsonCreator - public ButlerTask( - @JsonProperty("description") Optional description, - @JsonProperty("enabled") Optional enabled, - @JsonProperty("interval") Optional interval, - @JsonProperty("name") Optional name, - @JsonProperty("scheduleRandomized") Optional scheduleRandomized, - @JsonProperty("title") Optional title) { - Utils.checkNotNull(description, "description"); - Utils.checkNotNull(enabled, "enabled"); - Utils.checkNotNull(interval, "interval"); - Utils.checkNotNull(name, "name"); - Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); - Utils.checkNotNull(title, "title"); - this.description = description; - this.enabled = enabled; - this.interval = interval; - this.name = name; - this.scheduleRandomized = scheduleRandomized; - this.title = title; + ButlerTask(String value) { + this.value = value; } - public ButlerTask() { - this(Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty()); - } - - /** - * A user-friendly description of the task - */ - @JsonIgnore - public Optional description() { - return description; - } - - /** - * Whether this task is enabled or not - */ - @JsonIgnore - public Optional enabled() { - return enabled; - } - - /** - * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - */ - @JsonIgnore - public Optional interval() { - return interval; - } - - /** - * The name of the task - */ - @JsonIgnore - public Optional name() { - return name; - } - - /** - * Indicates whether the timing of the task is randomized within the butler interval - */ - @JsonIgnore - public Optional scheduleRandomized() { - return scheduleRandomized; - } - - /** - * A user-friendly title of the task - */ - @JsonIgnore - public Optional title() { - return title; - } - - public static Builder builder() { - return new Builder(); - } - - - /** - * A user-friendly description of the task - */ - public ButlerTask withDescription(String description) { - Utils.checkNotNull(description, "description"); - this.description = Optional.ofNullable(description); - return this; - } - - - /** - * A user-friendly description of the task - */ - public ButlerTask withDescription(Optional description) { - Utils.checkNotNull(description, "description"); - this.description = description; - return this; - } - - /** - * Whether this task is enabled or not - */ - public ButlerTask withEnabled(boolean enabled) { - Utils.checkNotNull(enabled, "enabled"); - this.enabled = Optional.ofNullable(enabled); - return this; - } - - - /** - * Whether this task is enabled or not - */ - public ButlerTask withEnabled(Optional enabled) { - Utils.checkNotNull(enabled, "enabled"); - this.enabled = enabled; - return this; - } - - /** - * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - */ - public ButlerTask withInterval(long interval) { - Utils.checkNotNull(interval, "interval"); - this.interval = Optional.ofNullable(interval); - return this; - } - - - /** - * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - */ - public ButlerTask withInterval(Optional interval) { - Utils.checkNotNull(interval, "interval"); - this.interval = interval; - return this; - } - - /** - * The name of the task - */ - public ButlerTask withName(String name) { - Utils.checkNotNull(name, "name"); - this.name = Optional.ofNullable(name); - return this; - } - - - /** - * The name of the task - */ - public ButlerTask withName(Optional name) { - Utils.checkNotNull(name, "name"); - this.name = name; - return this; - } - - /** - * Indicates whether the timing of the task is randomized within the butler interval - */ - public ButlerTask withScheduleRandomized(boolean scheduleRandomized) { - Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); - this.scheduleRandomized = Optional.ofNullable(scheduleRandomized); - return this; - } - - - /** - * Indicates whether the timing of the task is randomized within the butler interval - */ - public ButlerTask withScheduleRandomized(Optional scheduleRandomized) { - Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); - this.scheduleRandomized = scheduleRandomized; - return this; - } - - /** - * A user-friendly title of the task - */ - public ButlerTask withTitle(String title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * A user-friendly title of the task - */ - public ButlerTask withTitle(Optional title) { - Utils.checkNotNull(title, "title"); - this.title = title; - return this; - } - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ButlerTask other = (ButlerTask) o; - return - Utils.enhancedDeepEquals(this.description, other.description) && - Utils.enhancedDeepEquals(this.enabled, other.enabled) && - Utils.enhancedDeepEquals(this.interval, other.interval) && - Utils.enhancedDeepEquals(this.name, other.name) && - Utils.enhancedDeepEquals(this.scheduleRandomized, other.scheduleRandomized) && - Utils.enhancedDeepEquals(this.title, other.title); + public String value() { + return value; } - @Override - public int hashCode() { - return Utils.enhancedHash( - description, enabled, interval, - name, scheduleRandomized, title); - } - - @Override - public String toString() { - return Utils.toString(ButlerTask.class, - "description", description, - "enabled", enabled, - "interval", interval, - "name", name, - "scheduleRandomized", scheduleRandomized, - "title", title); - } - - @SuppressWarnings("UnusedReturnValue") - public final static class Builder { - - private Optional description = Optional.empty(); - - private Optional enabled = Optional.empty(); - - private Optional interval = Optional.empty(); - - private Optional name = Optional.empty(); - - private Optional scheduleRandomized = Optional.empty(); - - private Optional title = Optional.empty(); - - private Builder() { - // force use of static builder() method + public static Optional fromValue(String value) { + for (ButlerTask o: ButlerTask.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } } - - - /** - * A user-friendly description of the task - */ - public Builder description(String description) { - Utils.checkNotNull(description, "description"); - this.description = Optional.ofNullable(description); - return this; - } - - /** - * A user-friendly description of the task - */ - public Builder description(Optional description) { - Utils.checkNotNull(description, "description"); - this.description = description; - return this; - } - - - /** - * Whether this task is enabled or not - */ - public Builder enabled(boolean enabled) { - Utils.checkNotNull(enabled, "enabled"); - this.enabled = Optional.ofNullable(enabled); - return this; - } - - /** - * Whether this task is enabled or not - */ - public Builder enabled(Optional enabled) { - Utils.checkNotNull(enabled, "enabled"); - this.enabled = enabled; - return this; - } - - - /** - * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - */ - public Builder interval(long interval) { - Utils.checkNotNull(interval, "interval"); - this.interval = Optional.ofNullable(interval); - return this; - } - - /** - * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. - */ - public Builder interval(Optional interval) { - Utils.checkNotNull(interval, "interval"); - this.interval = interval; - return this; - } - - - /** - * The name of the task - */ - public Builder name(String name) { - Utils.checkNotNull(name, "name"); - this.name = Optional.ofNullable(name); - return this; - } - - /** - * The name of the task - */ - public Builder name(Optional name) { - Utils.checkNotNull(name, "name"); - this.name = name; - return this; - } - - - /** - * Indicates whether the timing of the task is randomized within the butler interval - */ - public Builder scheduleRandomized(boolean scheduleRandomized) { - Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); - this.scheduleRandomized = Optional.ofNullable(scheduleRandomized); - return this; - } - - /** - * Indicates whether the timing of the task is randomized within the butler interval - */ - public Builder scheduleRandomized(Optional scheduleRandomized) { - Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); - this.scheduleRandomized = scheduleRandomized; - return this; - } - - - /** - * A user-friendly title of the task - */ - public Builder title(String title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * A user-friendly title of the task - */ - public Builder title(Optional title) { - Utils.checkNotNull(title, "title"); - this.title = title; - return this; - } - - public ButlerTask build() { - - return new ButlerTask( - description, enabled, interval, - name, scheduleRandomized, title); - } - + return Optional.empty(); } } + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ButlerTasks.java b/src/main/java/dev/plexapi/sdk/models/operations/ButlerTasks.java index 5bb49ec5..a7e53e65 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ButlerTasks.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ButlerTasks.java @@ -20,11 +20,11 @@ public class ButlerTasks { @JsonInclude(Include.NON_ABSENT) @JsonProperty("ButlerTask") - private Optional> butlerTask; + private Optional> butlerTask; @JsonCreator public ButlerTasks( - @JsonProperty("ButlerTask") Optional> butlerTask) { + @JsonProperty("ButlerTask") Optional> butlerTask) { Utils.checkNotNull(butlerTask, "butlerTask"); this.butlerTask = butlerTask; } @@ -35,8 +35,8 @@ public class ButlerTasks { @SuppressWarnings("unchecked") @JsonIgnore - public Optional> butlerTask() { - return (Optional>) butlerTask; + public Optional> butlerTask() { + return (Optional>) butlerTask; } public static Builder builder() { @@ -44,14 +44,14 @@ public class ButlerTasks { } - public ButlerTasks withButlerTask(List butlerTask) { + public ButlerTasks withButlerTask(List butlerTask) { Utils.checkNotNull(butlerTask, "butlerTask"); this.butlerTask = Optional.ofNullable(butlerTask); return this; } - public ButlerTasks withButlerTask(Optional> butlerTask) { + public ButlerTasks withButlerTask(Optional> butlerTask) { Utils.checkNotNull(butlerTask, "butlerTask"); this.butlerTask = butlerTask; return this; @@ -85,20 +85,20 @@ public class ButlerTasks { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional> butlerTask = Optional.empty(); + private Optional> butlerTask = Optional.empty(); private Builder() { // force use of static builder() method } - public Builder butlerTask(List butlerTask) { + public Builder butlerTask(List butlerTask) { Utils.checkNotNull(butlerTask, "butlerTask"); this.butlerTask = Optional.ofNullable(butlerTask); return this; } - public Builder butlerTask(Optional> butlerTask) { + public Builder butlerTask(Optional> butlerTask) { Utils.checkNotNull(butlerTask, "butlerTask"); this.butlerTask = butlerTask; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/operations/CheckUpdatesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/CheckUpdatesRequest.java index 0c315118..f566cfd4 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/CheckUpdatesRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/CheckUpdatesRequest.java @@ -543,7 +543,7 @@ public class CheckUpdatesRequest { private Optional marketplace = Optional.empty(); - private Optional download = Optional.empty(); + private Optional download; private Builder() { // force use of static builder() method @@ -781,6 +781,9 @@ public class CheckUpdatesRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (download == null) { + download = _SINGLETON_VALUE_Download.value(); + } return new CheckUpdatesRequest( accepts, clientIdentifier, product, @@ -795,5 +798,11 @@ public class CheckUpdatesRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Download = + new LazySingletonValue<>( + "download", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/CreateCollectionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/CreateCollectionRequest.java index 93b6bf98..a876e79b 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/CreateCollectionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/CreateCollectionRequest.java @@ -7,11 +7,11 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.type.TypeReference; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.MediaType; import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.SpeakeasyMetadata; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Long; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; @@ -110,10 +110,22 @@ public class CreateCollectionRequest { private Optional uri; /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

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") - private Optional type; + private Optional type; @JsonCreator public CreateCollectionRequest( @@ -132,7 +144,7 @@ public class CreateCollectionRequest { Optional title, Optional smart, Optional uri, - Optional type) { + Optional type) { Utils.checkNotNull(accepts, "accepts"); Utils.checkNotNull(clientIdentifier, "clientIdentifier"); Utils.checkNotNull(product, "product"); @@ -299,11 +311,24 @@ public class CreateCollectionRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ + @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return type; + public Optional type() { + return (Optional) type; } public static Builder builder() { @@ -587,9 +612,21 @@ public class CreateCollectionRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public CreateCollectionRequest withType(long type) { + public CreateCollectionRequest withType(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; @@ -597,9 +634,21 @@ public class CreateCollectionRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public CreateCollectionRequest withType(Optional type) { + public CreateCollectionRequest withType(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -698,7 +747,7 @@ public class CreateCollectionRequest { private Optional uri = Optional.empty(); - private Optional type = Optional.empty(); + private Optional type = Optional.empty(); private Builder() { // force use of static builder() method @@ -982,18 +1031,42 @@ public class CreateCollectionRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(long type) { + public Builder type(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(Optional type) { + public Builder type(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/operations/CreateCustomHubRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/CreateCustomHubRequest.java index 2b94e8ac..5e3eaebc 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/CreateCustomHubRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/CreateCustomHubRequest.java @@ -688,11 +688,11 @@ public class CreateCustomHubRequest { private Long metadataItemId; - private Optional promotedToRecommended = Optional.empty(); + private Optional promotedToRecommended; - private Optional promotedToOwnHome = Optional.empty(); + private Optional promotedToOwnHome; - private Optional promotedToSharedHome = Optional.empty(); + private Optional promotedToSharedHome; private Builder() { // force use of static builder() method @@ -988,6 +988,15 @@ public class CreateCustomHubRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (promotedToRecommended == null) { + promotedToRecommended = _SINGLETON_VALUE_PromotedToRecommended.value(); + } + if (promotedToOwnHome == null) { + promotedToOwnHome = _SINGLETON_VALUE_PromotedToOwnHome.value(); + } + if (promotedToSharedHome == null) { + promotedToSharedHome = _SINGLETON_VALUE_PromotedToSharedHome.value(); + } return new CreateCustomHubRequest( accepts, clientIdentifier, product, @@ -1004,5 +1013,23 @@ public class CreateCustomHubRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_PromotedToRecommended = + new LazySingletonValue<>( + "promotedToRecommended", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_PromotedToOwnHome = + new LazySingletonValue<>( + "promotedToOwnHome", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_PromotedToSharedHome = + new LazySingletonValue<>( + "promotedToSharedHome", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueStatus.java b/src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueStatus.java new file mode 100644 index 00000000..d84c791e --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/CreateDownloadQueueStatus.java @@ -0,0 +1,48 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; + +/** + * CreateDownloadQueueStatus + * + *

The state of this queue + * - deciding: At least one item is still being decided + * - waiting: At least one item is waiting for transcode and none are currently transcoding + * - processing: At least one item is being transcoded + * - done: All items are available (or potentially expired) + * - error: At least one item has encountered an error + */ +public enum CreateDownloadQueueStatus { + DECIDING("deciding"), + WAITING("waiting"), + PROCESSING("processing"), + DONE("done"), + ERROR("error"); + + @JsonValue + private final String value; + + CreateDownloadQueueStatus(String value) { + this.value = value; + } + + public String value() { + return value; + } + + public static Optional fromValue(String value) { + for (CreateDownloadQueueStatus o: CreateDownloadQueueStatus.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/CreatePlayQueueRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/CreatePlayQueueRequest.java index 31d9f21c..d430f04e 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/CreatePlayQueueRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/CreatePlayQueueRequest.java @@ -895,17 +895,17 @@ public class CreatePlayQueueRequest { private Optional key = Optional.empty(); - private Optional shuffle = Optional.empty(); + private Optional shuffle; - private Optional repeat = Optional.empty(); + private Optional repeat; - private Optional continuous = Optional.empty(); + private Optional continuous; private Optional extrasPrefixCount = Optional.empty(); - private Optional recursive = Optional.empty(); + private Optional recursive; - private Optional onDeck = Optional.empty(); + private Optional onDeck; private Builder() { // force use of static builder() method @@ -1305,6 +1305,21 @@ public class CreatePlayQueueRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (shuffle == null) { + shuffle = _SINGLETON_VALUE_Shuffle.value(); + } + if (repeat == null) { + repeat = _SINGLETON_VALUE_Repeat.value(); + } + if (continuous == null) { + continuous = _SINGLETON_VALUE_Continuous.value(); + } + if (recursive == null) { + recursive = _SINGLETON_VALUE_Recursive.value(); + } + if (onDeck == null) { + onDeck = _SINGLETON_VALUE_OnDeck.value(); + } return new CreatePlayQueueRequest( accepts, clientIdentifier, product, @@ -1322,5 +1337,35 @@ public class CreatePlayQueueRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Shuffle = + new LazySingletonValue<>( + "shuffle", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Repeat = + new LazySingletonValue<>( + "repeat", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Continuous = + new LazySingletonValue<>( + "continuous", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Recursive = + new LazySingletonValue<>( + "recursive", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnDeck = + new LazySingletonValue<>( + "onDeck", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DeleteLibrarySectionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/DeleteLibrarySectionRequest.java index 0df5023c..92cf598f 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DeleteLibrarySectionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DeleteLibrarySectionRequest.java @@ -576,7 +576,7 @@ public class DeleteLibrarySectionRequest { private String sectionId; - private Optional async = Optional.empty(); + private Optional async; private Builder() { // force use of static builder() method @@ -824,6 +824,9 @@ public class DeleteLibrarySectionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (async == null) { + async = _SINGLETON_VALUE_Async.value(); + } return new DeleteLibrarySectionRequest( accepts, clientIdentifier, product, @@ -839,5 +842,11 @@ public class DeleteLibrarySectionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Async = + new LazySingletonValue<>( + "async", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DeleteMediaItemRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/DeleteMediaItemRequest.java index 8fe893d1..a55dd93d 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DeleteMediaItemRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DeleteMediaItemRequest.java @@ -591,7 +591,7 @@ public class DeleteMediaItemRequest { private String mediaItem; - private Optional proxy = Optional.empty(); + private Optional proxy; private Builder() { // force use of static builder() method @@ -843,6 +843,9 @@ public class DeleteMediaItemRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (proxy == null) { + proxy = _SINGLETON_VALUE_Proxy.value(); + } return new DeleteMediaItemRequest( accepts, clientIdentifier, product, @@ -858,5 +861,11 @@ public class DeleteMediaItemRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Proxy = + new LazySingletonValue<>( + "proxy", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DeleteMetadataItemRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/DeleteMetadataItemRequest.java index 1bfd655f..cae53bb2 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DeleteMetadataItemRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DeleteMetadataItemRequest.java @@ -568,7 +568,7 @@ public class DeleteMetadataItemRequest { private String ids; - private Optional proxy = Optional.empty(); + private Optional proxy; private Builder() { // force use of static builder() method @@ -813,6 +813,9 @@ public class DeleteMetadataItemRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (proxy == null) { + proxy = _SINGLETON_VALUE_Proxy.value(); + } return new DeleteMetadataItemRequest( accepts, clientIdentifier, product, @@ -828,5 +831,11 @@ public class DeleteMetadataItemRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Proxy = + new LazySingletonValue<>( + "proxy", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DetectCreditsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/DetectCreditsRequest.java index 45a4c8d1..ff3d45fa 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DetectCreditsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DetectCreditsRequest.java @@ -585,9 +585,9 @@ public class DetectCreditsRequest { private String ids; - private Optional force = Optional.empty(); + private Optional force; - private Optional manual = Optional.empty(); + private Optional manual; private Builder() { // force use of static builder() method @@ -839,6 +839,12 @@ public class DetectCreditsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } + if (manual == null) { + manual = _SINGLETON_VALUE_Manual.value(); + } return new DetectCreditsRequest( accepts, clientIdentifier, product, @@ -854,5 +860,17 @@ public class DetectCreditsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Manual = + new LazySingletonValue<>( + "manual", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DetectIntrosRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/DetectIntrosRequest.java index b545a3f8..179554a6 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DetectIntrosRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DetectIntrosRequest.java @@ -607,7 +607,7 @@ public class DetectIntrosRequest { private String ids; - private Optional force = Optional.empty(); + private Optional force; private Optional threshold = Optional.empty(); @@ -873,6 +873,9 @@ public class DetectIntrosRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } return new DetectIntrosRequest( accepts, clientIdentifier, product, @@ -888,5 +891,11 @@ public class DetectIntrosRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DetectVoiceActivityRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/DetectVoiceActivityRequest.java index 44713380..031ea628 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DetectVoiceActivityRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DetectVoiceActivityRequest.java @@ -607,9 +607,9 @@ public class DetectVoiceActivityRequest { private String ids; - private Optional force = Optional.empty(); + private Optional force; - private Optional manual = Optional.empty(); + private Optional manual; private Builder() { // force use of static builder() method @@ -873,6 +873,12 @@ public class DetectVoiceActivityRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } + if (manual == null) { + manual = _SINGLETON_VALUE_Manual.value(); + } return new DetectVoiceActivityRequest( accepts, clientIdentifier, product, @@ -888,5 +894,17 @@ public class DetectVoiceActivityRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Manual = + new LazySingletonValue<>( + "manual", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/DownloadQueue.java b/src/main/java/dev/plexapi/sdk/models/operations/DownloadQueue.java index 8a9b9dd2..bc26ed2a 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/DownloadQueue.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/DownloadQueue.java @@ -37,13 +37,13 @@ public class DownloadQueue { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("status") - private Optional status; + private Optional status; @JsonCreator public DownloadQueue( @JsonProperty("id") Optional id, @JsonProperty("itemCount") Optional itemCount, - @JsonProperty("status") Optional status) { + @JsonProperty("status") Optional status) { Utils.checkNotNull(id, "id"); Utils.checkNotNull(itemCount, "itemCount"); Utils.checkNotNull(status, "status"); @@ -76,8 +76,8 @@ public class DownloadQueue { */ @SuppressWarnings("unchecked") @JsonIgnore - public Optional status() { - return (Optional) status; + public Optional status() { + return (Optional) status; } public static Builder builder() { @@ -119,7 +119,7 @@ public class DownloadQueue { * - done: All items are available (or potentially expired) * - error: At least one item has encountered an error */ - public DownloadQueue withStatus(Status status) { + public DownloadQueue withStatus(CreateDownloadQueueStatus status) { Utils.checkNotNull(status, "status"); this.status = Optional.ofNullable(status); return this; @@ -134,7 +134,7 @@ public class DownloadQueue { * - done: All items are available (or potentially expired) * - error: At least one item has encountered an error */ - public DownloadQueue withStatus(Optional status) { + public DownloadQueue withStatus(Optional status) { Utils.checkNotNull(status, "status"); this.status = status; return this; @@ -176,7 +176,7 @@ public class DownloadQueue { private Optional itemCount = Optional.empty(); - private Optional status = Optional.empty(); + private Optional status = Optional.empty(); private Builder() { // force use of static builder() method @@ -217,7 +217,7 @@ public class DownloadQueue { * - done: All items are available (or potentially expired) * - error: At least one item has encountered an error */ - public Builder status(Status status) { + public Builder status(CreateDownloadQueueStatus status) { Utils.checkNotNull(status, "status"); this.status = Optional.ofNullable(status); return this; @@ -231,7 +231,7 @@ public class DownloadQueue { * - done: All items are available (or potentially expired) * - error: At least one item has encountered an error */ - public Builder status(Optional status) { + public Builder status(Optional status) { Utils.checkNotNull(status, "status"); this.status = status; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GenerateThumbsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GenerateThumbsRequest.java index 216a4635..59c2e4b2 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GenerateThumbsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GenerateThumbsRequest.java @@ -557,7 +557,7 @@ public class GenerateThumbsRequest { private String ids; - private Optional force = Optional.empty(); + private Optional force; private Builder() { // force use of static builder() method @@ -796,6 +796,9 @@ public class GenerateThumbsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } return new GenerateThumbsRequest( accepts, clientIdentifier, product, @@ -811,5 +814,11 @@ public class GenerateThumbsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetAllHubsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetAllHubsRequest.java index ae7e0fed..fe25a8ec 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetAllHubsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetAllHubsRequest.java @@ -626,7 +626,7 @@ public class GetAllHubsRequest { private Optional count = Optional.empty(); - private Optional onlyTransient = Optional.empty(); + private Optional onlyTransient; private Optional> identifier = Optional.empty(); @@ -904,6 +904,9 @@ public class GetAllHubsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (onlyTransient == null) { + onlyTransient = _SINGLETON_VALUE_OnlyTransient.value(); + } return new GetAllHubsRequest( accepts, clientIdentifier, product, @@ -919,5 +922,11 @@ public class GetAllHubsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnlyTransient = + new LazySingletonValue<>( + "onlyTransient", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetAllSubscriptionsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetAllSubscriptionsRequest.java index 6f87083c..eb88d234 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetAllSubscriptionsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetAllSubscriptionsRequest.java @@ -584,9 +584,9 @@ public class GetAllSubscriptionsRequest { private Optional marketplace = Optional.empty(); - private Optional includeGrabs = Optional.empty(); + private Optional includeGrabs; - private Optional includeStorage = Optional.empty(); + private Optional includeStorage; private Builder() { // force use of static builder() method @@ -843,6 +843,12 @@ public class GetAllSubscriptionsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (includeGrabs == null) { + includeGrabs = _SINGLETON_VALUE_IncludeGrabs.value(); + } + if (includeStorage == null) { + includeStorage = _SINGLETON_VALUE_IncludeStorage.value(); + } return new GetAllSubscriptionsRequest( accepts, clientIdentifier, product, @@ -858,5 +864,17 @@ public class GetAllSubscriptionsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeGrabs = + new LazySingletonValue<>( + "includeGrabs", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeStorage = + new LazySingletonValue<>( + "includeStorage", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetAugmentationStatusRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetAugmentationStatusRequest.java index 4c691e0d..294c29ef 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetAugmentationStatusRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetAugmentationStatusRequest.java @@ -576,7 +576,7 @@ public class GetAugmentationStatusRequest { private String augmentationId; - private Optional wait_ = Optional.empty(); + private Optional wait_; private Builder() { // force use of static builder() method @@ -824,6 +824,9 @@ public class GetAugmentationStatusRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (wait_ == null) { + wait_ = _SINGLETON_VALUE_Wait.value(); + } return new GetAugmentationStatusRequest( accepts, clientIdentifier, product, @@ -839,5 +842,11 @@ public class GetAugmentationStatusRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Wait = + new LazySingletonValue<>( + "wait", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetCollectionsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetCollectionsRequest.java index 8b115a7d..520f8e0d 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetCollectionsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetCollectionsRequest.java @@ -92,7 +92,22 @@ public class GetCollectionsRequest { private long sectionId; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; @@ -247,7 +262,22 @@ public class GetCollectionsRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -479,7 +509,22 @@ public class GetCollectionsRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetCollectionsRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -489,7 +534,22 @@ public class GetCollectionsRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetCollectionsRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -804,7 +864,22 @@ public class GetCollectionsRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -813,7 +888,22 @@ public class GetCollectionsRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetCommonRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetCommonRequest.java index 915728a0..224ee5a0 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetCommonRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetCommonRequest.java @@ -98,7 +98,22 @@ public class GetCommonRequest { private Optional type; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; @@ -264,7 +279,22 @@ public class GetCommonRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -515,7 +545,22 @@ public class GetCommonRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetCommonRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -525,7 +570,22 @@ public class GetCommonRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetCommonRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -863,7 +923,22 @@ public class GetCommonRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -872,7 +947,22 @@ public class GetCommonRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetFirstCharactersRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetFirstCharactersRequest.java index 5ab62866..ce0e049a 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetFirstCharactersRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetFirstCharactersRequest.java @@ -104,7 +104,22 @@ public class GetFirstCharactersRequest { private Optional sort; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; @@ -281,7 +296,22 @@ public class GetFirstCharactersRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -551,7 +581,22 @@ public class GetFirstCharactersRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetFirstCharactersRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -561,7 +606,22 @@ public class GetFirstCharactersRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetFirstCharactersRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -922,7 +982,22 @@ public class GetFirstCharactersRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -931,7 +1006,22 @@ public class GetFirstCharactersRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetImageRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetImageRequest.java index beae2eb8..83d22aae 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetImageRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetImageRequest.java @@ -788,7 +788,7 @@ public class GetImageRequest { private Optional height = Optional.empty(); - private Optional noise = Optional.empty(); + private Optional noise; private Builder() { // force use of static builder() method @@ -1140,6 +1140,9 @@ public class GetImageRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (noise == null) { + noise = _SINGLETON_VALUE_Noise.value(); + } return new GetImageRequest( accepts, clientIdentifier, product, @@ -1156,5 +1159,11 @@ public class GetImageRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Noise = + new LazySingletonValue<>( + "noise", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryDetailsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryDetailsRequest.java index d2ea66dc..712213ff 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryDetailsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryDetailsRequest.java @@ -576,7 +576,7 @@ public class GetLibraryDetailsRequest { private String sectionId; - private Optional includeDetails = Optional.empty(); + private Optional includeDetails; private Builder() { // force use of static builder() method @@ -824,6 +824,9 @@ public class GetLibraryDetailsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (includeDetails == null) { + includeDetails = _SINGLETON_VALUE_IncludeDetails.value(); + } return new GetLibraryDetailsRequest( accepts, clientIdentifier, product, @@ -839,5 +842,11 @@ public class GetLibraryDetailsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeDetails = + new LazySingletonValue<>( + "includeDetails", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryItemsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryItemsRequest.java index a87cb0ac..85b1e270 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryItemsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryItemsRequest.java @@ -85,7 +85,22 @@ public class GetLibraryItemsRequest { private Optional marketplace; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; @@ -227,7 +242,22 @@ public class GetLibraryItemsRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -450,7 +480,22 @@ public class GetLibraryItemsRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetLibraryItemsRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -460,7 +505,22 @@ public class GetLibraryItemsRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetLibraryItemsRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -760,7 +820,22 @@ public class GetLibraryItemsRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -769,7 +844,22 @@ public class GetLibraryItemsRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryMatchesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryMatchesRequest.java index 4682ec8d..1c7c9457 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryMatchesRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetLibraryMatchesRequest.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.type.TypeReference; import dev.plexapi.sdk.models.shared.Accepts; import dev.plexapi.sdk.models.shared.BoolInt; +import dev.plexapi.sdk.models.shared.MediaType; import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.SpeakeasyMetadata; import dev.plexapi.sdk.utils.Utils; @@ -86,10 +87,22 @@ public class GetLibraryMatchesRequest { private Optional marketplace; /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

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") - private Optional type; + private Optional type; @SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeFullMetadata") @@ -176,7 +189,7 @@ public class GetLibraryMatchesRequest { Optional deviceVendor, Optional deviceName, Optional marketplace, - Optional type, + Optional type, Optional includeFullMetadata, Optional includeAncestorMetadata, Optional includeAlternateMetadataSources, @@ -344,11 +357,24 @@ public class GetLibraryMatchesRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ + @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return type; + public Optional type() { + return (Optional) type; } @SuppressWarnings("unchecked") @@ -664,9 +690,21 @@ public class GetLibraryMatchesRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public GetLibraryMatchesRequest withType(long type) { + public GetLibraryMatchesRequest withType(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; @@ -674,9 +712,21 @@ public class GetLibraryMatchesRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public GetLibraryMatchesRequest withType(Optional type) { + public GetLibraryMatchesRequest withType(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1017,13 +1067,13 @@ public class GetLibraryMatchesRequest { private Optional marketplace = Optional.empty(); - private Optional type = Optional.empty(); + private Optional type = Optional.empty(); - private Optional includeFullMetadata = Optional.empty(); + private Optional includeFullMetadata; - private Optional includeAncestorMetadata = Optional.empty(); + private Optional includeAncestorMetadata; - private Optional includeAlternateMetadataSources = Optional.empty(); + private Optional includeAlternateMetadataSources; private Optional guid = Optional.empty(); @@ -1260,18 +1310,42 @@ public class GetLibraryMatchesRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(long type) { + public Builder type(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(Optional type) { + public Builder type(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1510,6 +1584,15 @@ public class GetLibraryMatchesRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (includeFullMetadata == null) { + includeFullMetadata = _SINGLETON_VALUE_IncludeFullMetadata.value(); + } + if (includeAncestorMetadata == null) { + includeAncestorMetadata = _SINGLETON_VALUE_IncludeAncestorMetadata.value(); + } + if (includeAlternateMetadataSources == null) { + includeAlternateMetadataSources = _SINGLETON_VALUE_IncludeAlternateMetadataSources.value(); + } return new GetLibraryMatchesRequest( accepts, clientIdentifier, product, @@ -1529,5 +1612,23 @@ public class GetLibraryMatchesRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeFullMetadata = + new LazySingletonValue<>( + "includeFullMetadata", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeAncestorMetadata = + new LazySingletonValue<>( + "includeAncestorMetadata", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeAlternateMetadataSources = + new LazySingletonValue<>( + "includeAlternateMetadataSources", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetMediaPartRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetMediaPartRequest.java index 176bf9dd..1d2071a5 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetMediaPartRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetMediaPartRequest.java @@ -639,7 +639,7 @@ public class GetMediaPartRequest { private String filename; - private Optional download = Optional.empty(); + private Optional download; private Builder() { // force use of static builder() method @@ -907,6 +907,9 @@ public class GetMediaPartRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (download == null) { + download = _SINGLETON_VALUE_Download.value(); + } return new GetMediaPartRequest( accepts, clientIdentifier, product, @@ -922,5 +925,11 @@ public class GetMediaPartRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Download = + new LazySingletonValue<>( + "download", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataHubsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataHubsRequest.java index 864e934a..13f7cdb0 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataHubsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataHubsRequest.java @@ -617,7 +617,7 @@ public class GetMetadataHubsRequest { private Optional count = Optional.empty(); - private Optional onlyTransient = Optional.empty(); + private Optional onlyTransient; private Builder() { // force use of static builder() method @@ -884,6 +884,9 @@ public class GetMetadataHubsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (onlyTransient == null) { + onlyTransient = _SINGLETON_VALUE_OnlyTransient.value(); + } return new GetMetadataHubsRequest( accepts, clientIdentifier, product, @@ -899,5 +902,11 @@ public class GetMetadataHubsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnlyTransient = + new LazySingletonValue<>( + "onlyTransient", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataItemRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataItemRequest.java index 8d93e661..398ab5fc 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataItemRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetMetadataItemRequest.java @@ -846,21 +846,21 @@ public class GetMetadataItemRequest { private List ids; - private Optional asyncCheckFiles = Optional.empty(); + private Optional asyncCheckFiles; - private Optional asyncRefreshLocalMediaAgent = Optional.empty(); + private Optional asyncRefreshLocalMediaAgent; - private Optional asyncRefreshAnalysis = Optional.empty(); + private Optional asyncRefreshAnalysis; - private Optional checkFiles = Optional.empty(); + private Optional checkFiles; - private Optional skipRefresh = Optional.empty(); + private Optional skipRefresh; - private Optional checkFileAvailability = Optional.empty(); + private Optional checkFileAvailability; - private Optional asyncAugmentMetadata = Optional.empty(); + private Optional asyncAugmentMetadata; - private Optional augmentCount = Optional.empty(); + private Optional augmentCount; private Builder() { // force use of static builder() method @@ -1238,6 +1238,30 @@ public class GetMetadataItemRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (asyncCheckFiles == null) { + asyncCheckFiles = _SINGLETON_VALUE_AsyncCheckFiles.value(); + } + if (asyncRefreshLocalMediaAgent == null) { + asyncRefreshLocalMediaAgent = _SINGLETON_VALUE_AsyncRefreshLocalMediaAgent.value(); + } + if (asyncRefreshAnalysis == null) { + asyncRefreshAnalysis = _SINGLETON_VALUE_AsyncRefreshAnalysis.value(); + } + if (checkFiles == null) { + checkFiles = _SINGLETON_VALUE_CheckFiles.value(); + } + if (skipRefresh == null) { + skipRefresh = _SINGLETON_VALUE_SkipRefresh.value(); + } + if (checkFileAvailability == null) { + checkFileAvailability = _SINGLETON_VALUE_CheckFileAvailability.value(); + } + if (asyncAugmentMetadata == null) { + asyncAugmentMetadata = _SINGLETON_VALUE_AsyncAugmentMetadata.value(); + } + if (augmentCount == null) { + augmentCount = _SINGLETON_VALUE_AugmentCount.value(); + } return new GetMetadataItemRequest( accepts, clientIdentifier, product, @@ -1255,5 +1279,53 @@ public class GetMetadataItemRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AsyncCheckFiles = + new LazySingletonValue<>( + "asyncCheckFiles", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AsyncRefreshLocalMediaAgent = + new LazySingletonValue<>( + "asyncRefreshLocalMediaAgent", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AsyncRefreshAnalysis = + new LazySingletonValue<>( + "asyncRefreshAnalysis", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_CheckFiles = + new LazySingletonValue<>( + "checkFiles", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_SkipRefresh = + new LazySingletonValue<>( + "skipRefresh", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_CheckFileAvailability = + new LazySingletonValue<>( + "checkFileAvailability", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AsyncAugmentMetadata = + new LazySingletonValue<>( + "asyncAugmentMetadata", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AugmentCount = + new LazySingletonValue<>( + "augmentCount", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetPlayQueueRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetPlayQueueRequest.java index 482587b5..dc657648 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetPlayQueueRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetPlayQueueRequest.java @@ -733,15 +733,15 @@ public class GetPlayQueueRequest { private Long playQueueId; - private Optional own = Optional.empty(); + private Optional own; private Optional center = Optional.empty(); private Optional window = Optional.empty(); - private Optional includeBefore = Optional.empty(); + private Optional includeBefore; - private Optional includeAfter = Optional.empty(); + private Optional includeAfter; private Builder() { // force use of static builder() method @@ -1065,6 +1065,15 @@ public class GetPlayQueueRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (own == null) { + own = _SINGLETON_VALUE_Own.value(); + } + if (includeBefore == null) { + includeBefore = _SINGLETON_VALUE_IncludeBefore.value(); + } + if (includeAfter == null) { + includeAfter = _SINGLETON_VALUE_IncludeAfter.value(); + } return new GetPlayQueueRequest( accepts, clientIdentifier, product, @@ -1081,5 +1090,23 @@ public class GetPlayQueueRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Own = + new LazySingletonValue<>( + "own", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeBefore = + new LazySingletonValue<>( + "includeBefore", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeAfter = + new LazySingletonValue<>( + "includeAfter", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsGuids.java b/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsGuids.java new file mode 100644 index 00000000..387fe593 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsGuids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class GetPlaylistGeneratorItemsGuids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public GetPlaylistGeneratorItemsGuids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public GetPlaylistGeneratorItemsGuids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetPlaylistGeneratorItemsGuids other = (GetPlaylistGeneratorItemsGuids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(GetPlaylistGeneratorItemsGuids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public GetPlaylistGeneratorItemsGuids build() { + + return new GetPlaylistGeneratorItemsGuids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsMetadata.java b/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsMetadata.java index 746329df..5a9fb606 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsMetadata.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetPlaylistGeneratorItemsMetadata.java @@ -17,12 +17,14 @@ import dev.plexapi.sdk.models.shared.Sort; import dev.plexapi.sdk.models.shared.Tag; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -41,51 +43,48 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -97,28 +96,35 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -135,7 +141,7 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * Typically only seen in metadata at a library's top level @@ -156,6 +162,13 @@ public class GetPlaylistGeneratorItemsMetadata { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -198,17 +211,24 @@ public class GetPlaylistGeneratorItemsMetadata { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -220,18 +240,15 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -241,7 +258,7 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; @JsonInclude(Include.NON_ABSENT) @@ -253,14 +270,21 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -274,7 +298,7 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -309,7 +333,7 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -323,7 +347,7 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -335,21 +359,21 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -396,49 +420,49 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -452,28 +476,28 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -485,7 +509,7 @@ public class GetPlaylistGeneratorItemsMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; /** * The state of processing if this generator is part of an optimizer playlist @@ -507,73 +531,77 @@ public class GetPlaylistGeneratorItemsMetadata { @JsonCreator public GetPlaylistGeneratorItemsMetadata( - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("composite") Optional composite, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, - @JsonProperty("duration") Optional duration, + @JsonProperty("duration") Optional duration, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, @JsonProperty("lastViewedAt") Optional lastViewedAt, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year, + @JsonProperty("year") Optional year, @JsonProperty("processingState") Optional processingState, @JsonProperty("processingStateContext") Optional processingStateContext) { Utils.checkNotNull(title, "title"); @@ -586,6 +614,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); @@ -594,6 +623,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -601,6 +631,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -610,6 +641,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -655,6 +687,7 @@ public class GetPlaylistGeneratorItemsMetadata { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.composite = composite; this.contentRating = contentRating; this.country = country; @@ -663,6 +696,7 @@ public class GetPlaylistGeneratorItemsMetadata { this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -670,6 +704,7 @@ public class GetPlaylistGeneratorItemsMetadata { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -679,6 +714,7 @@ public class GetPlaylistGeneratorItemsMetadata { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -717,8 +753,22 @@ public class GetPlaylistGeneratorItemsMetadata { this.additionalProperties = new HashMap<>(); } - public GetPlaylistGeneratorItemsMetadata() { - this(Optional.empty(), Optional.empty(), Optional.empty(), + public GetPlaylistGeneratorItemsMetadata( + String title, + String type, + long addedAt, + String key) { + this(title, type, Optional.empty(), + addedAt, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -732,40 +782,30 @@ public class GetPlaylistGeneratorItemsMetadata { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty()); + Optional.empty()); } /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -773,34 +813,32 @@ public class GetPlaylistGeneratorItemsMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -812,37 +850,41 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -861,7 +903,7 @@ public class GetPlaylistGeneratorItemsMetadata { * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -888,6 +930,14 @@ public class GetPlaylistGeneratorItemsMetadata { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -936,19 +986,26 @@ public class GetPlaylistGeneratorItemsMetadata { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -961,22 +1018,18 @@ public class GetPlaylistGeneratorItemsMetadata { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -986,7 +1039,7 @@ public class GetPlaylistGeneratorItemsMetadata { * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -999,19 +1052,25 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1026,7 +1085,7 @@ public class GetPlaylistGeneratorItemsMetadata { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1065,10 +1124,9 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1083,7 +1141,7 @@ public class GetPlaylistGeneratorItemsMetadata { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1097,26 +1155,24 @@ public class GetPlaylistGeneratorItemsMetadata { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1169,64 +1225,57 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1241,7 +1290,7 @@ public class GetPlaylistGeneratorItemsMetadata { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1249,7 +1298,7 @@ public class GetPlaylistGeneratorItemsMetadata { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1257,7 +1306,7 @@ public class GetPlaylistGeneratorItemsMetadata { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1265,7 +1314,7 @@ public class GetPlaylistGeneratorItemsMetadata { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1279,7 +1328,7 @@ public class GetPlaylistGeneratorItemsMetadata { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1314,17 +1363,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public GetPlaylistGeneratorItemsMetadata withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public GetPlaylistGeneratorItemsMetadata withTitle(Optional title) { + public GetPlaylistGeneratorItemsMetadata withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1333,17 +1372,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public GetPlaylistGeneratorItemsMetadata withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public GetPlaylistGeneratorItemsMetadata withType(Optional type) { + public GetPlaylistGeneratorItemsMetadata withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1352,7 +1381,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public GetPlaylistGeneratorItemsMetadata withAbsoluteIndex(long absoluteIndex) { + public GetPlaylistGeneratorItemsMetadata withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1362,7 +1391,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public GetPlaylistGeneratorItemsMetadata withAbsoluteIndex(Optional absoluteIndex) { + public GetPlaylistGeneratorItemsMetadata withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1372,16 +1401,6 @@ public class GetPlaylistGeneratorItemsMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public GetPlaylistGeneratorItemsMetadata withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public GetPlaylistGeneratorItemsMetadata withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1390,7 +1409,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the background artwork for the item. */ - public GetPlaylistGeneratorItemsMetadata withArt(Object art) { + public GetPlaylistGeneratorItemsMetadata withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1400,7 +1419,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the background artwork for the item. */ - public GetPlaylistGeneratorItemsMetadata withArt(Optional art) { + public GetPlaylistGeneratorItemsMetadata withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1409,7 +1428,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public GetPlaylistGeneratorItemsMetadata withAudienceRating(double audienceRating) { + public GetPlaylistGeneratorItemsMetadata withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1419,7 +1438,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public GetPlaylistGeneratorItemsMetadata withAudienceRating(Optional audienceRating) { + public GetPlaylistGeneratorItemsMetadata withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1428,7 +1447,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public GetPlaylistGeneratorItemsMetadata withAudienceRatingImage(Object audienceRatingImage) { + public GetPlaylistGeneratorItemsMetadata withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1438,7 +1457,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public GetPlaylistGeneratorItemsMetadata withAudienceRatingImage(Optional audienceRatingImage) { + public GetPlaylistGeneratorItemsMetadata withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1460,7 +1479,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a banner graphic for the item. */ - public GetPlaylistGeneratorItemsMetadata withBanner(Object banner) { + public GetPlaylistGeneratorItemsMetadata withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1470,7 +1489,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a banner graphic for the item. */ - public GetPlaylistGeneratorItemsMetadata withBanner(Optional banner) { + public GetPlaylistGeneratorItemsMetadata withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1479,7 +1498,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public GetPlaylistGeneratorItemsMetadata withChapterSource(Object chapterSource) { + public GetPlaylistGeneratorItemsMetadata withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1489,16 +1508,35 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public GetPlaylistGeneratorItemsMetadata withChapterSource(Optional chapterSource) { + public GetPlaylistGeneratorItemsMetadata withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public GetPlaylistGeneratorItemsMetadata withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public GetPlaylistGeneratorItemsMetadata withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public GetPlaylistGeneratorItemsMetadata withComposite(Object composite) { + public GetPlaylistGeneratorItemsMetadata withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1508,7 +1546,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public GetPlaylistGeneratorItemsMetadata withComposite(Optional composite) { + public GetPlaylistGeneratorItemsMetadata withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1517,7 +1555,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public GetPlaylistGeneratorItemsMetadata withContentRating(Object contentRating) { + public GetPlaylistGeneratorItemsMetadata withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1527,7 +1565,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public GetPlaylistGeneratorItemsMetadata withContentRating(Optional contentRating) { + public GetPlaylistGeneratorItemsMetadata withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1562,7 +1600,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public GetPlaylistGeneratorItemsMetadata withDuration(long duration) { + public GetPlaylistGeneratorItemsMetadata withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1572,7 +1610,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public GetPlaylistGeneratorItemsMetadata withDuration(Optional duration) { + public GetPlaylistGeneratorItemsMetadata withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1629,6 +1667,25 @@ public class GetPlaylistGeneratorItemsMetadata { return this; } + /** + * The GUID of the grandparent media item. + */ + public GetPlaylistGeneratorItemsMetadata withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public GetPlaylistGeneratorItemsMetadata withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1743,23 +1800,42 @@ public class GetPlaylistGeneratorItemsMetadata { return this; } - public GetPlaylistGeneratorItemsMetadata withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public GetPlaylistGeneratorItemsMetadata withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public GetPlaylistGeneratorItemsMetadata withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public GetPlaylistGeneratorItemsMetadata withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public GetPlaylistGeneratorItemsMetadata withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public GetPlaylistGeneratorItemsMetadata withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public GetPlaylistGeneratorItemsMetadata withHero(Object hero) { + public GetPlaylistGeneratorItemsMetadata withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1769,7 +1845,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a hero image for the item. */ - public GetPlaylistGeneratorItemsMetadata withHero(Optional hero) { + public GetPlaylistGeneratorItemsMetadata withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1791,7 +1867,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public GetPlaylistGeneratorItemsMetadata withIndex(long index) { + public GetPlaylistGeneratorItemsMetadata withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1801,7 +1877,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public GetPlaylistGeneratorItemsMetadata withIndex(Optional index) { + public GetPlaylistGeneratorItemsMetadata withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1810,25 +1886,12 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public GetPlaylistGeneratorItemsMetadata withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public GetPlaylistGeneratorItemsMetadata withKey(Optional key) { + public GetPlaylistGeneratorItemsMetadata withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public GetPlaylistGeneratorItemsMetadata withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1836,9 +1899,6 @@ public class GetPlaylistGeneratorItemsMetadata { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public GetPlaylistGeneratorItemsMetadata withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1848,7 +1908,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public GetPlaylistGeneratorItemsMetadata withLeafCount(long leafCount) { + public GetPlaylistGeneratorItemsMetadata withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1858,7 +1918,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public GetPlaylistGeneratorItemsMetadata withLeafCount(Optional leafCount) { + public GetPlaylistGeneratorItemsMetadata withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1880,7 +1940,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public GetPlaylistGeneratorItemsMetadata withOriginallyAvailableAt(Object originallyAvailableAt) { + public GetPlaylistGeneratorItemsMetadata withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1890,7 +1950,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public GetPlaylistGeneratorItemsMetadata withOriginallyAvailableAt(Optional originallyAvailableAt) { + public GetPlaylistGeneratorItemsMetadata withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -1899,7 +1959,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public GetPlaylistGeneratorItemsMetadata withOriginalTitle(Object originalTitle) { + public GetPlaylistGeneratorItemsMetadata withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -1909,12 +1969,31 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public GetPlaylistGeneratorItemsMetadata withOriginalTitle(Optional originalTitle) { + public GetPlaylistGeneratorItemsMetadata withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public GetPlaylistGeneratorItemsMetadata withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public GetPlaylistGeneratorItemsMetadata withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -1937,7 +2016,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The `index` of the parent */ - public GetPlaylistGeneratorItemsMetadata withParentIndex(long parentIndex) { + public GetPlaylistGeneratorItemsMetadata withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -1947,7 +2026,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The `index` of the parent */ - public GetPlaylistGeneratorItemsMetadata withParentIndex(Optional parentIndex) { + public GetPlaylistGeneratorItemsMetadata withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -2032,7 +2111,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public GetPlaylistGeneratorItemsMetadata withPrimaryExtraKey(Object primaryExtraKey) { + public GetPlaylistGeneratorItemsMetadata withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -2042,7 +2121,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public GetPlaylistGeneratorItemsMetadata withPrimaryExtraKey(Optional primaryExtraKey) { + public GetPlaylistGeneratorItemsMetadata withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2070,7 +2149,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public GetPlaylistGeneratorItemsMetadata withRating(double rating) { + public GetPlaylistGeneratorItemsMetadata withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2080,7 +2159,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public GetPlaylistGeneratorItemsMetadata withRating(Optional rating) { + public GetPlaylistGeneratorItemsMetadata withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2102,7 +2181,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Number of ratings under this metadata */ - public GetPlaylistGeneratorItemsMetadata withRatingCount(long ratingCount) { + public GetPlaylistGeneratorItemsMetadata withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2112,7 +2191,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Number of ratings under this metadata */ - public GetPlaylistGeneratorItemsMetadata withRatingCount(Optional ratingCount) { + public GetPlaylistGeneratorItemsMetadata withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2121,7 +2200,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public GetPlaylistGeneratorItemsMetadata withRatingImage(Object ratingImage) { + public GetPlaylistGeneratorItemsMetadata withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2131,7 +2210,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public GetPlaylistGeneratorItemsMetadata withRatingImage(Optional ratingImage) { + public GetPlaylistGeneratorItemsMetadata withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2140,7 +2219,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public GetPlaylistGeneratorItemsMetadata withRatingKey(Object ratingKey) { + public GetPlaylistGeneratorItemsMetadata withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2150,7 +2229,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public GetPlaylistGeneratorItemsMetadata withRatingKey(Optional ratingKey) { + public GetPlaylistGeneratorItemsMetadata withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2267,7 +2346,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public GetPlaylistGeneratorItemsMetadata withStudio(Object studio) { + public GetPlaylistGeneratorItemsMetadata withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2277,7 +2356,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public GetPlaylistGeneratorItemsMetadata withStudio(Optional studio) { + public GetPlaylistGeneratorItemsMetadata withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2286,7 +2365,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public GetPlaylistGeneratorItemsMetadata withSubtype(Object subtype) { + public GetPlaylistGeneratorItemsMetadata withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2296,7 +2375,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public GetPlaylistGeneratorItemsMetadata withSubtype(Optional subtype) { + public GetPlaylistGeneratorItemsMetadata withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2305,7 +2384,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public GetPlaylistGeneratorItemsMetadata withSummary(Object summary) { + public GetPlaylistGeneratorItemsMetadata withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2315,7 +2394,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public GetPlaylistGeneratorItemsMetadata withSummary(Optional summary) { + public GetPlaylistGeneratorItemsMetadata withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2324,7 +2403,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public GetPlaylistGeneratorItemsMetadata withTagline(Object tagline) { + public GetPlaylistGeneratorItemsMetadata withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2334,7 +2413,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public GetPlaylistGeneratorItemsMetadata withTagline(Optional tagline) { + public GetPlaylistGeneratorItemsMetadata withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2343,7 +2422,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public GetPlaylistGeneratorItemsMetadata withTheme(Object theme) { + public GetPlaylistGeneratorItemsMetadata withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2353,7 +2432,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public GetPlaylistGeneratorItemsMetadata withTheme(Optional theme) { + public GetPlaylistGeneratorItemsMetadata withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2362,7 +2441,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public GetPlaylistGeneratorItemsMetadata withThumb(Object thumb) { + public GetPlaylistGeneratorItemsMetadata withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2372,7 +2451,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public GetPlaylistGeneratorItemsMetadata withThumb(Optional thumb) { + public GetPlaylistGeneratorItemsMetadata withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2381,7 +2460,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public GetPlaylistGeneratorItemsMetadata withTitleSort(Object titleSort) { + public GetPlaylistGeneratorItemsMetadata withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2391,7 +2470,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public GetPlaylistGeneratorItemsMetadata withTitleSort(Optional titleSort) { + public GetPlaylistGeneratorItemsMetadata withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2419,7 +2498,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When the user has rated an item, this contains the user rating */ - public GetPlaylistGeneratorItemsMetadata withUserRating(double userRating) { + public GetPlaylistGeneratorItemsMetadata withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2429,7 +2508,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When the user has rated an item, this contains the user rating */ - public GetPlaylistGeneratorItemsMetadata withUserRating(Optional userRating) { + public GetPlaylistGeneratorItemsMetadata withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2438,7 +2517,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public GetPlaylistGeneratorItemsMetadata withViewCount(long viewCount) { + public GetPlaylistGeneratorItemsMetadata withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2448,7 +2527,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public GetPlaylistGeneratorItemsMetadata withViewCount(Optional viewCount) { + public GetPlaylistGeneratorItemsMetadata withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2457,7 +2536,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public GetPlaylistGeneratorItemsMetadata withViewedLeafCount(long viewedLeafCount) { + public GetPlaylistGeneratorItemsMetadata withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2467,7 +2546,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public GetPlaylistGeneratorItemsMetadata withViewedLeafCount(Optional viewedLeafCount) { + public GetPlaylistGeneratorItemsMetadata withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2476,7 +2555,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public GetPlaylistGeneratorItemsMetadata withViewOffset(long viewOffset) { + public GetPlaylistGeneratorItemsMetadata withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2486,7 +2565,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public GetPlaylistGeneratorItemsMetadata withViewOffset(Optional viewOffset) { + public GetPlaylistGeneratorItemsMetadata withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2508,7 +2587,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public GetPlaylistGeneratorItemsMetadata withYear(long year) { + public GetPlaylistGeneratorItemsMetadata withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2518,7 +2597,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public GetPlaylistGeneratorItemsMetadata withYear(Optional year) { + public GetPlaylistGeneratorItemsMetadata withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2595,6 +2674,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.composite, other.composite) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && @@ -2603,6 +2683,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2610,6 +2691,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2619,6 +2701,7 @@ public class GetPlaylistGeneratorItemsMetadata { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2663,27 +2746,28 @@ public class GetPlaylistGeneratorItemsMetadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, processingState, processingStateContext, - additionalProperties); + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, processingState, + processingStateContext, additionalProperties); } @Override @@ -2699,6 +2783,7 @@ public class GetPlaylistGeneratorItemsMetadata { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "composite", composite, "contentRating", contentRating, "country", country, @@ -2707,6 +2792,7 @@ public class GetPlaylistGeneratorItemsMetadata { "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2714,6 +2800,7 @@ public class GetPlaylistGeneratorItemsMetadata { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2723,6 +2810,7 @@ public class GetPlaylistGeneratorItemsMetadata { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2764,35 +2852,37 @@ public class GetPlaylistGeneratorItemsMetadata { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional childCount = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional composite = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); private Optional> director = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional> filter = Optional.empty(); @@ -2800,6 +2890,8 @@ public class GetPlaylistGeneratorItemsMetadata { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2812,29 +2904,33 @@ public class GetPlaylistGeneratorItemsMetadata { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); - private Optional key = Optional.empty(); + private String key; private Optional lastViewedAt = Optional.empty(); - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2844,19 +2940,19 @@ public class GetPlaylistGeneratorItemsMetadata { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2870,33 +2966,33 @@ public class GetPlaylistGeneratorItemsMetadata { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Optional processingState = Optional.empty(); @@ -2912,16 +3008,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -2931,16 +3018,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -2950,7 +3028,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -2959,7 +3037,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -2970,15 +3048,6 @@ public class GetPlaylistGeneratorItemsMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -2988,7 +3057,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -2997,7 +3066,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -3007,7 +3076,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -3016,7 +3085,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -3026,7 +3095,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -3035,7 +3104,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -3058,7 +3127,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -3067,7 +3136,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -3077,7 +3146,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -3086,17 +3155,36 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3105,7 +3193,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3115,7 +3203,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3124,7 +3212,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3160,7 +3248,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3169,7 +3257,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3227,6 +3315,25 @@ public class GetPlaylistGeneratorItemsMetadata { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3341,23 +3448,42 @@ public class GetPlaylistGeneratorItemsMetadata { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3366,7 +3492,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3389,7 +3515,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3398,7 +3524,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -3408,34 +3534,19 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3446,7 +3557,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3455,7 +3566,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3478,7 +3589,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3487,7 +3598,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3497,7 +3608,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3506,13 +3617,32 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3535,7 +3665,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3544,7 +3674,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3630,7 +3760,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3639,7 +3769,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3668,7 +3798,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3677,7 +3807,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3700,7 +3830,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3709,7 +3839,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3719,7 +3849,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3728,7 +3858,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3738,7 +3868,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3747,7 +3877,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -3865,7 +3995,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -3874,7 +4004,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -3884,7 +4014,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -3893,7 +4023,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -3903,7 +4033,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -3912,7 +4042,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -3922,7 +4052,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -3931,7 +4061,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -3941,7 +4071,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -3950,7 +4080,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -3960,7 +4090,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -3969,7 +4099,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -3979,7 +4109,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -3988,7 +4118,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -4017,7 +4147,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -4026,7 +4156,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -4036,7 +4166,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -4045,7 +4175,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -4055,7 +4185,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -4064,7 +4194,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -4074,7 +4204,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -4083,7 +4213,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4106,7 +4236,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4115,7 +4245,7 @@ public class GetPlaylistGeneratorItemsMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4181,26 +4311,28 @@ public class GetPlaylistGeneratorItemsMetadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, processingState, processingStateContext) + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, processingState, + processingStateContext) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetPostplayHubsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetPostplayHubsRequest.java index 805ef48f..a806a3d6 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetPostplayHubsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetPostplayHubsRequest.java @@ -617,7 +617,7 @@ public class GetPostplayHubsRequest { private Optional count = Optional.empty(); - private Optional onlyTransient = Optional.empty(); + private Optional onlyTransient; private Builder() { // force use of static builder() method @@ -884,6 +884,9 @@ public class GetPostplayHubsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (onlyTransient == null) { + onlyTransient = _SINGLETON_VALUE_OnlyTransient.value(); + } return new GetPostplayHubsRequest( accepts, clientIdentifier, product, @@ -899,5 +902,11 @@ public class GetPostplayHubsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnlyTransient = + new LazySingletonValue<>( + "onlyTransient", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetRelatedHubsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetRelatedHubsRequest.java index 8b8f5b9c..54644a94 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetRelatedHubsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetRelatedHubsRequest.java @@ -617,7 +617,7 @@ public class GetRelatedHubsRequest { private Optional count = Optional.empty(); - private Optional onlyTransient = Optional.empty(); + private Optional onlyTransient; private Builder() { // force use of static builder() method @@ -884,6 +884,9 @@ public class GetRelatedHubsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (onlyTransient == null) { + onlyTransient = _SINGLETON_VALUE_OnlyTransient.value(); + } return new GetRelatedHubsRequest( accepts, clientIdentifier, product, @@ -899,5 +902,11 @@ public class GetRelatedHubsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnlyTransient = + new LazySingletonValue<>( + "onlyTransient", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetSectionHubsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetSectionHubsRequest.java index 4ac32c69..ffca3ca6 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetSectionHubsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetSectionHubsRequest.java @@ -617,7 +617,7 @@ public class GetSectionHubsRequest { private Optional count = Optional.empty(); - private Optional onlyTransient = Optional.empty(); + private Optional onlyTransient; private Builder() { // force use of static builder() method @@ -884,6 +884,9 @@ public class GetSectionHubsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (onlyTransient == null) { + onlyTransient = _SINGLETON_VALUE_OnlyTransient.value(); + } return new GetSectionHubsRequest( accepts, clientIdentifier, product, @@ -899,5 +902,11 @@ public class GetSectionHubsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnlyTransient = + new LazySingletonValue<>( + "onlyTransient", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetSectionImageRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetSectionImageRequest.java index 319e9562..c67e961d 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetSectionImageRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetSectionImageRequest.java @@ -99,7 +99,22 @@ public class GetSectionImageRequest { private long updatedAt; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; @@ -273,7 +288,22 @@ public class GetSectionImageRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -520,7 +550,22 @@ public class GetSectionImageRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetSectionImageRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -530,7 +575,22 @@ public class GetSectionImageRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public GetSectionImageRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -876,7 +936,22 @@ public class GetSectionImageRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -885,7 +960,22 @@ public class GetSectionImageRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequest.java new file mode 100644 index 00000000..b252e335 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequest.java @@ -0,0 +1,414 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.SpeakeasyMetadata; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; + + +public class GetServerResourcesRequest { + /** + * Indicates the client accepts the indicated media types + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=accepts") + private Optional accepts; + + /** + * An opaque identifier unique to the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier") + private Optional clientIdentifier; + + /** + * Include Https entries in the results + */ + @SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeHttps") + private Optional includeHttps; + + /** + * Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ + @SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeRelay") + private Optional includeRelay; + + /** + * Include IPv6 entries in the results + */ + @SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeIPv6") + private Optional includeIPv6; + + @JsonCreator + public GetServerResourcesRequest( + Optional accepts, + Optional clientIdentifier, + Optional includeHttps, + Optional includeRelay, + Optional includeIPv6) { + Utils.checkNotNull(accepts, "accepts"); + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + Utils.checkNotNull(includeHttps, "includeHttps"); + Utils.checkNotNull(includeRelay, "includeRelay"); + Utils.checkNotNull(includeIPv6, "includeIPv6"); + this.accepts = accepts; + this.clientIdentifier = clientIdentifier; + this.includeHttps = includeHttps; + this.includeRelay = includeRelay; + this.includeIPv6 = includeIPv6; + } + + public GetServerResourcesRequest() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty()); + } + + /** + * Indicates the client accepts the indicated media types + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional accepts() { + return (Optional) accepts; + } + + /** + * An opaque identifier unique to the client + */ + @JsonIgnore + public Optional clientIdentifier() { + return clientIdentifier; + } + + /** + * Include Https entries in the results + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional includeHttps() { + return (Optional) includeHttps; + } + + /** + * Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional includeRelay() { + return (Optional) includeRelay; + } + + /** + * Include IPv6 entries in the results + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional includeIPv6() { + return (Optional) includeIPv6; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Indicates the client accepts the indicated media types + */ + public GetServerResourcesRequest withAccepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + + /** + * Indicates the client accepts the indicated media types + */ + public GetServerResourcesRequest withAccepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + /** + * An opaque identifier unique to the client + */ + public GetServerResourcesRequest withClientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public GetServerResourcesRequest withClientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + /** + * Include Https entries in the results + */ + public GetServerResourcesRequest withIncludeHttps(IncludeHttps includeHttps) { + Utils.checkNotNull(includeHttps, "includeHttps"); + this.includeHttps = Optional.ofNullable(includeHttps); + return this; + } + + + /** + * Include Https entries in the results + */ + public GetServerResourcesRequest withIncludeHttps(Optional includeHttps) { + Utils.checkNotNull(includeHttps, "includeHttps"); + this.includeHttps = includeHttps; + return this; + } + + /** + * Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ + public GetServerResourcesRequest withIncludeRelay(IncludeRelay includeRelay) { + Utils.checkNotNull(includeRelay, "includeRelay"); + this.includeRelay = Optional.ofNullable(includeRelay); + return this; + } + + + /** + * Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ + public GetServerResourcesRequest withIncludeRelay(Optional includeRelay) { + Utils.checkNotNull(includeRelay, "includeRelay"); + this.includeRelay = includeRelay; + return this; + } + + /** + * Include IPv6 entries in the results + */ + public GetServerResourcesRequest withIncludeIPv6(IncludeIPv6 includeIPv6) { + Utils.checkNotNull(includeIPv6, "includeIPv6"); + this.includeIPv6 = Optional.ofNullable(includeIPv6); + return this; + } + + + /** + * Include IPv6 entries in the results + */ + public GetServerResourcesRequest withIncludeIPv6(Optional includeIPv6) { + Utils.checkNotNull(includeIPv6, "includeIPv6"); + this.includeIPv6 = includeIPv6; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetServerResourcesRequest other = (GetServerResourcesRequest) o; + return + Utils.enhancedDeepEquals(this.accepts, other.accepts) && + Utils.enhancedDeepEquals(this.clientIdentifier, other.clientIdentifier) && + Utils.enhancedDeepEquals(this.includeHttps, other.includeHttps) && + Utils.enhancedDeepEquals(this.includeRelay, other.includeRelay) && + Utils.enhancedDeepEquals(this.includeIPv6, other.includeIPv6); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + accepts, clientIdentifier, includeHttps, + includeRelay, includeIPv6); + } + + @Override + public String toString() { + return Utils.toString(GetServerResourcesRequest.class, + "accepts", accepts, + "clientIdentifier", clientIdentifier, + "includeHttps", includeHttps, + "includeRelay", includeRelay, + "includeIPv6", includeIPv6); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional accepts; + + private Optional clientIdentifier = Optional.empty(); + + private Optional includeHttps; + + private Optional includeRelay; + + private Optional includeIPv6; + + private Builder() { + // force use of static builder() method + } + + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + + /** + * Include Https entries in the results + */ + public Builder includeHttps(IncludeHttps includeHttps) { + Utils.checkNotNull(includeHttps, "includeHttps"); + this.includeHttps = Optional.ofNullable(includeHttps); + return this; + } + + /** + * Include Https entries in the results + */ + public Builder includeHttps(Optional includeHttps) { + Utils.checkNotNull(includeHttps, "includeHttps"); + this.includeHttps = includeHttps; + return this; + } + + + /** + * Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ + public Builder includeRelay(IncludeRelay includeRelay) { + Utils.checkNotNull(includeRelay, "includeRelay"); + this.includeRelay = Optional.ofNullable(includeRelay); + return this; + } + + /** + * Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ + public Builder includeRelay(Optional includeRelay) { + Utils.checkNotNull(includeRelay, "includeRelay"); + this.includeRelay = includeRelay; + return this; + } + + + /** + * Include IPv6 entries in the results + */ + public Builder includeIPv6(IncludeIPv6 includeIPv6) { + Utils.checkNotNull(includeIPv6, "includeIPv6"); + this.includeIPv6 = Optional.ofNullable(includeIPv6); + return this; + } + + /** + * Include IPv6 entries in the results + */ + public Builder includeIPv6(Optional includeIPv6) { + Utils.checkNotNull(includeIPv6, "includeIPv6"); + this.includeIPv6 = includeIPv6; + return this; + } + + public GetServerResourcesRequest build() { + if (accepts == null) { + accepts = _SINGLETON_VALUE_Accepts.value(); + } + if (includeHttps == null) { + includeHttps = _SINGLETON_VALUE_IncludeHttps.value(); + } + if (includeRelay == null) { + includeRelay = _SINGLETON_VALUE_IncludeRelay.value(); + } + if (includeIPv6 == null) { + includeIPv6 = _SINGLETON_VALUE_IncludeIPv6.value(); + } + + return new GetServerResourcesRequest( + accepts, clientIdentifier, includeHttps, + includeRelay, includeIPv6); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Accepts = + new LazySingletonValue<>( + "accepts", + "\"application/xml\"", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeHttps = + new LazySingletonValue<>( + "includeHttps", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeRelay = + new LazySingletonValue<>( + "includeRelay", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeIPv6 = + new LazySingletonValue<>( + "includeIPv6", + "0", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequestBuilder.java new file mode 100644 index 00000000..1173de1e --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesRequestBuilder.java @@ -0,0 +1,50 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.operations.GetServerResources; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + +public class GetServerResourcesRequestBuilder { + + private GetServerResourcesRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public GetServerResourcesRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public GetServerResourcesRequestBuilder request(GetServerResourcesRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public GetServerResourcesRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public GetServerResourcesRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public GetServerResourcesResponse call() throws Exception { + + RequestOperation operation + = new GetServerResources.Sync(sdkConfiguration, serverURL); + + return operation.handleResponse(operation.doRequest(request)); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesResponse.java new file mode 100644 index 00000000..3ee78775 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetServerResourcesResponse.java @@ -0,0 +1,254 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.models.shared.PlexDevice; +import dev.plexapi.sdk.utils.Response; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + + +public class GetServerResourcesResponse implements Response { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + private Optional> plexDevices; + + @JsonCreator + public GetServerResourcesResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional> plexDevices) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(plexDevices, "plexDevices"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.plexDevices = plexDevices; + } + + public GetServerResourcesResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> plexDevices() { + return (Optional>) plexDevices; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public GetServerResourcesResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public GetServerResourcesResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetServerResourcesResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public GetServerResourcesResponse withPlexDevices(List plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = Optional.ofNullable(plexDevices); + return this; + } + + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public GetServerResourcesResponse withPlexDevices(Optional> plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = plexDevices; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetServerResourcesResponse other = (GetServerResourcesResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.plexDevices, other.plexDevices); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + plexDevices); + } + + @Override + public String toString() { + return Utils.toString(GetServerResourcesResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "plexDevices", plexDevices); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional> plexDevices = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public Builder plexDevices(List plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = Optional.ofNullable(plexDevices); + return this; + } + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public Builder plexDevices(Optional> plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = plexDevices; + return this; + } + + public GetServerResourcesResponse build() { + + return new GetServerResourcesResponse( + contentType, statusCode, rawResponse, + plexDevices); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetSourceConnectionInformationRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetSourceConnectionInformationRequest.java index 8085b479..09af97b9 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetSourceConnectionInformationRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetSourceConnectionInformationRequest.java @@ -576,7 +576,7 @@ public class GetSourceConnectionInformationRequest { private String source; - private Optional refresh = Optional.empty(); + private Optional refresh; private Builder() { // force use of static builder() method @@ -824,6 +824,9 @@ public class GetSourceConnectionInformationRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (refresh == null) { + refresh = _SINGLETON_VALUE_Refresh.value(); + } return new GetSourceConnectionInformationRequest( accepts, clientIdentifier, product, @@ -839,5 +842,11 @@ public class GetSourceConnectionInformationRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Refresh = + new LazySingletonValue<>( + "refresh", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetStreamRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetStreamRequest.java index 5f49ba2f..2d45dee6 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetStreamRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetStreamRequest.java @@ -690,7 +690,7 @@ public class GetStreamRequest { private Optional format = Optional.empty(); - private Optional autoAdjustSubtitle = Optional.empty(); + private Optional autoAdjustSubtitle; private Builder() { // force use of static builder() method @@ -986,6 +986,9 @@ public class GetStreamRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (autoAdjustSubtitle == null) { + autoAdjustSubtitle = _SINGLETON_VALUE_AutoAdjustSubtitle.value(); + } return new GetStreamRequest( accepts, clientIdentifier, product, @@ -1002,5 +1005,11 @@ public class GetStreamRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustSubtitle = + new LazySingletonValue<>( + "autoAdjustSubtitle", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetSubscriptionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetSubscriptionRequest.java index 752a5ad9..cbe6419e 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetSubscriptionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetSubscriptionRequest.java @@ -608,9 +608,9 @@ public class GetSubscriptionRequest { private Long subscriptionId; - private Optional includeGrabs = Optional.empty(); + private Optional includeGrabs; - private Optional includeStorage = Optional.empty(); + private Optional includeStorage; private Builder() { // force use of static builder() method @@ -874,6 +874,12 @@ public class GetSubscriptionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (includeGrabs == null) { + includeGrabs = _SINGLETON_VALUE_IncludeGrabs.value(); + } + if (includeStorage == null) { + includeStorage = _SINGLETON_VALUE_IncludeStorage.value(); + } return new GetSubscriptionRequest( accepts, clientIdentifier, product, @@ -889,5 +895,17 @@ public class GetSubscriptionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeGrabs = + new LazySingletonValue<>( + "includeGrabs", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeStorage = + new LazySingletonValue<>( + "includeStorage", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetTagsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetTagsRequest.java index 43c78b0a..6842d3cf 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/GetTagsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetTagsRequest.java @@ -7,10 +7,10 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.type.TypeReference; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.MediaType; import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.SpeakeasyMetadata; import dev.plexapi.sdk.utils.Utils; -import java.lang.Long; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; @@ -85,10 +85,22 @@ public class GetTagsRequest { private Optional marketplace; /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

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") - private Optional type; + private Optional type; @JsonCreator public GetTagsRequest( @@ -103,7 +115,7 @@ public class GetTagsRequest { Optional deviceVendor, Optional deviceName, Optional marketplace, - Optional type) { + Optional type) { Utils.checkNotNull(accepts, "accepts"); Utils.checkNotNull(clientIdentifier, "clientIdentifier"); Utils.checkNotNull(product, "product"); @@ -227,11 +239,24 @@ public class GetTagsRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ + @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return type; + public Optional type() { + return (Optional) type; } public static Builder builder() { @@ -449,9 +474,21 @@ public class GetTagsRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public GetTagsRequest withType(long type) { + public GetTagsRequest withType(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; @@ -459,9 +496,21 @@ public class GetTagsRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public GetTagsRequest withType(Optional type) { + public GetTagsRequest withType(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -542,7 +591,7 @@ public class GetTagsRequest { private Optional marketplace = Optional.empty(); - private Optional type = Optional.empty(); + private Optional type = Optional.empty(); private Builder() { // force use of static builder() method @@ -759,18 +808,42 @@ public class GetTagsRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(long type) { + public Builder type(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(Optional type) { + public Builder type(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetTasksButlerTask.java b/src/main/java/dev/plexapi/sdk/models/operations/GetTasksButlerTask.java new file mode 100644 index 00000000..ac05a6c8 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetTasksButlerTask.java @@ -0,0 +1,433 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class GetTasksButlerTask { + /** + * A user-friendly description of the task + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("description") + private Optional description; + + /** + * Whether this task is enabled or not + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("enabled") + private Optional enabled; + + /** + * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("interval") + private Optional interval; + + /** + * The name of the task + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("name") + private Optional name; + + /** + * Indicates whether the timing of the task is randomized within the butler interval + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("scheduleRandomized") + private Optional scheduleRandomized; + + /** + * A user-friendly title of the task + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("title") + private Optional title; + + @JsonCreator + public GetTasksButlerTask( + @JsonProperty("description") Optional description, + @JsonProperty("enabled") Optional enabled, + @JsonProperty("interval") Optional interval, + @JsonProperty("name") Optional name, + @JsonProperty("scheduleRandomized") Optional scheduleRandomized, + @JsonProperty("title") Optional title) { + Utils.checkNotNull(description, "description"); + Utils.checkNotNull(enabled, "enabled"); + Utils.checkNotNull(interval, "interval"); + Utils.checkNotNull(name, "name"); + Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); + Utils.checkNotNull(title, "title"); + this.description = description; + this.enabled = enabled; + this.interval = interval; + this.name = name; + this.scheduleRandomized = scheduleRandomized; + this.title = title; + } + + public GetTasksButlerTask() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty()); + } + + /** + * A user-friendly description of the task + */ + @JsonIgnore + public Optional description() { + return description; + } + + /** + * Whether this task is enabled or not + */ + @JsonIgnore + public Optional enabled() { + return enabled; + } + + /** + * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + */ + @JsonIgnore + public Optional interval() { + return interval; + } + + /** + * The name of the task + */ + @JsonIgnore + public Optional name() { + return name; + } + + /** + * Indicates whether the timing of the task is randomized within the butler interval + */ + @JsonIgnore + public Optional scheduleRandomized() { + return scheduleRandomized; + } + + /** + * A user-friendly title of the task + */ + @JsonIgnore + public Optional title() { + return title; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * A user-friendly description of the task + */ + public GetTasksButlerTask withDescription(String description) { + Utils.checkNotNull(description, "description"); + this.description = Optional.ofNullable(description); + return this; + } + + + /** + * A user-friendly description of the task + */ + public GetTasksButlerTask withDescription(Optional description) { + Utils.checkNotNull(description, "description"); + this.description = description; + return this; + } + + /** + * Whether this task is enabled or not + */ + public GetTasksButlerTask withEnabled(boolean enabled) { + Utils.checkNotNull(enabled, "enabled"); + this.enabled = Optional.ofNullable(enabled); + return this; + } + + + /** + * Whether this task is enabled or not + */ + public GetTasksButlerTask withEnabled(Optional enabled) { + Utils.checkNotNull(enabled, "enabled"); + this.enabled = enabled; + return this; + } + + /** + * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + */ + public GetTasksButlerTask withInterval(long interval) { + Utils.checkNotNull(interval, "interval"); + this.interval = Optional.ofNullable(interval); + return this; + } + + + /** + * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + */ + public GetTasksButlerTask withInterval(Optional interval) { + Utils.checkNotNull(interval, "interval"); + this.interval = interval; + return this; + } + + /** + * The name of the task + */ + public GetTasksButlerTask withName(String name) { + Utils.checkNotNull(name, "name"); + this.name = Optional.ofNullable(name); + return this; + } + + + /** + * The name of the task + */ + public GetTasksButlerTask withName(Optional name) { + Utils.checkNotNull(name, "name"); + this.name = name; + return this; + } + + /** + * Indicates whether the timing of the task is randomized within the butler interval + */ + public GetTasksButlerTask withScheduleRandomized(boolean scheduleRandomized) { + Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); + this.scheduleRandomized = Optional.ofNullable(scheduleRandomized); + return this; + } + + + /** + * Indicates whether the timing of the task is randomized within the butler interval + */ + public GetTasksButlerTask withScheduleRandomized(Optional scheduleRandomized) { + Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); + this.scheduleRandomized = scheduleRandomized; + return this; + } + + /** + * A user-friendly title of the task + */ + public GetTasksButlerTask withTitle(String title) { + Utils.checkNotNull(title, "title"); + this.title = Optional.ofNullable(title); + return this; + } + + + /** + * A user-friendly title of the task + */ + public GetTasksButlerTask withTitle(Optional title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTasksButlerTask other = (GetTasksButlerTask) o; + return + Utils.enhancedDeepEquals(this.description, other.description) && + Utils.enhancedDeepEquals(this.enabled, other.enabled) && + Utils.enhancedDeepEquals(this.interval, other.interval) && + Utils.enhancedDeepEquals(this.name, other.name) && + Utils.enhancedDeepEquals(this.scheduleRandomized, other.scheduleRandomized) && + Utils.enhancedDeepEquals(this.title, other.title); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + description, enabled, interval, + name, scheduleRandomized, title); + } + + @Override + public String toString() { + return Utils.toString(GetTasksButlerTask.class, + "description", description, + "enabled", enabled, + "interval", interval, + "name", name, + "scheduleRandomized", scheduleRandomized, + "title", title); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional description = Optional.empty(); + + private Optional enabled = Optional.empty(); + + private Optional interval = Optional.empty(); + + private Optional name = Optional.empty(); + + private Optional scheduleRandomized = Optional.empty(); + + private Optional title = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * A user-friendly description of the task + */ + public Builder description(String description) { + Utils.checkNotNull(description, "description"); + this.description = Optional.ofNullable(description); + return this; + } + + /** + * A user-friendly description of the task + */ + public Builder description(Optional description) { + Utils.checkNotNull(description, "description"); + this.description = description; + return this; + } + + + /** + * Whether this task is enabled or not + */ + public Builder enabled(boolean enabled) { + Utils.checkNotNull(enabled, "enabled"); + this.enabled = Optional.ofNullable(enabled); + return this; + } + + /** + * Whether this task is enabled or not + */ + public Builder enabled(Optional enabled) { + Utils.checkNotNull(enabled, "enabled"); + this.enabled = enabled; + return this; + } + + + /** + * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + */ + public Builder interval(long interval) { + Utils.checkNotNull(interval, "interval"); + this.interval = Optional.ofNullable(interval); + return this; + } + + /** + * The interval (in days) of when this task is run. A value of 1 is run every day, 7 is every week, etc. + */ + public Builder interval(Optional interval) { + Utils.checkNotNull(interval, "interval"); + this.interval = interval; + return this; + } + + + /** + * The name of the task + */ + public Builder name(String name) { + Utils.checkNotNull(name, "name"); + this.name = Optional.ofNullable(name); + return this; + } + + /** + * The name of the task + */ + public Builder name(Optional name) { + Utils.checkNotNull(name, "name"); + this.name = name; + return this; + } + + + /** + * Indicates whether the timing of the task is randomized within the butler interval + */ + public Builder scheduleRandomized(boolean scheduleRandomized) { + Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); + this.scheduleRandomized = Optional.ofNullable(scheduleRandomized); + return this; + } + + /** + * Indicates whether the timing of the task is randomized within the butler interval + */ + public Builder scheduleRandomized(Optional scheduleRandomized) { + Utils.checkNotNull(scheduleRandomized, "scheduleRandomized"); + this.scheduleRandomized = scheduleRandomized; + return this; + } + + + /** + * A user-friendly title of the task + */ + public Builder title(String title) { + Utils.checkNotNull(title, "title"); + this.title = Optional.ofNullable(title); + return this; + } + + /** + * A user-friendly title of the task + */ + public Builder title(Optional title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + public GetTasksButlerTask build() { + + return new GetTasksButlerTask( + description, enabled, interval, + name, scheduleRandomized, title); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequest.java new file mode 100644 index 00000000..089d3d50 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequest.java @@ -0,0 +1,738 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.SpeakeasyMetadata; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; + + +public class GetTokenDetailsRequest { + /** + * Indicates the client accepts the indicated media types + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=accepts") + private Optional accepts; + + /** + * An opaque identifier unique to the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier") + private Optional clientIdentifier; + + /** + * The name of the client product + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Product") + private Optional product; + + /** + * The version of the client application + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Version") + private Optional version; + + /** + * The platform of the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform") + private Optional platform; + + /** + * The version of the platform + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform-Version") + private Optional platformVersion; + + /** + * A relatively friendly name for the client device + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device") + private Optional device; + + /** + * A potentially less friendly identifier for the device model + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Model") + private Optional model; + + /** + * The device vendor + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Vendor") + private Optional deviceVendor; + + /** + * A friendly name for the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Name") + private Optional deviceName; + + /** + * The marketplace on which the client application is distributed + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Marketplace") + private Optional marketplace; + + @JsonCreator + public GetTokenDetailsRequest( + Optional accepts, + Optional clientIdentifier, + Optional product, + Optional version, + Optional platform, + Optional platformVersion, + Optional device, + Optional model, + Optional deviceVendor, + Optional deviceName, + Optional marketplace) { + Utils.checkNotNull(accepts, "accepts"); + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + Utils.checkNotNull(product, "product"); + Utils.checkNotNull(version, "version"); + Utils.checkNotNull(platform, "platform"); + Utils.checkNotNull(platformVersion, "platformVersion"); + Utils.checkNotNull(device, "device"); + Utils.checkNotNull(model, "model"); + Utils.checkNotNull(deviceVendor, "deviceVendor"); + Utils.checkNotNull(deviceName, "deviceName"); + Utils.checkNotNull(marketplace, "marketplace"); + this.accepts = accepts; + this.clientIdentifier = clientIdentifier; + this.product = product; + this.version = version; + this.platform = platform; + this.platformVersion = platformVersion; + this.device = device; + this.model = model; + this.deviceVendor = deviceVendor; + this.deviceName = deviceName; + this.marketplace = marketplace; + } + + public GetTokenDetailsRequest() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty()); + } + + /** + * Indicates the client accepts the indicated media types + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional accepts() { + return (Optional) accepts; + } + + /** + * An opaque identifier unique to the client + */ + @JsonIgnore + public Optional clientIdentifier() { + return clientIdentifier; + } + + /** + * The name of the client product + */ + @JsonIgnore + public Optional product() { + return product; + } + + /** + * The version of the client application + */ + @JsonIgnore + public Optional version() { + return version; + } + + /** + * The platform of the client + */ + @JsonIgnore + public Optional platform() { + return platform; + } + + /** + * The version of the platform + */ + @JsonIgnore + public Optional platformVersion() { + return platformVersion; + } + + /** + * A relatively friendly name for the client device + */ + @JsonIgnore + public Optional device() { + return device; + } + + /** + * A potentially less friendly identifier for the device model + */ + @JsonIgnore + public Optional model() { + return model; + } + + /** + * The device vendor + */ + @JsonIgnore + public Optional deviceVendor() { + return deviceVendor; + } + + /** + * A friendly name for the client + */ + @JsonIgnore + public Optional deviceName() { + return deviceName; + } + + /** + * The marketplace on which the client application is distributed + */ + @JsonIgnore + public Optional marketplace() { + return marketplace; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Indicates the client accepts the indicated media types + */ + public GetTokenDetailsRequest withAccepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + + /** + * Indicates the client accepts the indicated media types + */ + public GetTokenDetailsRequest withAccepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + /** + * An opaque identifier unique to the client + */ + public GetTokenDetailsRequest withClientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public GetTokenDetailsRequest withClientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + /** + * The name of the client product + */ + public GetTokenDetailsRequest withProduct(String product) { + Utils.checkNotNull(product, "product"); + this.product = Optional.ofNullable(product); + return this; + } + + + /** + * The name of the client product + */ + public GetTokenDetailsRequest withProduct(Optional product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + /** + * The version of the client application + */ + public GetTokenDetailsRequest withVersion(String version) { + Utils.checkNotNull(version, "version"); + this.version = Optional.ofNullable(version); + return this; + } + + + /** + * The version of the client application + */ + public GetTokenDetailsRequest withVersion(Optional version) { + Utils.checkNotNull(version, "version"); + this.version = version; + return this; + } + + /** + * The platform of the client + */ + public GetTokenDetailsRequest withPlatform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + + /** + * The platform of the client + */ + public GetTokenDetailsRequest withPlatform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + /** + * The version of the platform + */ + public GetTokenDetailsRequest withPlatformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + + /** + * The version of the platform + */ + public GetTokenDetailsRequest withPlatformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + /** + * A relatively friendly name for the client device + */ + public GetTokenDetailsRequest withDevice(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + + /** + * A relatively friendly name for the client device + */ + public GetTokenDetailsRequest withDevice(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + /** + * A potentially less friendly identifier for the device model + */ + public GetTokenDetailsRequest withModel(String model) { + Utils.checkNotNull(model, "model"); + this.model = Optional.ofNullable(model); + return this; + } + + + /** + * A potentially less friendly identifier for the device model + */ + public GetTokenDetailsRequest withModel(Optional model) { + Utils.checkNotNull(model, "model"); + this.model = model; + return this; + } + + /** + * The device vendor + */ + public GetTokenDetailsRequest withDeviceVendor(String deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = Optional.ofNullable(deviceVendor); + return this; + } + + + /** + * The device vendor + */ + public GetTokenDetailsRequest withDeviceVendor(Optional deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = deviceVendor; + return this; + } + + /** + * A friendly name for the client + */ + public GetTokenDetailsRequest withDeviceName(String deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = Optional.ofNullable(deviceName); + return this; + } + + + /** + * A friendly name for the client + */ + public GetTokenDetailsRequest withDeviceName(Optional deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = deviceName; + return this; + } + + /** + * The marketplace on which the client application is distributed + */ + public GetTokenDetailsRequest withMarketplace(String marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = Optional.ofNullable(marketplace); + return this; + } + + + /** + * The marketplace on which the client application is distributed + */ + public GetTokenDetailsRequest withMarketplace(Optional marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = marketplace; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsRequest other = (GetTokenDetailsRequest) o; + return + Utils.enhancedDeepEquals(this.accepts, other.accepts) && + Utils.enhancedDeepEquals(this.clientIdentifier, other.clientIdentifier) && + Utils.enhancedDeepEquals(this.product, other.product) && + Utils.enhancedDeepEquals(this.version, other.version) && + Utils.enhancedDeepEquals(this.platform, other.platform) && + Utils.enhancedDeepEquals(this.platformVersion, other.platformVersion) && + Utils.enhancedDeepEquals(this.device, other.device) && + Utils.enhancedDeepEquals(this.model, other.model) && + Utils.enhancedDeepEquals(this.deviceVendor, other.deviceVendor) && + Utils.enhancedDeepEquals(this.deviceName, other.deviceName) && + Utils.enhancedDeepEquals(this.marketplace, other.marketplace); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + accepts, clientIdentifier, product, + version, platform, platformVersion, + device, model, deviceVendor, + deviceName, marketplace); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsRequest.class, + "accepts", accepts, + "clientIdentifier", clientIdentifier, + "product", product, + "version", version, + "platform", platform, + "platformVersion", platformVersion, + "device", device, + "model", model, + "deviceVendor", deviceVendor, + "deviceName", deviceName, + "marketplace", marketplace); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional accepts; + + private Optional clientIdentifier = Optional.empty(); + + private Optional product = Optional.empty(); + + private Optional version = Optional.empty(); + + private Optional platform = Optional.empty(); + + private Optional platformVersion = Optional.empty(); + + private Optional device = Optional.empty(); + + private Optional model = Optional.empty(); + + private Optional deviceVendor = Optional.empty(); + + private Optional deviceName = Optional.empty(); + + private Optional marketplace = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + + /** + * The name of the client product + */ + public Builder product(String product) { + Utils.checkNotNull(product, "product"); + this.product = Optional.ofNullable(product); + return this; + } + + /** + * The name of the client product + */ + public Builder product(Optional product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + + /** + * The version of the client application + */ + public Builder version(String version) { + Utils.checkNotNull(version, "version"); + this.version = Optional.ofNullable(version); + return this; + } + + /** + * The version of the client application + */ + public Builder version(Optional version) { + Utils.checkNotNull(version, "version"); + this.version = version; + return this; + } + + + /** + * The platform of the client + */ + public Builder platform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + /** + * The platform of the client + */ + public Builder platform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + + /** + * The version of the platform + */ + public Builder platformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + /** + * The version of the platform + */ + public Builder platformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + + /** + * A relatively friendly name for the client device + */ + public Builder device(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + /** + * A relatively friendly name for the client device + */ + public Builder device(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + + /** + * A potentially less friendly identifier for the device model + */ + public Builder model(String model) { + Utils.checkNotNull(model, "model"); + this.model = Optional.ofNullable(model); + return this; + } + + /** + * A potentially less friendly identifier for the device model + */ + public Builder model(Optional model) { + Utils.checkNotNull(model, "model"); + this.model = model; + return this; + } + + + /** + * The device vendor + */ + public Builder deviceVendor(String deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = Optional.ofNullable(deviceVendor); + return this; + } + + /** + * The device vendor + */ + public Builder deviceVendor(Optional deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = deviceVendor; + return this; + } + + + /** + * A friendly name for the client + */ + public Builder deviceName(String deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = Optional.ofNullable(deviceName); + return this; + } + + /** + * A friendly name for the client + */ + public Builder deviceName(Optional deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = deviceName; + return this; + } + + + /** + * The marketplace on which the client application is distributed + */ + public Builder marketplace(String marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = Optional.ofNullable(marketplace); + return this; + } + + /** + * The marketplace on which the client application is distributed + */ + public Builder marketplace(Optional marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = marketplace; + return this; + } + + public GetTokenDetailsRequest build() { + if (accepts == null) { + accepts = _SINGLETON_VALUE_Accepts.value(); + } + + return new GetTokenDetailsRequest( + accepts, clientIdentifier, product, + version, platform, platformVersion, + device, model, deviceVendor, + deviceName, marketplace); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Accepts = + new LazySingletonValue<>( + "accepts", + "\"application/xml\"", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequestBuilder.java new file mode 100644 index 00000000..84383973 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsRequestBuilder.java @@ -0,0 +1,50 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.operations.GetTokenDetails; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + +public class GetTokenDetailsRequestBuilder { + + private GetTokenDetailsRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public GetTokenDetailsRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public GetTokenDetailsRequestBuilder request(GetTokenDetailsRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public GetTokenDetailsRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public GetTokenDetailsRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public GetTokenDetailsResponse call() throws Exception { + + RequestOperation operation + = new GetTokenDetails.Sync(sdkConfiguration, serverURL); + + return operation.handleResponse(operation.doRequest(request)); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsResponse.java new file mode 100644 index 00000000..85a6723f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetTokenDetailsResponse.java @@ -0,0 +1,253 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.models.shared.UserPlexAccount; +import dev.plexapi.sdk.utils.Response; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.Optional; + + +public class GetTokenDetailsResponse implements Response { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * Logged in user details + */ + private Optional userPlexAccount; + + @JsonCreator + public GetTokenDetailsResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional userPlexAccount) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.userPlexAccount = userPlexAccount; + } + + public GetTokenDetailsResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * Logged in user details + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional userPlexAccount() { + return (Optional) userPlexAccount; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public GetTokenDetailsResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public GetTokenDetailsResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * Logged in user details + */ + public GetTokenDetailsResponse withUserPlexAccount(UserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + + /** + * Logged in user details + */ + public GetTokenDetailsResponse withUserPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsResponse other = (GetTokenDetailsResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.userPlexAccount, other.userPlexAccount); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "userPlexAccount", userPlexAccount); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional userPlexAccount = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * Logged in user details + */ + public Builder userPlexAccount(UserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + /** + * Logged in user details + */ + public Builder userPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + public GetTokenDetailsResponse build() { + + return new GetTokenDetailsResponse( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetUsersMediaContainer.java b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersMediaContainer.java new file mode 100644 index 00000000..d2729d36 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersMediaContainer.java @@ -0,0 +1,298 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.util.List; + +/** + * GetUsersMediaContainer + * + *

Container holding user and server details. + */ +public class GetUsersMediaContainer { + /** + * The friendly name of the Plex instance. + */ + @JsonProperty("friendlyName") + private String friendlyName; + + + @JsonProperty("identifier") + private String identifier; + + /** + * Unique Machine identifier of the Plex server. + */ + @JsonProperty("machineIdentifier") + private String machineIdentifier; + + /** + * Total number of users. + */ + @JsonProperty("totalSize") + private long totalSize; + + /** + * Number of users in the current response. + */ + @JsonProperty("size") + private long size; + + /** + * List of users with access to the Plex server. + */ + @JsonProperty("User") + private List user; + + @JsonCreator + public GetUsersMediaContainer( + @JsonProperty("friendlyName") String friendlyName, + @JsonProperty("identifier") String identifier, + @JsonProperty("machineIdentifier") String machineIdentifier, + @JsonProperty("totalSize") long totalSize, + @JsonProperty("size") long size, + @JsonProperty("User") List user) { + Utils.checkNotNull(friendlyName, "friendlyName"); + Utils.checkNotNull(identifier, "identifier"); + Utils.checkNotNull(machineIdentifier, "machineIdentifier"); + Utils.checkNotNull(totalSize, "totalSize"); + Utils.checkNotNull(size, "size"); + Utils.checkNotNull(user, "user"); + this.friendlyName = friendlyName; + this.identifier = identifier; + this.machineIdentifier = machineIdentifier; + this.totalSize = totalSize; + this.size = size; + this.user = user; + } + + /** + * The friendly name of the Plex instance. + */ + @JsonIgnore + public String friendlyName() { + return friendlyName; + } + + @JsonIgnore + public String identifier() { + return identifier; + } + + /** + * Unique Machine identifier of the Plex server. + */ + @JsonIgnore + public String machineIdentifier() { + return machineIdentifier; + } + + /** + * Total number of users. + */ + @JsonIgnore + public long totalSize() { + return totalSize; + } + + /** + * Number of users in the current response. + */ + @JsonIgnore + public long size() { + return size; + } + + /** + * List of users with access to the Plex server. + */ + @JsonIgnore + public List user() { + return user; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The friendly name of the Plex instance. + */ + public GetUsersMediaContainer withFriendlyName(String friendlyName) { + Utils.checkNotNull(friendlyName, "friendlyName"); + this.friendlyName = friendlyName; + return this; + } + + public GetUsersMediaContainer withIdentifier(String identifier) { + Utils.checkNotNull(identifier, "identifier"); + this.identifier = identifier; + return this; + } + + /** + * Unique Machine identifier of the Plex server. + */ + public GetUsersMediaContainer withMachineIdentifier(String machineIdentifier) { + Utils.checkNotNull(machineIdentifier, "machineIdentifier"); + this.machineIdentifier = machineIdentifier; + return this; + } + + /** + * Total number of users. + */ + public GetUsersMediaContainer withTotalSize(long totalSize) { + Utils.checkNotNull(totalSize, "totalSize"); + this.totalSize = totalSize; + return this; + } + + /** + * Number of users in the current response. + */ + public GetUsersMediaContainer withSize(long size) { + Utils.checkNotNull(size, "size"); + this.size = size; + return this; + } + + /** + * List of users with access to the Plex server. + */ + public GetUsersMediaContainer withUser(List user) { + Utils.checkNotNull(user, "user"); + this.user = user; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersMediaContainer other = (GetUsersMediaContainer) o; + return + Utils.enhancedDeepEquals(this.friendlyName, other.friendlyName) && + Utils.enhancedDeepEquals(this.identifier, other.identifier) && + Utils.enhancedDeepEquals(this.machineIdentifier, other.machineIdentifier) && + Utils.enhancedDeepEquals(this.totalSize, other.totalSize) && + Utils.enhancedDeepEquals(this.size, other.size) && + Utils.enhancedDeepEquals(this.user, other.user); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + friendlyName, identifier, machineIdentifier, + totalSize, size, user); + } + + @Override + public String toString() { + return Utils.toString(GetUsersMediaContainer.class, + "friendlyName", friendlyName, + "identifier", identifier, + "machineIdentifier", machineIdentifier, + "totalSize", totalSize, + "size", size, + "user", user); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String friendlyName; + + private String identifier; + + private String machineIdentifier; + + private Long totalSize; + + private Long size; + + private List user; + + private Builder() { + // force use of static builder() method + } + + + /** + * The friendly name of the Plex instance. + */ + public Builder friendlyName(String friendlyName) { + Utils.checkNotNull(friendlyName, "friendlyName"); + this.friendlyName = friendlyName; + return this; + } + + + public Builder identifier(String identifier) { + Utils.checkNotNull(identifier, "identifier"); + this.identifier = identifier; + return this; + } + + + /** + * Unique Machine identifier of the Plex server. + */ + public Builder machineIdentifier(String machineIdentifier) { + Utils.checkNotNull(machineIdentifier, "machineIdentifier"); + this.machineIdentifier = machineIdentifier; + return this; + } + + + /** + * Total number of users. + */ + public Builder totalSize(long totalSize) { + Utils.checkNotNull(totalSize, "totalSize"); + this.totalSize = totalSize; + return this; + } + + + /** + * Number of users in the current response. + */ + public Builder size(long size) { + Utils.checkNotNull(size, "size"); + this.size = size; + return this; + } + + + /** + * List of users with access to the Plex server. + */ + public Builder user(List user) { + Utils.checkNotNull(user, "user"); + this.user = user; + return this; + } + + public GetUsersMediaContainer build() { + + return new GetUsersMediaContainer( + friendlyName, identifier, machineIdentifier, + totalSize, size, user); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequest.java new file mode 100644 index 00000000..1cf6065c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequest.java @@ -0,0 +1,738 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.SpeakeasyMetadata; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; + + +public class GetUsersRequest { + /** + * Indicates the client accepts the indicated media types + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=accepts") + private Optional accepts; + + /** + * An opaque identifier unique to the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier") + private Optional clientIdentifier; + + /** + * The name of the client product + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Product") + private Optional product; + + /** + * The version of the client application + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Version") + private Optional version; + + /** + * The platform of the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform") + private Optional platform; + + /** + * The version of the platform + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform-Version") + private Optional platformVersion; + + /** + * A relatively friendly name for the client device + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device") + private Optional device; + + /** + * A potentially less friendly identifier for the device model + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Model") + private Optional model; + + /** + * The device vendor + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Vendor") + private Optional deviceVendor; + + /** + * A friendly name for the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Name") + private Optional deviceName; + + /** + * The marketplace on which the client application is distributed + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Marketplace") + private Optional marketplace; + + @JsonCreator + public GetUsersRequest( + Optional accepts, + Optional clientIdentifier, + Optional product, + Optional version, + Optional platform, + Optional platformVersion, + Optional device, + Optional model, + Optional deviceVendor, + Optional deviceName, + Optional marketplace) { + Utils.checkNotNull(accepts, "accepts"); + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + Utils.checkNotNull(product, "product"); + Utils.checkNotNull(version, "version"); + Utils.checkNotNull(platform, "platform"); + Utils.checkNotNull(platformVersion, "platformVersion"); + Utils.checkNotNull(device, "device"); + Utils.checkNotNull(model, "model"); + Utils.checkNotNull(deviceVendor, "deviceVendor"); + Utils.checkNotNull(deviceName, "deviceName"); + Utils.checkNotNull(marketplace, "marketplace"); + this.accepts = accepts; + this.clientIdentifier = clientIdentifier; + this.product = product; + this.version = version; + this.platform = platform; + this.platformVersion = platformVersion; + this.device = device; + this.model = model; + this.deviceVendor = deviceVendor; + this.deviceName = deviceName; + this.marketplace = marketplace; + } + + public GetUsersRequest() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty()); + } + + /** + * Indicates the client accepts the indicated media types + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional accepts() { + return (Optional) accepts; + } + + /** + * An opaque identifier unique to the client + */ + @JsonIgnore + public Optional clientIdentifier() { + return clientIdentifier; + } + + /** + * The name of the client product + */ + @JsonIgnore + public Optional product() { + return product; + } + + /** + * The version of the client application + */ + @JsonIgnore + public Optional version() { + return version; + } + + /** + * The platform of the client + */ + @JsonIgnore + public Optional platform() { + return platform; + } + + /** + * The version of the platform + */ + @JsonIgnore + public Optional platformVersion() { + return platformVersion; + } + + /** + * A relatively friendly name for the client device + */ + @JsonIgnore + public Optional device() { + return device; + } + + /** + * A potentially less friendly identifier for the device model + */ + @JsonIgnore + public Optional model() { + return model; + } + + /** + * The device vendor + */ + @JsonIgnore + public Optional deviceVendor() { + return deviceVendor; + } + + /** + * A friendly name for the client + */ + @JsonIgnore + public Optional deviceName() { + return deviceName; + } + + /** + * The marketplace on which the client application is distributed + */ + @JsonIgnore + public Optional marketplace() { + return marketplace; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Indicates the client accepts the indicated media types + */ + public GetUsersRequest withAccepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + + /** + * Indicates the client accepts the indicated media types + */ + public GetUsersRequest withAccepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + /** + * An opaque identifier unique to the client + */ + public GetUsersRequest withClientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public GetUsersRequest withClientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + /** + * The name of the client product + */ + public GetUsersRequest withProduct(String product) { + Utils.checkNotNull(product, "product"); + this.product = Optional.ofNullable(product); + return this; + } + + + /** + * The name of the client product + */ + public GetUsersRequest withProduct(Optional product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + /** + * The version of the client application + */ + public GetUsersRequest withVersion(String version) { + Utils.checkNotNull(version, "version"); + this.version = Optional.ofNullable(version); + return this; + } + + + /** + * The version of the client application + */ + public GetUsersRequest withVersion(Optional version) { + Utils.checkNotNull(version, "version"); + this.version = version; + return this; + } + + /** + * The platform of the client + */ + public GetUsersRequest withPlatform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + + /** + * The platform of the client + */ + public GetUsersRequest withPlatform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + /** + * The version of the platform + */ + public GetUsersRequest withPlatformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + + /** + * The version of the platform + */ + public GetUsersRequest withPlatformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + /** + * A relatively friendly name for the client device + */ + public GetUsersRequest withDevice(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + + /** + * A relatively friendly name for the client device + */ + public GetUsersRequest withDevice(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + /** + * A potentially less friendly identifier for the device model + */ + public GetUsersRequest withModel(String model) { + Utils.checkNotNull(model, "model"); + this.model = Optional.ofNullable(model); + return this; + } + + + /** + * A potentially less friendly identifier for the device model + */ + public GetUsersRequest withModel(Optional model) { + Utils.checkNotNull(model, "model"); + this.model = model; + return this; + } + + /** + * The device vendor + */ + public GetUsersRequest withDeviceVendor(String deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = Optional.ofNullable(deviceVendor); + return this; + } + + + /** + * The device vendor + */ + public GetUsersRequest withDeviceVendor(Optional deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = deviceVendor; + return this; + } + + /** + * A friendly name for the client + */ + public GetUsersRequest withDeviceName(String deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = Optional.ofNullable(deviceName); + return this; + } + + + /** + * A friendly name for the client + */ + public GetUsersRequest withDeviceName(Optional deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = deviceName; + return this; + } + + /** + * The marketplace on which the client application is distributed + */ + public GetUsersRequest withMarketplace(String marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = Optional.ofNullable(marketplace); + return this; + } + + + /** + * The marketplace on which the client application is distributed + */ + public GetUsersRequest withMarketplace(Optional marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = marketplace; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersRequest other = (GetUsersRequest) o; + return + Utils.enhancedDeepEquals(this.accepts, other.accepts) && + Utils.enhancedDeepEquals(this.clientIdentifier, other.clientIdentifier) && + Utils.enhancedDeepEquals(this.product, other.product) && + Utils.enhancedDeepEquals(this.version, other.version) && + Utils.enhancedDeepEquals(this.platform, other.platform) && + Utils.enhancedDeepEquals(this.platformVersion, other.platformVersion) && + Utils.enhancedDeepEquals(this.device, other.device) && + Utils.enhancedDeepEquals(this.model, other.model) && + Utils.enhancedDeepEquals(this.deviceVendor, other.deviceVendor) && + Utils.enhancedDeepEquals(this.deviceName, other.deviceName) && + Utils.enhancedDeepEquals(this.marketplace, other.marketplace); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + accepts, clientIdentifier, product, + version, platform, platformVersion, + device, model, deviceVendor, + deviceName, marketplace); + } + + @Override + public String toString() { + return Utils.toString(GetUsersRequest.class, + "accepts", accepts, + "clientIdentifier", clientIdentifier, + "product", product, + "version", version, + "platform", platform, + "platformVersion", platformVersion, + "device", device, + "model", model, + "deviceVendor", deviceVendor, + "deviceName", deviceName, + "marketplace", marketplace); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional accepts; + + private Optional clientIdentifier = Optional.empty(); + + private Optional product = Optional.empty(); + + private Optional version = Optional.empty(); + + private Optional platform = Optional.empty(); + + private Optional platformVersion = Optional.empty(); + + private Optional device = Optional.empty(); + + private Optional model = Optional.empty(); + + private Optional deviceVendor = Optional.empty(); + + private Optional deviceName = Optional.empty(); + + private Optional marketplace = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + + /** + * The name of the client product + */ + public Builder product(String product) { + Utils.checkNotNull(product, "product"); + this.product = Optional.ofNullable(product); + return this; + } + + /** + * The name of the client product + */ + public Builder product(Optional product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + + /** + * The version of the client application + */ + public Builder version(String version) { + Utils.checkNotNull(version, "version"); + this.version = Optional.ofNullable(version); + return this; + } + + /** + * The version of the client application + */ + public Builder version(Optional version) { + Utils.checkNotNull(version, "version"); + this.version = version; + return this; + } + + + /** + * The platform of the client + */ + public Builder platform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + /** + * The platform of the client + */ + public Builder platform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + + /** + * The version of the platform + */ + public Builder platformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + /** + * The version of the platform + */ + public Builder platformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + + /** + * A relatively friendly name for the client device + */ + public Builder device(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + /** + * A relatively friendly name for the client device + */ + public Builder device(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + + /** + * A potentially less friendly identifier for the device model + */ + public Builder model(String model) { + Utils.checkNotNull(model, "model"); + this.model = Optional.ofNullable(model); + return this; + } + + /** + * A potentially less friendly identifier for the device model + */ + public Builder model(Optional model) { + Utils.checkNotNull(model, "model"); + this.model = model; + return this; + } + + + /** + * The device vendor + */ + public Builder deviceVendor(String deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = Optional.ofNullable(deviceVendor); + return this; + } + + /** + * The device vendor + */ + public Builder deviceVendor(Optional deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = deviceVendor; + return this; + } + + + /** + * A friendly name for the client + */ + public Builder deviceName(String deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = Optional.ofNullable(deviceName); + return this; + } + + /** + * A friendly name for the client + */ + public Builder deviceName(Optional deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = deviceName; + return this; + } + + + /** + * The marketplace on which the client application is distributed + */ + public Builder marketplace(String marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = Optional.ofNullable(marketplace); + return this; + } + + /** + * The marketplace on which the client application is distributed + */ + public Builder marketplace(Optional marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = marketplace; + return this; + } + + public GetUsersRequest build() { + if (accepts == null) { + accepts = _SINGLETON_VALUE_Accepts.value(); + } + + return new GetUsersRequest( + accepts, clientIdentifier, product, + version, platform, platformVersion, + device, model, deviceVendor, + deviceName, marketplace); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Accepts = + new LazySingletonValue<>( + "accepts", + "\"application/xml\"", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequestBuilder.java new file mode 100644 index 00000000..89124204 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersRequestBuilder.java @@ -0,0 +1,50 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.operations.GetUsers; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + +public class GetUsersRequestBuilder { + + private GetUsersRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public GetUsersRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public GetUsersRequestBuilder request(GetUsersRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public GetUsersRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public GetUsersRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public GetUsersResponse call() throws Exception { + + RequestOperation operation + = new GetUsers.Sync(sdkConfiguration, serverURL); + + return operation.handleResponse(operation.doRequest(request)); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponse.java new file mode 100644 index 00000000..7db0309e --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponse.java @@ -0,0 +1,252 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.utils.Response; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.Optional; + + +public class GetUsersResponse implements Response { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * Successful response with media container data in JSON + */ + private Optional object; + + @JsonCreator + public GetUsersResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional object) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(object, "object"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.object = object; + } + + public GetUsersResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * Successful response with media container data in JSON + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional object() { + return (Optional) object; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public GetUsersResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public GetUsersResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * Successful response with media container data in JSON + */ + public GetUsersResponse withObject(GetUsersResponseBody object) { + Utils.checkNotNull(object, "object"); + this.object = Optional.ofNullable(object); + return this; + } + + + /** + * Successful response with media container data in JSON + */ + public GetUsersResponse withObject(Optional object) { + Utils.checkNotNull(object, "object"); + this.object = object; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersResponse other = (GetUsersResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.object, other.object); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + object); + } + + @Override + public String toString() { + return Utils.toString(GetUsersResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "object", object); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional object = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * Successful response with media container data in JSON + */ + public Builder object(GetUsersResponseBody object) { + Utils.checkNotNull(object, "object"); + this.object = Optional.ofNullable(object); + return this; + } + + /** + * Successful response with media container data in JSON + */ + public Builder object(Optional object) { + Utils.checkNotNull(object, "object"); + this.object = object; + return this; + } + + public GetUsersResponse build() { + + return new GetUsersResponse( + contentType, statusCode, rawResponse, + object); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponseBody.java b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponseBody.java new file mode 100644 index 00000000..2594c39c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/GetUsersResponseBody.java @@ -0,0 +1,134 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; + +/** + * GetUsersResponseBody + * + *

Successful response with media container data in JSON + */ +public class GetUsersResponseBody { + /** + * Container holding user and server details. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("MediaContainer") + private Optional mediaContainer; + + @JsonCreator + public GetUsersResponseBody( + @JsonProperty("MediaContainer") Optional mediaContainer) { + Utils.checkNotNull(mediaContainer, "mediaContainer"); + this.mediaContainer = mediaContainer; + } + + public GetUsersResponseBody() { + this(Optional.empty()); + } + + /** + * Container holding user and server details. + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional mediaContainer() { + return (Optional) mediaContainer; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Container holding user and server details. + */ + public GetUsersResponseBody withMediaContainer(GetUsersMediaContainer mediaContainer) { + Utils.checkNotNull(mediaContainer, "mediaContainer"); + this.mediaContainer = Optional.ofNullable(mediaContainer); + return this; + } + + + /** + * Container holding user and server details. + */ + public GetUsersResponseBody withMediaContainer(Optional mediaContainer) { + Utils.checkNotNull(mediaContainer, "mediaContainer"); + this.mediaContainer = mediaContainer; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersResponseBody other = (GetUsersResponseBody) o; + return + Utils.enhancedDeepEquals(this.mediaContainer, other.mediaContainer); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + mediaContainer); + } + + @Override + public String toString() { + return Utils.toString(GetUsersResponseBody.class, + "mediaContainer", mediaContainer); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional mediaContainer = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * Container holding user and server details. + */ + public Builder mediaContainer(GetUsersMediaContainer mediaContainer) { + Utils.checkNotNull(mediaContainer, "mediaContainer"); + this.mediaContainer = Optional.ofNullable(mediaContainer); + return this; + } + + /** + * Container holding user and server details. + */ + public Builder mediaContainer(Optional mediaContainer) { + Utils.checkNotNull(mediaContainer, "mediaContainer"); + this.mediaContainer = mediaContainer; + return this; + } + + public GetUsersResponseBody build() { + + return new GetUsersResponseBody( + mediaContainer); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Guids.java b/src/main/java/dev/plexapi/sdk/models/operations/Guids.java new file mode 100644 index 00000000..6f39fbce --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Guids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class Guids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public Guids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Guids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Guids other = (Guids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(Guids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public Guids build() { + + return new Guids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Home.java b/src/main/java/dev/plexapi/sdk/models/operations/Home.java new file mode 100644 index 00000000..b4b279f4 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Home.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * Home + * + *

Indicates if the user is part of a home group. + */ +public enum Home { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + Home(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (Home o: Home.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/IncludeHttps.java b/src/main/java/dev/plexapi/sdk/models/operations/IncludeHttps.java new file mode 100644 index 00000000..9aab85ac --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/IncludeHttps.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * IncludeHttps + * + *

Include Https entries in the results + */ +public enum IncludeHttps { + False(0), + True(1); + + @JsonValue + private final int value; + + IncludeHttps(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (IncludeHttps o: IncludeHttps.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/IncludeIPv6.java b/src/main/java/dev/plexapi/sdk/models/operations/IncludeIPv6.java new file mode 100644 index 00000000..baa331bc --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/IncludeIPv6.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * IncludeIPv6 + * + *

Include IPv6 entries in the results + */ +public enum IncludeIPv6 { + False(0), + True(1); + + @JsonValue + private final int value; + + IncludeIPv6(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (IncludeIPv6 o: IncludeIPv6.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/IncludeRelay.java b/src/main/java/dev/plexapi/sdk/models/operations/IncludeRelay.java new file mode 100644 index 00000000..bfb6211d --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/IncludeRelay.java @@ -0,0 +1,40 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * IncludeRelay + * + *

Include Relay addresses in the results + * E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400 + */ +public enum IncludeRelay { + False(0), + True(1); + + @JsonValue + private final int value; + + IncludeRelay(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (IncludeRelay o: IncludeRelay.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemRequest.java index c4e703aa..99d56e6d 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/IngestTransientItemRequest.java @@ -664,9 +664,9 @@ public class IngestTransientItemRequest { private Optional virtualFilePath = Optional.empty(); - private Optional computeHashes = Optional.empty(); + private Optional computeHashes; - private Optional ingestNonMatches = Optional.empty(); + private Optional ingestNonMatches; private Builder() { // force use of static builder() method @@ -961,6 +961,12 @@ public class IngestTransientItemRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (computeHashes == null) { + computeHashes = _SINGLETON_VALUE_ComputeHashes.value(); + } + if (ingestNonMatches == null) { + ingestNonMatches = _SINGLETON_VALUE_IngestNonMatches.value(); + } return new IngestTransientItemRequest( accepts, clientIdentifier, product, @@ -976,5 +982,17 @@ public class IngestTransientItemRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_ComputeHashes = + new LazySingletonValue<>( + "computeHashes", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IngestNonMatches = + new LazySingletonValue<>( + "ingestNonMatches", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/InternalPaymentMethod.java b/src/main/java/dev/plexapi/sdk/models/operations/InternalPaymentMethod.java new file mode 100644 index 00000000..faf6c0b2 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/InternalPaymentMethod.java @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class InternalPaymentMethod { + @JsonCreator + public InternalPaymentMethod() { + } + + public static Builder builder() { + return new Builder(); + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + ); + } + + @Override + public String toString() { + return Utils.toString(InternalPaymentMethod.class); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Builder() { + // force use of static builder() method + } + + public InternalPaymentMethod build() { + + return new InternalPaymentMethod( + ); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ListContentRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/ListContentRequest.java index ee188757..81324690 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ListContentRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ListContentRequest.java @@ -7,10 +7,12 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.type.TypeReference; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.BoolInt; import dev.plexapi.sdk.models.shared.MediaQuery; import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.SpeakeasyMetadata; import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; @@ -85,11 +87,54 @@ public class ListContentRequest { private Optional marketplace; /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * 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") + private Optional xPlexContainerStart; + + /** + * 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") + private Optional xPlexContainerSize; + + /** + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SpeakeasyMetadata("queryParam:style=form,explode=true,name=mediaQuery") private Optional mediaQuery; + /** + * Adds the Meta object to the response + */ + @SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeMeta") + private Optional includeMeta; + + /** + * Adds the Guid object to the response + */ + @SpeakeasyMetadata("queryParam:style=form,explode=true,name=includeGuids") + private Optional includeGuids; + /** * The id of the section */ @@ -109,7 +154,11 @@ public class ListContentRequest { Optional deviceVendor, Optional deviceName, Optional marketplace, + Optional xPlexContainerStart, + Optional xPlexContainerSize, Optional mediaQuery, + Optional includeMeta, + Optional includeGuids, String sectionId) { Utils.checkNotNull(accepts, "accepts"); Utils.checkNotNull(clientIdentifier, "clientIdentifier"); @@ -122,7 +171,11 @@ public class ListContentRequest { Utils.checkNotNull(deviceVendor, "deviceVendor"); Utils.checkNotNull(deviceName, "deviceName"); Utils.checkNotNull(marketplace, "marketplace"); + Utils.checkNotNull(xPlexContainerStart, "xPlexContainerStart"); + Utils.checkNotNull(xPlexContainerSize, "xPlexContainerSize"); Utils.checkNotNull(mediaQuery, "mediaQuery"); + Utils.checkNotNull(includeMeta, "includeMeta"); + Utils.checkNotNull(includeGuids, "includeGuids"); Utils.checkNotNull(sectionId, "sectionId"); this.accepts = accepts; this.clientIdentifier = clientIdentifier; @@ -135,7 +188,11 @@ public class ListContentRequest { this.deviceVendor = deviceVendor; this.deviceName = deviceName; this.marketplace = marketplace; + this.xPlexContainerStart = xPlexContainerStart; + this.xPlexContainerSize = xPlexContainerSize; this.mediaQuery = mediaQuery; + this.includeMeta = includeMeta; + this.includeGuids = includeGuids; this.sectionId = sectionId; } @@ -145,7 +202,8 @@ public class ListContentRequest { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - sectionId); + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), sectionId); } /** @@ -238,7 +296,42 @@ public class ListContentRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * 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 + */ + @JsonIgnore + public Optional xPlexContainerStart() { + return xPlexContainerStart; + } + + /** + * 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 + */ + @JsonIgnore + public Optional xPlexContainerSize() { + return xPlexContainerSize; + } + + /** + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ @SuppressWarnings("unchecked") @JsonIgnore @@ -246,6 +339,24 @@ public class ListContentRequest { return (Optional) mediaQuery; } + /** + * Adds the Meta object to the response + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional includeMeta() { + return (Optional) includeMeta; + } + + /** + * Adds the Guid object to the response + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional includeGuids() { + return (Optional) includeGuids; + } + /** * The id of the section */ @@ -469,7 +580,68 @@ public class ListContentRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * 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 + */ + public ListContentRequest withXPlexContainerStart(int xPlexContainerStart) { + Utils.checkNotNull(xPlexContainerStart, "xPlexContainerStart"); + this.xPlexContainerStart = Optional.ofNullable(xPlexContainerStart); + return this; + } + + + /** + * 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 + */ + public ListContentRequest withXPlexContainerStart(Optional xPlexContainerStart) { + Utils.checkNotNull(xPlexContainerStart, "xPlexContainerStart"); + this.xPlexContainerStart = xPlexContainerStart; + return this; + } + + /** + * 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 + */ + public ListContentRequest withXPlexContainerSize(int xPlexContainerSize) { + Utils.checkNotNull(xPlexContainerSize, "xPlexContainerSize"); + this.xPlexContainerSize = Optional.ofNullable(xPlexContainerSize); + return this; + } + + + /** + * 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 + */ + public ListContentRequest withXPlexContainerSize(Optional xPlexContainerSize) { + Utils.checkNotNull(xPlexContainerSize, "xPlexContainerSize"); + this.xPlexContainerSize = xPlexContainerSize; + return this; + } + + /** + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public ListContentRequest withMediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -479,7 +651,22 @@ public class ListContentRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public ListContentRequest withMediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -487,6 +674,44 @@ public class ListContentRequest { return this; } + /** + * Adds the Meta object to the response + */ + public ListContentRequest withIncludeMeta(BoolInt includeMeta) { + Utils.checkNotNull(includeMeta, "includeMeta"); + this.includeMeta = Optional.ofNullable(includeMeta); + return this; + } + + + /** + * Adds the Meta object to the response + */ + public ListContentRequest withIncludeMeta(Optional includeMeta) { + Utils.checkNotNull(includeMeta, "includeMeta"); + this.includeMeta = includeMeta; + return this; + } + + /** + * Adds the Guid object to the response + */ + public ListContentRequest withIncludeGuids(BoolInt includeGuids) { + Utils.checkNotNull(includeGuids, "includeGuids"); + this.includeGuids = Optional.ofNullable(includeGuids); + return this; + } + + + /** + * Adds the Guid object to the response + */ + public ListContentRequest withIncludeGuids(Optional includeGuids) { + Utils.checkNotNull(includeGuids, "includeGuids"); + this.includeGuids = includeGuids; + return this; + } + /** * The id of the section */ @@ -517,7 +742,11 @@ public class ListContentRequest { Utils.enhancedDeepEquals(this.deviceVendor, other.deviceVendor) && Utils.enhancedDeepEquals(this.deviceName, other.deviceName) && Utils.enhancedDeepEquals(this.marketplace, other.marketplace) && + Utils.enhancedDeepEquals(this.xPlexContainerStart, other.xPlexContainerStart) && + Utils.enhancedDeepEquals(this.xPlexContainerSize, other.xPlexContainerSize) && Utils.enhancedDeepEquals(this.mediaQuery, other.mediaQuery) && + Utils.enhancedDeepEquals(this.includeMeta, other.includeMeta) && + Utils.enhancedDeepEquals(this.includeGuids, other.includeGuids) && Utils.enhancedDeepEquals(this.sectionId, other.sectionId); } @@ -527,8 +756,9 @@ public class ListContentRequest { accepts, clientIdentifier, product, version, platform, platformVersion, device, model, deviceVendor, - deviceName, marketplace, mediaQuery, - sectionId); + deviceName, marketplace, xPlexContainerStart, + xPlexContainerSize, mediaQuery, includeMeta, + includeGuids, sectionId); } @Override @@ -545,7 +775,11 @@ public class ListContentRequest { "deviceVendor", deviceVendor, "deviceName", deviceName, "marketplace", marketplace, + "xPlexContainerStart", xPlexContainerStart, + "xPlexContainerSize", xPlexContainerSize, "mediaQuery", mediaQuery, + "includeMeta", includeMeta, + "includeGuids", includeGuids, "sectionId", sectionId); } @@ -574,8 +808,16 @@ public class ListContentRequest { private Optional marketplace = Optional.empty(); + private Optional xPlexContainerStart; + + private Optional xPlexContainerSize; + private Optional mediaQuery = Optional.empty(); + private Optional includeMeta; + + private Optional includeGuids; + private String sectionId; private Builder() { @@ -793,7 +1035,68 @@ public class ListContentRequest { /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * 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 + */ + public Builder xPlexContainerStart(int xPlexContainerStart) { + Utils.checkNotNull(xPlexContainerStart, "xPlexContainerStart"); + this.xPlexContainerStart = Optional.ofNullable(xPlexContainerStart); + return this; + } + + /** + * 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 + */ + public Builder xPlexContainerStart(Optional xPlexContainerStart) { + Utils.checkNotNull(xPlexContainerStart, "xPlexContainerStart"); + this.xPlexContainerStart = xPlexContainerStart; + return this; + } + + + /** + * 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 + */ + public Builder xPlexContainerSize(int xPlexContainerSize) { + Utils.checkNotNull(xPlexContainerSize, "xPlexContainerSize"); + this.xPlexContainerSize = Optional.ofNullable(xPlexContainerSize); + return this; + } + + /** + * 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 + */ + public Builder xPlexContainerSize(Optional xPlexContainerSize) { + Utils.checkNotNull(xPlexContainerSize, "xPlexContainerSize"); + this.xPlexContainerSize = xPlexContainerSize; + return this; + } + + + /** + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(MediaQuery mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -802,7 +1105,22 @@ public class ListContentRequest { } /** - * This is a complex query built of several parameters. See [API Info section](#section/API-Info/Media-Queries) for information on building media queries + * A querystring-based filtering language used to select subsets of media. Can be provided as an object with typed properties for type safety, or as a string for complex queries with operators and boolean logic. + * + *

The query supports: + * - Fields: integer, boolean, tag, string, date, language + * - Operators: =, !=, ==, !==, <=, >=, >>=, <<= (varies by field type) + * - Boolean operators: & (AND), , (OR), push/pop (parentheses), or=1 (explicit OR) + * - Sorting: sort parameter with :desc, :nullsLast modifiers + * - Grouping: group parameter + * - Limits: limit parameter + * + *

Examples: + * - Object format: `{type: 4, sourceType: 2, title: "24"}` → `type=4&sourceType=2&title=24` + * - String format: `type=4&sourceType=2&title==24` - type = 4 AND sourceType = 2 AND title = "24" + * - Complex: `push=1&index=1&or=1&rating=2&pop=1&duration=10` - (index = 1 OR rating = 2) AND duration = 10 + * + *

See [API Info section](#section/API-Info/Media-Queries) for detailed information on building media queries. */ public Builder mediaQuery(Optional mediaQuery) { Utils.checkNotNull(mediaQuery, "mediaQuery"); @@ -811,6 +1129,44 @@ public class ListContentRequest { } + /** + * Adds the Meta object to the response + */ + public Builder includeMeta(BoolInt includeMeta) { + Utils.checkNotNull(includeMeta, "includeMeta"); + this.includeMeta = Optional.ofNullable(includeMeta); + return this; + } + + /** + * Adds the Meta object to the response + */ + public Builder includeMeta(Optional includeMeta) { + Utils.checkNotNull(includeMeta, "includeMeta"); + this.includeMeta = includeMeta; + return this; + } + + + /** + * Adds the Guid object to the response + */ + public Builder includeGuids(BoolInt includeGuids) { + Utils.checkNotNull(includeGuids, "includeGuids"); + this.includeGuids = Optional.ofNullable(includeGuids); + return this; + } + + /** + * Adds the Guid object to the response + */ + public Builder includeGuids(Optional includeGuids) { + Utils.checkNotNull(includeGuids, "includeGuids"); + this.includeGuids = includeGuids; + return this; + } + + /** * The id of the section */ @@ -824,13 +1180,26 @@ public class ListContentRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (xPlexContainerStart == null) { + xPlexContainerStart = _SINGLETON_VALUE_XPlexContainerStart.value(); + } + if (xPlexContainerSize == null) { + xPlexContainerSize = _SINGLETON_VALUE_XPlexContainerSize.value(); + } + if (includeMeta == null) { + includeMeta = _SINGLETON_VALUE_IncludeMeta.value(); + } + if (includeGuids == null) { + includeGuids = _SINGLETON_VALUE_IncludeGuids.value(); + } return new ListContentRequest( accepts, clientIdentifier, product, version, platform, platformVersion, device, model, deviceVendor, - deviceName, marketplace, mediaQuery, - sectionId); + deviceName, marketplace, xPlexContainerStart, + xPlexContainerSize, mediaQuery, includeMeta, + includeGuids, sectionId); } @@ -839,5 +1208,29 @@ public class ListContentRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_XPlexContainerStart = + new LazySingletonValue<>( + "X-Plex-Container-Start", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_XPlexContainerSize = + new LazySingletonValue<>( + "X-Plex-Container-Size", + "50", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeMeta = + new LazySingletonValue<>( + "includeMeta", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_IncludeGuids = + new LazySingletonValue<>( + "includeGuids", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ListMatchesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/ListMatchesRequest.java index b3a4e442..b462e604 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ListMatchesRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ListMatchesRequest.java @@ -705,7 +705,7 @@ public class ListMatchesRequest { private Optional year = Optional.empty(); - private Optional manual = Optional.empty(); + private Optional manual; private Builder() { // force use of static builder() method @@ -1009,6 +1009,9 @@ public class ListMatchesRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (manual == null) { + manual = _SINGLETON_VALUE_Manual.value(); + } return new ListMatchesRequest( accepts, clientIdentifier, product, @@ -1025,5 +1028,11 @@ public class ListMatchesRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Manual = + new LazySingletonValue<>( + "manual", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/MailingListStatus.java b/src/main/java/dev/plexapi/sdk/models/operations/MailingListStatus.java new file mode 100644 index 00000000..3b523399 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/MailingListStatus.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; + +/** + * MailingListStatus + * + *

Your current mailing list status + */ +public enum MailingListStatus { + Active("active"), + Unsubscribed("unsubscribed"), + Removed("removed"); + + @JsonValue + private final String value; + + MailingListStatus(String value) { + this.value = value; + } + + public String value() { + return value; + } + + public static Optional fromValue(String value) { + for (MailingListStatus o: MailingListStatus.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionRequest.java index 3de04c6c..43f954d2 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/MakeDecisionRequest.java @@ -1718,19 +1718,19 @@ public class MakeDecisionRequest { private Optional audioChannelCount = Optional.empty(); - private Optional autoAdjustQuality = Optional.empty(); + private Optional autoAdjustQuality; - private Optional autoAdjustSubtitle = Optional.empty(); + private Optional autoAdjustSubtitle; - private Optional directPlay = Optional.empty(); + private Optional directPlay; - private Optional directStream = Optional.empty(); + private Optional directStream; - private Optional directStreamAudio = Optional.empty(); + private Optional directStreamAudio; - private Optional disableResolutionRotation = Optional.empty(); + private Optional disableResolutionRotation; - private Optional hasMDE = Optional.empty(); + private Optional hasMDE; private Optional location = Optional.empty(); @@ -2567,6 +2567,27 @@ public class MakeDecisionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (autoAdjustQuality == null) { + autoAdjustQuality = _SINGLETON_VALUE_AutoAdjustQuality.value(); + } + if (autoAdjustSubtitle == null) { + autoAdjustSubtitle = _SINGLETON_VALUE_AutoAdjustSubtitle.value(); + } + if (directPlay == null) { + directPlay = _SINGLETON_VALUE_DirectPlay.value(); + } + if (directStream == null) { + directStream = _SINGLETON_VALUE_DirectStream.value(); + } + if (directStreamAudio == null) { + directStreamAudio = _SINGLETON_VALUE_DirectStreamAudio.value(); + } + if (disableResolutionRotation == null) { + disableResolutionRotation = _SINGLETON_VALUE_DisableResolutionRotation.value(); + } + if (hasMDE == null) { + hasMDE = _SINGLETON_VALUE_HasMDE.value(); + } return new MakeDecisionRequest( accepts, clientIdentifier, product, @@ -2591,5 +2612,47 @@ public class MakeDecisionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustQuality = + new LazySingletonValue<>( + "autoAdjustQuality", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustSubtitle = + new LazySingletonValue<>( + "autoAdjustSubtitle", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectPlay = + new LazySingletonValue<>( + "directPlay", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStream = + new LazySingletonValue<>( + "directStream", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStreamAudio = + new LazySingletonValue<>( + "directStreamAudio", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DisableResolutionRotation = + new LazySingletonValue<>( + "disableResolutionRotation", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HasMDE = + new LazySingletonValue<>( + "hasMDE", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Metadata.java b/src/main/java/dev/plexapi/sdk/models/operations/Metadata.java index 50007e01..29e844b3 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/Metadata.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/Metadata.java @@ -20,12 +20,14 @@ import dev.plexapi.sdk.models.shared.Tag; import dev.plexapi.sdk.models.shared.User; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -65,51 +67,48 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -121,28 +120,35 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -159,7 +165,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * Typically only seen in metadata at a library's top level @@ -180,6 +186,13 @@ public class Metadata { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -222,17 +235,24 @@ public class Metadata { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -244,18 +264,15 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -265,7 +282,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; @JsonInclude(Include.NON_ABSENT) @@ -277,14 +294,21 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -298,7 +322,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -333,7 +357,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -347,7 +371,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -359,21 +383,21 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -420,49 +444,49 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -476,28 +500,28 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -509,7 +533,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; @JsonIgnore @@ -520,73 +544,77 @@ public class Metadata { @JsonProperty("Player") Optional player, @JsonProperty("Session") Optional session, @JsonProperty("User") Optional user, - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("composite") Optional composite, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, - @JsonProperty("duration") Optional duration, + @JsonProperty("duration") Optional duration, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, @JsonProperty("lastViewedAt") Optional lastViewedAt, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year) { + @JsonProperty("year") Optional year) { Utils.checkNotNull(player, "player"); Utils.checkNotNull(session, "session"); Utils.checkNotNull(user, "user"); @@ -600,6 +628,7 @@ public class Metadata { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); @@ -608,6 +637,7 @@ public class Metadata { Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -615,6 +645,7 @@ public class Metadata { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -624,6 +655,7 @@ public class Metadata { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -670,6 +702,7 @@ public class Metadata { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.composite = composite; this.contentRating = contentRating; this.country = country; @@ -678,6 +711,7 @@ public class Metadata { this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -685,6 +719,7 @@ public class Metadata { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -694,6 +729,7 @@ public class Metadata { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -730,8 +766,23 @@ public class Metadata { this.additionalProperties = new HashMap<>(); } - public Metadata() { + public Metadata( + String title, + String type, + long addedAt, + String key) { this(Optional.empty(), Optional.empty(), Optional.empty(), + title, type, Optional.empty(), + addedAt, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -744,17 +795,7 @@ public class Metadata { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty()); + Optional.empty(), Optional.empty()); } /** @@ -787,26 +828,24 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -814,34 +853,32 @@ public class Metadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -853,37 +890,41 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -902,7 +943,7 @@ public class Metadata { * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -929,6 +970,14 @@ public class Metadata { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -977,19 +1026,26 @@ public class Metadata { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -1002,22 +1058,18 @@ public class Metadata { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -1027,7 +1079,7 @@ public class Metadata { * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -1040,19 +1092,25 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1067,7 +1125,7 @@ public class Metadata { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1106,10 +1164,9 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1124,7 +1181,7 @@ public class Metadata { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1138,26 +1195,24 @@ public class Metadata { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1210,64 +1265,57 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1282,7 +1330,7 @@ public class Metadata { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1290,7 +1338,7 @@ public class Metadata { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1298,7 +1346,7 @@ public class Metadata { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1306,7 +1354,7 @@ public class Metadata { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1320,7 +1368,7 @@ public class Metadata { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1394,17 +1442,7 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Metadata withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Metadata withTitle(Optional title) { + public Metadata withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1413,17 +1451,7 @@ public class Metadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Metadata withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Metadata withType(Optional type) { + public Metadata withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1432,7 +1460,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Metadata withAbsoluteIndex(long absoluteIndex) { + public Metadata withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1442,7 +1470,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Metadata withAbsoluteIndex(Optional absoluteIndex) { + public Metadata withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1452,16 +1480,6 @@ public class Metadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Metadata withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Metadata withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1470,7 +1488,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Metadata withArt(Object art) { + public Metadata withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1480,7 +1498,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Metadata withArt(Optional art) { + public Metadata withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1489,7 +1507,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Metadata withAudienceRating(double audienceRating) { + public Metadata withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1499,7 +1517,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Metadata withAudienceRating(Optional audienceRating) { + public Metadata withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1508,7 +1526,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Metadata withAudienceRatingImage(Object audienceRatingImage) { + public Metadata withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1518,7 +1536,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Metadata withAudienceRatingImage(Optional audienceRatingImage) { + public Metadata withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1540,7 +1558,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Metadata withBanner(Object banner) { + public Metadata withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1550,7 +1568,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Metadata withBanner(Optional banner) { + public Metadata withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1559,7 +1577,7 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Metadata withChapterSource(Object chapterSource) { + public Metadata withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1569,16 +1587,35 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Metadata withChapterSource(Optional chapterSource) { + public Metadata withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Metadata withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public Metadata withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Metadata withComposite(Object composite) { + public Metadata withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1588,7 +1625,7 @@ public class Metadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Metadata withComposite(Optional composite) { + public Metadata withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1597,7 +1634,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Metadata withContentRating(Object contentRating) { + public Metadata withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1607,7 +1644,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Metadata withContentRating(Optional contentRating) { + public Metadata withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1642,7 +1679,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Metadata withDuration(long duration) { + public Metadata withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1652,7 +1689,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Metadata withDuration(Optional duration) { + public Metadata withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1709,6 +1746,25 @@ public class Metadata { return this; } + /** + * The GUID of the grandparent media item. + */ + public Metadata withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public Metadata withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1823,23 +1879,42 @@ public class Metadata { return this; } - public Metadata withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Metadata withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Metadata withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Metadata withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Metadata withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public Metadata withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public Metadata withHero(Object hero) { + public Metadata withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1849,7 +1924,7 @@ public class Metadata { /** * When present, the URL for a hero image for the item. */ - public Metadata withHero(Optional hero) { + public Metadata withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1871,7 +1946,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Metadata withIndex(long index) { + public Metadata withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1881,7 +1956,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Metadata withIndex(Optional index) { + public Metadata withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1890,25 +1965,12 @@ public class Metadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Metadata withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Metadata withKey(Optional key) { + public Metadata withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Metadata withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1916,9 +1978,6 @@ public class Metadata { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Metadata withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1928,7 +1987,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Metadata withLeafCount(long leafCount) { + public Metadata withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1938,7 +1997,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Metadata withLeafCount(Optional leafCount) { + public Metadata withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1960,7 +2019,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Metadata withOriginallyAvailableAt(Object originallyAvailableAt) { + public Metadata withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1970,7 +2029,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Metadata withOriginallyAvailableAt(Optional originallyAvailableAt) { + public Metadata withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -1979,7 +2038,7 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Metadata withOriginalTitle(Object originalTitle) { + public Metadata withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -1989,12 +2048,31 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Metadata withOriginalTitle(Optional originalTitle) { + public Metadata withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Metadata withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public Metadata withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -2017,7 +2095,7 @@ public class Metadata { /** * The `index` of the parent */ - public Metadata withParentIndex(long parentIndex) { + public Metadata withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -2027,7 +2105,7 @@ public class Metadata { /** * The `index` of the parent */ - public Metadata withParentIndex(Optional parentIndex) { + public Metadata withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -2112,7 +2190,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Metadata withPrimaryExtraKey(Object primaryExtraKey) { + public Metadata withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -2122,7 +2200,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Metadata withPrimaryExtraKey(Optional primaryExtraKey) { + public Metadata withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2150,7 +2228,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Metadata withRating(double rating) { + public Metadata withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2160,7 +2238,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Metadata withRating(Optional rating) { + public Metadata withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2182,7 +2260,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Metadata withRatingCount(long ratingCount) { + public Metadata withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2192,7 +2270,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Metadata withRatingCount(Optional ratingCount) { + public Metadata withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2201,7 +2279,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Metadata withRatingImage(Object ratingImage) { + public Metadata withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2211,7 +2289,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Metadata withRatingImage(Optional ratingImage) { + public Metadata withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2220,7 +2298,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Metadata withRatingKey(Object ratingKey) { + public Metadata withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2230,7 +2308,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Metadata withRatingKey(Optional ratingKey) { + public Metadata withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2347,7 +2425,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Metadata withStudio(Object studio) { + public Metadata withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2357,7 +2435,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Metadata withStudio(Optional studio) { + public Metadata withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2366,7 +2444,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Metadata withSubtype(Object subtype) { + public Metadata withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2376,7 +2454,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Metadata withSubtype(Optional subtype) { + public Metadata withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2385,7 +2463,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Metadata withSummary(Object summary) { + public Metadata withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2395,7 +2473,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Metadata withSummary(Optional summary) { + public Metadata withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2404,7 +2482,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Metadata withTagline(Object tagline) { + public Metadata withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2414,7 +2492,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Metadata withTagline(Optional tagline) { + public Metadata withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2423,7 +2501,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Metadata withTheme(Object theme) { + public Metadata withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2433,7 +2511,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Metadata withTheme(Optional theme) { + public Metadata withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2442,7 +2520,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Metadata withThumb(Object thumb) { + public Metadata withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2452,7 +2530,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Metadata withThumb(Optional thumb) { + public Metadata withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2461,7 +2539,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Metadata withTitleSort(Object titleSort) { + public Metadata withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2471,7 +2549,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Metadata withTitleSort(Optional titleSort) { + public Metadata withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2499,7 +2577,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Metadata withUserRating(double userRating) { + public Metadata withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2509,7 +2587,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Metadata withUserRating(Optional userRating) { + public Metadata withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2518,7 +2596,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Metadata withViewCount(long viewCount) { + public Metadata withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2528,7 +2606,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Metadata withViewCount(Optional viewCount) { + public Metadata withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2537,7 +2615,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Metadata withViewedLeafCount(long viewedLeafCount) { + public Metadata withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2547,7 +2625,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Metadata withViewedLeafCount(Optional viewedLeafCount) { + public Metadata withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2556,7 +2634,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Metadata withViewOffset(long viewOffset) { + public Metadata withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2566,7 +2644,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Metadata withViewOffset(Optional viewOffset) { + public Metadata withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2588,7 +2666,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Metadata withYear(long year) { + public Metadata withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2598,7 +2676,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Metadata withYear(Optional year) { + public Metadata withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2640,6 +2718,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.composite, other.composite) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && @@ -2648,6 +2727,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2655,6 +2735,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2664,6 +2745,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2707,26 +2789,27 @@ public class Metadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, additionalProperties); + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, additionalProperties); } @Override @@ -2745,6 +2828,7 @@ public class Metadata { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "composite", composite, "contentRating", contentRating, "country", country, @@ -2753,6 +2837,7 @@ public class Metadata { "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2760,6 +2845,7 @@ public class Metadata { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2769,6 +2855,7 @@ public class Metadata { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2814,35 +2901,37 @@ public class Metadata { private Optional user = Optional.empty(); - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional childCount = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional composite = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); private Optional> director = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional> filter = Optional.empty(); @@ -2850,6 +2939,8 @@ public class Metadata { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2862,29 +2953,33 @@ public class Metadata { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); - private Optional key = Optional.empty(); + private String key; private Optional lastViewedAt = Optional.empty(); - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2894,19 +2989,19 @@ public class Metadata { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2920,33 +3015,33 @@ public class Metadata { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -3015,16 +3110,7 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -3034,16 +3120,7 @@ public class Metadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -3053,7 +3130,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -3062,7 +3139,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -3073,15 +3150,6 @@ public class Metadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -3091,7 +3159,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -3100,7 +3168,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -3110,7 +3178,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -3119,7 +3187,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -3129,7 +3197,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -3138,7 +3206,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -3161,7 +3229,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -3170,7 +3238,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -3180,7 +3248,7 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -3189,17 +3257,36 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3208,7 +3295,7 @@ public class Metadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3218,7 +3305,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3227,7 +3314,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3263,7 +3350,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3272,7 +3359,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3330,6 +3417,25 @@ public class Metadata { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3444,23 +3550,42 @@ public class Metadata { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3469,7 +3594,7 @@ public class Metadata { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3492,7 +3617,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3501,7 +3626,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -3511,34 +3636,19 @@ public class Metadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3549,7 +3659,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3558,7 +3668,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3581,7 +3691,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3590,7 +3700,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3600,7 +3710,7 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3609,13 +3719,32 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3638,7 +3767,7 @@ public class Metadata { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3647,7 +3776,7 @@ public class Metadata { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3733,7 +3862,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3742,7 +3871,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3771,7 +3900,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3780,7 +3909,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3803,7 +3932,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3812,7 +3941,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3822,7 +3951,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3831,7 +3960,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3841,7 +3970,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3850,7 +3979,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -3968,7 +4097,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -3977,7 +4106,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -3987,7 +4116,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -3996,7 +4125,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -4006,7 +4135,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -4015,7 +4144,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -4025,7 +4154,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -4034,7 +4163,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -4044,7 +4173,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -4053,7 +4182,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -4063,7 +4192,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -4072,7 +4201,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -4082,7 +4211,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -4091,7 +4220,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -4120,7 +4249,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -4129,7 +4258,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -4139,7 +4268,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -4148,7 +4277,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -4158,7 +4287,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -4167,7 +4296,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -4177,7 +4306,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -4186,7 +4315,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4209,7 +4338,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4218,7 +4347,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4247,26 +4376,27 @@ public class Metadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year) + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ModifyDeviceRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/ModifyDeviceRequest.java index 03468808..e82ca750 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ModifyDeviceRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ModifyDeviceRequest.java @@ -577,7 +577,7 @@ public class ModifyDeviceRequest { private Long deviceId; - private Optional enabled = Optional.empty(); + private Optional enabled; private Builder() { // force use of static builder() method @@ -825,6 +825,9 @@ public class ModifyDeviceRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (enabled == null) { + enabled = _SINGLETON_VALUE_Enabled.value(); + } return new ModifyDeviceRequest( accepts, clientIdentifier, product, @@ -840,5 +843,11 @@ public class ModifyDeviceRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Enabled = + new LazySingletonValue<>( + "enabled", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseRequest.java index 45152959..2a969988 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/OptimizeDatabaseRequest.java @@ -543,7 +543,7 @@ public class OptimizeDatabaseRequest { private Optional marketplace = Optional.empty(); - private Optional async = Optional.empty(); + private Optional async; private Builder() { // force use of static builder() method @@ -781,6 +781,9 @@ public class OptimizeDatabaseRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (async == null) { + async = _SINGLETON_VALUE_Async.value(); + } return new OptimizeDatabaseRequest( accepts, clientIdentifier, product, @@ -795,5 +798,11 @@ public class OptimizeDatabaseRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Async = + new LazySingletonValue<>( + "async", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Owned.java b/src/main/java/dev/plexapi/sdk/models/operations/Owned.java new file mode 100644 index 00000000..66c4e6cc --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Owned.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * Owned + * + *

Indicates if the user owns the server. + */ +public enum Owned { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + Owned(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (Owned o: Owned.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PastSubscription.java b/src/main/java/dev/plexapi/sdk/models/operations/PastSubscription.java new file mode 100644 index 00000000..651b41ff --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PastSubscription.java @@ -0,0 +1,753 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class PastSubscription { + + @JsonInclude(Include.ALWAYS) + @JsonProperty("id") + private Optional id; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("mode") + private Optional mode; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("renewsAt") + private Optional renewsAt; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("endsAt") + private Optional endsAt; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("canceled") + private Optional canceled; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("gracePeriod") + private Optional gracePeriod; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("onHold") + private Optional onHold; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("canReactivate") + private Optional canReactivate; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("canUpgrade") + private Optional canUpgrade; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("canDowngrade") + private Optional canDowngrade; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("canConvert") + private Optional canConvert; + + + @JsonProperty("type") + private String type; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("transfer") + private Optional transfer; + + + @JsonProperty("state") + private PostUsersSignInDataState state; + + + @JsonProperty("billing") + private Billing billing; + + @JsonCreator + public PastSubscription( + @JsonProperty("id") Optional id, + @JsonProperty("mode") Optional mode, + @JsonProperty("renewsAt") Optional renewsAt, + @JsonProperty("endsAt") Optional endsAt, + @JsonProperty("canceled") Optional canceled, + @JsonProperty("gracePeriod") Optional gracePeriod, + @JsonProperty("onHold") Optional onHold, + @JsonProperty("canReactivate") Optional canReactivate, + @JsonProperty("canUpgrade") Optional canUpgrade, + @JsonProperty("canDowngrade") Optional canDowngrade, + @JsonProperty("canConvert") Optional canConvert, + @JsonProperty("type") String type, + @JsonProperty("transfer") Optional transfer, + @JsonProperty("state") PostUsersSignInDataState state, + @JsonProperty("billing") Billing billing) { + Utils.checkNotNull(id, "id"); + Utils.checkNotNull(mode, "mode"); + Utils.checkNotNull(renewsAt, "renewsAt"); + Utils.checkNotNull(endsAt, "endsAt"); + Utils.checkNotNull(canceled, "canceled"); + Utils.checkNotNull(gracePeriod, "gracePeriod"); + Utils.checkNotNull(onHold, "onHold"); + Utils.checkNotNull(canReactivate, "canReactivate"); + Utils.checkNotNull(canUpgrade, "canUpgrade"); + Utils.checkNotNull(canDowngrade, "canDowngrade"); + Utils.checkNotNull(canConvert, "canConvert"); + Utils.checkNotNull(type, "type"); + Utils.checkNotNull(transfer, "transfer"); + Utils.checkNotNull(state, "state"); + Utils.checkNotNull(billing, "billing"); + this.id = id; + this.mode = mode; + this.renewsAt = renewsAt; + this.endsAt = endsAt; + this.canceled = canceled; + this.gracePeriod = gracePeriod; + this.onHold = onHold; + this.canReactivate = canReactivate; + this.canUpgrade = canUpgrade; + this.canDowngrade = canDowngrade; + this.canConvert = canConvert; + this.type = type; + this.transfer = transfer; + this.state = state; + this.billing = billing; + } + + public PastSubscription( + String type, + PostUsersSignInDataState state, + Billing billing) { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), type, + Optional.empty(), state, billing); + } + + @JsonIgnore + public Optional id() { + return id; + } + + @JsonIgnore + public Optional mode() { + return mode; + } + + @JsonIgnore + public Optional renewsAt() { + return renewsAt; + } + + @JsonIgnore + public Optional endsAt() { + return endsAt; + } + + @JsonIgnore + public Optional canceled() { + return canceled; + } + + @JsonIgnore + public Optional gracePeriod() { + return gracePeriod; + } + + @JsonIgnore + public Optional onHold() { + return onHold; + } + + @JsonIgnore + public Optional canReactivate() { + return canReactivate; + } + + @JsonIgnore + public Optional canUpgrade() { + return canUpgrade; + } + + @JsonIgnore + public Optional canDowngrade() { + return canDowngrade; + } + + @JsonIgnore + public Optional canConvert() { + return canConvert; + } + + @JsonIgnore + public String type() { + return type; + } + + @JsonIgnore + public Optional transfer() { + return transfer; + } + + @JsonIgnore + public PostUsersSignInDataState state() { + return state; + } + + @JsonIgnore + public Billing billing() { + return billing; + } + + public static Builder builder() { + return new Builder(); + } + + + public PastSubscription withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = Optional.ofNullable(id); + return this; + } + + + public PastSubscription withId(Optional id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public PastSubscription withMode(String mode) { + Utils.checkNotNull(mode, "mode"); + this.mode = Optional.ofNullable(mode); + return this; + } + + + public PastSubscription withMode(Optional mode) { + Utils.checkNotNull(mode, "mode"); + this.mode = mode; + return this; + } + + public PastSubscription withRenewsAt(long renewsAt) { + Utils.checkNotNull(renewsAt, "renewsAt"); + this.renewsAt = Optional.ofNullable(renewsAt); + return this; + } + + + public PastSubscription withRenewsAt(Optional renewsAt) { + Utils.checkNotNull(renewsAt, "renewsAt"); + this.renewsAt = renewsAt; + return this; + } + + public PastSubscription withEndsAt(long endsAt) { + Utils.checkNotNull(endsAt, "endsAt"); + this.endsAt = Optional.ofNullable(endsAt); + return this; + } + + + public PastSubscription withEndsAt(Optional endsAt) { + Utils.checkNotNull(endsAt, "endsAt"); + this.endsAt = endsAt; + return this; + } + + public PastSubscription withCanceled(boolean canceled) { + Utils.checkNotNull(canceled, "canceled"); + this.canceled = Optional.ofNullable(canceled); + return this; + } + + + public PastSubscription withCanceled(Optional canceled) { + Utils.checkNotNull(canceled, "canceled"); + this.canceled = canceled; + return this; + } + + public PastSubscription withGracePeriod(boolean gracePeriod) { + Utils.checkNotNull(gracePeriod, "gracePeriod"); + this.gracePeriod = Optional.ofNullable(gracePeriod); + return this; + } + + + public PastSubscription withGracePeriod(Optional gracePeriod) { + Utils.checkNotNull(gracePeriod, "gracePeriod"); + this.gracePeriod = gracePeriod; + return this; + } + + public PastSubscription withOnHold(boolean onHold) { + Utils.checkNotNull(onHold, "onHold"); + this.onHold = Optional.ofNullable(onHold); + return this; + } + + + public PastSubscription withOnHold(Optional onHold) { + Utils.checkNotNull(onHold, "onHold"); + this.onHold = onHold; + return this; + } + + public PastSubscription withCanReactivate(boolean canReactivate) { + Utils.checkNotNull(canReactivate, "canReactivate"); + this.canReactivate = Optional.ofNullable(canReactivate); + return this; + } + + + public PastSubscription withCanReactivate(Optional canReactivate) { + Utils.checkNotNull(canReactivate, "canReactivate"); + this.canReactivate = canReactivate; + return this; + } + + public PastSubscription withCanUpgrade(boolean canUpgrade) { + Utils.checkNotNull(canUpgrade, "canUpgrade"); + this.canUpgrade = Optional.ofNullable(canUpgrade); + return this; + } + + + public PastSubscription withCanUpgrade(Optional canUpgrade) { + Utils.checkNotNull(canUpgrade, "canUpgrade"); + this.canUpgrade = canUpgrade; + return this; + } + + public PastSubscription withCanDowngrade(boolean canDowngrade) { + Utils.checkNotNull(canDowngrade, "canDowngrade"); + this.canDowngrade = Optional.ofNullable(canDowngrade); + return this; + } + + + public PastSubscription withCanDowngrade(Optional canDowngrade) { + Utils.checkNotNull(canDowngrade, "canDowngrade"); + this.canDowngrade = canDowngrade; + return this; + } + + public PastSubscription withCanConvert(boolean canConvert) { + Utils.checkNotNull(canConvert, "canConvert"); + this.canConvert = Optional.ofNullable(canConvert); + return this; + } + + + public PastSubscription withCanConvert(Optional canConvert) { + Utils.checkNotNull(canConvert, "canConvert"); + this.canConvert = canConvert; + return this; + } + + public PastSubscription withType(String type) { + Utils.checkNotNull(type, "type"); + this.type = type; + return this; + } + + public PastSubscription withTransfer(String transfer) { + Utils.checkNotNull(transfer, "transfer"); + this.transfer = Optional.ofNullable(transfer); + return this; + } + + + public PastSubscription withTransfer(Optional transfer) { + Utils.checkNotNull(transfer, "transfer"); + this.transfer = transfer; + return this; + } + + public PastSubscription withState(PostUsersSignInDataState state) { + Utils.checkNotNull(state, "state"); + this.state = state; + return this; + } + + public PastSubscription withBilling(Billing billing) { + Utils.checkNotNull(billing, "billing"); + this.billing = billing; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PastSubscription other = (PastSubscription) o; + return + Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.mode, other.mode) && + Utils.enhancedDeepEquals(this.renewsAt, other.renewsAt) && + Utils.enhancedDeepEquals(this.endsAt, other.endsAt) && + Utils.enhancedDeepEquals(this.canceled, other.canceled) && + Utils.enhancedDeepEquals(this.gracePeriod, other.gracePeriod) && + Utils.enhancedDeepEquals(this.onHold, other.onHold) && + Utils.enhancedDeepEquals(this.canReactivate, other.canReactivate) && + Utils.enhancedDeepEquals(this.canUpgrade, other.canUpgrade) && + Utils.enhancedDeepEquals(this.canDowngrade, other.canDowngrade) && + Utils.enhancedDeepEquals(this.canConvert, other.canConvert) && + Utils.enhancedDeepEquals(this.type, other.type) && + Utils.enhancedDeepEquals(this.transfer, other.transfer) && + Utils.enhancedDeepEquals(this.state, other.state) && + Utils.enhancedDeepEquals(this.billing, other.billing); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id, mode, renewsAt, + endsAt, canceled, gracePeriod, + onHold, canReactivate, canUpgrade, + canDowngrade, canConvert, type, + transfer, state, billing); + } + + @Override + public String toString() { + return Utils.toString(PastSubscription.class, + "id", id, + "mode", mode, + "renewsAt", renewsAt, + "endsAt", endsAt, + "canceled", canceled, + "gracePeriod", gracePeriod, + "onHold", onHold, + "canReactivate", canReactivate, + "canUpgrade", canUpgrade, + "canDowngrade", canDowngrade, + "canConvert", canConvert, + "type", type, + "transfer", transfer, + "state", state, + "billing", billing); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional id = Optional.empty(); + + private Optional mode = Optional.empty(); + + private Optional renewsAt = Optional.empty(); + + private Optional endsAt = Optional.empty(); + + private Optional canceled; + + private Optional gracePeriod; + + private Optional onHold; + + private Optional canReactivate; + + private Optional canUpgrade; + + private Optional canDowngrade; + + private Optional canConvert; + + private String type; + + private Optional transfer = Optional.empty(); + + private PostUsersSignInDataState state; + + private Billing billing; + + private Builder() { + // force use of static builder() method + } + + + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = Optional.ofNullable(id); + return this; + } + + public Builder id(Optional id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + + public Builder mode(String mode) { + Utils.checkNotNull(mode, "mode"); + this.mode = Optional.ofNullable(mode); + return this; + } + + public Builder mode(Optional mode) { + Utils.checkNotNull(mode, "mode"); + this.mode = mode; + return this; + } + + + public Builder renewsAt(long renewsAt) { + Utils.checkNotNull(renewsAt, "renewsAt"); + this.renewsAt = Optional.ofNullable(renewsAt); + return this; + } + + public Builder renewsAt(Optional renewsAt) { + Utils.checkNotNull(renewsAt, "renewsAt"); + this.renewsAt = renewsAt; + return this; + } + + + public Builder endsAt(long endsAt) { + Utils.checkNotNull(endsAt, "endsAt"); + this.endsAt = Optional.ofNullable(endsAt); + return this; + } + + public Builder endsAt(Optional endsAt) { + Utils.checkNotNull(endsAt, "endsAt"); + this.endsAt = endsAt; + return this; + } + + + public Builder canceled(boolean canceled) { + Utils.checkNotNull(canceled, "canceled"); + this.canceled = Optional.ofNullable(canceled); + return this; + } + + public Builder canceled(Optional canceled) { + Utils.checkNotNull(canceled, "canceled"); + this.canceled = canceled; + return this; + } + + + public Builder gracePeriod(boolean gracePeriod) { + Utils.checkNotNull(gracePeriod, "gracePeriod"); + this.gracePeriod = Optional.ofNullable(gracePeriod); + return this; + } + + public Builder gracePeriod(Optional gracePeriod) { + Utils.checkNotNull(gracePeriod, "gracePeriod"); + this.gracePeriod = gracePeriod; + return this; + } + + + public Builder onHold(boolean onHold) { + Utils.checkNotNull(onHold, "onHold"); + this.onHold = Optional.ofNullable(onHold); + return this; + } + + public Builder onHold(Optional onHold) { + Utils.checkNotNull(onHold, "onHold"); + this.onHold = onHold; + return this; + } + + + public Builder canReactivate(boolean canReactivate) { + Utils.checkNotNull(canReactivate, "canReactivate"); + this.canReactivate = Optional.ofNullable(canReactivate); + return this; + } + + public Builder canReactivate(Optional canReactivate) { + Utils.checkNotNull(canReactivate, "canReactivate"); + this.canReactivate = canReactivate; + return this; + } + + + public Builder canUpgrade(boolean canUpgrade) { + Utils.checkNotNull(canUpgrade, "canUpgrade"); + this.canUpgrade = Optional.ofNullable(canUpgrade); + return this; + } + + public Builder canUpgrade(Optional canUpgrade) { + Utils.checkNotNull(canUpgrade, "canUpgrade"); + this.canUpgrade = canUpgrade; + return this; + } + + + public Builder canDowngrade(boolean canDowngrade) { + Utils.checkNotNull(canDowngrade, "canDowngrade"); + this.canDowngrade = Optional.ofNullable(canDowngrade); + return this; + } + + public Builder canDowngrade(Optional canDowngrade) { + Utils.checkNotNull(canDowngrade, "canDowngrade"); + this.canDowngrade = canDowngrade; + return this; + } + + + public Builder canConvert(boolean canConvert) { + Utils.checkNotNull(canConvert, "canConvert"); + this.canConvert = Optional.ofNullable(canConvert); + return this; + } + + public Builder canConvert(Optional canConvert) { + Utils.checkNotNull(canConvert, "canConvert"); + this.canConvert = canConvert; + return this; + } + + + public Builder type(String type) { + Utils.checkNotNull(type, "type"); + this.type = type; + return this; + } + + + public Builder transfer(String transfer) { + Utils.checkNotNull(transfer, "transfer"); + this.transfer = Optional.ofNullable(transfer); + return this; + } + + public Builder transfer(Optional transfer) { + Utils.checkNotNull(transfer, "transfer"); + this.transfer = transfer; + return this; + } + + + public Builder state(PostUsersSignInDataState state) { + Utils.checkNotNull(state, "state"); + this.state = state; + return this; + } + + + public Builder billing(Billing billing) { + Utils.checkNotNull(billing, "billing"); + this.billing = billing; + return this; + } + + public PastSubscription build() { + if (canceled == null) { + canceled = _SINGLETON_VALUE_Canceled.value(); + } + if (gracePeriod == null) { + gracePeriod = _SINGLETON_VALUE_GracePeriod.value(); + } + if (onHold == null) { + onHold = _SINGLETON_VALUE_OnHold.value(); + } + if (canReactivate == null) { + canReactivate = _SINGLETON_VALUE_CanReactivate.value(); + } + if (canUpgrade == null) { + canUpgrade = _SINGLETON_VALUE_CanUpgrade.value(); + } + if (canDowngrade == null) { + canDowngrade = _SINGLETON_VALUE_CanDowngrade.value(); + } + if (canConvert == null) { + canConvert = _SINGLETON_VALUE_CanConvert.value(); + } + + return new PastSubscription( + id, mode, renewsAt, + endsAt, canceled, gracePeriod, + onHold, canReactivate, canUpgrade, + canDowngrade, canConvert, type, + transfer, state, billing); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Canceled = + new LazySingletonValue<>( + "canceled", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_GracePeriod = + new LazySingletonValue<>( + "gracePeriod", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_OnHold = + new LazySingletonValue<>( + "onHold", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_CanReactivate = + new LazySingletonValue<>( + "canReactivate", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_CanUpgrade = + new LazySingletonValue<>( + "canUpgrade", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_CanDowngrade = + new LazySingletonValue<>( + "canDowngrade", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_CanConvert = + new LazySingletonValue<>( + "canConvert", + "false", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PathParamTask.java b/src/main/java/dev/plexapi/sdk/models/operations/PathParamButlerTask.java similarity index 88% rename from src/main/java/dev/plexapi/sdk/models/operations/PathParamTask.java rename to src/main/java/dev/plexapi/sdk/models/operations/PathParamButlerTask.java index 41d0ac47..93340cd2 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/PathParamTask.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/PathParamButlerTask.java @@ -9,11 +9,11 @@ import java.util.Objects; import java.util.Optional; /** - * PathParamTask + * PathParamButlerTask * *

The task name */ -public enum PathParamTask { +public enum PathParamButlerTask { AUTOMATIC_UPDATES("AutomaticUpdates"), BACKUP_DATABASE("BackupDatabase"), BUTLER_TASK_GENERATE_AD_MARKERS("ButlerTaskGenerateAdMarkers"), @@ -40,7 +40,7 @@ public enum PathParamTask { @JsonValue private final String value; - PathParamTask(String value) { + PathParamButlerTask(String value) { this.value = value; } @@ -48,8 +48,8 @@ public enum PathParamTask { return value; } - public static Optional fromValue(String value) { - for (PathParamTask o: PathParamTask.values()) { + public static Optional fromValue(String value) { + for (PathParamButlerTask o: PathParamButlerTask.values()) { if (Objects.deepEquals(o.value, value)) { return Optional.of(o); } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Pending.java b/src/main/java/dev/plexapi/sdk/models/operations/Pending.java new file mode 100644 index 00000000..3f06258d --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Pending.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * Pending + * + *

Indicates if the server is pending approval. + */ +public enum Pending { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + Pending(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (Pending o: Pending.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataAuthenticationStatus.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataAuthenticationStatus.java new file mode 100644 index 00000000..c1091639 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataAuthenticationStatus.java @@ -0,0 +1,184 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). + * + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * + */ +/** + * PostUsersSignInDataAuthenticationStatus + * + *

String representation of subscriptionActive + */ +@JsonDeserialize(using = PostUsersSignInDataAuthenticationStatus._Deserializer.class) +@JsonSerialize(using = PostUsersSignInDataAuthenticationStatus._Serializer.class) +public class PostUsersSignInDataAuthenticationStatus { + + public static final PostUsersSignInDataAuthenticationStatus INACTIVE = new PostUsersSignInDataAuthenticationStatus("Inactive"); + public static final PostUsersSignInDataAuthenticationStatus ACTIVE = new PostUsersSignInDataAuthenticationStatus("Active"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); + + private final String value; + + private PostUsersSignInDataAuthenticationStatus(String value) { + this.value = value; + } + + /** + * Returns a PostUsersSignInDataAuthenticationStatus with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as PostUsersSignInDataAuthenticationStatus + */ + public static PostUsersSignInDataAuthenticationStatus of(String value) { + synchronized (PostUsersSignInDataAuthenticationStatus.class) { + return values.computeIfAbsent(value, v -> new PostUsersSignInDataAuthenticationStatus(v)); + } + } + + public String value() { + return value; + } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PostUsersSignInDataAuthenticationStatus other = (PostUsersSignInDataAuthenticationStatus) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "PostUsersSignInDataAuthenticationStatus [value=" + value + "]"; + } + + // return an array just like an enum + public static PostUsersSignInDataAuthenticationStatus[] values() { + synchronized (PostUsersSignInDataAuthenticationStatus.class) { + return values.values().toArray(new PostUsersSignInDataAuthenticationStatus[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("Inactive", INACTIVE); + map.put("Active", ACTIVE); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("Inactive", PostUsersSignInDataAuthenticationStatusEnum.INACTIVE); + map.put("Active", PostUsersSignInDataAuthenticationStatusEnum.ACTIVE); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(PostUsersSignInDataAuthenticationStatus.class); + } + + @Override + public void serialize(PostUsersSignInDataAuthenticationStatus value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(PostUsersSignInDataAuthenticationStatus.class); + } + + @Override + public PostUsersSignInDataAuthenticationStatus deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return PostUsersSignInDataAuthenticationStatus.of(v); + } + } + + public enum PostUsersSignInDataAuthenticationStatusEnum { + + INACTIVE("Inactive"), + ACTIVE("Active"),; + + private final String value; + + private PostUsersSignInDataAuthenticationStatusEnum(String value) { + this.value = value; + } + + public String value() { + return value; + } + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequest.java new file mode 100644 index 00000000..49343abe --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequest.java @@ -0,0 +1,798 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.SpeakeasyMetadata; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; + + +public class PostUsersSignInDataRequest { + /** + * Indicates the client accepts the indicated media types + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=accepts") + private Optional accepts; + + /** + * An opaque identifier unique to the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Client-Identifier") + private Optional clientIdentifier; + + /** + * The name of the client product + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Product") + private Optional product; + + /** + * The version of the client application + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Version") + private Optional version; + + /** + * The platform of the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform") + private Optional platform; + + /** + * The version of the platform + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Platform-Version") + private Optional platformVersion; + + /** + * A relatively friendly name for the client device + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device") + private Optional device; + + /** + * A potentially less friendly identifier for the device model + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Model") + private Optional model; + + /** + * The device vendor + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Vendor") + private Optional deviceVendor; + + /** + * A friendly name for the client + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Device-Name") + private Optional deviceName; + + /** + * The marketplace on which the client application is distributed + */ + @SpeakeasyMetadata("header:style=simple,explode=false,name=X-Plex-Marketplace") + private Optional marketplace; + + /** + * Login credentials + */ + @SpeakeasyMetadata("request:mediaType=application/x-www-form-urlencoded") + private Optional requestBody; + + @JsonCreator + public PostUsersSignInDataRequest( + Optional accepts, + Optional clientIdentifier, + Optional product, + Optional version, + Optional platform, + Optional platformVersion, + Optional device, + Optional model, + Optional deviceVendor, + Optional deviceName, + Optional marketplace, + Optional requestBody) { + Utils.checkNotNull(accepts, "accepts"); + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + Utils.checkNotNull(product, "product"); + Utils.checkNotNull(version, "version"); + Utils.checkNotNull(platform, "platform"); + Utils.checkNotNull(platformVersion, "platformVersion"); + Utils.checkNotNull(device, "device"); + Utils.checkNotNull(model, "model"); + Utils.checkNotNull(deviceVendor, "deviceVendor"); + Utils.checkNotNull(deviceName, "deviceName"); + Utils.checkNotNull(marketplace, "marketplace"); + Utils.checkNotNull(requestBody, "requestBody"); + this.accepts = accepts; + this.clientIdentifier = clientIdentifier; + this.product = product; + this.version = version; + this.platform = platform; + this.platformVersion = platformVersion; + this.device = device; + this.model = model; + this.deviceVendor = deviceVendor; + this.deviceName = deviceName; + this.marketplace = marketplace; + this.requestBody = requestBody; + } + + public PostUsersSignInDataRequest() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty()); + } + + /** + * Indicates the client accepts the indicated media types + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional accepts() { + return (Optional) accepts; + } + + /** + * An opaque identifier unique to the client + */ + @JsonIgnore + public Optional clientIdentifier() { + return clientIdentifier; + } + + /** + * The name of the client product + */ + @JsonIgnore + public Optional product() { + return product; + } + + /** + * The version of the client application + */ + @JsonIgnore + public Optional version() { + return version; + } + + /** + * The platform of the client + */ + @JsonIgnore + public Optional platform() { + return platform; + } + + /** + * The version of the platform + */ + @JsonIgnore + public Optional platformVersion() { + return platformVersion; + } + + /** + * A relatively friendly name for the client device + */ + @JsonIgnore + public Optional device() { + return device; + } + + /** + * A potentially less friendly identifier for the device model + */ + @JsonIgnore + public Optional model() { + return model; + } + + /** + * The device vendor + */ + @JsonIgnore + public Optional deviceVendor() { + return deviceVendor; + } + + /** + * A friendly name for the client + */ + @JsonIgnore + public Optional deviceName() { + return deviceName; + } + + /** + * The marketplace on which the client application is distributed + */ + @JsonIgnore + public Optional marketplace() { + return marketplace; + } + + /** + * Login credentials + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional requestBody() { + return (Optional) requestBody; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Indicates the client accepts the indicated media types + */ + public PostUsersSignInDataRequest withAccepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + + /** + * Indicates the client accepts the indicated media types + */ + public PostUsersSignInDataRequest withAccepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + /** + * An opaque identifier unique to the client + */ + public PostUsersSignInDataRequest withClientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public PostUsersSignInDataRequest withClientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + /** + * The name of the client product + */ + public PostUsersSignInDataRequest withProduct(String product) { + Utils.checkNotNull(product, "product"); + this.product = Optional.ofNullable(product); + return this; + } + + + /** + * The name of the client product + */ + public PostUsersSignInDataRequest withProduct(Optional product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + /** + * The version of the client application + */ + public PostUsersSignInDataRequest withVersion(String version) { + Utils.checkNotNull(version, "version"); + this.version = Optional.ofNullable(version); + return this; + } + + + /** + * The version of the client application + */ + public PostUsersSignInDataRequest withVersion(Optional version) { + Utils.checkNotNull(version, "version"); + this.version = version; + return this; + } + + /** + * The platform of the client + */ + public PostUsersSignInDataRequest withPlatform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + + /** + * The platform of the client + */ + public PostUsersSignInDataRequest withPlatform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + /** + * The version of the platform + */ + public PostUsersSignInDataRequest withPlatformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + + /** + * The version of the platform + */ + public PostUsersSignInDataRequest withPlatformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + /** + * A relatively friendly name for the client device + */ + public PostUsersSignInDataRequest withDevice(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + + /** + * A relatively friendly name for the client device + */ + public PostUsersSignInDataRequest withDevice(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + /** + * A potentially less friendly identifier for the device model + */ + public PostUsersSignInDataRequest withModel(String model) { + Utils.checkNotNull(model, "model"); + this.model = Optional.ofNullable(model); + return this; + } + + + /** + * A potentially less friendly identifier for the device model + */ + public PostUsersSignInDataRequest withModel(Optional model) { + Utils.checkNotNull(model, "model"); + this.model = model; + return this; + } + + /** + * The device vendor + */ + public PostUsersSignInDataRequest withDeviceVendor(String deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = Optional.ofNullable(deviceVendor); + return this; + } + + + /** + * The device vendor + */ + public PostUsersSignInDataRequest withDeviceVendor(Optional deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = deviceVendor; + return this; + } + + /** + * A friendly name for the client + */ + public PostUsersSignInDataRequest withDeviceName(String deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = Optional.ofNullable(deviceName); + return this; + } + + + /** + * A friendly name for the client + */ + public PostUsersSignInDataRequest withDeviceName(Optional deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = deviceName; + return this; + } + + /** + * The marketplace on which the client application is distributed + */ + public PostUsersSignInDataRequest withMarketplace(String marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = Optional.ofNullable(marketplace); + return this; + } + + + /** + * The marketplace on which the client application is distributed + */ + public PostUsersSignInDataRequest withMarketplace(Optional marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = marketplace; + return this; + } + + /** + * Login credentials + */ + public PostUsersSignInDataRequest withRequestBody(PostUsersSignInDataRequestBody requestBody) { + Utils.checkNotNull(requestBody, "requestBody"); + this.requestBody = Optional.ofNullable(requestBody); + return this; + } + + + /** + * Login credentials + */ + public PostUsersSignInDataRequest withRequestBody(Optional requestBody) { + Utils.checkNotNull(requestBody, "requestBody"); + this.requestBody = requestBody; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataRequest other = (PostUsersSignInDataRequest) o; + return + Utils.enhancedDeepEquals(this.accepts, other.accepts) && + Utils.enhancedDeepEquals(this.clientIdentifier, other.clientIdentifier) && + Utils.enhancedDeepEquals(this.product, other.product) && + Utils.enhancedDeepEquals(this.version, other.version) && + Utils.enhancedDeepEquals(this.platform, other.platform) && + Utils.enhancedDeepEquals(this.platformVersion, other.platformVersion) && + Utils.enhancedDeepEquals(this.device, other.device) && + Utils.enhancedDeepEquals(this.model, other.model) && + Utils.enhancedDeepEquals(this.deviceVendor, other.deviceVendor) && + Utils.enhancedDeepEquals(this.deviceName, other.deviceName) && + Utils.enhancedDeepEquals(this.marketplace, other.marketplace) && + Utils.enhancedDeepEquals(this.requestBody, other.requestBody); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + accepts, clientIdentifier, product, + version, platform, platformVersion, + device, model, deviceVendor, + deviceName, marketplace, requestBody); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataRequest.class, + "accepts", accepts, + "clientIdentifier", clientIdentifier, + "product", product, + "version", version, + "platform", platform, + "platformVersion", platformVersion, + "device", device, + "model", model, + "deviceVendor", deviceVendor, + "deviceName", deviceName, + "marketplace", marketplace, + "requestBody", requestBody); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional accepts; + + private Optional clientIdentifier = Optional.empty(); + + private Optional product = Optional.empty(); + + private Optional version = Optional.empty(); + + private Optional platform = Optional.empty(); + + private Optional platformVersion = Optional.empty(); + + private Optional device = Optional.empty(); + + private Optional model = Optional.empty(); + + private Optional deviceVendor = Optional.empty(); + + private Optional deviceName = Optional.empty(); + + private Optional marketplace = Optional.empty(); + + private Optional requestBody = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Accepts accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = Optional.ofNullable(accepts); + return this; + } + + /** + * Indicates the client accepts the indicated media types + */ + public Builder accepts(Optional accepts) { + Utils.checkNotNull(accepts, "accepts"); + this.accepts = accepts; + return this; + } + + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = Optional.ofNullable(clientIdentifier); + return this; + } + + /** + * An opaque identifier unique to the client + */ + public Builder clientIdentifier(Optional clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + + /** + * The name of the client product + */ + public Builder product(String product) { + Utils.checkNotNull(product, "product"); + this.product = Optional.ofNullable(product); + return this; + } + + /** + * The name of the client product + */ + public Builder product(Optional product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + + /** + * The version of the client application + */ + public Builder version(String version) { + Utils.checkNotNull(version, "version"); + this.version = Optional.ofNullable(version); + return this; + } + + /** + * The version of the client application + */ + public Builder version(Optional version) { + Utils.checkNotNull(version, "version"); + this.version = version; + return this; + } + + + /** + * The platform of the client + */ + public Builder platform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + /** + * The platform of the client + */ + public Builder platform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + + /** + * The version of the platform + */ + public Builder platformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + /** + * The version of the platform + */ + public Builder platformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + + /** + * A relatively friendly name for the client device + */ + public Builder device(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + /** + * A relatively friendly name for the client device + */ + public Builder device(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + + /** + * A potentially less friendly identifier for the device model + */ + public Builder model(String model) { + Utils.checkNotNull(model, "model"); + this.model = Optional.ofNullable(model); + return this; + } + + /** + * A potentially less friendly identifier for the device model + */ + public Builder model(Optional model) { + Utils.checkNotNull(model, "model"); + this.model = model; + return this; + } + + + /** + * The device vendor + */ + public Builder deviceVendor(String deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = Optional.ofNullable(deviceVendor); + return this; + } + + /** + * The device vendor + */ + public Builder deviceVendor(Optional deviceVendor) { + Utils.checkNotNull(deviceVendor, "deviceVendor"); + this.deviceVendor = deviceVendor; + return this; + } + + + /** + * A friendly name for the client + */ + public Builder deviceName(String deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = Optional.ofNullable(deviceName); + return this; + } + + /** + * A friendly name for the client + */ + public Builder deviceName(Optional deviceName) { + Utils.checkNotNull(deviceName, "deviceName"); + this.deviceName = deviceName; + return this; + } + + + /** + * The marketplace on which the client application is distributed + */ + public Builder marketplace(String marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = Optional.ofNullable(marketplace); + return this; + } + + /** + * The marketplace on which the client application is distributed + */ + public Builder marketplace(Optional marketplace) { + Utils.checkNotNull(marketplace, "marketplace"); + this.marketplace = marketplace; + return this; + } + + + /** + * Login credentials + */ + public Builder requestBody(PostUsersSignInDataRequestBody requestBody) { + Utils.checkNotNull(requestBody, "requestBody"); + this.requestBody = Optional.ofNullable(requestBody); + return this; + } + + /** + * Login credentials + */ + public Builder requestBody(Optional requestBody) { + Utils.checkNotNull(requestBody, "requestBody"); + this.requestBody = requestBody; + return this; + } + + public PostUsersSignInDataRequest build() { + if (accepts == null) { + accepts = _SINGLETON_VALUE_Accepts.value(); + } + + return new PostUsersSignInDataRequest( + accepts, clientIdentifier, product, + version, platform, platformVersion, + device, model, deviceVendor, + deviceName, marketplace, requestBody); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Accepts = + new LazySingletonValue<>( + "accepts", + "\"application/xml\"", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBody.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBody.java new file mode 100644 index 00000000..8b5ea1a4 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBody.java @@ -0,0 +1,229 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.SpeakeasyMetadata; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + +/** + * PostUsersSignInDataRequestBody + * + *

Login credentials + */ +public class PostUsersSignInDataRequestBody { + + @SpeakeasyMetadata("form:name=login") + private String login; + + + @SpeakeasyMetadata("form:name=password") + private String password; + + + @SpeakeasyMetadata("form:name=rememberMe") + private Optional rememberMe; + + + @SpeakeasyMetadata("form:name=verificationCode") + private Optional verificationCode; + + @JsonCreator + public PostUsersSignInDataRequestBody( + String login, + String password, + Optional rememberMe, + Optional verificationCode) { + Utils.checkNotNull(login, "login"); + Utils.checkNotNull(password, "password"); + Utils.checkNotNull(rememberMe, "rememberMe"); + Utils.checkNotNull(verificationCode, "verificationCode"); + this.login = login; + this.password = password; + this.rememberMe = rememberMe; + this.verificationCode = verificationCode; + } + + public PostUsersSignInDataRequestBody( + String login, + String password) { + this(login, password, Optional.empty(), + Optional.empty()); + } + + @JsonIgnore + public String login() { + return login; + } + + @JsonIgnore + public String password() { + return password; + } + + @JsonIgnore + public Optional rememberMe() { + return rememberMe; + } + + @JsonIgnore + public Optional verificationCode() { + return verificationCode; + } + + public static Builder builder() { + return new Builder(); + } + + + public PostUsersSignInDataRequestBody withLogin(String login) { + Utils.checkNotNull(login, "login"); + this.login = login; + return this; + } + + public PostUsersSignInDataRequestBody withPassword(String password) { + Utils.checkNotNull(password, "password"); + this.password = password; + return this; + } + + public PostUsersSignInDataRequestBody withRememberMe(boolean rememberMe) { + Utils.checkNotNull(rememberMe, "rememberMe"); + this.rememberMe = Optional.ofNullable(rememberMe); + return this; + } + + + public PostUsersSignInDataRequestBody withRememberMe(Optional rememberMe) { + Utils.checkNotNull(rememberMe, "rememberMe"); + this.rememberMe = rememberMe; + return this; + } + + public PostUsersSignInDataRequestBody withVerificationCode(String verificationCode) { + Utils.checkNotNull(verificationCode, "verificationCode"); + this.verificationCode = Optional.ofNullable(verificationCode); + return this; + } + + + public PostUsersSignInDataRequestBody withVerificationCode(Optional verificationCode) { + Utils.checkNotNull(verificationCode, "verificationCode"); + this.verificationCode = verificationCode; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataRequestBody other = (PostUsersSignInDataRequestBody) o; + return + Utils.enhancedDeepEquals(this.login, other.login) && + Utils.enhancedDeepEquals(this.password, other.password) && + Utils.enhancedDeepEquals(this.rememberMe, other.rememberMe) && + Utils.enhancedDeepEquals(this.verificationCode, other.verificationCode); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + login, password, rememberMe, + verificationCode); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataRequestBody.class, + "login", login, + "password", password, + "rememberMe", rememberMe, + "verificationCode", verificationCode); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String login; + + private String password; + + private Optional rememberMe; + + private Optional verificationCode = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + public Builder login(String login) { + Utils.checkNotNull(login, "login"); + this.login = login; + return this; + } + + + public Builder password(String password) { + Utils.checkNotNull(password, "password"); + this.password = password; + return this; + } + + + public Builder rememberMe(boolean rememberMe) { + Utils.checkNotNull(rememberMe, "rememberMe"); + this.rememberMe = Optional.ofNullable(rememberMe); + return this; + } + + public Builder rememberMe(Optional rememberMe) { + Utils.checkNotNull(rememberMe, "rememberMe"); + this.rememberMe = rememberMe; + return this; + } + + + public Builder verificationCode(String verificationCode) { + Utils.checkNotNull(verificationCode, "verificationCode"); + this.verificationCode = Optional.ofNullable(verificationCode); + return this; + } + + public Builder verificationCode(Optional verificationCode) { + Utils.checkNotNull(verificationCode, "verificationCode"); + this.verificationCode = verificationCode; + return this; + } + + public PostUsersSignInDataRequestBody build() { + if (rememberMe == null) { + rememberMe = _SINGLETON_VALUE_RememberMe.value(); + } + + return new PostUsersSignInDataRequestBody( + login, password, rememberMe, + verificationCode); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_RememberMe = + new LazySingletonValue<>( + "rememberMe", + "false", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBuilder.java new file mode 100644 index 00000000..2ad65bb5 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataRequestBuilder.java @@ -0,0 +1,50 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.operations.PostUsersSignInData; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; + +public class PostUsersSignInDataRequestBuilder { + + private PostUsersSignInDataRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public PostUsersSignInDataRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public PostUsersSignInDataRequestBuilder request(PostUsersSignInDataRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public PostUsersSignInDataRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public PostUsersSignInDataRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public PostUsersSignInDataResponse call() throws Exception { + + RequestOperation operation + = new PostUsersSignInData.Sync(sdkConfiguration, serverURL); + + return operation.handleResponse(operation.doRequest(request)); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataResponse.java new file mode 100644 index 00000000..11ea9b5c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataResponse.java @@ -0,0 +1,252 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.utils.Response; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.Optional; + + +public class PostUsersSignInDataResponse implements Response { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * Returns the user account data with a valid auth token + */ + private Optional userPlexAccount; + + @JsonCreator + public PostUsersSignInDataResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional userPlexAccount) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.userPlexAccount = userPlexAccount; + } + + public PostUsersSignInDataResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * Returns the user account data with a valid auth token + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional userPlexAccount() { + return (Optional) userPlexAccount; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public PostUsersSignInDataResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public PostUsersSignInDataResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * Returns the user account data with a valid auth token + */ + public PostUsersSignInDataResponse withUserPlexAccount(PostUsersSignInDataUserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + + /** + * Returns the user account data with a valid auth token + */ + public PostUsersSignInDataResponse withUserPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataResponse other = (PostUsersSignInDataResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.userPlexAccount, other.userPlexAccount); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "userPlexAccount", userPlexAccount); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional userPlexAccount = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * Returns the user account data with a valid auth token + */ + public Builder userPlexAccount(PostUsersSignInDataUserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + /** + * Returns the user account data with a valid auth token + */ + public Builder userPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + public PostUsersSignInDataResponse build() { + + return new PostUsersSignInDataResponse( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataState.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataState.java new file mode 100644 index 00000000..c71a69ad --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataState.java @@ -0,0 +1,175 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). + * + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * + */ +@JsonDeserialize(using = PostUsersSignInDataState._Deserializer.class) +@JsonSerialize(using = PostUsersSignInDataState._Serializer.class) +public class PostUsersSignInDataState { + + public static final PostUsersSignInDataState ENDED = new PostUsersSignInDataState("ended"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); + + private final String value; + + private PostUsersSignInDataState(String value) { + this.value = value; + } + + /** + * Returns a PostUsersSignInDataState with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as PostUsersSignInDataState + */ + public static PostUsersSignInDataState of(String value) { + synchronized (PostUsersSignInDataState.class) { + return values.computeIfAbsent(value, v -> new PostUsersSignInDataState(v)); + } + } + + public String value() { + return value; + } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PostUsersSignInDataState other = (PostUsersSignInDataState) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "PostUsersSignInDataState [value=" + value + "]"; + } + + // return an array just like an enum + public static PostUsersSignInDataState[] values() { + synchronized (PostUsersSignInDataState.class) { + return values.values().toArray(new PostUsersSignInDataState[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("ended", ENDED); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("ended", PostUsersSignInDataStateEnum.ENDED); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(PostUsersSignInDataState.class); + } + + @Override + public void serialize(PostUsersSignInDataState value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(PostUsersSignInDataState.class); + } + + @Override + public PostUsersSignInDataState deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return PostUsersSignInDataState.of(v); + } + } + + public enum PostUsersSignInDataStateEnum { + + ENDED("ended"),; + + private final String value; + + private PostUsersSignInDataStateEnum(String value) { + this.value = value; + } + + public String value() { + return value; + } + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataStatus.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataStatus.java new file mode 100644 index 00000000..d929bd00 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataStatus.java @@ -0,0 +1,184 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). + * + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * + */ +/** + * PostUsersSignInDataStatus + * + *

String representation of subscriptionActive + */ +@JsonDeserialize(using = PostUsersSignInDataStatus._Deserializer.class) +@JsonSerialize(using = PostUsersSignInDataStatus._Serializer.class) +public class PostUsersSignInDataStatus { + + public static final PostUsersSignInDataStatus Inactive = new PostUsersSignInDataStatus("Inactive"); + public static final PostUsersSignInDataStatus Active = new PostUsersSignInDataStatus("Active"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); + + private final String value; + + private PostUsersSignInDataStatus(String value) { + this.value = value; + } + + /** + * Returns a PostUsersSignInDataStatus with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as PostUsersSignInDataStatus + */ + public static PostUsersSignInDataStatus of(String value) { + synchronized (PostUsersSignInDataStatus.class) { + return values.computeIfAbsent(value, v -> new PostUsersSignInDataStatus(v)); + } + } + + public String value() { + return value; + } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PostUsersSignInDataStatus other = (PostUsersSignInDataStatus) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "PostUsersSignInDataStatus [value=" + value + "]"; + } + + // return an array just like an enum + public static PostUsersSignInDataStatus[] values() { + synchronized (PostUsersSignInDataStatus.class) { + return values.values().toArray(new PostUsersSignInDataStatus[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("Inactive", Inactive); + map.put("Active", Active); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("Inactive", PostUsersSignInDataStatusEnum.Inactive); + map.put("Active", PostUsersSignInDataStatusEnum.Active); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(PostUsersSignInDataStatus.class); + } + + @Override + public void serialize(PostUsersSignInDataStatus value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(PostUsersSignInDataStatus.class); + } + + @Override + public PostUsersSignInDataStatus deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return PostUsersSignInDataStatus.of(v); + } + } + + public enum PostUsersSignInDataStatusEnum { + + Inactive("Inactive"), + Active("Active"),; + + private final String value; + + private PostUsersSignInDataStatusEnum(String value) { + this.value = value; + } + + public String value() { + return value; + } + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataSubscription.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataSubscription.java new file mode 100644 index 00000000..f41558b7 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataSubscription.java @@ -0,0 +1,434 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + + +public class PostUsersSignInDataSubscription { + /** + * List of features allowed on your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("features") + private Optional> features; + + /** + * If the account's Plex Pass subscription is active + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("active") + private Optional active; + + /** + * Date the account subscribed to Plex Pass + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscribedAt") + private JsonNullable subscribedAt; + + /** + * String representation of subscriptionActive + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("paymentService") + private JsonNullable paymentService; + + /** + * Name of Plex Pass subscription plan + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("plan") + private JsonNullable plan; + + @JsonCreator + public PostUsersSignInDataSubscription( + @JsonProperty("features") Optional> features, + @JsonProperty("active") Optional active, + @JsonProperty("subscribedAt") JsonNullable subscribedAt, + @JsonProperty("status") Optional status, + @JsonProperty("paymentService") JsonNullable paymentService, + @JsonProperty("plan") JsonNullable plan) { + Utils.checkNotNull(features, "features"); + Utils.checkNotNull(active, "active"); + Utils.checkNotNull(subscribedAt, "subscribedAt"); + Utils.checkNotNull(status, "status"); + Utils.checkNotNull(paymentService, "paymentService"); + Utils.checkNotNull(plan, "plan"); + this.features = features; + this.active = active; + this.subscribedAt = subscribedAt; + this.status = status; + this.paymentService = paymentService; + this.plan = plan; + } + + public PostUsersSignInDataSubscription() { + this(Optional.empty(), Optional.empty(), JsonNullable.undefined(), + Optional.empty(), JsonNullable.undefined(), JsonNullable.undefined()); + } + + /** + * List of features allowed on your Plex Pass subscription + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> features() { + return (Optional>) features; + } + + /** + * If the account's Plex Pass subscription is active + */ + @JsonIgnore + public Optional active() { + return active; + } + + /** + * Date the account subscribed to Plex Pass + */ + @JsonIgnore + public JsonNullable subscribedAt() { + return subscribedAt; + } + + /** + * String representation of subscriptionActive + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional status() { + return (Optional) status; + } + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonIgnore + public JsonNullable paymentService() { + return paymentService; + } + + /** + * Name of Plex Pass subscription plan + */ + @JsonIgnore + public JsonNullable plan() { + return plan; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public PostUsersSignInDataSubscription withFeatures(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public PostUsersSignInDataSubscription withFeatures(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public PostUsersSignInDataSubscription withActive(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public PostUsersSignInDataSubscription withActive(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public PostUsersSignInDataSubscription withSubscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public PostUsersSignInDataSubscription withSubscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + /** + * String representation of subscriptionActive + */ + public PostUsersSignInDataSubscription withStatus(PostUsersSignInDataAuthenticationStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + /** + * String representation of subscriptionActive + */ + public PostUsersSignInDataSubscription withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public PostUsersSignInDataSubscription withPaymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public PostUsersSignInDataSubscription withPaymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public PostUsersSignInDataSubscription withPlan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public PostUsersSignInDataSubscription withPlan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataSubscription other = (PostUsersSignInDataSubscription) o; + return + Utils.enhancedDeepEquals(this.features, other.features) && + Utils.enhancedDeepEquals(this.active, other.active) && + Utils.enhancedDeepEquals(this.subscribedAt, other.subscribedAt) && + Utils.enhancedDeepEquals(this.status, other.status) && + Utils.enhancedDeepEquals(this.paymentService, other.paymentService) && + Utils.enhancedDeepEquals(this.plan, other.plan); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + features, active, subscribedAt, + status, paymentService, plan); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataSubscription.class, + "features", features, + "active", active, + "subscribedAt", subscribedAt, + "status", status, + "paymentService", paymentService, + "plan", plan); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> features = Optional.empty(); + + private Optional active = Optional.empty(); + + private JsonNullable subscribedAt = JsonNullable.undefined(); + + private Optional status = Optional.empty(); + + private JsonNullable paymentService = JsonNullable.undefined(); + + private JsonNullable plan = JsonNullable.undefined(); + + private Builder() { + // force use of static builder() method + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + + /** + * String representation of subscriptionActive + */ + public Builder status(PostUsersSignInDataAuthenticationStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + /** + * String representation of subscriptionActive + */ + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + public PostUsersSignInDataSubscription build() { + + return new PostUsersSignInDataSubscription( + features, active, subscribedAt, + status, paymentService, plan); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataUserPlexAccount.java b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataUserPlexAccount.java new file mode 100644 index 00000000..10844b4a --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/PostUsersSignInDataUserPlexAccount.java @@ -0,0 +1,2526 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.models.shared.UserProfile; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Deprecated; +import java.lang.Integer; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + +/** + * PostUsersSignInDataUserPlexAccount + * + *

Returns the user account data with a valid auth token + */ +public class PostUsersSignInDataUserPlexAccount { + /** + * Unknown + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("adsConsent") + private JsonNullable adsConsent; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("adsConsentReminderAt") + private JsonNullable adsConsentReminderAt; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("adsConsentSetAt") + private JsonNullable adsConsentSetAt; + + /** + * Unknown + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("anonymous") + private JsonNullable anonymous; + + /** + * The account token + */ + @JsonProperty("authToken") + private String authToken; + + /** + * If the two-factor authentication backup codes have been created + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("backupCodesCreated") + private Optional backupCodesCreated; + + /** + * If the account has been confirmed + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("confirmed") + private Optional confirmed; + + /** + * The account country + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("country") + private Optional country; + + /** + * The account email address + */ + @JsonProperty("email") + private String email; + + /** + * If login with email only is enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("emailOnlyAuth") + private Optional emailOnlyAuth; + + /** + * If experimental features are enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("experimentalFeatures") + private Optional experimentalFeatures; + + /** + * Your account full name + */ + @JsonProperty("friendlyName") + private String friendlyName; + + /** + * List of devices your allowed to use with this account + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("entitlements") + private Optional> entitlements; + + /** + * If the account is a Plex Home guest user + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guest") + private Optional guest; + + /** + * If the account has a password + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("hasPassword") + private Optional hasPassword; + + /** + * If the account is a Plex Home user + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("home") + private Optional home; + + /** + * If the account is the Plex Home admin + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("homeAdmin") + private Optional homeAdmin; + + /** + * The number of accounts in the Plex Home + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("homeSize") + private Optional homeSize; + + /** + * The Plex account ID + */ + @JsonProperty("id") + private int id; + + /** + * Unix epoch datetime in seconds + */ + @JsonProperty("joinedAt") + private long joinedAt; + + /** + * The account locale + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("locale") + private JsonNullable locale; + + /** + * If you are subscribed to the Plex newsletter + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("mailingListActive") + private Optional mailingListActive; + + /** + * Your current mailing list status + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("mailingListStatus") + private Optional mailingListStatus; + + /** + * The maximum number of accounts allowed in the Plex Home + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("maxHomeSize") + private Optional maxHomeSize; + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("pin") + @Deprecated + private Optional pin; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("profile") + private Optional profile; + + /** + * If the account has a Plex Home PIN enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("protected") + private Optional protected_; + + /** + * Unix epoch datetime in seconds + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("rememberExpiresAt") + private Optional rememberExpiresAt; + + /** + * If the account is a Plex Home managed user + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("restricted") + private Optional restricted; + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("roles") + private Optional> roles; + + /** + * Unknown + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("scrobbleTypes") + private Optional scrobbleTypes; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("services") + private Optional> services; + + /** + * If the account's Plex Pass subscription is active + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscription") + private Optional subscription; + + /** + * Description of the Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscriptionDescription") + private JsonNullable subscriptionDescription; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscriptions") + private Optional> subscriptions; + + /** + * URL of the account thumbnail + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("thumb") + private Optional thumb; + + /** + * The title of the account (username or friendly name) + */ + @JsonProperty("title") + private String title; + + /** + * If two-factor authentication is enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("twoFactorEnabled") + private Optional twoFactorEnabled; + + /** + * The account username + */ + @JsonProperty("username") + private String username; + + /** + * The account UUID + */ + @JsonProperty("uuid") + private String uuid; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("attributionPartner") + private JsonNullable attributionPartner; + + + @JsonProperty("pastSubscriptions") + private List pastSubscriptions; + + + @JsonProperty("trials") + private List trials; + + @JsonCreator + public PostUsersSignInDataUserPlexAccount( + @JsonProperty("adsConsent") JsonNullable adsConsent, + @JsonProperty("adsConsentReminderAt") JsonNullable adsConsentReminderAt, + @JsonProperty("adsConsentSetAt") JsonNullable adsConsentSetAt, + @JsonProperty("anonymous") JsonNullable anonymous, + @JsonProperty("authToken") String authToken, + @JsonProperty("backupCodesCreated") Optional backupCodesCreated, + @JsonProperty("confirmed") Optional confirmed, + @JsonProperty("country") Optional country, + @JsonProperty("email") String email, + @JsonProperty("emailOnlyAuth") Optional emailOnlyAuth, + @JsonProperty("experimentalFeatures") Optional experimentalFeatures, + @JsonProperty("friendlyName") String friendlyName, + @JsonProperty("entitlements") Optional> entitlements, + @JsonProperty("guest") Optional guest, + @JsonProperty("hasPassword") Optional hasPassword, + @JsonProperty("home") Optional home, + @JsonProperty("homeAdmin") Optional homeAdmin, + @JsonProperty("homeSize") Optional homeSize, + @JsonProperty("id") int id, + @JsonProperty("joinedAt") long joinedAt, + @JsonProperty("locale") JsonNullable locale, + @JsonProperty("mailingListActive") Optional mailingListActive, + @JsonProperty("mailingListStatus") Optional mailingListStatus, + @JsonProperty("maxHomeSize") Optional maxHomeSize, + @JsonProperty("pin") Optional pin, + @JsonProperty("profile") Optional profile, + @JsonProperty("protected") Optional protected_, + @JsonProperty("rememberExpiresAt") Optional rememberExpiresAt, + @JsonProperty("restricted") Optional restricted, + @JsonProperty("roles") Optional> roles, + @JsonProperty("scrobbleTypes") Optional scrobbleTypes, + @JsonProperty("services") Optional> services, + @JsonProperty("subscription") Optional subscription, + @JsonProperty("subscriptionDescription") JsonNullable subscriptionDescription, + @JsonProperty("subscriptions") Optional> subscriptions, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("title") String title, + @JsonProperty("twoFactorEnabled") Optional twoFactorEnabled, + @JsonProperty("username") String username, + @JsonProperty("uuid") String uuid, + @JsonProperty("attributionPartner") JsonNullable attributionPartner, + @JsonProperty("pastSubscriptions") List pastSubscriptions, + @JsonProperty("trials") List trials) { + Utils.checkNotNull(adsConsent, "adsConsent"); + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + Utils.checkNotNull(anonymous, "anonymous"); + Utils.checkNotNull(authToken, "authToken"); + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + Utils.checkNotNull(confirmed, "confirmed"); + Utils.checkNotNull(country, "country"); + Utils.checkNotNull(email, "email"); + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + Utils.checkNotNull(friendlyName, "friendlyName"); + Utils.checkNotNull(entitlements, "entitlements"); + Utils.checkNotNull(guest, "guest"); + Utils.checkNotNull(hasPassword, "hasPassword"); + Utils.checkNotNull(home, "home"); + Utils.checkNotNull(homeAdmin, "homeAdmin"); + Utils.checkNotNull(homeSize, "homeSize"); + Utils.checkNotNull(id, "id"); + Utils.checkNotNull(joinedAt, "joinedAt"); + Utils.checkNotNull(locale, "locale"); + Utils.checkNotNull(mailingListActive, "mailingListActive"); + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + Utils.checkNotNull(pin, "pin"); + Utils.checkNotNull(profile, "profile"); + Utils.checkNotNull(protected_, "protected_"); + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + Utils.checkNotNull(restricted, "restricted"); + Utils.checkNotNull(roles, "roles"); + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + Utils.checkNotNull(services, "services"); + Utils.checkNotNull(subscription, "subscription"); + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + Utils.checkNotNull(subscriptions, "subscriptions"); + Utils.checkNotNull(thumb, "thumb"); + Utils.checkNotNull(title, "title"); + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + Utils.checkNotNull(username, "username"); + Utils.checkNotNull(uuid, "uuid"); + Utils.checkNotNull(attributionPartner, "attributionPartner"); + Utils.checkNotNull(pastSubscriptions, "pastSubscriptions"); + Utils.checkNotNull(trials, "trials"); + this.adsConsent = adsConsent; + this.adsConsentReminderAt = adsConsentReminderAt; + this.adsConsentSetAt = adsConsentSetAt; + this.anonymous = anonymous; + this.authToken = authToken; + this.backupCodesCreated = backupCodesCreated; + this.confirmed = confirmed; + this.country = country; + this.email = email; + this.emailOnlyAuth = emailOnlyAuth; + this.experimentalFeatures = experimentalFeatures; + this.friendlyName = friendlyName; + this.entitlements = entitlements; + this.guest = guest; + this.hasPassword = hasPassword; + this.home = home; + this.homeAdmin = homeAdmin; + this.homeSize = homeSize; + this.id = id; + this.joinedAt = joinedAt; + this.locale = locale; + this.mailingListActive = mailingListActive; + this.mailingListStatus = mailingListStatus; + this.maxHomeSize = maxHomeSize; + this.pin = pin; + this.profile = profile; + this.protected_ = protected_; + this.rememberExpiresAt = rememberExpiresAt; + this.restricted = restricted; + this.roles = roles; + this.scrobbleTypes = scrobbleTypes; + this.services = services; + this.subscription = subscription; + this.subscriptionDescription = subscriptionDescription; + this.subscriptions = subscriptions; + this.thumb = thumb; + this.title = title; + this.twoFactorEnabled = twoFactorEnabled; + this.username = username; + this.uuid = uuid; + this.attributionPartner = attributionPartner; + this.pastSubscriptions = pastSubscriptions; + this.trials = trials; + } + + public PostUsersSignInDataUserPlexAccount( + String authToken, + String email, + String friendlyName, + int id, + long joinedAt, + String title, + String username, + String uuid, + List pastSubscriptions, + List trials) { + this(JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), + JsonNullable.undefined(), authToken, Optional.empty(), + Optional.empty(), Optional.empty(), email, + Optional.empty(), Optional.empty(), friendlyName, + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + id, joinedAt, JsonNullable.undefined(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + JsonNullable.undefined(), Optional.empty(), Optional.empty(), + title, Optional.empty(), username, + uuid, JsonNullable.undefined(), pastSubscriptions, + trials); + } + + /** + * Unknown + */ + @JsonIgnore + public JsonNullable adsConsent() { + return adsConsent; + } + + @JsonIgnore + public JsonNullable adsConsentReminderAt() { + return adsConsentReminderAt; + } + + @JsonIgnore + public JsonNullable adsConsentSetAt() { + return adsConsentSetAt; + } + + /** + * Unknown + */ + @JsonIgnore + public JsonNullable anonymous() { + return anonymous; + } + + /** + * The account token + */ + @JsonIgnore + public String authToken() { + return authToken; + } + + /** + * If the two-factor authentication backup codes have been created + */ + @JsonIgnore + public Optional backupCodesCreated() { + return backupCodesCreated; + } + + /** + * If the account has been confirmed + */ + @JsonIgnore + public Optional confirmed() { + return confirmed; + } + + /** + * The account country + */ + @JsonIgnore + public Optional country() { + return country; + } + + /** + * The account email address + */ + @JsonIgnore + public String email() { + return email; + } + + /** + * If login with email only is enabled + */ + @JsonIgnore + public Optional emailOnlyAuth() { + return emailOnlyAuth; + } + + /** + * If experimental features are enabled + */ + @JsonIgnore + public Optional experimentalFeatures() { + return experimentalFeatures; + } + + /** + * Your account full name + */ + @JsonIgnore + public String friendlyName() { + return friendlyName; + } + + /** + * List of devices your allowed to use with this account + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> entitlements() { + return (Optional>) entitlements; + } + + /** + * If the account is a Plex Home guest user + */ + @JsonIgnore + public Optional guest() { + return guest; + } + + /** + * If the account has a password + */ + @JsonIgnore + public Optional hasPassword() { + return hasPassword; + } + + /** + * If the account is a Plex Home user + */ + @JsonIgnore + public Optional home() { + return home; + } + + /** + * If the account is the Plex Home admin + */ + @JsonIgnore + public Optional homeAdmin() { + return homeAdmin; + } + + /** + * The number of accounts in the Plex Home + */ + @JsonIgnore + public Optional homeSize() { + return homeSize; + } + + /** + * The Plex account ID + */ + @JsonIgnore + public int id() { + return id; + } + + /** + * Unix epoch datetime in seconds + */ + @JsonIgnore + public long joinedAt() { + return joinedAt; + } + + /** + * The account locale + */ + @JsonIgnore + public JsonNullable locale() { + return locale; + } + + /** + * If you are subscribed to the Plex newsletter + */ + @JsonIgnore + public Optional mailingListActive() { + return mailingListActive; + } + + /** + * Your current mailing list status + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional mailingListStatus() { + return (Optional) mailingListStatus; + } + + /** + * The maximum number of accounts allowed in the Plex Home + */ + @JsonIgnore + public Optional maxHomeSize() { + return maxHomeSize; + } + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + @JsonIgnore + public Optional pin() { + return pin; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional profile() { + return (Optional) profile; + } + + /** + * If the account has a Plex Home PIN enabled + */ + @JsonIgnore + public Optional protected_() { + return protected_; + } + + /** + * Unix epoch datetime in seconds + */ + @JsonIgnore + public Optional rememberExpiresAt() { + return rememberExpiresAt; + } + + /** + * If the account is a Plex Home managed user + */ + @JsonIgnore + public Optional restricted() { + return restricted; + } + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> roles() { + return (Optional>) roles; + } + + /** + * Unknown + */ + @JsonIgnore + public Optional scrobbleTypes() { + return scrobbleTypes; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> services() { + return (Optional>) services; + } + + /** + * If the account's Plex Pass subscription is active + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional subscription() { + return (Optional) subscription; + } + + /** + * Description of the Plex Pass subscription + */ + @JsonIgnore + public JsonNullable subscriptionDescription() { + return subscriptionDescription; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> subscriptions() { + return (Optional>) subscriptions; + } + + /** + * URL of the account thumbnail + */ + @JsonIgnore + public Optional thumb() { + return thumb; + } + + /** + * The title of the account (username or friendly name) + */ + @JsonIgnore + public String title() { + return title; + } + + /** + * If two-factor authentication is enabled + */ + @JsonIgnore + public Optional twoFactorEnabled() { + return twoFactorEnabled; + } + + /** + * The account username + */ + @JsonIgnore + public String username() { + return username; + } + + /** + * The account UUID + */ + @JsonIgnore + public String uuid() { + return uuid; + } + + @JsonIgnore + public JsonNullable attributionPartner() { + return attributionPartner; + } + + @JsonIgnore + public List pastSubscriptions() { + return pastSubscriptions; + } + + @JsonIgnore + public List trials() { + return trials; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Unknown + */ + public PostUsersSignInDataUserPlexAccount withAdsConsent(boolean adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = JsonNullable.of(adsConsent); + return this; + } + + /** + * Unknown + */ + public PostUsersSignInDataUserPlexAccount withAdsConsent(JsonNullable adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = adsConsent; + return this; + } + + public PostUsersSignInDataUserPlexAccount withAdsConsentReminderAt(long adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = JsonNullable.of(adsConsentReminderAt); + return this; + } + + public PostUsersSignInDataUserPlexAccount withAdsConsentReminderAt(JsonNullable adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = adsConsentReminderAt; + return this; + } + + public PostUsersSignInDataUserPlexAccount withAdsConsentSetAt(long adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = JsonNullable.of(adsConsentSetAt); + return this; + } + + public PostUsersSignInDataUserPlexAccount withAdsConsentSetAt(JsonNullable adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = adsConsentSetAt; + return this; + } + + /** + * Unknown + */ + public PostUsersSignInDataUserPlexAccount withAnonymous(boolean anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = JsonNullable.of(anonymous); + return this; + } + + /** + * Unknown + */ + public PostUsersSignInDataUserPlexAccount withAnonymous(JsonNullable anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = anonymous; + return this; + } + + /** + * The account token + */ + public PostUsersSignInDataUserPlexAccount withAuthToken(String authToken) { + Utils.checkNotNull(authToken, "authToken"); + this.authToken = authToken; + return this; + } + + /** + * If the two-factor authentication backup codes have been created + */ + public PostUsersSignInDataUserPlexAccount withBackupCodesCreated(boolean backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = Optional.ofNullable(backupCodesCreated); + return this; + } + + + /** + * If the two-factor authentication backup codes have been created + */ + public PostUsersSignInDataUserPlexAccount withBackupCodesCreated(Optional backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = backupCodesCreated; + return this; + } + + /** + * If the account has been confirmed + */ + public PostUsersSignInDataUserPlexAccount withConfirmed(boolean confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = Optional.ofNullable(confirmed); + return this; + } + + + /** + * If the account has been confirmed + */ + public PostUsersSignInDataUserPlexAccount withConfirmed(Optional confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = confirmed; + return this; + } + + /** + * The account country + */ + public PostUsersSignInDataUserPlexAccount withCountry(String country) { + Utils.checkNotNull(country, "country"); + this.country = Optional.ofNullable(country); + return this; + } + + + /** + * The account country + */ + public PostUsersSignInDataUserPlexAccount withCountry(Optional country) { + Utils.checkNotNull(country, "country"); + this.country = country; + return this; + } + + /** + * The account email address + */ + public PostUsersSignInDataUserPlexAccount withEmail(String email) { + Utils.checkNotNull(email, "email"); + this.email = email; + return this; + } + + /** + * If login with email only is enabled + */ + public PostUsersSignInDataUserPlexAccount withEmailOnlyAuth(boolean emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = Optional.ofNullable(emailOnlyAuth); + return this; + } + + + /** + * If login with email only is enabled + */ + public PostUsersSignInDataUserPlexAccount withEmailOnlyAuth(Optional emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = emailOnlyAuth; + return this; + } + + /** + * If experimental features are enabled + */ + public PostUsersSignInDataUserPlexAccount withExperimentalFeatures(boolean experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = Optional.ofNullable(experimentalFeatures); + return this; + } + + + /** + * If experimental features are enabled + */ + public PostUsersSignInDataUserPlexAccount withExperimentalFeatures(Optional experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = experimentalFeatures; + return this; + } + + /** + * Your account full name + */ + public PostUsersSignInDataUserPlexAccount withFriendlyName(String friendlyName) { + Utils.checkNotNull(friendlyName, "friendlyName"); + this.friendlyName = friendlyName; + return this; + } + + /** + * List of devices your allowed to use with this account + */ + public PostUsersSignInDataUserPlexAccount withEntitlements(List entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = Optional.ofNullable(entitlements); + return this; + } + + + /** + * List of devices your allowed to use with this account + */ + public PostUsersSignInDataUserPlexAccount withEntitlements(Optional> entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = entitlements; + return this; + } + + /** + * If the account is a Plex Home guest user + */ + public PostUsersSignInDataUserPlexAccount withGuest(boolean guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = Optional.ofNullable(guest); + return this; + } + + + /** + * If the account is a Plex Home guest user + */ + public PostUsersSignInDataUserPlexAccount withGuest(Optional guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = guest; + return this; + } + + /** + * If the account has a password + */ + public PostUsersSignInDataUserPlexAccount withHasPassword(boolean hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = Optional.ofNullable(hasPassword); + return this; + } + + + /** + * If the account has a password + */ + public PostUsersSignInDataUserPlexAccount withHasPassword(Optional hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = hasPassword; + return this; + } + + /** + * If the account is a Plex Home user + */ + public PostUsersSignInDataUserPlexAccount withHome(boolean home) { + Utils.checkNotNull(home, "home"); + this.home = Optional.ofNullable(home); + return this; + } + + + /** + * If the account is a Plex Home user + */ + public PostUsersSignInDataUserPlexAccount withHome(Optional home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + /** + * If the account is the Plex Home admin + */ + public PostUsersSignInDataUserPlexAccount withHomeAdmin(boolean homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = Optional.ofNullable(homeAdmin); + return this; + } + + + /** + * If the account is the Plex Home admin + */ + public PostUsersSignInDataUserPlexAccount withHomeAdmin(Optional homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = homeAdmin; + return this; + } + + /** + * The number of accounts in the Plex Home + */ + public PostUsersSignInDataUserPlexAccount withHomeSize(int homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = Optional.ofNullable(homeSize); + return this; + } + + + /** + * The number of accounts in the Plex Home + */ + public PostUsersSignInDataUserPlexAccount withHomeSize(Optional homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = homeSize; + return this; + } + + /** + * The Plex account ID + */ + public PostUsersSignInDataUserPlexAccount withId(int id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public PostUsersSignInDataUserPlexAccount withJoinedAt(long joinedAt) { + Utils.checkNotNull(joinedAt, "joinedAt"); + this.joinedAt = joinedAt; + return this; + } + + /** + * The account locale + */ + public PostUsersSignInDataUserPlexAccount withLocale(String locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = JsonNullable.of(locale); + return this; + } + + /** + * The account locale + */ + public PostUsersSignInDataUserPlexAccount withLocale(JsonNullable locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = locale; + return this; + } + + /** + * If you are subscribed to the Plex newsletter + */ + public PostUsersSignInDataUserPlexAccount withMailingListActive(boolean mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = Optional.ofNullable(mailingListActive); + return this; + } + + + /** + * If you are subscribed to the Plex newsletter + */ + public PostUsersSignInDataUserPlexAccount withMailingListActive(Optional mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = mailingListActive; + return this; + } + + /** + * Your current mailing list status + */ + public PostUsersSignInDataUserPlexAccount withMailingListStatus(MailingListStatus mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = Optional.ofNullable(mailingListStatus); + return this; + } + + + /** + * Your current mailing list status + */ + public PostUsersSignInDataUserPlexAccount withMailingListStatus(Optional mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = mailingListStatus; + return this; + } + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public PostUsersSignInDataUserPlexAccount withMaxHomeSize(int maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = Optional.ofNullable(maxHomeSize); + return this; + } + + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public PostUsersSignInDataUserPlexAccount withMaxHomeSize(Optional maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = maxHomeSize; + return this; + } + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public PostUsersSignInDataUserPlexAccount withPin(String pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = Optional.ofNullable(pin); + return this; + } + + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public PostUsersSignInDataUserPlexAccount withPin(Optional pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = pin; + return this; + } + + public PostUsersSignInDataUserPlexAccount withProfile(UserProfile profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = Optional.ofNullable(profile); + return this; + } + + + public PostUsersSignInDataUserPlexAccount withProfile(Optional profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = profile; + return this; + } + + /** + * If the account has a Plex Home PIN enabled + */ + public PostUsersSignInDataUserPlexAccount withProtected(boolean protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = Optional.ofNullable(protected_); + return this; + } + + + /** + * If the account has a Plex Home PIN enabled + */ + public PostUsersSignInDataUserPlexAccount withProtected(Optional protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = protected_; + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public PostUsersSignInDataUserPlexAccount withRememberExpiresAt(long rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = Optional.ofNullable(rememberExpiresAt); + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public PostUsersSignInDataUserPlexAccount withRememberExpiresAt(Optional rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = rememberExpiresAt; + return this; + } + + /** + * If the account is a Plex Home managed user + */ + public PostUsersSignInDataUserPlexAccount withRestricted(boolean restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = Optional.ofNullable(restricted); + return this; + } + + + /** + * If the account is a Plex Home managed user + */ + public PostUsersSignInDataUserPlexAccount withRestricted(Optional restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = restricted; + return this; + } + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public PostUsersSignInDataUserPlexAccount withRoles(List roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = Optional.ofNullable(roles); + return this; + } + + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public PostUsersSignInDataUserPlexAccount withRoles(Optional> roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = roles; + return this; + } + + /** + * Unknown + */ + public PostUsersSignInDataUserPlexAccount withScrobbleTypes(String scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = Optional.ofNullable(scrobbleTypes); + return this; + } + + + /** + * Unknown + */ + public PostUsersSignInDataUserPlexAccount withScrobbleTypes(Optional scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = scrobbleTypes; + return this; + } + + public PostUsersSignInDataUserPlexAccount withServices(List services) { + Utils.checkNotNull(services, "services"); + this.services = Optional.ofNullable(services); + return this; + } + + + public PostUsersSignInDataUserPlexAccount withServices(Optional> services) { + Utils.checkNotNull(services, "services"); + this.services = services; + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public PostUsersSignInDataUserPlexAccount withSubscription(Subscription subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = Optional.ofNullable(subscription); + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public PostUsersSignInDataUserPlexAccount withSubscription(Optional subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = subscription; + return this; + } + + /** + * Description of the Plex Pass subscription + */ + public PostUsersSignInDataUserPlexAccount withSubscriptionDescription(String subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = JsonNullable.of(subscriptionDescription); + return this; + } + + /** + * Description of the Plex Pass subscription + */ + public PostUsersSignInDataUserPlexAccount withSubscriptionDescription(JsonNullable subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = subscriptionDescription; + return this; + } + + public PostUsersSignInDataUserPlexAccount withSubscriptions(List subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = Optional.ofNullable(subscriptions); + return this; + } + + + public PostUsersSignInDataUserPlexAccount withSubscriptions(Optional> subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = subscriptions; + return this; + } + + /** + * URL of the account thumbnail + */ + public PostUsersSignInDataUserPlexAccount withThumb(String thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = Optional.ofNullable(thumb); + return this; + } + + + /** + * URL of the account thumbnail + */ + public PostUsersSignInDataUserPlexAccount withThumb(Optional thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = thumb; + return this; + } + + /** + * The title of the account (username or friendly name) + */ + public PostUsersSignInDataUserPlexAccount withTitle(String title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + /** + * If two-factor authentication is enabled + */ + public PostUsersSignInDataUserPlexAccount withTwoFactorEnabled(boolean twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = Optional.ofNullable(twoFactorEnabled); + return this; + } + + + /** + * If two-factor authentication is enabled + */ + public PostUsersSignInDataUserPlexAccount withTwoFactorEnabled(Optional twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = twoFactorEnabled; + return this; + } + + /** + * The account username + */ + public PostUsersSignInDataUserPlexAccount withUsername(String username) { + Utils.checkNotNull(username, "username"); + this.username = username; + return this; + } + + /** + * The account UUID + */ + public PostUsersSignInDataUserPlexAccount withUuid(String uuid) { + Utils.checkNotNull(uuid, "uuid"); + this.uuid = uuid; + return this; + } + + public PostUsersSignInDataUserPlexAccount withAttributionPartner(String attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = JsonNullable.of(attributionPartner); + return this; + } + + public PostUsersSignInDataUserPlexAccount withAttributionPartner(JsonNullable attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = attributionPartner; + return this; + } + + public PostUsersSignInDataUserPlexAccount withPastSubscriptions(List pastSubscriptions) { + Utils.checkNotNull(pastSubscriptions, "pastSubscriptions"); + this.pastSubscriptions = pastSubscriptions; + return this; + } + + public PostUsersSignInDataUserPlexAccount withTrials(List trials) { + Utils.checkNotNull(trials, "trials"); + this.trials = trials; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataUserPlexAccount other = (PostUsersSignInDataUserPlexAccount) o; + return + Utils.enhancedDeepEquals(this.adsConsent, other.adsConsent) && + Utils.enhancedDeepEquals(this.adsConsentReminderAt, other.adsConsentReminderAt) && + Utils.enhancedDeepEquals(this.adsConsentSetAt, other.adsConsentSetAt) && + Utils.enhancedDeepEquals(this.anonymous, other.anonymous) && + Utils.enhancedDeepEquals(this.authToken, other.authToken) && + Utils.enhancedDeepEquals(this.backupCodesCreated, other.backupCodesCreated) && + Utils.enhancedDeepEquals(this.confirmed, other.confirmed) && + Utils.enhancedDeepEquals(this.country, other.country) && + Utils.enhancedDeepEquals(this.email, other.email) && + Utils.enhancedDeepEquals(this.emailOnlyAuth, other.emailOnlyAuth) && + Utils.enhancedDeepEquals(this.experimentalFeatures, other.experimentalFeatures) && + Utils.enhancedDeepEquals(this.friendlyName, other.friendlyName) && + Utils.enhancedDeepEquals(this.entitlements, other.entitlements) && + Utils.enhancedDeepEquals(this.guest, other.guest) && + Utils.enhancedDeepEquals(this.hasPassword, other.hasPassword) && + Utils.enhancedDeepEquals(this.home, other.home) && + Utils.enhancedDeepEquals(this.homeAdmin, other.homeAdmin) && + Utils.enhancedDeepEquals(this.homeSize, other.homeSize) && + Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.joinedAt, other.joinedAt) && + Utils.enhancedDeepEquals(this.locale, other.locale) && + Utils.enhancedDeepEquals(this.mailingListActive, other.mailingListActive) && + Utils.enhancedDeepEquals(this.mailingListStatus, other.mailingListStatus) && + Utils.enhancedDeepEquals(this.maxHomeSize, other.maxHomeSize) && + Utils.enhancedDeepEquals(this.pin, other.pin) && + Utils.enhancedDeepEquals(this.profile, other.profile) && + Utils.enhancedDeepEquals(this.protected_, other.protected_) && + Utils.enhancedDeepEquals(this.rememberExpiresAt, other.rememberExpiresAt) && + Utils.enhancedDeepEquals(this.restricted, other.restricted) && + Utils.enhancedDeepEquals(this.roles, other.roles) && + Utils.enhancedDeepEquals(this.scrobbleTypes, other.scrobbleTypes) && + Utils.enhancedDeepEquals(this.services, other.services) && + Utils.enhancedDeepEquals(this.subscription, other.subscription) && + Utils.enhancedDeepEquals(this.subscriptionDescription, other.subscriptionDescription) && + Utils.enhancedDeepEquals(this.subscriptions, other.subscriptions) && + Utils.enhancedDeepEquals(this.thumb, other.thumb) && + Utils.enhancedDeepEquals(this.title, other.title) && + Utils.enhancedDeepEquals(this.twoFactorEnabled, other.twoFactorEnabled) && + Utils.enhancedDeepEquals(this.username, other.username) && + Utils.enhancedDeepEquals(this.uuid, other.uuid) && + Utils.enhancedDeepEquals(this.attributionPartner, other.attributionPartner) && + Utils.enhancedDeepEquals(this.pastSubscriptions, other.pastSubscriptions) && + Utils.enhancedDeepEquals(this.trials, other.trials); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + adsConsent, adsConsentReminderAt, adsConsentSetAt, + anonymous, authToken, backupCodesCreated, + confirmed, country, email, + emailOnlyAuth, experimentalFeatures, friendlyName, + entitlements, guest, hasPassword, + home, homeAdmin, homeSize, + id, joinedAt, locale, + mailingListActive, mailingListStatus, maxHomeSize, + pin, profile, protected_, + rememberExpiresAt, restricted, roles, + scrobbleTypes, services, subscription, + subscriptionDescription, subscriptions, thumb, + title, twoFactorEnabled, username, + uuid, attributionPartner, pastSubscriptions, + trials); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataUserPlexAccount.class, + "adsConsent", adsConsent, + "adsConsentReminderAt", adsConsentReminderAt, + "adsConsentSetAt", adsConsentSetAt, + "anonymous", anonymous, + "authToken", authToken, + "backupCodesCreated", backupCodesCreated, + "confirmed", confirmed, + "country", country, + "email", email, + "emailOnlyAuth", emailOnlyAuth, + "experimentalFeatures", experimentalFeatures, + "friendlyName", friendlyName, + "entitlements", entitlements, + "guest", guest, + "hasPassword", hasPassword, + "home", home, + "homeAdmin", homeAdmin, + "homeSize", homeSize, + "id", id, + "joinedAt", joinedAt, + "locale", locale, + "mailingListActive", mailingListActive, + "mailingListStatus", mailingListStatus, + "maxHomeSize", maxHomeSize, + "pin", pin, + "profile", profile, + "protected_", protected_, + "rememberExpiresAt", rememberExpiresAt, + "restricted", restricted, + "roles", roles, + "scrobbleTypes", scrobbleTypes, + "services", services, + "subscription", subscription, + "subscriptionDescription", subscriptionDescription, + "subscriptions", subscriptions, + "thumb", thumb, + "title", title, + "twoFactorEnabled", twoFactorEnabled, + "username", username, + "uuid", uuid, + "attributionPartner", attributionPartner, + "pastSubscriptions", pastSubscriptions, + "trials", trials); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private JsonNullable adsConsent = JsonNullable.undefined(); + + private JsonNullable adsConsentReminderAt = JsonNullable.undefined(); + + private JsonNullable adsConsentSetAt = JsonNullable.undefined(); + + private JsonNullable anonymous; + + private String authToken; + + private Optional backupCodesCreated; + + private Optional confirmed; + + private Optional country = Optional.empty(); + + private String email; + + private Optional emailOnlyAuth; + + private Optional experimentalFeatures; + + private String friendlyName; + + private Optional> entitlements = Optional.empty(); + + private Optional guest; + + private Optional hasPassword; + + private Optional home; + + private Optional homeAdmin; + + private Optional homeSize = Optional.empty(); + + private Integer id; + + private Long joinedAt; + + private JsonNullable locale = JsonNullable.undefined(); + + private Optional mailingListActive; + + private Optional mailingListStatus = Optional.empty(); + + private Optional maxHomeSize = Optional.empty(); + + @Deprecated + private Optional pin = Optional.empty(); + + private Optional profile = Optional.empty(); + + private Optional protected_; + + private Optional rememberExpiresAt = Optional.empty(); + + private Optional restricted; + + private Optional> roles = Optional.empty(); + + private Optional scrobbleTypes = Optional.empty(); + + private Optional> services = Optional.empty(); + + private Optional subscription = Optional.empty(); + + private JsonNullable subscriptionDescription = JsonNullable.undefined(); + + private Optional> subscriptions = Optional.empty(); + + private Optional thumb = Optional.empty(); + + private String title; + + private Optional twoFactorEnabled; + + private String username; + + private String uuid; + + private JsonNullable attributionPartner = JsonNullable.undefined(); + + private List pastSubscriptions; + + private List trials; + + private Builder() { + // force use of static builder() method + } + + + /** + * Unknown + */ + public Builder adsConsent(boolean adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = JsonNullable.of(adsConsent); + return this; + } + + /** + * Unknown + */ + public Builder adsConsent(JsonNullable adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = adsConsent; + return this; + } + + + public Builder adsConsentReminderAt(long adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = JsonNullable.of(adsConsentReminderAt); + return this; + } + + public Builder adsConsentReminderAt(JsonNullable adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = adsConsentReminderAt; + return this; + } + + + public Builder adsConsentSetAt(long adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = JsonNullable.of(adsConsentSetAt); + return this; + } + + public Builder adsConsentSetAt(JsonNullable adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = adsConsentSetAt; + return this; + } + + + /** + * Unknown + */ + public Builder anonymous(boolean anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = JsonNullable.of(anonymous); + return this; + } + + /** + * Unknown + */ + public Builder anonymous(JsonNullable anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = anonymous; + return this; + } + + + /** + * The account token + */ + public Builder authToken(String authToken) { + Utils.checkNotNull(authToken, "authToken"); + this.authToken = authToken; + return this; + } + + + /** + * If the two-factor authentication backup codes have been created + */ + public Builder backupCodesCreated(boolean backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = Optional.ofNullable(backupCodesCreated); + return this; + } + + /** + * If the two-factor authentication backup codes have been created + */ + public Builder backupCodesCreated(Optional backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = backupCodesCreated; + return this; + } + + + /** + * If the account has been confirmed + */ + public Builder confirmed(boolean confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = Optional.ofNullable(confirmed); + return this; + } + + /** + * If the account has been confirmed + */ + public Builder confirmed(Optional confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = confirmed; + return this; + } + + + /** + * The account country + */ + public Builder country(String country) { + Utils.checkNotNull(country, "country"); + this.country = Optional.ofNullable(country); + return this; + } + + /** + * The account country + */ + public Builder country(Optional country) { + Utils.checkNotNull(country, "country"); + this.country = country; + return this; + } + + + /** + * The account email address + */ + public Builder email(String email) { + Utils.checkNotNull(email, "email"); + this.email = email; + return this; + } + + + /** + * If login with email only is enabled + */ + public Builder emailOnlyAuth(boolean emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = Optional.ofNullable(emailOnlyAuth); + return this; + } + + /** + * If login with email only is enabled + */ + public Builder emailOnlyAuth(Optional emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = emailOnlyAuth; + return this; + } + + + /** + * If experimental features are enabled + */ + public Builder experimentalFeatures(boolean experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = Optional.ofNullable(experimentalFeatures); + return this; + } + + /** + * If experimental features are enabled + */ + public Builder experimentalFeatures(Optional experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = experimentalFeatures; + return this; + } + + + /** + * Your account full name + */ + public Builder friendlyName(String friendlyName) { + Utils.checkNotNull(friendlyName, "friendlyName"); + this.friendlyName = friendlyName; + return this; + } + + + /** + * List of devices your allowed to use with this account + */ + public Builder entitlements(List entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = Optional.ofNullable(entitlements); + return this; + } + + /** + * List of devices your allowed to use with this account + */ + public Builder entitlements(Optional> entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = entitlements; + return this; + } + + + /** + * If the account is a Plex Home guest user + */ + public Builder guest(boolean guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = Optional.ofNullable(guest); + return this; + } + + /** + * If the account is a Plex Home guest user + */ + public Builder guest(Optional guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = guest; + return this; + } + + + /** + * If the account has a password + */ + public Builder hasPassword(boolean hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = Optional.ofNullable(hasPassword); + return this; + } + + /** + * If the account has a password + */ + public Builder hasPassword(Optional hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = hasPassword; + return this; + } + + + /** + * If the account is a Plex Home user + */ + public Builder home(boolean home) { + Utils.checkNotNull(home, "home"); + this.home = Optional.ofNullable(home); + return this; + } + + /** + * If the account is a Plex Home user + */ + public Builder home(Optional home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + + /** + * If the account is the Plex Home admin + */ + public Builder homeAdmin(boolean homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = Optional.ofNullable(homeAdmin); + return this; + } + + /** + * If the account is the Plex Home admin + */ + public Builder homeAdmin(Optional homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = homeAdmin; + return this; + } + + + /** + * The number of accounts in the Plex Home + */ + public Builder homeSize(int homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = Optional.ofNullable(homeSize); + return this; + } + + /** + * The number of accounts in the Plex Home + */ + public Builder homeSize(Optional homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = homeSize; + return this; + } + + + /** + * The Plex account ID + */ + public Builder id(int id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public Builder joinedAt(long joinedAt) { + Utils.checkNotNull(joinedAt, "joinedAt"); + this.joinedAt = joinedAt; + return this; + } + + + /** + * The account locale + */ + public Builder locale(String locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = JsonNullable.of(locale); + return this; + } + + /** + * The account locale + */ + public Builder locale(JsonNullable locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = locale; + return this; + } + + + /** + * If you are subscribed to the Plex newsletter + */ + public Builder mailingListActive(boolean mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = Optional.ofNullable(mailingListActive); + return this; + } + + /** + * If you are subscribed to the Plex newsletter + */ + public Builder mailingListActive(Optional mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = mailingListActive; + return this; + } + + + /** + * Your current mailing list status + */ + public Builder mailingListStatus(MailingListStatus mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = Optional.ofNullable(mailingListStatus); + return this; + } + + /** + * Your current mailing list status + */ + public Builder mailingListStatus(Optional mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = mailingListStatus; + return this; + } + + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public Builder maxHomeSize(int maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = Optional.ofNullable(maxHomeSize); + return this; + } + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public Builder maxHomeSize(Optional maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = maxHomeSize; + return this; + } + + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public Builder pin(String pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = Optional.ofNullable(pin); + return this; + } + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public Builder pin(Optional pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = pin; + return this; + } + + + public Builder profile(UserProfile profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = Optional.ofNullable(profile); + return this; + } + + public Builder profile(Optional profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = profile; + return this; + } + + + /** + * If the account has a Plex Home PIN enabled + */ + public Builder protected_(boolean protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = Optional.ofNullable(protected_); + return this; + } + + /** + * If the account has a Plex Home PIN enabled + */ + public Builder protected_(Optional protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = protected_; + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public Builder rememberExpiresAt(long rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = Optional.ofNullable(rememberExpiresAt); + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public Builder rememberExpiresAt(Optional rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = rememberExpiresAt; + return this; + } + + + /** + * If the account is a Plex Home managed user + */ + public Builder restricted(boolean restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = Optional.ofNullable(restricted); + return this; + } + + /** + * If the account is a Plex Home managed user + */ + public Builder restricted(Optional restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = restricted; + return this; + } + + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public Builder roles(List roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = Optional.ofNullable(roles); + return this; + } + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public Builder roles(Optional> roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = roles; + return this; + } + + + /** + * Unknown + */ + public Builder scrobbleTypes(String scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = Optional.ofNullable(scrobbleTypes); + return this; + } + + /** + * Unknown + */ + public Builder scrobbleTypes(Optional scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = scrobbleTypes; + return this; + } + + + public Builder services(List services) { + Utils.checkNotNull(services, "services"); + this.services = Optional.ofNullable(services); + return this; + } + + public Builder services(Optional> services) { + Utils.checkNotNull(services, "services"); + this.services = services; + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Builder subscription(Subscription subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = Optional.ofNullable(subscription); + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Builder subscription(Optional subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = subscription; + return this; + } + + + /** + * Description of the Plex Pass subscription + */ + public Builder subscriptionDescription(String subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = JsonNullable.of(subscriptionDescription); + return this; + } + + /** + * Description of the Plex Pass subscription + */ + public Builder subscriptionDescription(JsonNullable subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = subscriptionDescription; + return this; + } + + + public Builder subscriptions(List subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = Optional.ofNullable(subscriptions); + return this; + } + + public Builder subscriptions(Optional> subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = subscriptions; + return this; + } + + + /** + * URL of the account thumbnail + */ + public Builder thumb(String thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = Optional.ofNullable(thumb); + return this; + } + + /** + * URL of the account thumbnail + */ + public Builder thumb(Optional thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = thumb; + return this; + } + + + /** + * The title of the account (username or friendly name) + */ + public Builder title(String title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + + /** + * If two-factor authentication is enabled + */ + public Builder twoFactorEnabled(boolean twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = Optional.ofNullable(twoFactorEnabled); + return this; + } + + /** + * If two-factor authentication is enabled + */ + public Builder twoFactorEnabled(Optional twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = twoFactorEnabled; + return this; + } + + + /** + * The account username + */ + public Builder username(String username) { + Utils.checkNotNull(username, "username"); + this.username = username; + return this; + } + + + /** + * The account UUID + */ + public Builder uuid(String uuid) { + Utils.checkNotNull(uuid, "uuid"); + this.uuid = uuid; + return this; + } + + + public Builder attributionPartner(String attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = JsonNullable.of(attributionPartner); + return this; + } + + public Builder attributionPartner(JsonNullable attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = attributionPartner; + return this; + } + + + public Builder pastSubscriptions(List pastSubscriptions) { + Utils.checkNotNull(pastSubscriptions, "pastSubscriptions"); + this.pastSubscriptions = pastSubscriptions; + return this; + } + + + public Builder trials(List trials) { + Utils.checkNotNull(trials, "trials"); + this.trials = trials; + return this; + } + + public PostUsersSignInDataUserPlexAccount build() { + if (anonymous == null) { + anonymous = _SINGLETON_VALUE_Anonymous.value(); + } + if (backupCodesCreated == null) { + backupCodesCreated = _SINGLETON_VALUE_BackupCodesCreated.value(); + } + if (confirmed == null) { + confirmed = _SINGLETON_VALUE_Confirmed.value(); + } + if (emailOnlyAuth == null) { + emailOnlyAuth = _SINGLETON_VALUE_EmailOnlyAuth.value(); + } + if (experimentalFeatures == null) { + experimentalFeatures = _SINGLETON_VALUE_ExperimentalFeatures.value(); + } + if (guest == null) { + guest = _SINGLETON_VALUE_Guest.value(); + } + if (hasPassword == null) { + hasPassword = _SINGLETON_VALUE_HasPassword.value(); + } + if (home == null) { + home = _SINGLETON_VALUE_Home.value(); + } + if (homeAdmin == null) { + homeAdmin = _SINGLETON_VALUE_HomeAdmin.value(); + } + if (mailingListActive == null) { + mailingListActive = _SINGLETON_VALUE_MailingListActive.value(); + } + if (protected_ == null) { + protected_ = _SINGLETON_VALUE_Protected.value(); + } + if (restricted == null) { + restricted = _SINGLETON_VALUE_Restricted.value(); + } + if (twoFactorEnabled == null) { + twoFactorEnabled = _SINGLETON_VALUE_TwoFactorEnabled.value(); + } + + return new PostUsersSignInDataUserPlexAccount( + adsConsent, adsConsentReminderAt, adsConsentSetAt, + anonymous, authToken, backupCodesCreated, + confirmed, country, email, + emailOnlyAuth, experimentalFeatures, friendlyName, + entitlements, guest, hasPassword, + home, homeAdmin, homeSize, + id, joinedAt, locale, + mailingListActive, mailingListStatus, maxHomeSize, + pin, profile, protected_, + rememberExpiresAt, restricted, roles, + scrobbleTypes, services, subscription, + subscriptionDescription, subscriptions, thumb, + title, twoFactorEnabled, username, + uuid, attributionPartner, pastSubscriptions, + trials); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Anonymous = + new LazySingletonValue<>( + "anonymous", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_BackupCodesCreated = + new LazySingletonValue<>( + "backupCodesCreated", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Confirmed = + new LazySingletonValue<>( + "confirmed", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_EmailOnlyAuth = + new LazySingletonValue<>( + "emailOnlyAuth", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_ExperimentalFeatures = + new LazySingletonValue<>( + "experimentalFeatures", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Guest = + new LazySingletonValue<>( + "guest", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HasPassword = + new LazySingletonValue<>( + "hasPassword", + "true", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Home = + new LazySingletonValue<>( + "home", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HomeAdmin = + new LazySingletonValue<>( + "homeAdmin", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_MailingListActive = + new LazySingletonValue<>( + "mailingListActive", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Protected = + new LazySingletonValue<>( + "protected", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Restricted = + new LazySingletonValue<>( + "restricted", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_TwoFactorEnabled = + new LazySingletonValue<>( + "twoFactorEnabled", + "false", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Protected.java b/src/main/java/dev/plexapi/sdk/models/operations/Protected.java new file mode 100644 index 00000000..fa67680e --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Protected.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * Protected + * + *

Indicates whether the account is protected. + */ +public enum Protected { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + Protected(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (Protected o: Protected.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/RefreshItemsMetadataRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/RefreshItemsMetadataRequest.java index b781395d..27f3e906 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/RefreshItemsMetadataRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/RefreshItemsMetadataRequest.java @@ -586,7 +586,7 @@ public class RefreshItemsMetadataRequest { private Optional agent = Optional.empty(); - private Optional markUpdated = Optional.empty(); + private Optional markUpdated; private Builder() { // force use of static builder() method @@ -838,6 +838,9 @@ public class RefreshItemsMetadataRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (markUpdated == null) { + markUpdated = _SINGLETON_VALUE_MarkUpdated.value(); + } return new RefreshItemsMetadataRequest( accepts, clientIdentifier, product, @@ -853,5 +856,11 @@ public class RefreshItemsMetadataRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_MarkUpdated = + new LazySingletonValue<>( + "markUpdated", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/RefreshSectionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/RefreshSectionRequest.java index 58aafb5c..e0a5bf8f 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/RefreshSectionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/RefreshSectionRequest.java @@ -615,7 +615,7 @@ public class RefreshSectionRequest { private Long sectionId; - private Optional force = Optional.empty(); + private Optional force; private Optional path = Optional.empty(); @@ -884,6 +884,9 @@ public class RefreshSectionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } return new RefreshSectionRequest( accepts, clientIdentifier, product, @@ -899,5 +902,11 @@ public class RefreshSectionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/ReportRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/ReportRequest.java index 2e308cc0..69fe3880 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/ReportRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/ReportRequest.java @@ -1100,11 +1100,11 @@ public class ReportRequest { private Optional duration = Optional.empty(); - private Optional continuing = Optional.empty(); + private Optional continuing; private Optional updated = Optional.empty(); - private Optional offline = Optional.empty(); + private Optional offline; private Optional timeToFirstFrame = Optional.empty(); @@ -1620,6 +1620,12 @@ public class ReportRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (continuing == null) { + continuing = _SINGLETON_VALUE_Continuing.value(); + } + if (offline == null) { + offline = _SINGLETON_VALUE_Offline.value(); + } return new ReportRequest( accepts, clientIdentifier, product, @@ -1639,5 +1645,17 @@ public class ReportRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Continuing = + new LazySingletonValue<>( + "continuing", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Offline = + new LazySingletonValue<>( + "offline", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Restricted.java b/src/main/java/dev/plexapi/sdk/models/operations/Restricted.java new file mode 100644 index 00000000..38a741fd --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Restricted.java @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * Restricted + * + *

Indicates if the user has restricted access. + */ +public enum Restricted { + Disable(0), + Enable(1); + + @JsonValue + private final int value; + + Restricted(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (Restricted o: Restricted.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Server.java b/src/main/java/dev/plexapi/sdk/models/operations/Server.java new file mode 100644 index 00000000..dbf3d23c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Server.java @@ -0,0 +1,483 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; + + +public class Server { + /** + * Unique ID of the server of the connected user + */ + @JsonProperty("id") + private long id; + + /** + * ID of the actual Plex server. + */ + @JsonProperty("serverId") + private long serverId; + + /** + * Machine identifier of the Plex server. + */ + @JsonProperty("machineIdentifier") + private String machineIdentifier; + + /** + * Name of the Plex server of the connected user. + */ + @JsonProperty("name") + private String name; + + /** + * Unix epoch datetime in seconds + */ + @JsonProperty("lastSeenAt") + private long lastSeenAt; + + /** + * Number of libraries in the server this user has access to. + */ + @JsonProperty("numLibraries") + private long numLibraries; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("allLibraries") + private Optional allLibraries; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("owned") + private Optional owned; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("pending") + private Optional pending; + + @JsonCreator + public Server( + @JsonProperty("id") long id, + @JsonProperty("serverId") long serverId, + @JsonProperty("machineIdentifier") String machineIdentifier, + @JsonProperty("name") String name, + @JsonProperty("lastSeenAt") long lastSeenAt, + @JsonProperty("numLibraries") long numLibraries, + @JsonProperty("allLibraries") Optional allLibraries, + @JsonProperty("owned") Optional owned, + @JsonProperty("pending") Optional pending) { + Utils.checkNotNull(id, "id"); + Utils.checkNotNull(serverId, "serverId"); + Utils.checkNotNull(machineIdentifier, "machineIdentifier"); + Utils.checkNotNull(name, "name"); + Utils.checkNotNull(lastSeenAt, "lastSeenAt"); + Utils.checkNotNull(numLibraries, "numLibraries"); + Utils.checkNotNull(allLibraries, "allLibraries"); + Utils.checkNotNull(owned, "owned"); + Utils.checkNotNull(pending, "pending"); + this.id = id; + this.serverId = serverId; + this.machineIdentifier = machineIdentifier; + this.name = name; + this.lastSeenAt = lastSeenAt; + this.numLibraries = numLibraries; + this.allLibraries = allLibraries; + this.owned = owned; + this.pending = pending; + } + + public Server( + long id, + long serverId, + String machineIdentifier, + String name, + long lastSeenAt, + long numLibraries) { + this(id, serverId, machineIdentifier, + name, lastSeenAt, numLibraries, + Optional.empty(), Optional.empty(), Optional.empty()); + } + + /** + * Unique ID of the server of the connected user + */ + @JsonIgnore + public long id() { + return id; + } + + /** + * ID of the actual Plex server. + */ + @JsonIgnore + public long serverId() { + return serverId; + } + + /** + * Machine identifier of the Plex server. + */ + @JsonIgnore + public String machineIdentifier() { + return machineIdentifier; + } + + /** + * Name of the Plex server of the connected user. + */ + @JsonIgnore + public String name() { + return name; + } + + /** + * Unix epoch datetime in seconds + */ + @JsonIgnore + public long lastSeenAt() { + return lastSeenAt; + } + + /** + * Number of libraries in the server this user has access to. + */ + @JsonIgnore + public long numLibraries() { + return numLibraries; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional allLibraries() { + return (Optional) allLibraries; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional owned() { + return (Optional) owned; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional pending() { + return (Optional) pending; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Unique ID of the server of the connected user + */ + public Server withId(long id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + /** + * ID of the actual Plex server. + */ + public Server withServerId(long serverId) { + Utils.checkNotNull(serverId, "serverId"); + this.serverId = serverId; + return this; + } + + /** + * Machine identifier of the Plex server. + */ + public Server withMachineIdentifier(String machineIdentifier) { + Utils.checkNotNull(machineIdentifier, "machineIdentifier"); + this.machineIdentifier = machineIdentifier; + return this; + } + + /** + * Name of the Plex server of the connected user. + */ + public Server withName(String name) { + Utils.checkNotNull(name, "name"); + this.name = name; + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public Server withLastSeenAt(long lastSeenAt) { + Utils.checkNotNull(lastSeenAt, "lastSeenAt"); + this.lastSeenAt = lastSeenAt; + return this; + } + + /** + * Number of libraries in the server this user has access to. + */ + public Server withNumLibraries(long numLibraries) { + Utils.checkNotNull(numLibraries, "numLibraries"); + this.numLibraries = numLibraries; + return this; + } + + public Server withAllLibraries(AllLibraries allLibraries) { + Utils.checkNotNull(allLibraries, "allLibraries"); + this.allLibraries = Optional.ofNullable(allLibraries); + return this; + } + + + public Server withAllLibraries(Optional allLibraries) { + Utils.checkNotNull(allLibraries, "allLibraries"); + this.allLibraries = allLibraries; + return this; + } + + public Server withOwned(Owned owned) { + Utils.checkNotNull(owned, "owned"); + this.owned = Optional.ofNullable(owned); + return this; + } + + + public Server withOwned(Optional owned) { + Utils.checkNotNull(owned, "owned"); + this.owned = owned; + return this; + } + + public Server withPending(Pending pending) { + Utils.checkNotNull(pending, "pending"); + this.pending = Optional.ofNullable(pending); + return this; + } + + + public Server withPending(Optional pending) { + Utils.checkNotNull(pending, "pending"); + this.pending = pending; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Server other = (Server) o; + return + Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.serverId, other.serverId) && + Utils.enhancedDeepEquals(this.machineIdentifier, other.machineIdentifier) && + Utils.enhancedDeepEquals(this.name, other.name) && + Utils.enhancedDeepEquals(this.lastSeenAt, other.lastSeenAt) && + Utils.enhancedDeepEquals(this.numLibraries, other.numLibraries) && + Utils.enhancedDeepEquals(this.allLibraries, other.allLibraries) && + Utils.enhancedDeepEquals(this.owned, other.owned) && + Utils.enhancedDeepEquals(this.pending, other.pending); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id, serverId, machineIdentifier, + name, lastSeenAt, numLibraries, + allLibraries, owned, pending); + } + + @Override + public String toString() { + return Utils.toString(Server.class, + "id", id, + "serverId", serverId, + "machineIdentifier", machineIdentifier, + "name", name, + "lastSeenAt", lastSeenAt, + "numLibraries", numLibraries, + "allLibraries", allLibraries, + "owned", owned, + "pending", pending); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Long id; + + private Long serverId; + + private String machineIdentifier; + + private String name; + + private Long lastSeenAt; + + private Long numLibraries; + + private Optional allLibraries; + + private Optional owned; + + private Optional pending; + + private Builder() { + // force use of static builder() method + } + + + /** + * Unique ID of the server of the connected user + */ + public Builder id(long id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + + /** + * ID of the actual Plex server. + */ + public Builder serverId(long serverId) { + Utils.checkNotNull(serverId, "serverId"); + this.serverId = serverId; + return this; + } + + + /** + * Machine identifier of the Plex server. + */ + public Builder machineIdentifier(String machineIdentifier) { + Utils.checkNotNull(machineIdentifier, "machineIdentifier"); + this.machineIdentifier = machineIdentifier; + return this; + } + + + /** + * Name of the Plex server of the connected user. + */ + public Builder name(String name) { + Utils.checkNotNull(name, "name"); + this.name = name; + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public Builder lastSeenAt(long lastSeenAt) { + Utils.checkNotNull(lastSeenAt, "lastSeenAt"); + this.lastSeenAt = lastSeenAt; + return this; + } + + + /** + * Number of libraries in the server this user has access to. + */ + public Builder numLibraries(long numLibraries) { + Utils.checkNotNull(numLibraries, "numLibraries"); + this.numLibraries = numLibraries; + return this; + } + + + public Builder allLibraries(AllLibraries allLibraries) { + Utils.checkNotNull(allLibraries, "allLibraries"); + this.allLibraries = Optional.ofNullable(allLibraries); + return this; + } + + public Builder allLibraries(Optional allLibraries) { + Utils.checkNotNull(allLibraries, "allLibraries"); + this.allLibraries = allLibraries; + return this; + } + + + public Builder owned(Owned owned) { + Utils.checkNotNull(owned, "owned"); + this.owned = Optional.ofNullable(owned); + return this; + } + + public Builder owned(Optional owned) { + Utils.checkNotNull(owned, "owned"); + this.owned = owned; + return this; + } + + + public Builder pending(Pending pending) { + Utils.checkNotNull(pending, "pending"); + this.pending = Optional.ofNullable(pending); + return this; + } + + public Builder pending(Optional pending) { + Utils.checkNotNull(pending, "pending"); + this.pending = pending; + return this; + } + + public Server build() { + if (allLibraries == null) { + allLibraries = _SINGLETON_VALUE_AllLibraries.value(); + } + if (owned == null) { + owned = _SINGLETON_VALUE_Owned.value(); + } + if (pending == null) { + pending = _SINGLETON_VALUE_Pending.value(); + } + + return new Server( + id, serverId, machineIdentifier, + name, lastSeenAt, numLibraries, + allLibraries, owned, pending); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_AllLibraries = + new LazySingletonValue<>( + "allLibraries", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Owned = + new LazySingletonValue<>( + "owned", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Pending = + new LazySingletonValue<>( + "pending", + "0", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Services.java b/src/main/java/dev/plexapi/sdk/models/operations/Services.java new file mode 100644 index 00000000..2d94e2ee --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Services.java @@ -0,0 +1,247 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class Services { + + @JsonProperty("identifier") + private String identifier; + + + @JsonProperty("endpoint") + private String endpoint; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("token") + private Optional token; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("secret") + private Optional secret; + + + @JsonProperty("status") + private Status status; + + @JsonCreator + public Services( + @JsonProperty("identifier") String identifier, + @JsonProperty("endpoint") String endpoint, + @JsonProperty("token") Optional token, + @JsonProperty("secret") Optional secret, + @JsonProperty("status") Status status) { + Utils.checkNotNull(identifier, "identifier"); + Utils.checkNotNull(endpoint, "endpoint"); + Utils.checkNotNull(token, "token"); + Utils.checkNotNull(secret, "secret"); + Utils.checkNotNull(status, "status"); + this.identifier = identifier; + this.endpoint = endpoint; + this.token = token; + this.secret = secret; + this.status = status; + } + + public Services( + String identifier, + String endpoint, + Status status) { + this(identifier, endpoint, Optional.empty(), + Optional.empty(), status); + } + + @JsonIgnore + public String identifier() { + return identifier; + } + + @JsonIgnore + public String endpoint() { + return endpoint; + } + + @JsonIgnore + public Optional token() { + return token; + } + + @JsonIgnore + public Optional secret() { + return secret; + } + + @JsonIgnore + public Status status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public Services withIdentifier(String identifier) { + Utils.checkNotNull(identifier, "identifier"); + this.identifier = identifier; + return this; + } + + public Services withEndpoint(String endpoint) { + Utils.checkNotNull(endpoint, "endpoint"); + this.endpoint = endpoint; + return this; + } + + public Services withToken(String token) { + Utils.checkNotNull(token, "token"); + this.token = Optional.ofNullable(token); + return this; + } + + + public Services withToken(Optional token) { + Utils.checkNotNull(token, "token"); + this.token = token; + return this; + } + + public Services withSecret(String secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = Optional.ofNullable(secret); + return this; + } + + + public Services withSecret(Optional secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = secret; + return this; + } + + public Services withStatus(Status status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Services other = (Services) o; + return + Utils.enhancedDeepEquals(this.identifier, other.identifier) && + Utils.enhancedDeepEquals(this.endpoint, other.endpoint) && + Utils.enhancedDeepEquals(this.token, other.token) && + Utils.enhancedDeepEquals(this.secret, other.secret) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + identifier, endpoint, token, + secret, status); + } + + @Override + public String toString() { + return Utils.toString(Services.class, + "identifier", identifier, + "endpoint", endpoint, + "token", token, + "secret", secret, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String identifier; + + private String endpoint; + + private Optional token = Optional.empty(); + + private Optional secret = Optional.empty(); + + private Status status; + + private Builder() { + // force use of static builder() method + } + + + public Builder identifier(String identifier) { + Utils.checkNotNull(identifier, "identifier"); + this.identifier = identifier; + return this; + } + + + public Builder endpoint(String endpoint) { + Utils.checkNotNull(endpoint, "endpoint"); + this.endpoint = endpoint; + return this; + } + + + public Builder token(String token) { + Utils.checkNotNull(token, "token"); + this.token = Optional.ofNullable(token); + return this; + } + + public Builder token(Optional token) { + Utils.checkNotNull(token, "token"); + this.token = token; + return this; + } + + + public Builder secret(String secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = Optional.ofNullable(secret); + return this; + } + + public Builder secret(Optional secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = secret; + return this; + } + + + public Builder status(Status status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public Services build() { + + return new Services( + identifier, endpoint, token, + secret, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/SetStreamSelectionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/SetStreamSelectionRequest.java index 6be77a7b..08d7e23d 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/SetStreamSelectionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/SetStreamSelectionRequest.java @@ -657,7 +657,7 @@ public class SetStreamSelectionRequest { private Optional subtitleStreamID = Optional.empty(); - private Optional allParts = Optional.empty(); + private Optional allParts; private Builder() { // force use of static builder() method @@ -943,6 +943,9 @@ public class SetStreamSelectionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (allParts == null) { + allParts = _SINGLETON_VALUE_AllParts.value(); + } return new SetStreamSelectionRequest( accepts, clientIdentifier, product, @@ -958,5 +961,11 @@ public class SetStreamSelectionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AllParts = + new LazySingletonValue<>( + "allParts", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/StartBifGenerationRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/StartBifGenerationRequest.java index 23903552..f23f8eb8 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/StartBifGenerationRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/StartBifGenerationRequest.java @@ -557,7 +557,7 @@ public class StartBifGenerationRequest { private String ids; - private Optional force = Optional.empty(); + private Optional force; private Builder() { // force use of static builder() method @@ -796,6 +796,9 @@ public class StartBifGenerationRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } return new StartBifGenerationRequest( accepts, clientIdentifier, product, @@ -811,5 +814,11 @@ public class StartBifGenerationRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/StartTaskRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/StartTaskRequest.java index a173682b..ab0b7120 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/StartTaskRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/StartTaskRequest.java @@ -86,8 +86,8 @@ public class StartTaskRequest { /** * The task name */ - @SpeakeasyMetadata("pathParam:style=simple,explode=false,name=task") - private PathParamTask task; + @SpeakeasyMetadata("pathParam:style=simple,explode=false,name=butlerTask") + private PathParamButlerTask butlerTask; @JsonCreator public StartTaskRequest( @@ -102,7 +102,7 @@ public class StartTaskRequest { Optional deviceVendor, Optional deviceName, Optional marketplace, - PathParamTask task) { + PathParamButlerTask butlerTask) { Utils.checkNotNull(accepts, "accepts"); Utils.checkNotNull(clientIdentifier, "clientIdentifier"); Utils.checkNotNull(product, "product"); @@ -114,7 +114,7 @@ public class StartTaskRequest { Utils.checkNotNull(deviceVendor, "deviceVendor"); Utils.checkNotNull(deviceName, "deviceName"); Utils.checkNotNull(marketplace, "marketplace"); - Utils.checkNotNull(task, "task"); + Utils.checkNotNull(butlerTask, "butlerTask"); this.accepts = accepts; this.clientIdentifier = clientIdentifier; this.product = product; @@ -126,15 +126,15 @@ public class StartTaskRequest { this.deviceVendor = deviceVendor; this.deviceName = deviceName; this.marketplace = marketplace; - this.task = task; + this.butlerTask = butlerTask; } public StartTaskRequest( - PathParamTask task) { + PathParamButlerTask butlerTask) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), task); + Optional.empty(), Optional.empty(), butlerTask); } /** @@ -230,8 +230,8 @@ public class StartTaskRequest { * The task name */ @JsonIgnore - public PathParamTask task() { - return task; + public PathParamButlerTask butlerTask() { + return butlerTask; } public static Builder builder() { @@ -451,9 +451,9 @@ public class StartTaskRequest { /** * The task name */ - public StartTaskRequest withTask(PathParamTask task) { - Utils.checkNotNull(task, "task"); - this.task = task; + public StartTaskRequest withButlerTask(PathParamButlerTask butlerTask) { + Utils.checkNotNull(butlerTask, "butlerTask"); + this.butlerTask = butlerTask; return this; } @@ -478,7 +478,7 @@ public class StartTaskRequest { Utils.enhancedDeepEquals(this.deviceVendor, other.deviceVendor) && Utils.enhancedDeepEquals(this.deviceName, other.deviceName) && Utils.enhancedDeepEquals(this.marketplace, other.marketplace) && - Utils.enhancedDeepEquals(this.task, other.task); + Utils.enhancedDeepEquals(this.butlerTask, other.butlerTask); } @Override @@ -487,7 +487,7 @@ public class StartTaskRequest { accepts, clientIdentifier, product, version, platform, platformVersion, device, model, deviceVendor, - deviceName, marketplace, task); + deviceName, marketplace, butlerTask); } @Override @@ -504,7 +504,7 @@ public class StartTaskRequest { "deviceVendor", deviceVendor, "deviceName", deviceName, "marketplace", marketplace, - "task", task); + "butlerTask", butlerTask); } @SuppressWarnings("UnusedReturnValue") @@ -532,7 +532,7 @@ public class StartTaskRequest { private Optional marketplace = Optional.empty(); - private PathParamTask task; + private PathParamButlerTask butlerTask; private Builder() { // force use of static builder() method @@ -751,9 +751,9 @@ public class StartTaskRequest { /** * The task name */ - public Builder task(PathParamTask task) { - Utils.checkNotNull(task, "task"); - this.task = task; + public Builder butlerTask(PathParamButlerTask butlerTask) { + Utils.checkNotNull(butlerTask, "butlerTask"); + this.butlerTask = butlerTask; return this; } @@ -766,7 +766,7 @@ public class StartTaskRequest { accepts, clientIdentifier, product, version, platform, platformVersion, device, model, deviceVendor, - deviceName, marketplace, task); + deviceName, marketplace, butlerTask); } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/StartTranscodeSessionRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/StartTranscodeSessionRequest.java index 6b2a4808..457baa3b 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/StartTranscodeSessionRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/StartTranscodeSessionRequest.java @@ -1751,19 +1751,19 @@ public class StartTranscodeSessionRequest { private Optional audioChannelCount = Optional.empty(); - private Optional autoAdjustQuality = Optional.empty(); + private Optional autoAdjustQuality; - private Optional autoAdjustSubtitle = Optional.empty(); + private Optional autoAdjustSubtitle; - private Optional directPlay = Optional.empty(); + private Optional directPlay; - private Optional directStream = Optional.empty(); + private Optional directStream; - private Optional directStreamAudio = Optional.empty(); + private Optional directStreamAudio; - private Optional disableResolutionRotation = Optional.empty(); + private Optional disableResolutionRotation; - private Optional hasMDE = Optional.empty(); + private Optional hasMDE; private Optional location = Optional.empty(); @@ -2610,6 +2610,27 @@ public class StartTranscodeSessionRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (autoAdjustQuality == null) { + autoAdjustQuality = _SINGLETON_VALUE_AutoAdjustQuality.value(); + } + if (autoAdjustSubtitle == null) { + autoAdjustSubtitle = _SINGLETON_VALUE_AutoAdjustSubtitle.value(); + } + if (directPlay == null) { + directPlay = _SINGLETON_VALUE_DirectPlay.value(); + } + if (directStream == null) { + directStream = _SINGLETON_VALUE_DirectStream.value(); + } + if (directStreamAudio == null) { + directStreamAudio = _SINGLETON_VALUE_DirectStreamAudio.value(); + } + if (disableResolutionRotation == null) { + disableResolutionRotation = _SINGLETON_VALUE_DisableResolutionRotation.value(); + } + if (hasMDE == null) { + hasMDE = _SINGLETON_VALUE_HasMDE.value(); + } return new StartTranscodeSessionRequest( accepts, clientIdentifier, product, @@ -2635,5 +2656,47 @@ public class StartTranscodeSessionRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustQuality = + new LazySingletonValue<>( + "autoAdjustQuality", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustSubtitle = + new LazySingletonValue<>( + "autoAdjustSubtitle", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectPlay = + new LazySingletonValue<>( + "directPlay", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStream = + new LazySingletonValue<>( + "directStream", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStreamAudio = + new LazySingletonValue<>( + "directStreamAudio", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DisableResolutionRotation = + new LazySingletonValue<>( + "disableResolutionRotation", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HasMDE = + new LazySingletonValue<>( + "hasMDE", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Status.java b/src/main/java/dev/plexapi/sdk/models/operations/Status.java index f0ceb30c..559da0ae 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/Status.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/Status.java @@ -3,46 +3,177 @@ */ package dev.plexapi.sdk.models.operations; -import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Objects; import java.util.Optional; /** - * Status + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). * - *

The state of this queue - * - deciding: At least one item is still being decided - * - waiting: At least one item is waiting for transcode and none are currently transcoding - * - processing: At least one item is being transcoded - * - done: All items are available (or potentially expired) - * - error: At least one item has encountered an error + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * */ -public enum Status { - DECIDING("deciding"), - WAITING("waiting"), - PROCESSING("processing"), - DONE("done"), - ERROR("error"); +@JsonDeserialize(using = Status._Deserializer.class) +@JsonSerialize(using = Status._Serializer.class) +public class Status { + + public static final Status Online = new Status("online"); + public static final Status Offline = new Status("offline"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); - @JsonValue private final String value; - Status(String value) { + private Status(String value) { this.value = value; } - + + /** + * Returns a Status with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as Status + */ + public static Status of(String value) { + synchronized (Status.class) { + return values.computeIfAbsent(value, v -> new Status(v)); + } + } + public String value() { return value; } - - public static Optional fromValue(String value) { - for (Status o: Status.values()) { - if (Objects.deepEquals(o.value, value)) { - return Optional.of(o); - } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Status other = (Status) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "Status [value=" + value + "]"; + } + + // return an array just like an enum + public static Status[] values() { + synchronized (Status.class) { + return values.values().toArray(new Status[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("online", Online); + map.put("offline", Offline); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("online", StatusEnum.Online); + map.put("offline", StatusEnum.Offline); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(Status.class); + } + + @Override + public void serialize(Status value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(Status.class); + } + + @Override + public Status deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return Status.of(v); + } + } + + public enum StatusEnum { + + Online("online"), + Offline("offline"),; + + private final String value; + + private StatusEnum(String value) { + this.value = value; + } + + public String value() { + return value; } - return Optional.empty(); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/StopTaskRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/StopTaskRequest.java index 15d45059..420272bf 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/StopTaskRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/StopTaskRequest.java @@ -86,8 +86,8 @@ public class StopTaskRequest { /** * The task name */ - @SpeakeasyMetadata("pathParam:style=simple,explode=false,name=task") - private Task task; + @SpeakeasyMetadata("pathParam:style=simple,explode=false,name=butlerTask") + private ButlerTask butlerTask; @JsonCreator public StopTaskRequest( @@ -102,7 +102,7 @@ public class StopTaskRequest { Optional deviceVendor, Optional deviceName, Optional marketplace, - Task task) { + ButlerTask butlerTask) { Utils.checkNotNull(accepts, "accepts"); Utils.checkNotNull(clientIdentifier, "clientIdentifier"); Utils.checkNotNull(product, "product"); @@ -114,7 +114,7 @@ public class StopTaskRequest { Utils.checkNotNull(deviceVendor, "deviceVendor"); Utils.checkNotNull(deviceName, "deviceName"); Utils.checkNotNull(marketplace, "marketplace"); - Utils.checkNotNull(task, "task"); + Utils.checkNotNull(butlerTask, "butlerTask"); this.accepts = accepts; this.clientIdentifier = clientIdentifier; this.product = product; @@ -126,15 +126,15 @@ public class StopTaskRequest { this.deviceVendor = deviceVendor; this.deviceName = deviceName; this.marketplace = marketplace; - this.task = task; + this.butlerTask = butlerTask; } public StopTaskRequest( - Task task) { + ButlerTask butlerTask) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), task); + Optional.empty(), Optional.empty(), butlerTask); } /** @@ -230,8 +230,8 @@ public class StopTaskRequest { * The task name */ @JsonIgnore - public Task task() { - return task; + public ButlerTask butlerTask() { + return butlerTask; } public static Builder builder() { @@ -451,9 +451,9 @@ public class StopTaskRequest { /** * The task name */ - public StopTaskRequest withTask(Task task) { - Utils.checkNotNull(task, "task"); - this.task = task; + public StopTaskRequest withButlerTask(ButlerTask butlerTask) { + Utils.checkNotNull(butlerTask, "butlerTask"); + this.butlerTask = butlerTask; return this; } @@ -478,7 +478,7 @@ public class StopTaskRequest { Utils.enhancedDeepEquals(this.deviceVendor, other.deviceVendor) && Utils.enhancedDeepEquals(this.deviceName, other.deviceName) && Utils.enhancedDeepEquals(this.marketplace, other.marketplace) && - Utils.enhancedDeepEquals(this.task, other.task); + Utils.enhancedDeepEquals(this.butlerTask, other.butlerTask); } @Override @@ -487,7 +487,7 @@ public class StopTaskRequest { accepts, clientIdentifier, product, version, platform, platformVersion, device, model, deviceVendor, - deviceName, marketplace, task); + deviceName, marketplace, butlerTask); } @Override @@ -504,7 +504,7 @@ public class StopTaskRequest { "deviceVendor", deviceVendor, "deviceName", deviceName, "marketplace", marketplace, - "task", task); + "butlerTask", butlerTask); } @SuppressWarnings("UnusedReturnValue") @@ -532,7 +532,7 @@ public class StopTaskRequest { private Optional marketplace = Optional.empty(); - private Task task; + private ButlerTask butlerTask; private Builder() { // force use of static builder() method @@ -751,9 +751,9 @@ public class StopTaskRequest { /** * The task name */ - public Builder task(Task task) { - Utils.checkNotNull(task, "task"); - this.task = task; + public Builder butlerTask(ButlerTask butlerTask) { + Utils.checkNotNull(butlerTask, "butlerTask"); + this.butlerTask = butlerTask; return this; } @@ -766,7 +766,7 @@ public class StopTaskRequest { accepts, clientIdentifier, product, version, platform, platformVersion, device, model, deviceVendor, - deviceName, marketplace, task); + deviceName, marketplace, butlerTask); } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Subscription.java b/src/main/java/dev/plexapi/sdk/models/operations/Subscription.java new file mode 100644 index 00000000..9f6d680d --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Subscription.java @@ -0,0 +1,438 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + +/** + * Subscription + * + *

If the account's Plex Pass subscription is active + */ +public class Subscription { + /** + * List of features allowed on your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("features") + private Optional> features; + + /** + * If the account's Plex Pass subscription is active + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("active") + private Optional active; + + /** + * Date the account subscribed to Plex Pass + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscribedAt") + private JsonNullable subscribedAt; + + /** + * String representation of subscriptionActive + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("paymentService") + private JsonNullable paymentService; + + /** + * Name of Plex Pass subscription plan + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("plan") + private JsonNullable plan; + + @JsonCreator + public Subscription( + @JsonProperty("features") Optional> features, + @JsonProperty("active") Optional active, + @JsonProperty("subscribedAt") JsonNullable subscribedAt, + @JsonProperty("status") Optional status, + @JsonProperty("paymentService") JsonNullable paymentService, + @JsonProperty("plan") JsonNullable plan) { + Utils.checkNotNull(features, "features"); + Utils.checkNotNull(active, "active"); + Utils.checkNotNull(subscribedAt, "subscribedAt"); + Utils.checkNotNull(status, "status"); + Utils.checkNotNull(paymentService, "paymentService"); + Utils.checkNotNull(plan, "plan"); + this.features = features; + this.active = active; + this.subscribedAt = subscribedAt; + this.status = status; + this.paymentService = paymentService; + this.plan = plan; + } + + public Subscription() { + this(Optional.empty(), Optional.empty(), JsonNullable.undefined(), + Optional.empty(), JsonNullable.undefined(), JsonNullable.undefined()); + } + + /** + * List of features allowed on your Plex Pass subscription + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> features() { + return (Optional>) features; + } + + /** + * If the account's Plex Pass subscription is active + */ + @JsonIgnore + public Optional active() { + return active; + } + + /** + * Date the account subscribed to Plex Pass + */ + @JsonIgnore + public JsonNullable subscribedAt() { + return subscribedAt; + } + + /** + * String representation of subscriptionActive + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional status() { + return (Optional) status; + } + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonIgnore + public JsonNullable paymentService() { + return paymentService; + } + + /** + * Name of Plex Pass subscription plan + */ + @JsonIgnore + public JsonNullable plan() { + return plan; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Subscription withFeatures(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Subscription withFeatures(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Subscription withActive(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Subscription withActive(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Subscription withSubscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Subscription withSubscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + /** + * String representation of subscriptionActive + */ + public Subscription withStatus(PostUsersSignInDataStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + /** + * String representation of subscriptionActive + */ + public Subscription withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Subscription withPaymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Subscription withPaymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Subscription withPlan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Subscription withPlan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Subscription other = (Subscription) o; + return + Utils.enhancedDeepEquals(this.features, other.features) && + Utils.enhancedDeepEquals(this.active, other.active) && + Utils.enhancedDeepEquals(this.subscribedAt, other.subscribedAt) && + Utils.enhancedDeepEquals(this.status, other.status) && + Utils.enhancedDeepEquals(this.paymentService, other.paymentService) && + Utils.enhancedDeepEquals(this.plan, other.plan); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + features, active, subscribedAt, + status, paymentService, plan); + } + + @Override + public String toString() { + return Utils.toString(Subscription.class, + "features", features, + "active", active, + "subscribedAt", subscribedAt, + "status", status, + "paymentService", paymentService, + "plan", plan); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> features = Optional.empty(); + + private Optional active = Optional.empty(); + + private JsonNullable subscribedAt = JsonNullable.undefined(); + + private Optional status = Optional.empty(); + + private JsonNullable paymentService = JsonNullable.undefined(); + + private JsonNullable plan = JsonNullable.undefined(); + + private Builder() { + // force use of static builder() method + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + + /** + * String representation of subscriptionActive + */ + public Builder status(PostUsersSignInDataStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + /** + * String representation of subscriptionActive + */ + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + public Subscription build() { + + return new Subscription( + features, active, subscribedAt, + status, paymentService, plan); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Task.java b/src/main/java/dev/plexapi/sdk/models/operations/Task.java deleted file mode 100644 index 221b8e0c..00000000 --- a/src/main/java/dev/plexapi/sdk/models/operations/Task.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ -package dev.plexapi.sdk.models.operations; - -import com.fasterxml.jackson.annotation.JsonValue; -import java.lang.String; -import java.util.Objects; -import java.util.Optional; - -/** - * Task - * - *

The task name - */ -public enum Task { - AUTOMATIC_UPDATES("AutomaticUpdates"), - BACKUP_DATABASE("BackupDatabase"), - BUTLER_TASK_GENERATE_AD_MARKERS("ButlerTaskGenerateAdMarkers"), - BUTLER_TASK_GENERATE_CREDITS_MARKERS("ButlerTaskGenerateCreditsMarkers"), - BUTLER_TASK_GENERATE_INTRO_MARKERS("ButlerTaskGenerateIntroMarkers"), - BUTLER_TASK_GENERATE_VOICE_ACTIVITY("ButlerTaskGenerateVoiceActivity"), - CLEAN_OLD_BUNDLES("CleanOldBundles"), - CLEAN_OLD_CACHE_FILES("CleanOldCacheFiles"), - DEEP_MEDIA_ANALYSIS("DeepMediaAnalysis"), - GARBAGE_COLLECT_BLOBS("GarbageCollectBlobs"), - GARBAGE_COLLECT_LIBRARY_MEDIA("GarbageCollectLibraryMedia"), - GENERATE_BLUR_HASHES("GenerateBlurHashes"), - GENERATE_CHAPTER_THUMBS("GenerateChapterThumbs"), - GENERATE_MEDIA_INDEX_FILES("GenerateMediaIndexFiles"), - LOUDNESS_ANALYSIS("LoudnessAnalysis"), - MUSIC_ANALYSIS("MusicAnalysis"), - OPTIMIZE_DATABASE("OptimizeDatabase"), - REFRESH_EPG_GUIDES("RefreshEpgGuides"), - REFRESH_LIBRARIES("RefreshLibraries"), - REFRESH_LOCAL_MEDIA("RefreshLocalMedia"), - REFRESH_PERIODIC_METADATA("RefreshPeriodicMetadata"), - UPGRADE_MEDIA_ANALYSIS("UpgradeMediaAnalysis"); - - @JsonValue - private final String value; - - Task(String value) { - this.value = value; - } - - public String value() { - return value; - } - - public static Optional fromValue(String value) { - for (Task o: Task.values()) { - if (Objects.deepEquals(o.value, value)) { - return Optional.of(o); - } - } - return Optional.empty(); - } -} - diff --git a/src/main/java/dev/plexapi/sdk/models/operations/TranscodeImageRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/TranscodeImageRequest.java index df1aed41..f468c386 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/TranscodeImageRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/TranscodeImageRequest.java @@ -1084,11 +1084,11 @@ public class TranscodeImageRequest { private Optional background = Optional.empty(); - private Optional upscale = Optional.empty(); + private Optional upscale; - private Optional minSize = Optional.empty(); + private Optional minSize; - private Optional rotate = Optional.empty(); + private Optional rotate; private Optional blur = Optional.empty(); @@ -1593,6 +1593,15 @@ public class TranscodeImageRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (upscale == null) { + upscale = _SINGLETON_VALUE_Upscale.value(); + } + if (minSize == null) { + minSize = _SINGLETON_VALUE_MinSize.value(); + } + if (rotate == null) { + rotate = _SINGLETON_VALUE_Rotate.value(); + } return new TranscodeImageRequest( accepts, clientIdentifier, product, @@ -1612,5 +1621,23 @@ public class TranscodeImageRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Upscale = + new LazySingletonValue<>( + "upscale", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_MinSize = + new LazySingletonValue<>( + "minSize", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Rotate = + new LazySingletonValue<>( + "rotate", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesRequest.java index d5498add..71b5bbb4 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/TranscodeSubtitlesRequest.java @@ -1718,19 +1718,19 @@ public class TranscodeSubtitlesRequest { private Optional audioChannelCount = Optional.empty(); - private Optional autoAdjustQuality = Optional.empty(); + private Optional autoAdjustQuality; - private Optional autoAdjustSubtitle = Optional.empty(); + private Optional autoAdjustSubtitle; - private Optional directPlay = Optional.empty(); + private Optional directPlay; - private Optional directStream = Optional.empty(); + private Optional directStream; - private Optional directStreamAudio = Optional.empty(); + private Optional directStreamAudio; - private Optional disableResolutionRotation = Optional.empty(); + private Optional disableResolutionRotation; - private Optional hasMDE = Optional.empty(); + private Optional hasMDE; private Optional location = Optional.empty(); @@ -2567,6 +2567,27 @@ public class TranscodeSubtitlesRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (autoAdjustQuality == null) { + autoAdjustQuality = _SINGLETON_VALUE_AutoAdjustQuality.value(); + } + if (autoAdjustSubtitle == null) { + autoAdjustSubtitle = _SINGLETON_VALUE_AutoAdjustSubtitle.value(); + } + if (directPlay == null) { + directPlay = _SINGLETON_VALUE_DirectPlay.value(); + } + if (directStream == null) { + directStream = _SINGLETON_VALUE_DirectStream.value(); + } + if (directStreamAudio == null) { + directStreamAudio = _SINGLETON_VALUE_DirectStreamAudio.value(); + } + if (disableResolutionRotation == null) { + disableResolutionRotation = _SINGLETON_VALUE_DisableResolutionRotation.value(); + } + if (hasMDE == null) { + hasMDE = _SINGLETON_VALUE_HasMDE.value(); + } return new TranscodeSubtitlesRequest( accepts, clientIdentifier, product, @@ -2591,5 +2612,47 @@ public class TranscodeSubtitlesRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustQuality = + new LazySingletonValue<>( + "autoAdjustQuality", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoAdjustSubtitle = + new LazySingletonValue<>( + "autoAdjustSubtitle", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectPlay = + new LazySingletonValue<>( + "directPlay", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStream = + new LazySingletonValue<>( + "directStream", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DirectStreamAudio = + new LazySingletonValue<>( + "directStreamAudio", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DisableResolutionRotation = + new LazySingletonValue<>( + "disableResolutionRotation", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HasMDE = + new LazySingletonValue<>( + "hasMDE", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/Trials.java b/src/main/java/dev/plexapi/sdk/models/operations/Trials.java new file mode 100644 index 00000000..5a188425 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/Trials.java @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class Trials { + @JsonCreator + public Trials() { + } + + public static Builder builder() { + return new Builder(); + } + + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return true; + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + ); + } + + @Override + public String toString() { + return Utils.toString(Trials.class); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Builder() { + // force use of static builder() method + } + + public Trials build() { + + return new Trials( + ); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/UpdateHubVisibilityRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/UpdateHubVisibilityRequest.java index ba98d9b9..3341c0ae 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/UpdateHubVisibilityRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/UpdateHubVisibilityRequest.java @@ -688,11 +688,11 @@ public class UpdateHubVisibilityRequest { private String identifier; - private Optional promotedToRecommended = Optional.empty(); + private Optional promotedToRecommended; - private Optional promotedToOwnHome = Optional.empty(); + private Optional promotedToOwnHome; - private Optional promotedToSharedHome = Optional.empty(); + private Optional promotedToSharedHome; private Builder() { // force use of static builder() method @@ -988,6 +988,15 @@ public class UpdateHubVisibilityRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (promotedToRecommended == null) { + promotedToRecommended = _SINGLETON_VALUE_PromotedToRecommended.value(); + } + if (promotedToOwnHome == null) { + promotedToOwnHome = _SINGLETON_VALUE_PromotedToOwnHome.value(); + } + if (promotedToSharedHome == null) { + promotedToSharedHome = _SINGLETON_VALUE_PromotedToSharedHome.value(); + } return new UpdateHubVisibilityRequest( accepts, clientIdentifier, product, @@ -1004,5 +1013,23 @@ public class UpdateHubVisibilityRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_PromotedToRecommended = + new LazySingletonValue<>( + "promotedToRecommended", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_PromotedToOwnHome = + new LazySingletonValue<>( + "promotedToOwnHome", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_PromotedToSharedHome = + new LazySingletonValue<>( + "promotedToSharedHome", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/UpdateItemsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/UpdateItemsRequest.java index b2bb2314..6cbdfaee 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/UpdateItemsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/UpdateItemsRequest.java @@ -1035,7 +1035,7 @@ public class UpdateItemsRequest { private Optional fieldValue = Optional.empty(); - private Optional fieldLocked = Optional.empty(); + private Optional fieldLocked; private Optional titleValue = Optional.empty(); @@ -1523,6 +1523,9 @@ public class UpdateItemsRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (fieldLocked == null) { + fieldLocked = _SINGLETON_VALUE_FieldLocked.value(); + } return new UpdateItemsRequest( accepts, clientIdentifier, product, @@ -1542,5 +1545,11 @@ public class UpdateItemsRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_FieldLocked = + new LazySingletonValue<>( + "field.locked", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistRequest.java index dfb1b76b..1b0dc4b3 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/UploadPlaylistRequest.java @@ -585,7 +585,7 @@ public class UploadPlaylistRequest { private Optional path = Optional.empty(); - private Optional force = Optional.empty(); + private Optional force; private Builder() { // force use of static builder() method @@ -842,6 +842,9 @@ public class UploadPlaylistRequest { if (accepts == null) { accepts = _SINGLETON_VALUE_Accepts.value(); } + if (force == null) { + force = _SINGLETON_VALUE_Force.value(); + } return new UploadPlaylistRequest( accepts, clientIdentifier, product, @@ -857,5 +860,11 @@ public class UploadPlaylistRequest { "accepts", "\"application/xml\"", new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Force = + new LazySingletonValue<>( + "force", + "0", + new TypeReference>() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/operations/User.java b/src/main/java/dev/plexapi/sdk/models/operations/User.java new file mode 100644 index 00000000..f0691f42 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/User.java @@ -0,0 +1,1117 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + + +public class User { + /** + * User's unique ID. + */ + @JsonProperty("id") + private long id; + + /** + * User's display name. + */ + @JsonProperty("title") + private String title; + + /** + * User's username. + */ + @JsonProperty("username") + private String username; + + /** + * User's email address. + */ + @JsonProperty("email") + private String email; + + /** + * ID of the user's recommendation playlist. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("recommendationsPlaylistId") + private JsonNullable recommendationsPlaylistId; + + /** + * URL to the user's avatar image. + */ + @JsonProperty("thumb") + private String thumb; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("protected") + private Optional protected_; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("home") + private Optional home; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("allowTuners") + private Optional allowTuners; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("allowSync") + private Optional allowSync; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("allowCameraUpload") + private Optional allowCameraUpload; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("allowChannels") + private Optional allowChannels; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("allowSubtitleAdmin") + private Optional allowSubtitleAdmin; + + /** + * Filters applied for all content. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("filterAll") + private JsonNullable filterAll; + + /** + * Filters applied for movies. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("filterMovies") + private JsonNullable filterMovies; + + /** + * Filters applied for music. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("filterMusic") + private JsonNullable filterMusic; + + /** + * Filters applied for photos. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("filterPhotos") + private JsonNullable filterPhotos; + + /** + * Filters applied for television. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("filterTelevision") + private Optional filterTelevision; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("restricted") + private Optional restricted; + + /** + * List of servers owned by the user. + */ + @JsonProperty("Server") + private List server; + + @JsonCreator + public User( + @JsonProperty("id") long id, + @JsonProperty("title") String title, + @JsonProperty("username") String username, + @JsonProperty("email") String email, + @JsonProperty("recommendationsPlaylistId") JsonNullable recommendationsPlaylistId, + @JsonProperty("thumb") String thumb, + @JsonProperty("protected") Optional protected_, + @JsonProperty("home") Optional home, + @JsonProperty("allowTuners") Optional allowTuners, + @JsonProperty("allowSync") Optional allowSync, + @JsonProperty("allowCameraUpload") Optional allowCameraUpload, + @JsonProperty("allowChannels") Optional allowChannels, + @JsonProperty("allowSubtitleAdmin") Optional allowSubtitleAdmin, + @JsonProperty("filterAll") JsonNullable filterAll, + @JsonProperty("filterMovies") JsonNullable filterMovies, + @JsonProperty("filterMusic") JsonNullable filterMusic, + @JsonProperty("filterPhotos") JsonNullable filterPhotos, + @JsonProperty("filterTelevision") Optional filterTelevision, + @JsonProperty("restricted") Optional restricted, + @JsonProperty("Server") List server) { + Utils.checkNotNull(id, "id"); + Utils.checkNotNull(title, "title"); + Utils.checkNotNull(username, "username"); + Utils.checkNotNull(email, "email"); + Utils.checkNotNull(recommendationsPlaylistId, "recommendationsPlaylistId"); + Utils.checkNotNull(thumb, "thumb"); + Utils.checkNotNull(protected_, "protected_"); + Utils.checkNotNull(home, "home"); + Utils.checkNotNull(allowTuners, "allowTuners"); + Utils.checkNotNull(allowSync, "allowSync"); + Utils.checkNotNull(allowCameraUpload, "allowCameraUpload"); + Utils.checkNotNull(allowChannels, "allowChannels"); + Utils.checkNotNull(allowSubtitleAdmin, "allowSubtitleAdmin"); + Utils.checkNotNull(filterAll, "filterAll"); + Utils.checkNotNull(filterMovies, "filterMovies"); + Utils.checkNotNull(filterMusic, "filterMusic"); + Utils.checkNotNull(filterPhotos, "filterPhotos"); + Utils.checkNotNull(filterTelevision, "filterTelevision"); + Utils.checkNotNull(restricted, "restricted"); + Utils.checkNotNull(server, "server"); + this.id = id; + this.title = title; + this.username = username; + this.email = email; + this.recommendationsPlaylistId = recommendationsPlaylistId; + this.thumb = thumb; + this.protected_ = protected_; + this.home = home; + this.allowTuners = allowTuners; + this.allowSync = allowSync; + this.allowCameraUpload = allowCameraUpload; + this.allowChannels = allowChannels; + this.allowSubtitleAdmin = allowSubtitleAdmin; + this.filterAll = filterAll; + this.filterMovies = filterMovies; + this.filterMusic = filterMusic; + this.filterPhotos = filterPhotos; + this.filterTelevision = filterTelevision; + this.restricted = restricted; + this.server = server; + } + + public User( + long id, + String title, + String username, + String email, + String thumb, + List server) { + this(id, title, username, + email, JsonNullable.undefined(), thumb, + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), JsonNullable.undefined(), JsonNullable.undefined(), + JsonNullable.undefined(), JsonNullable.undefined(), Optional.empty(), + Optional.empty(), server); + } + + /** + * User's unique ID. + */ + @JsonIgnore + public long id() { + return id; + } + + /** + * User's display name. + */ + @JsonIgnore + public String title() { + return title; + } + + /** + * User's username. + */ + @JsonIgnore + public String username() { + return username; + } + + /** + * User's email address. + */ + @JsonIgnore + public String email() { + return email; + } + + /** + * ID of the user's recommendation playlist. + */ + @JsonIgnore + public JsonNullable recommendationsPlaylistId() { + return recommendationsPlaylistId; + } + + /** + * URL to the user's avatar image. + */ + @JsonIgnore + public String thumb() { + return thumb; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional protected_() { + return (Optional) protected_; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional home() { + return (Optional) home; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional allowTuners() { + return (Optional) allowTuners; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional allowSync() { + return (Optional) allowSync; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional allowCameraUpload() { + return (Optional) allowCameraUpload; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional allowChannels() { + return (Optional) allowChannels; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional allowSubtitleAdmin() { + return (Optional) allowSubtitleAdmin; + } + + /** + * Filters applied for all content. + */ + @JsonIgnore + public JsonNullable filterAll() { + return filterAll; + } + + /** + * Filters applied for movies. + */ + @JsonIgnore + public JsonNullable filterMovies() { + return filterMovies; + } + + /** + * Filters applied for music. + */ + @JsonIgnore + public JsonNullable filterMusic() { + return filterMusic; + } + + /** + * Filters applied for photos. + */ + @JsonIgnore + public JsonNullable filterPhotos() { + return filterPhotos; + } + + /** + * Filters applied for television. + */ + @JsonIgnore + public Optional filterTelevision() { + return filterTelevision; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional restricted() { + return (Optional) restricted; + } + + /** + * List of servers owned by the user. + */ + @JsonIgnore + public List server() { + return server; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * User's unique ID. + */ + public User withId(long id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + /** + * User's display name. + */ + public User withTitle(String title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + /** + * User's username. + */ + public User withUsername(String username) { + Utils.checkNotNull(username, "username"); + this.username = username; + return this; + } + + /** + * User's email address. + */ + public User withEmail(String email) { + Utils.checkNotNull(email, "email"); + this.email = email; + return this; + } + + /** + * ID of the user's recommendation playlist. + */ + public User withRecommendationsPlaylistId(String recommendationsPlaylistId) { + Utils.checkNotNull(recommendationsPlaylistId, "recommendationsPlaylistId"); + this.recommendationsPlaylistId = JsonNullable.of(recommendationsPlaylistId); + return this; + } + + /** + * ID of the user's recommendation playlist. + */ + public User withRecommendationsPlaylistId(JsonNullable recommendationsPlaylistId) { + Utils.checkNotNull(recommendationsPlaylistId, "recommendationsPlaylistId"); + this.recommendationsPlaylistId = recommendationsPlaylistId; + return this; + } + + /** + * URL to the user's avatar image. + */ + public User withThumb(String thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = thumb; + return this; + } + + public User withProtected(Protected protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = Optional.ofNullable(protected_); + return this; + } + + + public User withProtected(Optional protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = protected_; + return this; + } + + public User withHome(Home home) { + Utils.checkNotNull(home, "home"); + this.home = Optional.ofNullable(home); + return this; + } + + + public User withHome(Optional home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + public User withAllowTuners(AllowTuners allowTuners) { + Utils.checkNotNull(allowTuners, "allowTuners"); + this.allowTuners = Optional.ofNullable(allowTuners); + return this; + } + + + public User withAllowTuners(Optional allowTuners) { + Utils.checkNotNull(allowTuners, "allowTuners"); + this.allowTuners = allowTuners; + return this; + } + + public User withAllowSync(AllowSync allowSync) { + Utils.checkNotNull(allowSync, "allowSync"); + this.allowSync = Optional.ofNullable(allowSync); + return this; + } + + + public User withAllowSync(Optional allowSync) { + Utils.checkNotNull(allowSync, "allowSync"); + this.allowSync = allowSync; + return this; + } + + public User withAllowCameraUpload(AllowCameraUpload allowCameraUpload) { + Utils.checkNotNull(allowCameraUpload, "allowCameraUpload"); + this.allowCameraUpload = Optional.ofNullable(allowCameraUpload); + return this; + } + + + public User withAllowCameraUpload(Optional allowCameraUpload) { + Utils.checkNotNull(allowCameraUpload, "allowCameraUpload"); + this.allowCameraUpload = allowCameraUpload; + return this; + } + + public User withAllowChannels(AllowChannels allowChannels) { + Utils.checkNotNull(allowChannels, "allowChannels"); + this.allowChannels = Optional.ofNullable(allowChannels); + return this; + } + + + public User withAllowChannels(Optional allowChannels) { + Utils.checkNotNull(allowChannels, "allowChannels"); + this.allowChannels = allowChannels; + return this; + } + + public User withAllowSubtitleAdmin(AllowSubtitleAdmin allowSubtitleAdmin) { + Utils.checkNotNull(allowSubtitleAdmin, "allowSubtitleAdmin"); + this.allowSubtitleAdmin = Optional.ofNullable(allowSubtitleAdmin); + return this; + } + + + public User withAllowSubtitleAdmin(Optional allowSubtitleAdmin) { + Utils.checkNotNull(allowSubtitleAdmin, "allowSubtitleAdmin"); + this.allowSubtitleAdmin = allowSubtitleAdmin; + return this; + } + + /** + * Filters applied for all content. + */ + public User withFilterAll(String filterAll) { + Utils.checkNotNull(filterAll, "filterAll"); + this.filterAll = JsonNullable.of(filterAll); + return this; + } + + /** + * Filters applied for all content. + */ + public User withFilterAll(JsonNullable filterAll) { + Utils.checkNotNull(filterAll, "filterAll"); + this.filterAll = filterAll; + return this; + } + + /** + * Filters applied for movies. + */ + public User withFilterMovies(String filterMovies) { + Utils.checkNotNull(filterMovies, "filterMovies"); + this.filterMovies = JsonNullable.of(filterMovies); + return this; + } + + /** + * Filters applied for movies. + */ + public User withFilterMovies(JsonNullable filterMovies) { + Utils.checkNotNull(filterMovies, "filterMovies"); + this.filterMovies = filterMovies; + return this; + } + + /** + * Filters applied for music. + */ + public User withFilterMusic(String filterMusic) { + Utils.checkNotNull(filterMusic, "filterMusic"); + this.filterMusic = JsonNullable.of(filterMusic); + return this; + } + + /** + * Filters applied for music. + */ + public User withFilterMusic(JsonNullable filterMusic) { + Utils.checkNotNull(filterMusic, "filterMusic"); + this.filterMusic = filterMusic; + return this; + } + + /** + * Filters applied for photos. + */ + public User withFilterPhotos(String filterPhotos) { + Utils.checkNotNull(filterPhotos, "filterPhotos"); + this.filterPhotos = JsonNullable.of(filterPhotos); + return this; + } + + /** + * Filters applied for photos. + */ + public User withFilterPhotos(JsonNullable filterPhotos) { + Utils.checkNotNull(filterPhotos, "filterPhotos"); + this.filterPhotos = filterPhotos; + return this; + } + + /** + * Filters applied for television. + */ + public User withFilterTelevision(String filterTelevision) { + Utils.checkNotNull(filterTelevision, "filterTelevision"); + this.filterTelevision = Optional.ofNullable(filterTelevision); + return this; + } + + + /** + * Filters applied for television. + */ + public User withFilterTelevision(Optional filterTelevision) { + Utils.checkNotNull(filterTelevision, "filterTelevision"); + this.filterTelevision = filterTelevision; + return this; + } + + public User withRestricted(Restricted restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = Optional.ofNullable(restricted); + return this; + } + + + public User withRestricted(Optional restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = restricted; + return this; + } + + /** + * List of servers owned by the user. + */ + public User withServer(List server) { + Utils.checkNotNull(server, "server"); + this.server = server; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + User other = (User) o; + return + Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.title, other.title) && + Utils.enhancedDeepEquals(this.username, other.username) && + Utils.enhancedDeepEquals(this.email, other.email) && + Utils.enhancedDeepEquals(this.recommendationsPlaylistId, other.recommendationsPlaylistId) && + Utils.enhancedDeepEquals(this.thumb, other.thumb) && + Utils.enhancedDeepEquals(this.protected_, other.protected_) && + Utils.enhancedDeepEquals(this.home, other.home) && + Utils.enhancedDeepEquals(this.allowTuners, other.allowTuners) && + Utils.enhancedDeepEquals(this.allowSync, other.allowSync) && + Utils.enhancedDeepEquals(this.allowCameraUpload, other.allowCameraUpload) && + Utils.enhancedDeepEquals(this.allowChannels, other.allowChannels) && + Utils.enhancedDeepEquals(this.allowSubtitleAdmin, other.allowSubtitleAdmin) && + Utils.enhancedDeepEquals(this.filterAll, other.filterAll) && + Utils.enhancedDeepEquals(this.filterMovies, other.filterMovies) && + Utils.enhancedDeepEquals(this.filterMusic, other.filterMusic) && + Utils.enhancedDeepEquals(this.filterPhotos, other.filterPhotos) && + Utils.enhancedDeepEquals(this.filterTelevision, other.filterTelevision) && + Utils.enhancedDeepEquals(this.restricted, other.restricted) && + Utils.enhancedDeepEquals(this.server, other.server); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id, title, username, + email, recommendationsPlaylistId, thumb, + protected_, home, allowTuners, + allowSync, allowCameraUpload, allowChannels, + allowSubtitleAdmin, filterAll, filterMovies, + filterMusic, filterPhotos, filterTelevision, + restricted, server); + } + + @Override + public String toString() { + return Utils.toString(User.class, + "id", id, + "title", title, + "username", username, + "email", email, + "recommendationsPlaylistId", recommendationsPlaylistId, + "thumb", thumb, + "protected_", protected_, + "home", home, + "allowTuners", allowTuners, + "allowSync", allowSync, + "allowCameraUpload", allowCameraUpload, + "allowChannels", allowChannels, + "allowSubtitleAdmin", allowSubtitleAdmin, + "filterAll", filterAll, + "filterMovies", filterMovies, + "filterMusic", filterMusic, + "filterPhotos", filterPhotos, + "filterTelevision", filterTelevision, + "restricted", restricted, + "server", server); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Long id; + + private String title; + + private String username; + + private String email; + + private JsonNullable recommendationsPlaylistId = JsonNullable.undefined(); + + private String thumb; + + private Optional protected_; + + private Optional home; + + private Optional allowTuners; + + private Optional allowSync; + + private Optional allowCameraUpload; + + private Optional allowChannels; + + private Optional allowSubtitleAdmin; + + private JsonNullable filterAll = JsonNullable.undefined(); + + private JsonNullable filterMovies = JsonNullable.undefined(); + + private JsonNullable filterMusic = JsonNullable.undefined(); + + private JsonNullable filterPhotos = JsonNullable.undefined(); + + private Optional filterTelevision = Optional.empty(); + + private Optional restricted; + + private List server; + + private Builder() { + // force use of static builder() method + } + + + /** + * User's unique ID. + */ + public Builder id(long id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + + /** + * User's display name. + */ + public Builder title(String title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + + /** + * User's username. + */ + public Builder username(String username) { + Utils.checkNotNull(username, "username"); + this.username = username; + return this; + } + + + /** + * User's email address. + */ + public Builder email(String email) { + Utils.checkNotNull(email, "email"); + this.email = email; + return this; + } + + + /** + * ID of the user's recommendation playlist. + */ + public Builder recommendationsPlaylistId(String recommendationsPlaylistId) { + Utils.checkNotNull(recommendationsPlaylistId, "recommendationsPlaylistId"); + this.recommendationsPlaylistId = JsonNullable.of(recommendationsPlaylistId); + return this; + } + + /** + * ID of the user's recommendation playlist. + */ + public Builder recommendationsPlaylistId(JsonNullable recommendationsPlaylistId) { + Utils.checkNotNull(recommendationsPlaylistId, "recommendationsPlaylistId"); + this.recommendationsPlaylistId = recommendationsPlaylistId; + return this; + } + + + /** + * URL to the user's avatar image. + */ + public Builder thumb(String thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = thumb; + return this; + } + + + public Builder protected_(Protected protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = Optional.ofNullable(protected_); + return this; + } + + public Builder protected_(Optional protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = protected_; + return this; + } + + + public Builder home(Home home) { + Utils.checkNotNull(home, "home"); + this.home = Optional.ofNullable(home); + return this; + } + + public Builder home(Optional home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + + public Builder allowTuners(AllowTuners allowTuners) { + Utils.checkNotNull(allowTuners, "allowTuners"); + this.allowTuners = Optional.ofNullable(allowTuners); + return this; + } + + public Builder allowTuners(Optional allowTuners) { + Utils.checkNotNull(allowTuners, "allowTuners"); + this.allowTuners = allowTuners; + return this; + } + + + public Builder allowSync(AllowSync allowSync) { + Utils.checkNotNull(allowSync, "allowSync"); + this.allowSync = Optional.ofNullable(allowSync); + return this; + } + + public Builder allowSync(Optional allowSync) { + Utils.checkNotNull(allowSync, "allowSync"); + this.allowSync = allowSync; + return this; + } + + + public Builder allowCameraUpload(AllowCameraUpload allowCameraUpload) { + Utils.checkNotNull(allowCameraUpload, "allowCameraUpload"); + this.allowCameraUpload = Optional.ofNullable(allowCameraUpload); + return this; + } + + public Builder allowCameraUpload(Optional allowCameraUpload) { + Utils.checkNotNull(allowCameraUpload, "allowCameraUpload"); + this.allowCameraUpload = allowCameraUpload; + return this; + } + + + public Builder allowChannels(AllowChannels allowChannels) { + Utils.checkNotNull(allowChannels, "allowChannels"); + this.allowChannels = Optional.ofNullable(allowChannels); + return this; + } + + public Builder allowChannels(Optional allowChannels) { + Utils.checkNotNull(allowChannels, "allowChannels"); + this.allowChannels = allowChannels; + return this; + } + + + public Builder allowSubtitleAdmin(AllowSubtitleAdmin allowSubtitleAdmin) { + Utils.checkNotNull(allowSubtitleAdmin, "allowSubtitleAdmin"); + this.allowSubtitleAdmin = Optional.ofNullable(allowSubtitleAdmin); + return this; + } + + public Builder allowSubtitleAdmin(Optional allowSubtitleAdmin) { + Utils.checkNotNull(allowSubtitleAdmin, "allowSubtitleAdmin"); + this.allowSubtitleAdmin = allowSubtitleAdmin; + return this; + } + + + /** + * Filters applied for all content. + */ + public Builder filterAll(String filterAll) { + Utils.checkNotNull(filterAll, "filterAll"); + this.filterAll = JsonNullable.of(filterAll); + return this; + } + + /** + * Filters applied for all content. + */ + public Builder filterAll(JsonNullable filterAll) { + Utils.checkNotNull(filterAll, "filterAll"); + this.filterAll = filterAll; + return this; + } + + + /** + * Filters applied for movies. + */ + public Builder filterMovies(String filterMovies) { + Utils.checkNotNull(filterMovies, "filterMovies"); + this.filterMovies = JsonNullable.of(filterMovies); + return this; + } + + /** + * Filters applied for movies. + */ + public Builder filterMovies(JsonNullable filterMovies) { + Utils.checkNotNull(filterMovies, "filterMovies"); + this.filterMovies = filterMovies; + return this; + } + + + /** + * Filters applied for music. + */ + public Builder filterMusic(String filterMusic) { + Utils.checkNotNull(filterMusic, "filterMusic"); + this.filterMusic = JsonNullable.of(filterMusic); + return this; + } + + /** + * Filters applied for music. + */ + public Builder filterMusic(JsonNullable filterMusic) { + Utils.checkNotNull(filterMusic, "filterMusic"); + this.filterMusic = filterMusic; + return this; + } + + + /** + * Filters applied for photos. + */ + public Builder filterPhotos(String filterPhotos) { + Utils.checkNotNull(filterPhotos, "filterPhotos"); + this.filterPhotos = JsonNullable.of(filterPhotos); + return this; + } + + /** + * Filters applied for photos. + */ + public Builder filterPhotos(JsonNullable filterPhotos) { + Utils.checkNotNull(filterPhotos, "filterPhotos"); + this.filterPhotos = filterPhotos; + return this; + } + + + /** + * Filters applied for television. + */ + public Builder filterTelevision(String filterTelevision) { + Utils.checkNotNull(filterTelevision, "filterTelevision"); + this.filterTelevision = Optional.ofNullable(filterTelevision); + return this; + } + + /** + * Filters applied for television. + */ + public Builder filterTelevision(Optional filterTelevision) { + Utils.checkNotNull(filterTelevision, "filterTelevision"); + this.filterTelevision = filterTelevision; + return this; + } + + + public Builder restricted(Restricted restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = Optional.ofNullable(restricted); + return this; + } + + public Builder restricted(Optional restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = restricted; + return this; + } + + + /** + * List of servers owned by the user. + */ + public Builder server(List server) { + Utils.checkNotNull(server, "server"); + this.server = server; + return this; + } + + public User build() { + if (protected_ == null) { + protected_ = _SINGLETON_VALUE_Protected.value(); + } + if (home == null) { + home = _SINGLETON_VALUE_Home.value(); + } + if (allowTuners == null) { + allowTuners = _SINGLETON_VALUE_AllowTuners.value(); + } + if (allowSync == null) { + allowSync = _SINGLETON_VALUE_AllowSync.value(); + } + if (allowCameraUpload == null) { + allowCameraUpload = _SINGLETON_VALUE_AllowCameraUpload.value(); + } + if (allowChannels == null) { + allowChannels = _SINGLETON_VALUE_AllowChannels.value(); + } + if (allowSubtitleAdmin == null) { + allowSubtitleAdmin = _SINGLETON_VALUE_AllowSubtitleAdmin.value(); + } + if (restricted == null) { + restricted = _SINGLETON_VALUE_Restricted.value(); + } + + return new User( + id, title, username, + email, recommendationsPlaylistId, thumb, + protected_, home, allowTuners, + allowSync, allowCameraUpload, allowChannels, + allowSubtitleAdmin, filterAll, filterMovies, + filterMusic, filterPhotos, filterTelevision, + restricted, server); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Protected = + new LazySingletonValue<>( + "protected", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Home = + new LazySingletonValue<>( + "home", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AllowTuners = + new LazySingletonValue<>( + "allowTuners", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AllowSync = + new LazySingletonValue<>( + "allowSync", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AllowCameraUpload = + new LazySingletonValue<>( + "allowCameraUpload", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AllowChannels = + new LazySingletonValue<>( + "allowChannels", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AllowSubtitleAdmin = + new LazySingletonValue<>( + "allowSubtitleAdmin", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Restricted = + new LazySingletonValue<>( + "restricted", + "0", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsRequest.java b/src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsRequest.java index 5f739a6f..7f25bf1d 100644 --- a/src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsRequest.java +++ b/src/main/java/dev/plexapi/sdk/models/operations/VoiceSearchHubsRequest.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.type.TypeReference; import dev.plexapi.sdk.models.shared.Accepts; +import dev.plexapi.sdk.models.shared.MediaType; import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.SpeakeasyMetadata; import dev.plexapi.sdk.utils.Utils; @@ -91,10 +92,22 @@ public class VoiceSearchHubsRequest { private String query; /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

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") - private Optional type; + private Optional type; /** * The number of items to return per hub. 3 if not specified @@ -116,7 +129,7 @@ public class VoiceSearchHubsRequest { Optional deviceName, Optional marketplace, String query, - Optional type, + Optional type, Optional limit) { Utils.checkNotNull(accepts, "accepts"); Utils.checkNotNull(clientIdentifier, "clientIdentifier"); @@ -255,11 +268,24 @@ public class VoiceSearchHubsRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ + @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return type; + public Optional type() { + return (Optional) type; } /** @@ -494,9 +520,21 @@ public class VoiceSearchHubsRequest { } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public VoiceSearchHubsRequest withType(long type) { + public VoiceSearchHubsRequest withType(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; @@ -504,9 +542,21 @@ public class VoiceSearchHubsRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public VoiceSearchHubsRequest withType(Optional type) { + public VoiceSearchHubsRequest withType(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -613,7 +663,7 @@ public class VoiceSearchHubsRequest { private String query; - private Optional type = Optional.empty(); + private Optional type = Optional.empty(); private Optional limit = Optional.empty(); @@ -842,18 +892,42 @@ public class VoiceSearchHubsRequest { /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(long type) { + public Builder type(MediaType type) { Utils.checkNotNull(type, "type"); this.type = Optional.ofNullable(type); return this; } /** - * The metadata type to filter by + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries */ - public Builder type(Optional type) { + public Builder type(Optional type) { Utils.checkNotNull(type, "type"); this.type = type; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesRequestBuilder.java new file mode 100644 index 00000000..5edd6bde --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesRequestBuilder.java @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.models.operations.GetServerResourcesRequest; +import dev.plexapi.sdk.operations.GetServerResources; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +public class GetServerResourcesRequestBuilder { + + private GetServerResourcesRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public GetServerResourcesRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public GetServerResourcesRequestBuilder request(GetServerResourcesRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public GetServerResourcesRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public GetServerResourcesRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public CompletableFuture call() throws Exception { + + AsyncRequestOperation operation + = new GetServerResources.Async(sdkConfiguration, serverURL); + + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesResponse.java new file mode 100644 index 00000000..fb52526f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/GetServerResourcesResponse.java @@ -0,0 +1,254 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.models.shared.PlexDevice; +import dev.plexapi.sdk.utils.AsyncResponse; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Optional; + + +public class GetServerResourcesResponse implements AsyncResponse { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + private Optional> plexDevices; + + @JsonCreator + public GetServerResourcesResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional> plexDevices) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(plexDevices, "plexDevices"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.plexDevices = plexDevices; + } + + public GetServerResourcesResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> plexDevices() { + return (Optional>) plexDevices; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public GetServerResourcesResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public GetServerResourcesResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetServerResourcesResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public GetServerResourcesResponse withPlexDevices(List plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = Optional.ofNullable(plexDevices); + return this; + } + + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public GetServerResourcesResponse withPlexDevices(Optional> plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = plexDevices; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetServerResourcesResponse other = (GetServerResourcesResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.plexDevices, other.plexDevices); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + plexDevices); + } + + @Override + public String toString() { + return Utils.toString(GetServerResourcesResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "plexDevices", plexDevices); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional> plexDevices = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public Builder plexDevices(List plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = Optional.ofNullable(plexDevices); + return this; + } + + /** + * List of Plex Devices. This includes Plex hosted servers and clients + */ + public Builder plexDevices(Optional> plexDevices) { + Utils.checkNotNull(plexDevices, "plexDevices"); + this.plexDevices = plexDevices; + return this; + } + + public GetServerResourcesResponse build() { + + return new GetServerResourcesResponse( + contentType, statusCode, rawResponse, + plexDevices); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsRequestBuilder.java new file mode 100644 index 00000000..3a730fb9 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsRequestBuilder.java @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.operations.GetTokenDetails; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +public class GetTokenDetailsRequestBuilder { + + private GetTokenDetailsRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public GetTokenDetailsRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public GetTokenDetailsRequestBuilder request(GetTokenDetailsRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public GetTokenDetailsRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public GetTokenDetailsRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public CompletableFuture call() throws Exception { + + AsyncRequestOperation operation + = new GetTokenDetails.Async(sdkConfiguration, serverURL); + + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsResponse.java new file mode 100644 index 00000000..e262531c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/GetTokenDetailsResponse.java @@ -0,0 +1,253 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.models.shared.UserPlexAccount; +import dev.plexapi.sdk.utils.AsyncResponse; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.Optional; + + +public class GetTokenDetailsResponse implements AsyncResponse { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * Logged in user details + */ + private Optional userPlexAccount; + + @JsonCreator + public GetTokenDetailsResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional userPlexAccount) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.userPlexAccount = userPlexAccount; + } + + public GetTokenDetailsResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * Logged in user details + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional userPlexAccount() { + return (Optional) userPlexAccount; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public GetTokenDetailsResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public GetTokenDetailsResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetTokenDetailsResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * Logged in user details + */ + public GetTokenDetailsResponse withUserPlexAccount(UserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + + /** + * Logged in user details + */ + public GetTokenDetailsResponse withUserPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetTokenDetailsResponse other = (GetTokenDetailsResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.userPlexAccount, other.userPlexAccount); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + @Override + public String toString() { + return Utils.toString(GetTokenDetailsResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "userPlexAccount", userPlexAccount); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional userPlexAccount = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * Logged in user details + */ + public Builder userPlexAccount(UserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + /** + * Logged in user details + */ + public Builder userPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + public GetTokenDetailsResponse build() { + + return new GetTokenDetailsResponse( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersRequestBuilder.java new file mode 100644 index 00000000..c5ddd516 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersRequestBuilder.java @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.models.operations.GetUsersRequest; +import dev.plexapi.sdk.operations.GetUsers; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +public class GetUsersRequestBuilder { + + private GetUsersRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public GetUsersRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public GetUsersRequestBuilder request(GetUsersRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public GetUsersRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public GetUsersRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public CompletableFuture call() throws Exception { + + AsyncRequestOperation operation + = new GetUsers.Async(sdkConfiguration, serverURL); + + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersResponse.java new file mode 100644 index 00000000..46fcf357 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/GetUsersResponse.java @@ -0,0 +1,253 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.models.operations.GetUsersResponseBody; +import dev.plexapi.sdk.utils.AsyncResponse; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.Optional; + + +public class GetUsersResponse implements AsyncResponse { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * Successful response with media container data in JSON + */ + private Optional object; + + @JsonCreator + public GetUsersResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional object) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(object, "object"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.object = object; + } + + public GetUsersResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * Successful response with media container data in JSON + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional object() { + return (Optional) object; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public GetUsersResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public GetUsersResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public GetUsersResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * Successful response with media container data in JSON + */ + public GetUsersResponse withObject(GetUsersResponseBody object) { + Utils.checkNotNull(object, "object"); + this.object = Optional.ofNullable(object); + return this; + } + + + /** + * Successful response with media container data in JSON + */ + public GetUsersResponse withObject(Optional object) { + Utils.checkNotNull(object, "object"); + this.object = object; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GetUsersResponse other = (GetUsersResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.object, other.object); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + object); + } + + @Override + public String toString() { + return Utils.toString(GetUsersResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "object", object); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional object = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * Successful response with media container data in JSON + */ + public Builder object(GetUsersResponseBody object) { + Utils.checkNotNull(object, "object"); + this.object = Optional.ofNullable(object); + return this; + } + + /** + * Successful response with media container data in JSON + */ + public Builder object(Optional object) { + Utils.checkNotNull(object, "object"); + this.object = object; + return this; + } + + public GetUsersResponse build() { + + return new GetUsersResponse( + contentType, statusCode, rawResponse, + object); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataRequestBuilder.java b/src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataRequestBuilder.java new file mode 100644 index 00000000..6caa4de8 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataRequestBuilder.java @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataRequest; +import dev.plexapi.sdk.operations.PostUsersSignInData; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Exception; +import java.lang.String; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +public class PostUsersSignInDataRequestBuilder { + + private PostUsersSignInDataRequest request; + private Optional serverURL = Optional.empty(); + private final SDKConfiguration sdkConfiguration; + + public PostUsersSignInDataRequestBuilder(SDKConfiguration sdkConfiguration) { + this.sdkConfiguration = sdkConfiguration; + } + + public PostUsersSignInDataRequestBuilder request(PostUsersSignInDataRequest request) { + Utils.checkNotNull(request, "request"); + this.request = request; + return this; + } + + public PostUsersSignInDataRequestBuilder serverURL(String serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = Optional.of(serverURL); + return this; + } + + public PostUsersSignInDataRequestBuilder serverURL(Optional serverURL) { + Utils.checkNotNull(serverURL, "serverURL"); + this.serverURL = serverURL; + return this; + } + + public CompletableFuture call() throws Exception { + + AsyncRequestOperation operation + = new PostUsersSignInData.Async(sdkConfiguration, serverURL); + + return operation.doRequest(request) + .thenCompose(operation::handleResponse); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataResponse.java b/src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataResponse.java new file mode 100644 index 00000000..2db6a96b --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/operations/async/PostUsersSignInDataResponse.java @@ -0,0 +1,253 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.operations.async; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataUserPlexAccount; +import dev.plexapi.sdk.utils.AsyncResponse; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.net.http.HttpResponse; +import java.util.Optional; + + +public class PostUsersSignInDataResponse implements AsyncResponse { + /** + * HTTP response content type for this operation + */ + private String contentType; + + /** + * HTTP response status code for this operation + */ + private int statusCode; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + private HttpResponse rawResponse; + + /** + * Returns the user account data with a valid auth token + */ + private Optional userPlexAccount; + + @JsonCreator + public PostUsersSignInDataResponse( + String contentType, + int statusCode, + HttpResponse rawResponse, + Optional userPlexAccount) { + Utils.checkNotNull(contentType, "contentType"); + Utils.checkNotNull(statusCode, "statusCode"); + Utils.checkNotNull(rawResponse, "rawResponse"); + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.contentType = contentType; + this.statusCode = statusCode; + this.rawResponse = rawResponse; + this.userPlexAccount = userPlexAccount; + } + + public PostUsersSignInDataResponse( + String contentType, + int statusCode, + HttpResponse rawResponse) { + this(contentType, statusCode, rawResponse, + Optional.empty()); + } + + /** + * HTTP response content type for this operation + */ + @JsonIgnore + public String contentType() { + return contentType; + } + + /** + * HTTP response status code for this operation + */ + @JsonIgnore + public int statusCode() { + return statusCode; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @JsonIgnore + public HttpResponse rawResponse() { + return rawResponse; + } + + /** + * Returns the user account data with a valid auth token + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional userPlexAccount() { + return (Optional) userPlexAccount; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * HTTP response content type for this operation + */ + public PostUsersSignInDataResponse withContentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + /** + * HTTP response status code for this operation + */ + public PostUsersSignInDataResponse withStatusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public PostUsersSignInDataResponse withRawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + /** + * Returns the user account data with a valid auth token + */ + public PostUsersSignInDataResponse withUserPlexAccount(PostUsersSignInDataUserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + + /** + * Returns the user account data with a valid auth token + */ + public PostUsersSignInDataResponse withUserPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PostUsersSignInDataResponse other = (PostUsersSignInDataResponse) o; + return + Utils.enhancedDeepEquals(this.contentType, other.contentType) && + Utils.enhancedDeepEquals(this.statusCode, other.statusCode) && + Utils.enhancedDeepEquals(this.rawResponse, other.rawResponse) && + Utils.enhancedDeepEquals(this.userPlexAccount, other.userPlexAccount); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + @Override + public String toString() { + return Utils.toString(PostUsersSignInDataResponse.class, + "contentType", contentType, + "statusCode", statusCode, + "rawResponse", rawResponse, + "userPlexAccount", userPlexAccount); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String contentType; + + private Integer statusCode; + + private HttpResponse rawResponse; + + private Optional userPlexAccount = Optional.empty(); + + private Builder() { + // force use of static builder() method + } + + + /** + * HTTP response content type for this operation + */ + public Builder contentType(String contentType) { + Utils.checkNotNull(contentType, "contentType"); + this.contentType = contentType; + return this; + } + + + /** + * HTTP response status code for this operation + */ + public Builder statusCode(int statusCode) { + Utils.checkNotNull(statusCode, "statusCode"); + this.statusCode = statusCode; + return this; + } + + + /** + * Raw HTTP response; suitable for custom response parsing + */ + public Builder rawResponse(HttpResponse rawResponse) { + Utils.checkNotNull(rawResponse, "rawResponse"); + this.rawResponse = rawResponse; + return this; + } + + + /** + * Returns the user account data with a valid auth token + */ + public Builder userPlexAccount(PostUsersSignInDataUserPlexAccount userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = Optional.ofNullable(userPlexAccount); + return this; + } + + /** + * Returns the user account data with a valid auth token + */ + public Builder userPlexAccount(Optional userPlexAccount) { + Utils.checkNotNull(userPlexAccount, "userPlexAccount"); + this.userPlexAccount = userPlexAccount; + return this; + } + + public PostUsersSignInDataResponse build() { + + return new PostUsersSignInDataResponse( + contentType, statusCode, rawResponse, + userPlexAccount); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/AutoSelectSubtitle.java b/src/main/java/dev/plexapi/sdk/models/shared/AutoSelectSubtitle.java new file mode 100644 index 00000000..70f80fde --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/AutoSelectSubtitle.java @@ -0,0 +1,40 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * AutoSelectSubtitle + * + *

The auto-select subtitle mode (0 = Manually selected, 1 = Shown with foreign audio, 2 = Always enabled) + */ +public enum AutoSelectSubtitle { + ManuallySelected(0), + ShownWithForeignAudio(1), + AlwaysEnabled(2); + + @JsonValue + private final int value; + + AutoSelectSubtitle(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (AutoSelectSubtitle o: AutoSelectSubtitle.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/BoolInt.java b/src/main/java/dev/plexapi/sdk/models/shared/BoolInt.java index 9cb6b369..9c4347a5 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/BoolInt.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/BoolInt.java @@ -8,21 +8,21 @@ import java.util.Objects; import java.util.Optional; public enum BoolInt { - ZERO(0L), - ONE(1L); + False(0), + True(1); @JsonValue - private final long value; + private final int value; - BoolInt(long value) { + BoolInt(int value) { this.value = value; } - public long value() { + public int value() { return value; } - public static Optional fromValue(long value) { + public static Optional fromValue(int value) { for (BoolInt o: BoolInt.values()) { if (Objects.deepEquals(o.value, value)) { return Optional.of(o); diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Connections.java b/src/main/java/dev/plexapi/sdk/models/shared/Connections.java new file mode 100644 index 00000000..78ebf017 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/Connections.java @@ -0,0 +1,347 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.Override; +import java.lang.String; + + +public class Connections { + /** + * The protocol used for the connection (http, https, etc) + */ + @JsonProperty("protocol") + private PlexDeviceProtocol protocol; + + /** + * The (ip) address or domain name used for the connection + */ + @JsonProperty("address") + private String address; + + /** + * The port used for the connection + */ + @JsonProperty("port") + private int port; + + /** + * The full URI of the connection + */ + @JsonProperty("uri") + private String uri; + + /** + * If the connection is local address + */ + @JsonProperty("local") + private boolean local; + + /** + * If the connection is relayed through plex.direct + */ + @JsonProperty("relay") + private boolean relay; + + /** + * If the connection is using IPv6 + */ + @JsonProperty("IPv6") + private boolean iPv6; + + @JsonCreator + public Connections( + @JsonProperty("protocol") PlexDeviceProtocol protocol, + @JsonProperty("address") String address, + @JsonProperty("port") int port, + @JsonProperty("uri") String uri, + @JsonProperty("local") boolean local, + @JsonProperty("relay") boolean relay, + @JsonProperty("IPv6") boolean iPv6) { + Utils.checkNotNull(protocol, "protocol"); + Utils.checkNotNull(address, "address"); + Utils.checkNotNull(port, "port"); + Utils.checkNotNull(uri, "uri"); + Utils.checkNotNull(local, "local"); + Utils.checkNotNull(relay, "relay"); + Utils.checkNotNull(iPv6, "iPv6"); + this.protocol = protocol; + this.address = address; + this.port = port; + this.uri = uri; + this.local = local; + this.relay = relay; + this.iPv6 = iPv6; + } + + /** + * The protocol used for the connection (http, https, etc) + */ + @JsonIgnore + public PlexDeviceProtocol protocol() { + return protocol; + } + + /** + * The (ip) address or domain name used for the connection + */ + @JsonIgnore + public String address() { + return address; + } + + /** + * The port used for the connection + */ + @JsonIgnore + public int port() { + return port; + } + + /** + * The full URI of the connection + */ + @JsonIgnore + public String uri() { + return uri; + } + + /** + * If the connection is local address + */ + @JsonIgnore + public boolean local() { + return local; + } + + /** + * If the connection is relayed through plex.direct + */ + @JsonIgnore + public boolean relay() { + return relay; + } + + /** + * If the connection is using IPv6 + */ + @JsonIgnore + public boolean iPv6() { + return iPv6; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The protocol used for the connection (http, https, etc) + */ + public Connections withProtocol(PlexDeviceProtocol protocol) { + Utils.checkNotNull(protocol, "protocol"); + this.protocol = protocol; + return this; + } + + /** + * The (ip) address or domain name used for the connection + */ + public Connections withAddress(String address) { + Utils.checkNotNull(address, "address"); + this.address = address; + return this; + } + + /** + * The port used for the connection + */ + public Connections withPort(int port) { + Utils.checkNotNull(port, "port"); + this.port = port; + return this; + } + + /** + * The full URI of the connection + */ + public Connections withUri(String uri) { + Utils.checkNotNull(uri, "uri"); + this.uri = uri; + return this; + } + + /** + * If the connection is local address + */ + public Connections withLocal(boolean local) { + Utils.checkNotNull(local, "local"); + this.local = local; + return this; + } + + /** + * If the connection is relayed through plex.direct + */ + public Connections withRelay(boolean relay) { + Utils.checkNotNull(relay, "relay"); + this.relay = relay; + return this; + } + + /** + * If the connection is using IPv6 + */ + public Connections withIPv6(boolean iPv6) { + Utils.checkNotNull(iPv6, "iPv6"); + this.iPv6 = iPv6; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Connections other = (Connections) o; + return + Utils.enhancedDeepEquals(this.protocol, other.protocol) && + Utils.enhancedDeepEquals(this.address, other.address) && + Utils.enhancedDeepEquals(this.port, other.port) && + Utils.enhancedDeepEquals(this.uri, other.uri) && + Utils.enhancedDeepEquals(this.local, other.local) && + Utils.enhancedDeepEquals(this.relay, other.relay) && + Utils.enhancedDeepEquals(this.iPv6, other.iPv6); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + protocol, address, port, + uri, local, relay, + iPv6); + } + + @Override + public String toString() { + return Utils.toString(Connections.class, + "protocol", protocol, + "address", address, + "port", port, + "uri", uri, + "local", local, + "relay", relay, + "iPv6", iPv6); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private PlexDeviceProtocol protocol; + + private String address; + + private Integer port; + + private String uri; + + private Boolean local; + + private Boolean relay; + + private Boolean iPv6; + + private Builder() { + // force use of static builder() method + } + + + /** + * The protocol used for the connection (http, https, etc) + */ + public Builder protocol(PlexDeviceProtocol protocol) { + Utils.checkNotNull(protocol, "protocol"); + this.protocol = protocol; + return this; + } + + + /** + * The (ip) address or domain name used for the connection + */ + public Builder address(String address) { + Utils.checkNotNull(address, "address"); + this.address = address; + return this; + } + + + /** + * The port used for the connection + */ + public Builder port(int port) { + Utils.checkNotNull(port, "port"); + this.port = port; + return this; + } + + + /** + * The full URI of the connection + */ + public Builder uri(String uri) { + Utils.checkNotNull(uri, "uri"); + this.uri = uri; + return this; + } + + + /** + * If the connection is local address + */ + public Builder local(boolean local) { + Utils.checkNotNull(local, "local"); + this.local = local; + return this; + } + + + /** + * If the connection is relayed through plex.direct + */ + public Builder relay(boolean relay) { + Utils.checkNotNull(relay, "relay"); + this.relay = relay; + return this; + } + + + /** + * If the connection is using IPv6 + */ + public Builder iPv6(boolean iPv6) { + Utils.checkNotNull(iPv6, "iPv6"); + this.iPv6 = iPv6; + return this; + } + + public Connections build() { + + return new Connections( + protocol, address, port, + uri, local, relay, + iPv6); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/DefaultAudioAccessibility.java b/src/main/java/dev/plexapi/sdk/models/shared/DefaultAudioAccessibility.java new file mode 100644 index 00000000..c69dd0ff --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/DefaultAudioAccessibility.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * DefaultAudioAccessibility + * + *

The audio accessibility mode (0 = Prefer non-accessibility audio, 1 = Prefer accessibility audio, 2 = Only show accessibility audio, 3 = Only show non-accessibility audio) + */ +public enum DefaultAudioAccessibility { + PreferNonAccessibility(0), + PreferAccessibility(1), + OnlyAccessibility(2), + OnlyNonAccessibility(3); + + @JsonValue + private final int value; + + DefaultAudioAccessibility(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (DefaultAudioAccessibility o: DefaultAudioAccessibility.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleAccessibility.java b/src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleAccessibility.java new file mode 100644 index 00000000..5acc0f2f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleAccessibility.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * DefaultSubtitleAccessibility + * + *

The subtitles for the deaf or hard-of-hearing (SDH) searches mode (0 = Prefer non-SDH subtitles, 1 = Prefer SDH subtitles, 2 = Only show SDH subtitles, 3 = Only show non-SDH subtitles) + */ +public enum DefaultSubtitleAccessibility { + PreferNonSdh(0), + PreferSdh(1), + OnlySdh(2), + OnlyNonSdh(3); + + @JsonValue + private final int value; + + DefaultSubtitleAccessibility(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (DefaultSubtitleAccessibility o: DefaultSubtitleAccessibility.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleForced.java b/src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleForced.java new file mode 100644 index 00000000..87f7325d --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/DefaultSubtitleForced.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * DefaultSubtitleForced + * + *

The forced subtitles searches mode (0 = Prefer non-forced subtitles, 1 = Prefer forced subtitles, 2 = Only show forced subtitles, 3 = Only show non-forced subtitles) + */ +public enum DefaultSubtitleForced { + PreferNonForced(0), + PreferForced(1), + OnlyForced(2), + OnlyNonForced(3); + + @JsonValue + private final int value; + + DefaultSubtitleForced(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (DefaultSubtitleForced o: DefaultSubtitleForced.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Guids.java b/src/main/java/dev/plexapi/sdk/models/shared/Guids.java new file mode 100644 index 00000000..d886bf04 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/Guids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class Guids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public Guids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Guids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Guids other = (Guids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(Guids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public Guids build() { + + return new Guids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Items.java b/src/main/java/dev/plexapi/sdk/models/shared/Items.java index c07f3631..d4cd5784 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/Items.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/Items.java @@ -12,12 +12,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,51 +38,48 @@ public class Items { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -92,28 +91,35 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -130,7 +136,7 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * Typically only seen in metadata at a library's top level @@ -151,6 +157,13 @@ public class Items { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -193,17 +206,24 @@ public class Items { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -215,18 +235,15 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -236,7 +253,7 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; @JsonInclude(Include.NON_ABSENT) @@ -248,14 +265,21 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -269,7 +293,7 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -304,7 +328,7 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -318,7 +342,7 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -330,21 +354,21 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -391,49 +415,49 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -447,28 +471,28 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -480,7 +504,7 @@ public class Items { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; @JsonInclude(Include.NON_ABSENT) @@ -493,73 +517,77 @@ public class Items { @JsonCreator public Items( - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("composite") Optional composite, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, - @JsonProperty("duration") Optional duration, + @JsonProperty("duration") Optional duration, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, @JsonProperty("lastViewedAt") Optional lastViewedAt, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year, + @JsonProperty("year") Optional year, @JsonProperty("MetadataItem") Optional> metadataItem) { Utils.checkNotNull(title, "title"); Utils.checkNotNull(type, "type"); @@ -571,6 +599,7 @@ public class Items { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); @@ -579,6 +608,7 @@ public class Items { Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -586,6 +616,7 @@ public class Items { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -595,6 +626,7 @@ public class Items { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -639,6 +671,7 @@ public class Items { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.composite = composite; this.contentRating = contentRating; this.country = country; @@ -647,6 +680,7 @@ public class Items { this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -654,6 +688,7 @@ public class Items { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -663,6 +698,7 @@ public class Items { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -700,8 +736,22 @@ public class Items { this.additionalProperties = new HashMap<>(); } - public Items() { - this(Optional.empty(), Optional.empty(), Optional.empty(), + public Items( + String title, + String type, + long addedAt, + String key) { + this(title, type, Optional.empty(), + addedAt, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -714,41 +764,30 @@ public class Items { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty()); } /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -756,34 +795,32 @@ public class Items { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -795,37 +832,41 @@ public class Items { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -844,7 +885,7 @@ public class Items { * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -871,6 +912,14 @@ public class Items { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -919,19 +968,26 @@ public class Items { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -944,22 +1000,18 @@ public class Items { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -969,7 +1021,7 @@ public class Items { * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -982,19 +1034,25 @@ public class Items { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1009,7 +1067,7 @@ public class Items { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1048,10 +1106,9 @@ public class Items { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1066,7 +1123,7 @@ public class Items { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1080,26 +1137,24 @@ public class Items { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1152,64 +1207,57 @@ public class Items { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1224,7 +1272,7 @@ public class Items { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1232,7 +1280,7 @@ public class Items { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1240,7 +1288,7 @@ public class Items { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1248,7 +1296,7 @@ public class Items { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1262,7 +1310,7 @@ public class Items { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1285,17 +1333,7 @@ public class Items { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Items withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Items withTitle(Optional title) { + public Items withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1304,17 +1342,7 @@ public class Items { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Items withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Items withType(Optional type) { + public Items withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1323,7 +1351,7 @@ public class Items { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Items withAbsoluteIndex(long absoluteIndex) { + public Items withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1333,7 +1361,7 @@ public class Items { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Items withAbsoluteIndex(Optional absoluteIndex) { + public Items withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1343,16 +1371,6 @@ public class Items { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Items withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Items withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1361,7 +1379,7 @@ public class Items { /** * When present, the URL for the background artwork for the item. */ - public Items withArt(Object art) { + public Items withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1371,7 +1389,7 @@ public class Items { /** * When present, the URL for the background artwork for the item. */ - public Items withArt(Optional art) { + public Items withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1380,7 +1398,7 @@ public class Items { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Items withAudienceRating(double audienceRating) { + public Items withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1390,7 +1408,7 @@ public class Items { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Items withAudienceRating(Optional audienceRating) { + public Items withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1399,7 +1417,7 @@ public class Items { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Items withAudienceRatingImage(Object audienceRatingImage) { + public Items withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1409,7 +1427,7 @@ public class Items { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Items withAudienceRatingImage(Optional audienceRatingImage) { + public Items withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1431,7 +1449,7 @@ public class Items { /** * When present, the URL for a banner graphic for the item. */ - public Items withBanner(Object banner) { + public Items withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1441,7 +1459,7 @@ public class Items { /** * When present, the URL for a banner graphic for the item. */ - public Items withBanner(Optional banner) { + public Items withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1450,7 +1468,7 @@ public class Items { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Items withChapterSource(Object chapterSource) { + public Items withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1460,16 +1478,35 @@ public class Items { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Items withChapterSource(Optional chapterSource) { + public Items withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Items withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public Items withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Items withComposite(Object composite) { + public Items withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1479,7 +1516,7 @@ public class Items { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Items withComposite(Optional composite) { + public Items withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1488,7 +1525,7 @@ public class Items { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Items withContentRating(Object contentRating) { + public Items withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1498,7 +1535,7 @@ public class Items { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Items withContentRating(Optional contentRating) { + public Items withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1533,7 +1570,7 @@ public class Items { /** * When present, the duration for the item, in units of milliseconds. */ - public Items withDuration(long duration) { + public Items withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1543,7 +1580,7 @@ public class Items { /** * When present, the duration for the item, in units of milliseconds. */ - public Items withDuration(Optional duration) { + public Items withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1600,6 +1637,25 @@ public class Items { return this; } + /** + * The GUID of the grandparent media item. + */ + public Items withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public Items withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1714,23 +1770,42 @@ public class Items { return this; } - public Items withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Items withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Items withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Items withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Items withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public Items withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public Items withHero(Object hero) { + public Items withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1740,7 +1815,7 @@ public class Items { /** * When present, the URL for a hero image for the item. */ - public Items withHero(Optional hero) { + public Items withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1762,7 +1837,7 @@ public class Items { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Items withIndex(long index) { + public Items withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1772,7 +1847,7 @@ public class Items { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Items withIndex(Optional index) { + public Items withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1781,25 +1856,12 @@ public class Items { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Items withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Items withKey(Optional key) { + public Items withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Items withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1807,9 +1869,6 @@ public class Items { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Items withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1819,7 +1878,7 @@ public class Items { /** * For shows and seasons, contains the number of total episodes. */ - public Items withLeafCount(long leafCount) { + public Items withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1829,7 +1888,7 @@ public class Items { /** * For shows and seasons, contains the number of total episodes. */ - public Items withLeafCount(Optional leafCount) { + public Items withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1851,7 +1910,7 @@ public class Items { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Items withOriginallyAvailableAt(Object originallyAvailableAt) { + public Items withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1861,7 +1920,7 @@ public class Items { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Items withOriginallyAvailableAt(Optional originallyAvailableAt) { + public Items withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -1870,7 +1929,7 @@ public class Items { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Items withOriginalTitle(Object originalTitle) { + public Items withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -1880,12 +1939,31 @@ public class Items { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Items withOriginalTitle(Optional originalTitle) { + public Items withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Items withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public Items withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -1908,7 +1986,7 @@ public class Items { /** * The `index` of the parent */ - public Items withParentIndex(long parentIndex) { + public Items withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -1918,7 +1996,7 @@ public class Items { /** * The `index` of the parent */ - public Items withParentIndex(Optional parentIndex) { + public Items withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -2003,7 +2081,7 @@ public class Items { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Items withPrimaryExtraKey(Object primaryExtraKey) { + public Items withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -2013,7 +2091,7 @@ public class Items { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Items withPrimaryExtraKey(Optional primaryExtraKey) { + public Items withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2041,7 +2119,7 @@ public class Items { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Items withRating(double rating) { + public Items withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2051,7 +2129,7 @@ public class Items { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Items withRating(Optional rating) { + public Items withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2073,7 +2151,7 @@ public class Items { /** * Number of ratings under this metadata */ - public Items withRatingCount(long ratingCount) { + public Items withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2083,7 +2161,7 @@ public class Items { /** * Number of ratings under this metadata */ - public Items withRatingCount(Optional ratingCount) { + public Items withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2092,7 +2170,7 @@ public class Items { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Items withRatingImage(Object ratingImage) { + public Items withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2102,7 +2180,7 @@ public class Items { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Items withRatingImage(Optional ratingImage) { + public Items withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2111,7 +2189,7 @@ public class Items { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Items withRatingKey(Object ratingKey) { + public Items withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2121,7 +2199,7 @@ public class Items { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Items withRatingKey(Optional ratingKey) { + public Items withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2238,7 +2316,7 @@ public class Items { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Items withStudio(Object studio) { + public Items withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2248,7 +2326,7 @@ public class Items { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Items withStudio(Optional studio) { + public Items withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2257,7 +2335,7 @@ public class Items { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Items withSubtype(Object subtype) { + public Items withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2267,7 +2345,7 @@ public class Items { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Items withSubtype(Optional subtype) { + public Items withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2276,7 +2354,7 @@ public class Items { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Items withSummary(Object summary) { + public Items withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2286,7 +2364,7 @@ public class Items { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Items withSummary(Optional summary) { + public Items withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2295,7 +2373,7 @@ public class Items { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Items withTagline(Object tagline) { + public Items withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2305,7 +2383,7 @@ public class Items { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Items withTagline(Optional tagline) { + public Items withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2314,7 +2392,7 @@ public class Items { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Items withTheme(Object theme) { + public Items withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2324,7 +2402,7 @@ public class Items { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Items withTheme(Optional theme) { + public Items withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2333,7 +2411,7 @@ public class Items { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Items withThumb(Object thumb) { + public Items withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2343,7 +2421,7 @@ public class Items { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Items withThumb(Optional thumb) { + public Items withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2352,7 +2430,7 @@ public class Items { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Items withTitleSort(Object titleSort) { + public Items withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2362,7 +2440,7 @@ public class Items { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Items withTitleSort(Optional titleSort) { + public Items withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2390,7 +2468,7 @@ public class Items { /** * When the user has rated an item, this contains the user rating */ - public Items withUserRating(double userRating) { + public Items withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2400,7 +2478,7 @@ public class Items { /** * When the user has rated an item, this contains the user rating */ - public Items withUserRating(Optional userRating) { + public Items withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2409,7 +2487,7 @@ public class Items { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Items withViewCount(long viewCount) { + public Items withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2419,7 +2497,7 @@ public class Items { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Items withViewCount(Optional viewCount) { + public Items withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2428,7 +2506,7 @@ public class Items { /** * For shows and seasons, contains the number of viewed episodes. */ - public Items withViewedLeafCount(long viewedLeafCount) { + public Items withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2438,7 +2516,7 @@ public class Items { /** * For shows and seasons, contains the number of viewed episodes. */ - public Items withViewedLeafCount(Optional viewedLeafCount) { + public Items withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2447,7 +2525,7 @@ public class Items { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Items withViewOffset(long viewOffset) { + public Items withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2457,7 +2535,7 @@ public class Items { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Items withViewOffset(Optional viewOffset) { + public Items withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2479,7 +2557,7 @@ public class Items { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Items withYear(long year) { + public Items withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2489,7 +2567,7 @@ public class Items { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Items withYear(Optional year) { + public Items withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2541,6 +2619,7 @@ public class Items { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.composite, other.composite) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && @@ -2549,6 +2628,7 @@ public class Items { Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2556,6 +2636,7 @@ public class Items { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2565,6 +2646,7 @@ public class Items { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2608,26 +2690,28 @@ public class Items { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, metadataItem, additionalProperties); + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, metadataItem, + additionalProperties); } @Override @@ -2643,6 +2727,7 @@ public class Items { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "composite", composite, "contentRating", contentRating, "country", country, @@ -2651,6 +2736,7 @@ public class Items { "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2658,6 +2744,7 @@ public class Items { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2667,6 +2754,7 @@ public class Items { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2707,35 +2795,37 @@ public class Items { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional childCount = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional composite = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); private Optional> director = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional> filter = Optional.empty(); @@ -2743,6 +2833,8 @@ public class Items { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2755,29 +2847,33 @@ public class Items { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); - private Optional key = Optional.empty(); + private String key; private Optional lastViewedAt = Optional.empty(); - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2787,19 +2883,19 @@ public class Items { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2813,33 +2909,33 @@ public class Items { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Optional> metadataItem = Optional.empty(); @@ -2853,16 +2949,7 @@ public class Items { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -2872,16 +2959,7 @@ public class Items { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -2891,7 +2969,7 @@ public class Items { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -2900,7 +2978,7 @@ public class Items { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -2911,15 +2989,6 @@ public class Items { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -2929,7 +2998,7 @@ public class Items { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -2938,7 +3007,7 @@ public class Items { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -2948,7 +3017,7 @@ public class Items { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -2957,7 +3026,7 @@ public class Items { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -2967,7 +3036,7 @@ public class Items { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -2976,7 +3045,7 @@ public class Items { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -2999,7 +3068,7 @@ public class Items { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -3008,7 +3077,7 @@ public class Items { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -3018,7 +3087,7 @@ public class Items { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -3027,17 +3096,36 @@ public class Items { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3046,7 +3134,7 @@ public class Items { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3056,7 +3144,7 @@ public class Items { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3065,7 +3153,7 @@ public class Items { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3101,7 +3189,7 @@ public class Items { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3110,7 +3198,7 @@ public class Items { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3168,6 +3256,25 @@ public class Items { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3282,23 +3389,42 @@ public class Items { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3307,7 +3433,7 @@ public class Items { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3330,7 +3456,7 @@ public class Items { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3339,7 +3465,7 @@ public class Items { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -3349,34 +3475,19 @@ public class Items { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3387,7 +3498,7 @@ public class Items { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3396,7 +3507,7 @@ public class Items { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3419,7 +3530,7 @@ public class Items { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3428,7 +3539,7 @@ public class Items { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3438,7 +3549,7 @@ public class Items { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3447,13 +3558,32 @@ public class Items { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3476,7 +3606,7 @@ public class Items { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3485,7 +3615,7 @@ public class Items { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3571,7 +3701,7 @@ public class Items { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3580,7 +3710,7 @@ public class Items { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3609,7 +3739,7 @@ public class Items { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3618,7 +3748,7 @@ public class Items { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3641,7 +3771,7 @@ public class Items { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3650,7 +3780,7 @@ public class Items { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3660,7 +3790,7 @@ public class Items { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3669,7 +3799,7 @@ public class Items { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3679,7 +3809,7 @@ public class Items { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3688,7 +3818,7 @@ public class Items { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -3806,7 +3936,7 @@ public class Items { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -3815,7 +3945,7 @@ public class Items { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -3825,7 +3955,7 @@ public class Items { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -3834,7 +3964,7 @@ public class Items { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -3844,7 +3974,7 @@ public class Items { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -3853,7 +3983,7 @@ public class Items { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -3863,7 +3993,7 @@ public class Items { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -3872,7 +4002,7 @@ public class Items { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -3882,7 +4012,7 @@ public class Items { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -3891,7 +4021,7 @@ public class Items { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -3901,7 +4031,7 @@ public class Items { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -3910,7 +4040,7 @@ public class Items { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -3920,7 +4050,7 @@ public class Items { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -3929,7 +4059,7 @@ public class Items { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -3958,7 +4088,7 @@ public class Items { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -3967,7 +4097,7 @@ public class Items { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -3977,7 +4107,7 @@ public class Items { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -3986,7 +4116,7 @@ public class Items { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -3996,7 +4126,7 @@ public class Items { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -4005,7 +4135,7 @@ public class Items { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -4015,7 +4145,7 @@ public class Items { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -4024,7 +4154,7 @@ public class Items { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4047,7 +4177,7 @@ public class Items { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4056,7 +4186,7 @@ public class Items { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4097,26 +4227,27 @@ public class Items { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, metadataItem) + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, metadataItem) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/ItemsGuids.java b/src/main/java/dev/plexapi/sdk/models/shared/ItemsGuids.java new file mode 100644 index 00000000..b3465b8c --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/ItemsGuids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class ItemsGuids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public ItemsGuids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public ItemsGuids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ItemsGuids other = (ItemsGuids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(ItemsGuids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public ItemsGuids build() { + + return new ItemsGuids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/LibrarySection.java b/src/main/java/dev/plexapi/sdk/models/shared/LibrarySection.java index abc3538f..0b56573c 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/LibrarySection.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/LibrarySection.java @@ -19,15 +19,18 @@ import java.util.Optional; public class LibrarySection { - + /** + * The title of the library + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") private Optional title; - - @JsonInclude(Include.NON_ABSENT) + /** + * The type of media content in the Plex library. This can represent videos, music, or photos. + */ @JsonProperty("type") - private Optional type; + private MediaTypeString type; @JsonInclude(Include.NON_ABSENT) @@ -87,9 +90,14 @@ public class LibrarySection { private Optional key; - @JsonInclude(Include.NON_ABSENT) @JsonProperty("language") - private Optional language; + private String language; + + /** + * The universally unique identifier for the library. + */ + @JsonProperty("uuid") + private String uuid; @JsonInclude(Include.NON_ABSENT) @@ -126,7 +134,7 @@ public class LibrarySection { @JsonCreator public LibrarySection( @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, + @JsonProperty("type") MediaTypeString type, @JsonProperty("agent") Optional agent, @JsonProperty("allowSync") Optional allowSync, @JsonProperty("art") Optional art, @@ -138,7 +146,8 @@ public class LibrarySection { @JsonProperty("filters") Optional filters, @JsonProperty("hidden") Optional hidden, @JsonProperty("key") Optional key, - @JsonProperty("language") Optional language, + @JsonProperty("language") String language, + @JsonProperty("uuid") String uuid, @JsonProperty("Location") Optional> location, @JsonProperty("refreshing") Optional refreshing, @JsonProperty("scannedAt") Optional scannedAt, @@ -159,6 +168,7 @@ public class LibrarySection { Utils.checkNotNull(hidden, "hidden"); Utils.checkNotNull(key, "key"); Utils.checkNotNull(language, "language"); + Utils.checkNotNull(uuid, "uuid"); Utils.checkNotNull(location, "location"); Utils.checkNotNull(refreshing, "refreshing"); Utils.checkNotNull(scannedAt, "scannedAt"); @@ -179,6 +189,7 @@ public class LibrarySection { this.hidden = hidden; this.key = key; this.language = language; + this.uuid = uuid; this.location = location; this.refreshing = refreshing; this.scannedAt = scannedAt; @@ -187,23 +198,32 @@ public class LibrarySection { this.updatedAt = updatedAt; } - public LibrarySection() { - this(Optional.empty(), Optional.empty(), Optional.empty(), + public LibrarySection( + MediaTypeString type, + String language, + String uuid) { + this(Optional.empty(), type, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), language, uuid, Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty()); } + /** + * The title of the library + */ @JsonIgnore public Optional title() { return title; } + /** + * The type of media content in the Plex library. This can represent videos, music, or photos. + */ @JsonIgnore - public Optional type() { + public MediaTypeString type() { return type; } @@ -266,10 +286,18 @@ public class LibrarySection { } @JsonIgnore - public Optional language() { + public String language() { return language; } + /** + * The universally unique identifier for the library. + */ + @JsonIgnore + public String uuid() { + return uuid; + } + @SuppressWarnings("unchecked") @JsonIgnore public Optional> location() { @@ -309,6 +337,9 @@ public class LibrarySection { } + /** + * The title of the library + */ public LibrarySection withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = Optional.ofNullable(title); @@ -316,20 +347,19 @@ public class LibrarySection { } + /** + * The title of the library + */ public LibrarySection withTitle(Optional title) { Utils.checkNotNull(title, "title"); this.title = title; return this; } - public LibrarySection withType(String type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - public LibrarySection withType(Optional type) { + /** + * The type of media content in the Plex library. This can represent videos, music, or photos. + */ + public LibrarySection withType(MediaTypeString type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -486,14 +516,16 @@ public class LibrarySection { public LibrarySection withLanguage(String language) { Utils.checkNotNull(language, "language"); - this.language = Optional.ofNullable(language); + this.language = language; return this; } - - public LibrarySection withLanguage(Optional language) { - Utils.checkNotNull(language, "language"); - this.language = language; + /** + * The universally unique identifier for the library. + */ + public LibrarySection withUuid(String uuid) { + Utils.checkNotNull(uuid, "uuid"); + this.uuid = uuid; return this; } @@ -605,6 +637,7 @@ public class LibrarySection { Utils.enhancedDeepEquals(this.hidden, other.hidden) && Utils.enhancedDeepEquals(this.key, other.key) && Utils.enhancedDeepEquals(this.language, other.language) && + Utils.enhancedDeepEquals(this.uuid, other.uuid) && Utils.enhancedDeepEquals(this.location, other.location) && Utils.enhancedDeepEquals(this.refreshing, other.refreshing) && Utils.enhancedDeepEquals(this.scannedAt, other.scannedAt) && @@ -620,9 +653,9 @@ public class LibrarySection { allowSync, art, composite, content, contentChangedAt, createdAt, directory, filters, hidden, - key, language, location, - refreshing, scannedAt, scanner, - thumb, updatedAt); + key, language, uuid, + location, refreshing, scannedAt, + scanner, thumb, updatedAt); } @Override @@ -642,6 +675,7 @@ public class LibrarySection { "hidden", hidden, "key", key, "language", language, + "uuid", uuid, "location", location, "refreshing", refreshing, "scannedAt", scannedAt, @@ -655,7 +689,7 @@ public class LibrarySection { private Optional title = Optional.empty(); - private Optional type = Optional.empty(); + private MediaTypeString type; private Optional agent = Optional.empty(); @@ -679,7 +713,9 @@ public class LibrarySection { private Optional key = Optional.empty(); - private Optional language = Optional.empty(); + private String language; + + private String uuid; private Optional> location = Optional.empty(); @@ -698,12 +734,18 @@ public class LibrarySection { } + /** + * The title of the library + */ public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = Optional.ofNullable(title); return this; } + /** + * The title of the library + */ public Builder title(Optional title) { Utils.checkNotNull(title, "title"); this.title = title; @@ -711,13 +753,10 @@ public class LibrarySection { } - public Builder type(String type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - public Builder type(Optional type) { + /** + * The type of media content in the Plex library. This can represent videos, music, or photos. + */ + public Builder type(MediaTypeString type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -875,13 +914,17 @@ public class LibrarySection { public Builder language(String language) { Utils.checkNotNull(language, "language"); - this.language = Optional.ofNullable(language); + this.language = language; return this; } - public Builder language(Optional language) { - Utils.checkNotNull(language, "language"); - this.language = language; + + /** + * The universally unique identifier for the library. + */ + public Builder uuid(String uuid) { + Utils.checkNotNull(uuid, "uuid"); + this.uuid = uuid; return this; } @@ -976,9 +1019,9 @@ public class LibrarySection { allowSync, art, composite, content, contentChangedAt, createdAt, directory, filters, hidden, - key, language, location, - refreshing, scannedAt, scanner, - thumb, updatedAt); + key, language, uuid, + location, refreshing, scannedAt, + scanner, thumb, updatedAt); } } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MailingListStatus.java b/src/main/java/dev/plexapi/sdk/models/shared/MailingListStatus.java new file mode 100644 index 00000000..bf911631 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MailingListStatus.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; + +/** + * MailingListStatus + * + *

Your current mailing list status + */ +public enum MailingListStatus { + Active("active"), + Unsubscribed("unsubscribed"), + Removed("removed"); + + @JsonValue + private final String value; + + MailingListStatus(String value) { + this.value = value; + } + + public String value() { + return value; + } + + public static Optional fromValue(String value) { + for (MailingListStatus o: MailingListStatus.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Media.java b/src/main/java/dev/plexapi/sdk/models/shared/Media.java index 8a83b3d1..90d75d80 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/Media.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/Media.java @@ -12,7 +12,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; @@ -32,37 +33,37 @@ public class Media { @JsonInclude(Include.NON_ABSENT) @JsonProperty("aspectRatio") - private Optional aspectRatio; + private Optional aspectRatio; @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioChannels") - private Optional audioChannels; + private Optional audioChannels; @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioCodec") - private Optional audioCodec; + private Optional audioCodec; @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioProfile") - private Optional audioProfile; + private Optional audioProfile; @JsonInclude(Include.NON_ABSENT) @JsonProperty("bitrate") - private Optional bitrate; + private Optional bitrate; @JsonInclude(Include.NON_ABSENT) @JsonProperty("container") - private Optional container; + private Optional container; @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; @JsonInclude(Include.NON_ABSENT) @@ -77,12 +78,11 @@ public class Media { @JsonInclude(Include.NON_ABSENT) @JsonProperty("height") - private Optional height; + private Optional height; - @JsonInclude(Include.NON_ABSENT) @JsonProperty("id") - private Optional id; + private long id; @JsonInclude(Include.NON_ABSENT) @@ -97,27 +97,27 @@ public class Media { @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoCodec") - private Optional videoCodec; + private Optional videoCodec; @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoFrameRate") - private Optional videoFrameRate; + private Optional videoFrameRate; @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoProfile") - private Optional videoProfile; + private Optional videoProfile; @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoResolution") - private Optional videoResolution; + private Optional videoResolution; @JsonInclude(Include.NON_ABSENT) @JsonProperty("width") - private Optional width; + private Optional width; @JsonIgnore @@ -125,24 +125,24 @@ public class Media { @JsonCreator public Media( - @JsonProperty("aspectRatio") Optional aspectRatio, - @JsonProperty("audioChannels") Optional audioChannels, - @JsonProperty("audioCodec") Optional audioCodec, - @JsonProperty("audioProfile") Optional audioProfile, - @JsonProperty("bitrate") Optional bitrate, - @JsonProperty("container") Optional container, - @JsonProperty("duration") Optional duration, + @JsonProperty("aspectRatio") Optional aspectRatio, + @JsonProperty("audioChannels") Optional audioChannels, + @JsonProperty("audioCodec") Optional audioCodec, + @JsonProperty("audioProfile") Optional audioProfile, + @JsonProperty("bitrate") Optional bitrate, + @JsonProperty("container") Optional container, + @JsonProperty("duration") Optional duration, @JsonProperty("has64bitOffsets") Optional has64bitOffsets, @JsonProperty("hasVoiceActivity") Optional hasVoiceActivity, - @JsonProperty("height") Optional height, - @JsonProperty("id") Optional id, + @JsonProperty("height") Optional height, + @JsonProperty("id") long id, @JsonProperty("optimizedForStreaming") Optional optimizedForStreaming, @JsonProperty("Part") Optional> part, - @JsonProperty("videoCodec") Optional videoCodec, - @JsonProperty("videoFrameRate") Optional videoFrameRate, - @JsonProperty("videoProfile") Optional videoProfile, - @JsonProperty("videoResolution") Optional videoResolution, - @JsonProperty("width") Optional width) { + @JsonProperty("videoCodec") Optional videoCodec, + @JsonProperty("videoFrameRate") Optional videoFrameRate, + @JsonProperty("videoProfile") Optional videoProfile, + @JsonProperty("videoResolution") Optional videoResolution, + @JsonProperty("width") Optional width) { Utils.checkNotNull(aspectRatio, "aspectRatio"); Utils.checkNotNull(audioChannels, "audioChannels"); Utils.checkNotNull(audioCodec, "audioCodec"); @@ -182,50 +182,48 @@ public class Media { this.additionalProperties = new HashMap<>(); } - public Media() { + public Media( + long id) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), id, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } @JsonIgnore - public Optional aspectRatio() { + public Optional aspectRatio() { return aspectRatio; } @JsonIgnore - public Optional audioChannels() { + public Optional audioChannels() { return audioChannels; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audioCodec() { - return (Optional) audioCodec; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional audioProfile() { - return (Optional) audioProfile; + public Optional audioCodec() { + return audioCodec; } @JsonIgnore - public Optional bitrate() { + public Optional audioProfile() { + return audioProfile; + } + + @JsonIgnore + public Optional bitrate() { return bitrate; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional container() { - return (Optional) container; + public Optional container() { + return container; } @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -240,12 +238,12 @@ public class Media { } @JsonIgnore - public Optional height() { + public Optional height() { return height; } @JsonIgnore - public Optional id() { + public long id() { return id; } @@ -260,32 +258,28 @@ public class Media { return (Optional>) part; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional videoCodec() { - return (Optional) videoCodec; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional videoFrameRate() { - return (Optional) videoFrameRate; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional videoProfile() { - return (Optional) videoProfile; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional videoResolution() { - return (Optional) videoResolution; + public Optional videoCodec() { + return videoCodec; } @JsonIgnore - public Optional width() { + public Optional videoFrameRate() { + return videoFrameRate; + } + + @JsonIgnore + public Optional videoProfile() { + return videoProfile; + } + + @JsonIgnore + public Optional videoResolution() { + return videoResolution; + } + + @JsonIgnore + public Optional width() { return width; } @@ -299,92 +293,92 @@ public class Media { } - public Media withAspectRatio(double aspectRatio) { + public Media withAspectRatio(float aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = Optional.ofNullable(aspectRatio); return this; } - public Media withAspectRatio(Optional aspectRatio) { + public Media withAspectRatio(Optional aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = aspectRatio; return this; } - public Media withAudioChannels(long audioChannels) { + public Media withAudioChannels(int audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = Optional.ofNullable(audioChannels); return this; } - public Media withAudioChannels(Optional audioChannels) { + public Media withAudioChannels(Optional audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = audioChannels; return this; } - public Media withAudioCodec(Object audioCodec) { + public Media withAudioCodec(String audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = Optional.ofNullable(audioCodec); return this; } - public Media withAudioCodec(Optional audioCodec) { + public Media withAudioCodec(Optional audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = audioCodec; return this; } - public Media withAudioProfile(Object audioProfile) { + public Media withAudioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public Media withAudioProfile(Optional audioProfile) { + public Media withAudioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; } - public Media withBitrate(long bitrate) { + public Media withBitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public Media withBitrate(Optional bitrate) { + public Media withBitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; } - public Media withContainer(Object container) { + public Media withContainer(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; } - public Media withContainer(Optional container) { + public Media withContainer(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; } - public Media withDuration(long duration) { + public Media withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; } - public Media withDuration(Optional duration) { + public Media withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -416,27 +410,20 @@ public class Media { return this; } - public Media withHeight(long height) { + public Media withHeight(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public Media withHeight(Optional height) { + public Media withHeight(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; } public Media withId(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - - public Media withId(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; @@ -468,66 +455,66 @@ public class Media { return this; } - public Media withVideoCodec(Object videoCodec) { + public Media withVideoCodec(String videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = Optional.ofNullable(videoCodec); return this; } - public Media withVideoCodec(Optional videoCodec) { + public Media withVideoCodec(Optional videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = videoCodec; return this; } - public Media withVideoFrameRate(Object videoFrameRate) { + public Media withVideoFrameRate(String videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = Optional.ofNullable(videoFrameRate); return this; } - public Media withVideoFrameRate(Optional videoFrameRate) { + public Media withVideoFrameRate(Optional videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = videoFrameRate; return this; } - public Media withVideoProfile(Object videoProfile) { + public Media withVideoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public Media withVideoProfile(Optional videoProfile) { + public Media withVideoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; } - public Media withVideoResolution(Object videoResolution) { + public Media withVideoResolution(String videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = Optional.ofNullable(videoResolution); return this; } - public Media withVideoResolution(Optional videoResolution) { + public Media withVideoResolution(Optional videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = videoResolution; return this; } - public Media withWidth(long width) { + public Media withWidth(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public Media withWidth(Optional width) { + public Media withWidth(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; @@ -616,41 +603,41 @@ public class Media { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional aspectRatio = Optional.empty(); + private Optional aspectRatio = Optional.empty(); - private Optional audioChannels = Optional.empty(); + private Optional audioChannels = Optional.empty(); - private Optional audioCodec = Optional.empty(); + private Optional audioCodec = Optional.empty(); - private Optional audioProfile = Optional.empty(); + private Optional audioProfile = Optional.empty(); - private Optional bitrate = Optional.empty(); + private Optional bitrate = Optional.empty(); - private Optional container = Optional.empty(); + private Optional container = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional has64bitOffsets = Optional.empty(); private Optional hasVoiceActivity = Optional.empty(); - private Optional height = Optional.empty(); + private Optional height = Optional.empty(); - private Optional id = Optional.empty(); + private Long id; private Optional optimizedForStreaming = Optional.empty(); private Optional> part = Optional.empty(); - private Optional videoCodec = Optional.empty(); + private Optional videoCodec = Optional.empty(); - private Optional videoFrameRate = Optional.empty(); + private Optional videoFrameRate = Optional.empty(); - private Optional videoProfile = Optional.empty(); + private Optional videoProfile = Optional.empty(); - private Optional videoResolution = Optional.empty(); + private Optional videoResolution = Optional.empty(); - private Optional width = Optional.empty(); + private Optional width = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -659,91 +646,91 @@ public class Media { } - public Builder aspectRatio(double aspectRatio) { + public Builder aspectRatio(float aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = Optional.ofNullable(aspectRatio); return this; } - public Builder aspectRatio(Optional aspectRatio) { + public Builder aspectRatio(Optional aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = aspectRatio; return this; } - public Builder audioChannels(long audioChannels) { + public Builder audioChannels(int audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = Optional.ofNullable(audioChannels); return this; } - public Builder audioChannels(Optional audioChannels) { + public Builder audioChannels(Optional audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = audioChannels; return this; } - public Builder audioCodec(Object audioCodec) { + public Builder audioCodec(String audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = Optional.ofNullable(audioCodec); return this; } - public Builder audioCodec(Optional audioCodec) { + public Builder audioCodec(Optional audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = audioCodec; return this; } - public Builder audioProfile(Object audioProfile) { + public Builder audioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public Builder audioProfile(Optional audioProfile) { + public Builder audioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; } - public Builder bitrate(long bitrate) { + public Builder bitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public Builder bitrate(Optional bitrate) { + public Builder bitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; } - public Builder container(Object container) { + public Builder container(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; } - public Builder container(Optional container) { + public Builder container(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; } - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; } - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -776,13 +763,13 @@ public class Media { } - public Builder height(long height) { + public Builder height(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public Builder height(Optional height) { + public Builder height(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; @@ -790,12 +777,6 @@ public class Media { public Builder id(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - public Builder id(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; @@ -828,65 +809,65 @@ public class Media { } - public Builder videoCodec(Object videoCodec) { + public Builder videoCodec(String videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = Optional.ofNullable(videoCodec); return this; } - public Builder videoCodec(Optional videoCodec) { + public Builder videoCodec(Optional videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = videoCodec; return this; } - public Builder videoFrameRate(Object videoFrameRate) { + public Builder videoFrameRate(String videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = Optional.ofNullable(videoFrameRate); return this; } - public Builder videoFrameRate(Optional videoFrameRate) { + public Builder videoFrameRate(Optional videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = videoFrameRate; return this; } - public Builder videoProfile(Object videoProfile) { + public Builder videoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public Builder videoProfile(Optional videoProfile) { + public Builder videoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; } - public Builder videoResolution(Object videoResolution) { + public Builder videoResolution(String videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = Optional.ofNullable(videoResolution); return this; } - public Builder videoResolution(Optional videoResolution) { + public Builder videoResolution(Optional videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = videoResolution; return this; } - public Builder width(long width) { + public Builder width(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public Builder width(Optional width) { + public Builder width(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionGuids.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionGuids.java new file mode 100644 index 00000000..20133077 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionGuids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class MediaContainerWithDecisionGuids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public MediaContainerWithDecisionGuids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public MediaContainerWithDecisionGuids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaContainerWithDecisionGuids other = (MediaContainerWithDecisionGuids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(MediaContainerWithDecisionGuids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public MediaContainerWithDecisionGuids build() { + + return new MediaContainerWithDecisionGuids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMedia.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMedia.java index 4e77fee0..77a26b2c 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMedia.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMedia.java @@ -12,7 +12,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; @@ -32,37 +33,37 @@ public class MediaContainerWithDecisionMedia { @JsonInclude(Include.NON_ABSENT) @JsonProperty("aspectRatio") - private Optional aspectRatio; + private Optional aspectRatio; @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioChannels") - private Optional audioChannels; + private Optional audioChannels; @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioCodec") - private Optional audioCodec; + private Optional audioCodec; @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioProfile") - private Optional audioProfile; + private Optional audioProfile; @JsonInclude(Include.NON_ABSENT) @JsonProperty("bitrate") - private Optional bitrate; + private Optional bitrate; @JsonInclude(Include.NON_ABSENT) @JsonProperty("container") - private Optional container; + private Optional container; @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; @JsonInclude(Include.NON_ABSENT) @@ -77,12 +78,11 @@ public class MediaContainerWithDecisionMedia { @JsonInclude(Include.NON_ABSENT) @JsonProperty("height") - private Optional height; + private Optional height; - @JsonInclude(Include.NON_ABSENT) @JsonProperty("id") - private Optional id; + private long id; @JsonInclude(Include.NON_ABSENT) @@ -97,27 +97,27 @@ public class MediaContainerWithDecisionMedia { @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoCodec") - private Optional videoCodec; + private Optional videoCodec; @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoFrameRate") - private Optional videoFrameRate; + private Optional videoFrameRate; @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoProfile") - private Optional videoProfile; + private Optional videoProfile; @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoResolution") - private Optional videoResolution; + private Optional videoResolution; @JsonInclude(Include.NON_ABSENT) @JsonProperty("width") - private Optional width; + private Optional width; @JsonInclude(Include.NON_ABSENT) @@ -140,24 +140,24 @@ public class MediaContainerWithDecisionMedia { @JsonCreator public MediaContainerWithDecisionMedia( - @JsonProperty("aspectRatio") Optional aspectRatio, - @JsonProperty("audioChannels") Optional audioChannels, - @JsonProperty("audioCodec") Optional audioCodec, - @JsonProperty("audioProfile") Optional audioProfile, - @JsonProperty("bitrate") Optional bitrate, - @JsonProperty("container") Optional container, - @JsonProperty("duration") Optional duration, + @JsonProperty("aspectRatio") Optional aspectRatio, + @JsonProperty("audioChannels") Optional audioChannels, + @JsonProperty("audioCodec") Optional audioCodec, + @JsonProperty("audioProfile") Optional audioProfile, + @JsonProperty("bitrate") Optional bitrate, + @JsonProperty("container") Optional container, + @JsonProperty("duration") Optional duration, @JsonProperty("has64bitOffsets") Optional has64bitOffsets, @JsonProperty("hasVoiceActivity") Optional hasVoiceActivity, - @JsonProperty("height") Optional height, - @JsonProperty("id") Optional id, + @JsonProperty("height") Optional height, + @JsonProperty("id") long id, @JsonProperty("optimizedForStreaming") Optional optimizedForStreaming, @JsonProperty("Part") Optional> part, - @JsonProperty("videoCodec") Optional videoCodec, - @JsonProperty("videoFrameRate") Optional videoFrameRate, - @JsonProperty("videoProfile") Optional videoProfile, - @JsonProperty("videoResolution") Optional videoResolution, - @JsonProperty("width") Optional width, + @JsonProperty("videoCodec") Optional videoCodec, + @JsonProperty("videoFrameRate") Optional videoFrameRate, + @JsonProperty("videoProfile") Optional videoProfile, + @JsonProperty("videoResolution") Optional videoResolution, + @JsonProperty("width") Optional width, @JsonProperty("abr") Optional abr, @JsonProperty("resourceSession") Optional resourceSession, @JsonProperty("selected") Optional selected) { @@ -206,51 +206,49 @@ public class MediaContainerWithDecisionMedia { this.additionalProperties = new HashMap<>(); } - public MediaContainerWithDecisionMedia() { + public MediaContainerWithDecisionMedia( + long id) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), id, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } @JsonIgnore - public Optional aspectRatio() { + public Optional aspectRatio() { return aspectRatio; } @JsonIgnore - public Optional audioChannels() { + public Optional audioChannels() { return audioChannels; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audioCodec() { - return (Optional) audioCodec; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional audioProfile() { - return (Optional) audioProfile; + public Optional audioCodec() { + return audioCodec; } @JsonIgnore - public Optional bitrate() { + public Optional audioProfile() { + return audioProfile; + } + + @JsonIgnore + public Optional bitrate() { return bitrate; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional container() { - return (Optional) container; + public Optional container() { + return container; } @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -265,12 +263,12 @@ public class MediaContainerWithDecisionMedia { } @JsonIgnore - public Optional height() { + public Optional height() { return height; } @JsonIgnore - public Optional id() { + public long id() { return id; } @@ -285,32 +283,28 @@ public class MediaContainerWithDecisionMedia { return (Optional>) part; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional videoCodec() { - return (Optional) videoCodec; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional videoFrameRate() { - return (Optional) videoFrameRate; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional videoProfile() { - return (Optional) videoProfile; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional videoResolution() { - return (Optional) videoResolution; + public Optional videoCodec() { + return videoCodec; } @JsonIgnore - public Optional width() { + public Optional videoFrameRate() { + return videoFrameRate; + } + + @JsonIgnore + public Optional videoProfile() { + return videoProfile; + } + + @JsonIgnore + public Optional videoResolution() { + return videoResolution; + } + + @JsonIgnore + public Optional width() { return width; } @@ -339,92 +333,92 @@ public class MediaContainerWithDecisionMedia { } - public MediaContainerWithDecisionMedia withAspectRatio(double aspectRatio) { + public MediaContainerWithDecisionMedia withAspectRatio(float aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = Optional.ofNullable(aspectRatio); return this; } - public MediaContainerWithDecisionMedia withAspectRatio(Optional aspectRatio) { + public MediaContainerWithDecisionMedia withAspectRatio(Optional aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = aspectRatio; return this; } - public MediaContainerWithDecisionMedia withAudioChannels(long audioChannels) { + public MediaContainerWithDecisionMedia withAudioChannels(int audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = Optional.ofNullable(audioChannels); return this; } - public MediaContainerWithDecisionMedia withAudioChannels(Optional audioChannels) { + public MediaContainerWithDecisionMedia withAudioChannels(Optional audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = audioChannels; return this; } - public MediaContainerWithDecisionMedia withAudioCodec(Object audioCodec) { + public MediaContainerWithDecisionMedia withAudioCodec(String audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = Optional.ofNullable(audioCodec); return this; } - public MediaContainerWithDecisionMedia withAudioCodec(Optional audioCodec) { + public MediaContainerWithDecisionMedia withAudioCodec(Optional audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = audioCodec; return this; } - public MediaContainerWithDecisionMedia withAudioProfile(Object audioProfile) { + public MediaContainerWithDecisionMedia withAudioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public MediaContainerWithDecisionMedia withAudioProfile(Optional audioProfile) { + public MediaContainerWithDecisionMedia withAudioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; } - public MediaContainerWithDecisionMedia withBitrate(long bitrate) { + public MediaContainerWithDecisionMedia withBitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public MediaContainerWithDecisionMedia withBitrate(Optional bitrate) { + public MediaContainerWithDecisionMedia withBitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; } - public MediaContainerWithDecisionMedia withContainer(Object container) { + public MediaContainerWithDecisionMedia withContainer(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; } - public MediaContainerWithDecisionMedia withContainer(Optional container) { + public MediaContainerWithDecisionMedia withContainer(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; } - public MediaContainerWithDecisionMedia withDuration(long duration) { + public MediaContainerWithDecisionMedia withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; } - public MediaContainerWithDecisionMedia withDuration(Optional duration) { + public MediaContainerWithDecisionMedia withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -456,27 +450,20 @@ public class MediaContainerWithDecisionMedia { return this; } - public MediaContainerWithDecisionMedia withHeight(long height) { + public MediaContainerWithDecisionMedia withHeight(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public MediaContainerWithDecisionMedia withHeight(Optional height) { + public MediaContainerWithDecisionMedia withHeight(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; } public MediaContainerWithDecisionMedia withId(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - - public MediaContainerWithDecisionMedia withId(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; @@ -508,66 +495,66 @@ public class MediaContainerWithDecisionMedia { return this; } - public MediaContainerWithDecisionMedia withVideoCodec(Object videoCodec) { + public MediaContainerWithDecisionMedia withVideoCodec(String videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = Optional.ofNullable(videoCodec); return this; } - public MediaContainerWithDecisionMedia withVideoCodec(Optional videoCodec) { + public MediaContainerWithDecisionMedia withVideoCodec(Optional videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = videoCodec; return this; } - public MediaContainerWithDecisionMedia withVideoFrameRate(Object videoFrameRate) { + public MediaContainerWithDecisionMedia withVideoFrameRate(String videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = Optional.ofNullable(videoFrameRate); return this; } - public MediaContainerWithDecisionMedia withVideoFrameRate(Optional videoFrameRate) { + public MediaContainerWithDecisionMedia withVideoFrameRate(Optional videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = videoFrameRate; return this; } - public MediaContainerWithDecisionMedia withVideoProfile(Object videoProfile) { + public MediaContainerWithDecisionMedia withVideoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public MediaContainerWithDecisionMedia withVideoProfile(Optional videoProfile) { + public MediaContainerWithDecisionMedia withVideoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; } - public MediaContainerWithDecisionMedia withVideoResolution(Object videoResolution) { + public MediaContainerWithDecisionMedia withVideoResolution(String videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = Optional.ofNullable(videoResolution); return this; } - public MediaContainerWithDecisionMedia withVideoResolution(Optional videoResolution) { + public MediaContainerWithDecisionMedia withVideoResolution(Optional videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = videoResolution; return this; } - public MediaContainerWithDecisionMedia withWidth(long width) { + public MediaContainerWithDecisionMedia withWidth(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public MediaContainerWithDecisionMedia withWidth(Optional width) { + public MediaContainerWithDecisionMedia withWidth(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; @@ -702,41 +689,41 @@ public class MediaContainerWithDecisionMedia { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional aspectRatio = Optional.empty(); + private Optional aspectRatio = Optional.empty(); - private Optional audioChannels = Optional.empty(); + private Optional audioChannels = Optional.empty(); - private Optional audioCodec = Optional.empty(); + private Optional audioCodec = Optional.empty(); - private Optional audioProfile = Optional.empty(); + private Optional audioProfile = Optional.empty(); - private Optional bitrate = Optional.empty(); + private Optional bitrate = Optional.empty(); - private Optional container = Optional.empty(); + private Optional container = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional has64bitOffsets = Optional.empty(); private Optional hasVoiceActivity = Optional.empty(); - private Optional height = Optional.empty(); + private Optional height = Optional.empty(); - private Optional id = Optional.empty(); + private Long id; private Optional optimizedForStreaming = Optional.empty(); private Optional> part = Optional.empty(); - private Optional videoCodec = Optional.empty(); + private Optional videoCodec = Optional.empty(); - private Optional videoFrameRate = Optional.empty(); + private Optional videoFrameRate = Optional.empty(); - private Optional videoProfile = Optional.empty(); + private Optional videoProfile = Optional.empty(); - private Optional videoResolution = Optional.empty(); + private Optional videoResolution = Optional.empty(); - private Optional width = Optional.empty(); + private Optional width = Optional.empty(); private Optional abr = Optional.empty(); @@ -751,91 +738,91 @@ public class MediaContainerWithDecisionMedia { } - public Builder aspectRatio(double aspectRatio) { + public Builder aspectRatio(float aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = Optional.ofNullable(aspectRatio); return this; } - public Builder aspectRatio(Optional aspectRatio) { + public Builder aspectRatio(Optional aspectRatio) { Utils.checkNotNull(aspectRatio, "aspectRatio"); this.aspectRatio = aspectRatio; return this; } - public Builder audioChannels(long audioChannels) { + public Builder audioChannels(int audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = Optional.ofNullable(audioChannels); return this; } - public Builder audioChannels(Optional audioChannels) { + public Builder audioChannels(Optional audioChannels) { Utils.checkNotNull(audioChannels, "audioChannels"); this.audioChannels = audioChannels; return this; } - public Builder audioCodec(Object audioCodec) { + public Builder audioCodec(String audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = Optional.ofNullable(audioCodec); return this; } - public Builder audioCodec(Optional audioCodec) { + public Builder audioCodec(Optional audioCodec) { Utils.checkNotNull(audioCodec, "audioCodec"); this.audioCodec = audioCodec; return this; } - public Builder audioProfile(Object audioProfile) { + public Builder audioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public Builder audioProfile(Optional audioProfile) { + public Builder audioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; } - public Builder bitrate(long bitrate) { + public Builder bitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public Builder bitrate(Optional bitrate) { + public Builder bitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; } - public Builder container(Object container) { + public Builder container(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; } - public Builder container(Optional container) { + public Builder container(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; } - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; } - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -868,13 +855,13 @@ public class MediaContainerWithDecisionMedia { } - public Builder height(long height) { + public Builder height(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public Builder height(Optional height) { + public Builder height(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; @@ -882,12 +869,6 @@ public class MediaContainerWithDecisionMedia { public Builder id(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - public Builder id(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; @@ -920,65 +901,65 @@ public class MediaContainerWithDecisionMedia { } - public Builder videoCodec(Object videoCodec) { + public Builder videoCodec(String videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = Optional.ofNullable(videoCodec); return this; } - public Builder videoCodec(Optional videoCodec) { + public Builder videoCodec(Optional videoCodec) { Utils.checkNotNull(videoCodec, "videoCodec"); this.videoCodec = videoCodec; return this; } - public Builder videoFrameRate(Object videoFrameRate) { + public Builder videoFrameRate(String videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = Optional.ofNullable(videoFrameRate); return this; } - public Builder videoFrameRate(Optional videoFrameRate) { + public Builder videoFrameRate(Optional videoFrameRate) { Utils.checkNotNull(videoFrameRate, "videoFrameRate"); this.videoFrameRate = videoFrameRate; return this; } - public Builder videoProfile(Object videoProfile) { + public Builder videoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public Builder videoProfile(Optional videoProfile) { + public Builder videoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; } - public Builder videoResolution(Object videoResolution) { + public Builder videoResolution(String videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = Optional.ofNullable(videoResolution); return this; } - public Builder videoResolution(Optional videoResolution) { + public Builder videoResolution(Optional videoResolution) { Utils.checkNotNull(videoResolution, "videoResolution"); this.videoResolution = videoResolution; return this; } - public Builder width(long width) { + public Builder width(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public Builder width(Optional width) { + public Builder width(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMetadata.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMetadata.java index 8522c4e8..09efcc1a 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMetadata.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionMetadata.java @@ -12,12 +12,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,51 +38,48 @@ public class MediaContainerWithDecisionMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -92,28 +91,35 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -130,7 +136,7 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * Typically only seen in metadata at a library's top level @@ -151,6 +157,13 @@ public class MediaContainerWithDecisionMetadata { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -193,17 +206,24 @@ public class MediaContainerWithDecisionMetadata { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -215,18 +235,15 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -236,7 +253,7 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; @JsonInclude(Include.NON_ABSENT) @@ -248,14 +265,21 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -269,7 +293,7 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -304,7 +328,7 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -318,7 +342,7 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -330,21 +354,21 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -391,49 +415,49 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -447,28 +471,28 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -480,7 +504,7 @@ public class MediaContainerWithDecisionMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; @JsonIgnore @@ -488,73 +512,77 @@ public class MediaContainerWithDecisionMetadata { @JsonCreator public MediaContainerWithDecisionMetadata( - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("composite") Optional composite, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, - @JsonProperty("duration") Optional duration, + @JsonProperty("duration") Optional duration, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, @JsonProperty("lastViewedAt") Optional lastViewedAt, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year) { + @JsonProperty("year") Optional year) { Utils.checkNotNull(title, "title"); Utils.checkNotNull(type, "type"); Utils.checkNotNull(absoluteIndex, "absoluteIndex"); @@ -565,6 +593,7 @@ public class MediaContainerWithDecisionMetadata { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); @@ -573,6 +602,7 @@ public class MediaContainerWithDecisionMetadata { Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -580,6 +610,7 @@ public class MediaContainerWithDecisionMetadata { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -589,6 +620,7 @@ public class MediaContainerWithDecisionMetadata { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -632,6 +664,7 @@ public class MediaContainerWithDecisionMetadata { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.composite = composite; this.contentRating = contentRating; this.country = country; @@ -640,6 +673,7 @@ public class MediaContainerWithDecisionMetadata { this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -647,6 +681,7 @@ public class MediaContainerWithDecisionMetadata { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -656,6 +691,7 @@ public class MediaContainerWithDecisionMetadata { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -692,8 +728,22 @@ public class MediaContainerWithDecisionMetadata { this.additionalProperties = new HashMap<>(); } - public MediaContainerWithDecisionMetadata() { - this(Optional.empty(), Optional.empty(), Optional.empty(), + public MediaContainerWithDecisionMetadata( + String title, + String type, + long addedAt, + String key) { + this(title, type, Optional.empty(), + addedAt, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -706,41 +756,30 @@ public class MediaContainerWithDecisionMetadata { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty()); + Optional.empty(), Optional.empty()); } /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -748,34 +787,32 @@ public class MediaContainerWithDecisionMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -787,37 +824,41 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -836,7 +877,7 @@ public class MediaContainerWithDecisionMetadata { * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -863,6 +904,14 @@ public class MediaContainerWithDecisionMetadata { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -911,19 +960,26 @@ public class MediaContainerWithDecisionMetadata { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -936,22 +992,18 @@ public class MediaContainerWithDecisionMetadata { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -961,7 +1013,7 @@ public class MediaContainerWithDecisionMetadata { * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -974,19 +1026,25 @@ public class MediaContainerWithDecisionMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1001,7 +1059,7 @@ public class MediaContainerWithDecisionMetadata { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1040,10 +1098,9 @@ public class MediaContainerWithDecisionMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1058,7 +1115,7 @@ public class MediaContainerWithDecisionMetadata { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1072,26 +1129,24 @@ public class MediaContainerWithDecisionMetadata { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1144,64 +1199,57 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1216,7 +1264,7 @@ public class MediaContainerWithDecisionMetadata { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1224,7 +1272,7 @@ public class MediaContainerWithDecisionMetadata { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1232,7 +1280,7 @@ public class MediaContainerWithDecisionMetadata { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1240,7 +1288,7 @@ public class MediaContainerWithDecisionMetadata { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1254,7 +1302,7 @@ public class MediaContainerWithDecisionMetadata { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1271,17 +1319,7 @@ public class MediaContainerWithDecisionMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public MediaContainerWithDecisionMetadata withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public MediaContainerWithDecisionMetadata withTitle(Optional title) { + public MediaContainerWithDecisionMetadata withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1290,17 +1328,7 @@ public class MediaContainerWithDecisionMetadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public MediaContainerWithDecisionMetadata withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public MediaContainerWithDecisionMetadata withType(Optional type) { + public MediaContainerWithDecisionMetadata withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1309,7 +1337,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public MediaContainerWithDecisionMetadata withAbsoluteIndex(long absoluteIndex) { + public MediaContainerWithDecisionMetadata withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1319,7 +1347,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public MediaContainerWithDecisionMetadata withAbsoluteIndex(Optional absoluteIndex) { + public MediaContainerWithDecisionMetadata withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1329,16 +1357,6 @@ public class MediaContainerWithDecisionMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public MediaContainerWithDecisionMetadata withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public MediaContainerWithDecisionMetadata withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1347,7 +1365,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the background artwork for the item. */ - public MediaContainerWithDecisionMetadata withArt(Object art) { + public MediaContainerWithDecisionMetadata withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1357,7 +1375,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the background artwork for the item. */ - public MediaContainerWithDecisionMetadata withArt(Optional art) { + public MediaContainerWithDecisionMetadata withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1366,7 +1384,7 @@ public class MediaContainerWithDecisionMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public MediaContainerWithDecisionMetadata withAudienceRating(double audienceRating) { + public MediaContainerWithDecisionMetadata withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1376,7 +1394,7 @@ public class MediaContainerWithDecisionMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public MediaContainerWithDecisionMetadata withAudienceRating(Optional audienceRating) { + public MediaContainerWithDecisionMetadata withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1385,7 +1403,7 @@ public class MediaContainerWithDecisionMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public MediaContainerWithDecisionMetadata withAudienceRatingImage(Object audienceRatingImage) { + public MediaContainerWithDecisionMetadata withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1395,7 +1413,7 @@ public class MediaContainerWithDecisionMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public MediaContainerWithDecisionMetadata withAudienceRatingImage(Optional audienceRatingImage) { + public MediaContainerWithDecisionMetadata withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1417,7 +1435,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a banner graphic for the item. */ - public MediaContainerWithDecisionMetadata withBanner(Object banner) { + public MediaContainerWithDecisionMetadata withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1427,7 +1445,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a banner graphic for the item. */ - public MediaContainerWithDecisionMetadata withBanner(Optional banner) { + public MediaContainerWithDecisionMetadata withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1436,7 +1454,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public MediaContainerWithDecisionMetadata withChapterSource(Object chapterSource) { + public MediaContainerWithDecisionMetadata withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1446,16 +1464,35 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public MediaContainerWithDecisionMetadata withChapterSource(Optional chapterSource) { + public MediaContainerWithDecisionMetadata withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public MediaContainerWithDecisionMetadata withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public MediaContainerWithDecisionMetadata withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public MediaContainerWithDecisionMetadata withComposite(Object composite) { + public MediaContainerWithDecisionMetadata withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1465,7 +1502,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public MediaContainerWithDecisionMetadata withComposite(Optional composite) { + public MediaContainerWithDecisionMetadata withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1474,7 +1511,7 @@ public class MediaContainerWithDecisionMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public MediaContainerWithDecisionMetadata withContentRating(Object contentRating) { + public MediaContainerWithDecisionMetadata withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1484,7 +1521,7 @@ public class MediaContainerWithDecisionMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public MediaContainerWithDecisionMetadata withContentRating(Optional contentRating) { + public MediaContainerWithDecisionMetadata withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1519,7 +1556,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public MediaContainerWithDecisionMetadata withDuration(long duration) { + public MediaContainerWithDecisionMetadata withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1529,7 +1566,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public MediaContainerWithDecisionMetadata withDuration(Optional duration) { + public MediaContainerWithDecisionMetadata withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1586,6 +1623,25 @@ public class MediaContainerWithDecisionMetadata { return this; } + /** + * The GUID of the grandparent media item. + */ + public MediaContainerWithDecisionMetadata withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public MediaContainerWithDecisionMetadata withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1700,23 +1756,42 @@ public class MediaContainerWithDecisionMetadata { return this; } - public MediaContainerWithDecisionMetadata withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public MediaContainerWithDecisionMetadata withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public MediaContainerWithDecisionMetadata withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public MediaContainerWithDecisionMetadata withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public MediaContainerWithDecisionMetadata withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public MediaContainerWithDecisionMetadata withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public MediaContainerWithDecisionMetadata withHero(Object hero) { + public MediaContainerWithDecisionMetadata withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1726,7 +1801,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a hero image for the item. */ - public MediaContainerWithDecisionMetadata withHero(Optional hero) { + public MediaContainerWithDecisionMetadata withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1748,7 +1823,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public MediaContainerWithDecisionMetadata withIndex(long index) { + public MediaContainerWithDecisionMetadata withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1758,7 +1833,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public MediaContainerWithDecisionMetadata withIndex(Optional index) { + public MediaContainerWithDecisionMetadata withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1767,25 +1842,12 @@ public class MediaContainerWithDecisionMetadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public MediaContainerWithDecisionMetadata withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public MediaContainerWithDecisionMetadata withKey(Optional key) { + public MediaContainerWithDecisionMetadata withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public MediaContainerWithDecisionMetadata withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1793,9 +1855,6 @@ public class MediaContainerWithDecisionMetadata { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public MediaContainerWithDecisionMetadata withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1805,7 +1864,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public MediaContainerWithDecisionMetadata withLeafCount(long leafCount) { + public MediaContainerWithDecisionMetadata withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1815,7 +1874,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public MediaContainerWithDecisionMetadata withLeafCount(Optional leafCount) { + public MediaContainerWithDecisionMetadata withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1837,7 +1896,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public MediaContainerWithDecisionMetadata withOriginallyAvailableAt(Object originallyAvailableAt) { + public MediaContainerWithDecisionMetadata withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1847,7 +1906,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public MediaContainerWithDecisionMetadata withOriginallyAvailableAt(Optional originallyAvailableAt) { + public MediaContainerWithDecisionMetadata withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -1856,7 +1915,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public MediaContainerWithDecisionMetadata withOriginalTitle(Object originalTitle) { + public MediaContainerWithDecisionMetadata withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -1866,12 +1925,31 @@ public class MediaContainerWithDecisionMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public MediaContainerWithDecisionMetadata withOriginalTitle(Optional originalTitle) { + public MediaContainerWithDecisionMetadata withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public MediaContainerWithDecisionMetadata withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public MediaContainerWithDecisionMetadata withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -1894,7 +1972,7 @@ public class MediaContainerWithDecisionMetadata { /** * The `index` of the parent */ - public MediaContainerWithDecisionMetadata withParentIndex(long parentIndex) { + public MediaContainerWithDecisionMetadata withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -1904,7 +1982,7 @@ public class MediaContainerWithDecisionMetadata { /** * The `index` of the parent */ - public MediaContainerWithDecisionMetadata withParentIndex(Optional parentIndex) { + public MediaContainerWithDecisionMetadata withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -1989,7 +2067,7 @@ public class MediaContainerWithDecisionMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public MediaContainerWithDecisionMetadata withPrimaryExtraKey(Object primaryExtraKey) { + public MediaContainerWithDecisionMetadata withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -1999,7 +2077,7 @@ public class MediaContainerWithDecisionMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public MediaContainerWithDecisionMetadata withPrimaryExtraKey(Optional primaryExtraKey) { + public MediaContainerWithDecisionMetadata withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2027,7 +2105,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public MediaContainerWithDecisionMetadata withRating(double rating) { + public MediaContainerWithDecisionMetadata withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2037,7 +2115,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public MediaContainerWithDecisionMetadata withRating(Optional rating) { + public MediaContainerWithDecisionMetadata withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2059,7 +2137,7 @@ public class MediaContainerWithDecisionMetadata { /** * Number of ratings under this metadata */ - public MediaContainerWithDecisionMetadata withRatingCount(long ratingCount) { + public MediaContainerWithDecisionMetadata withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2069,7 +2147,7 @@ public class MediaContainerWithDecisionMetadata { /** * Number of ratings under this metadata */ - public MediaContainerWithDecisionMetadata withRatingCount(Optional ratingCount) { + public MediaContainerWithDecisionMetadata withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2078,7 +2156,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public MediaContainerWithDecisionMetadata withRatingImage(Object ratingImage) { + public MediaContainerWithDecisionMetadata withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2088,7 +2166,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public MediaContainerWithDecisionMetadata withRatingImage(Optional ratingImage) { + public MediaContainerWithDecisionMetadata withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2097,7 +2175,7 @@ public class MediaContainerWithDecisionMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public MediaContainerWithDecisionMetadata withRatingKey(Object ratingKey) { + public MediaContainerWithDecisionMetadata withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2107,7 +2185,7 @@ public class MediaContainerWithDecisionMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public MediaContainerWithDecisionMetadata withRatingKey(Optional ratingKey) { + public MediaContainerWithDecisionMetadata withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2224,7 +2302,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public MediaContainerWithDecisionMetadata withStudio(Object studio) { + public MediaContainerWithDecisionMetadata withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2234,7 +2312,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public MediaContainerWithDecisionMetadata withStudio(Optional studio) { + public MediaContainerWithDecisionMetadata withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2243,7 +2321,7 @@ public class MediaContainerWithDecisionMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public MediaContainerWithDecisionMetadata withSubtype(Object subtype) { + public MediaContainerWithDecisionMetadata withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2253,7 +2331,7 @@ public class MediaContainerWithDecisionMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public MediaContainerWithDecisionMetadata withSubtype(Optional subtype) { + public MediaContainerWithDecisionMetadata withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2262,7 +2340,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public MediaContainerWithDecisionMetadata withSummary(Object summary) { + public MediaContainerWithDecisionMetadata withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2272,7 +2350,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public MediaContainerWithDecisionMetadata withSummary(Optional summary) { + public MediaContainerWithDecisionMetadata withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2281,7 +2359,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public MediaContainerWithDecisionMetadata withTagline(Object tagline) { + public MediaContainerWithDecisionMetadata withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2291,7 +2369,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public MediaContainerWithDecisionMetadata withTagline(Optional tagline) { + public MediaContainerWithDecisionMetadata withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2300,7 +2378,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public MediaContainerWithDecisionMetadata withTheme(Object theme) { + public MediaContainerWithDecisionMetadata withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2310,7 +2388,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public MediaContainerWithDecisionMetadata withTheme(Optional theme) { + public MediaContainerWithDecisionMetadata withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2319,7 +2397,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public MediaContainerWithDecisionMetadata withThumb(Object thumb) { + public MediaContainerWithDecisionMetadata withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2329,7 +2407,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public MediaContainerWithDecisionMetadata withThumb(Optional thumb) { + public MediaContainerWithDecisionMetadata withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2338,7 +2416,7 @@ public class MediaContainerWithDecisionMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public MediaContainerWithDecisionMetadata withTitleSort(Object titleSort) { + public MediaContainerWithDecisionMetadata withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2348,7 +2426,7 @@ public class MediaContainerWithDecisionMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public MediaContainerWithDecisionMetadata withTitleSort(Optional titleSort) { + public MediaContainerWithDecisionMetadata withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2376,7 +2454,7 @@ public class MediaContainerWithDecisionMetadata { /** * When the user has rated an item, this contains the user rating */ - public MediaContainerWithDecisionMetadata withUserRating(double userRating) { + public MediaContainerWithDecisionMetadata withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2386,7 +2464,7 @@ public class MediaContainerWithDecisionMetadata { /** * When the user has rated an item, this contains the user rating */ - public MediaContainerWithDecisionMetadata withUserRating(Optional userRating) { + public MediaContainerWithDecisionMetadata withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2395,7 +2473,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public MediaContainerWithDecisionMetadata withViewCount(long viewCount) { + public MediaContainerWithDecisionMetadata withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2405,7 +2483,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public MediaContainerWithDecisionMetadata withViewCount(Optional viewCount) { + public MediaContainerWithDecisionMetadata withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2414,7 +2492,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public MediaContainerWithDecisionMetadata withViewedLeafCount(long viewedLeafCount) { + public MediaContainerWithDecisionMetadata withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2424,7 +2502,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public MediaContainerWithDecisionMetadata withViewedLeafCount(Optional viewedLeafCount) { + public MediaContainerWithDecisionMetadata withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2433,7 +2511,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public MediaContainerWithDecisionMetadata withViewOffset(long viewOffset) { + public MediaContainerWithDecisionMetadata withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2443,7 +2521,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public MediaContainerWithDecisionMetadata withViewOffset(Optional viewOffset) { + public MediaContainerWithDecisionMetadata withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2465,7 +2543,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public MediaContainerWithDecisionMetadata withYear(long year) { + public MediaContainerWithDecisionMetadata withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2475,7 +2553,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public MediaContainerWithDecisionMetadata withYear(Optional year) { + public MediaContainerWithDecisionMetadata withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2514,6 +2592,7 @@ public class MediaContainerWithDecisionMetadata { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.composite, other.composite) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && @@ -2522,6 +2601,7 @@ public class MediaContainerWithDecisionMetadata { Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2529,6 +2609,7 @@ public class MediaContainerWithDecisionMetadata { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2538,6 +2619,7 @@ public class MediaContainerWithDecisionMetadata { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2580,26 +2662,27 @@ public class MediaContainerWithDecisionMetadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, additionalProperties); + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, additionalProperties); } @Override @@ -2615,6 +2698,7 @@ public class MediaContainerWithDecisionMetadata { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "composite", composite, "contentRating", contentRating, "country", country, @@ -2623,6 +2707,7 @@ public class MediaContainerWithDecisionMetadata { "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2630,6 +2715,7 @@ public class MediaContainerWithDecisionMetadata { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2639,6 +2725,7 @@ public class MediaContainerWithDecisionMetadata { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2678,35 +2765,37 @@ public class MediaContainerWithDecisionMetadata { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional childCount = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional composite = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); private Optional> director = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional> filter = Optional.empty(); @@ -2714,6 +2803,8 @@ public class MediaContainerWithDecisionMetadata { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2726,29 +2817,33 @@ public class MediaContainerWithDecisionMetadata { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); - private Optional key = Optional.empty(); + private String key; private Optional lastViewedAt = Optional.empty(); - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2758,19 +2853,19 @@ public class MediaContainerWithDecisionMetadata { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2784,33 +2879,33 @@ public class MediaContainerWithDecisionMetadata { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -2822,16 +2917,7 @@ public class MediaContainerWithDecisionMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -2841,16 +2927,7 @@ public class MediaContainerWithDecisionMetadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -2860,7 +2937,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -2869,7 +2946,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -2880,15 +2957,6 @@ public class MediaContainerWithDecisionMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -2898,7 +2966,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -2907,7 +2975,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -2917,7 +2985,7 @@ public class MediaContainerWithDecisionMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -2926,7 +2994,7 @@ public class MediaContainerWithDecisionMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -2936,7 +3004,7 @@ public class MediaContainerWithDecisionMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -2945,7 +3013,7 @@ public class MediaContainerWithDecisionMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -2968,7 +3036,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -2977,7 +3045,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -2987,7 +3055,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -2996,17 +3064,36 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3015,7 +3102,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3025,7 +3112,7 @@ public class MediaContainerWithDecisionMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3034,7 +3121,7 @@ public class MediaContainerWithDecisionMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3070,7 +3157,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3079,7 +3166,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3137,6 +3224,25 @@ public class MediaContainerWithDecisionMetadata { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3251,23 +3357,42 @@ public class MediaContainerWithDecisionMetadata { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3276,7 +3401,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3299,7 +3424,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3308,7 +3433,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -3318,34 +3443,19 @@ public class MediaContainerWithDecisionMetadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3356,7 +3466,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3365,7 +3475,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3388,7 +3498,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3397,7 +3507,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3407,7 +3517,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3416,13 +3526,32 @@ public class MediaContainerWithDecisionMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3445,7 +3574,7 @@ public class MediaContainerWithDecisionMetadata { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3454,7 +3583,7 @@ public class MediaContainerWithDecisionMetadata { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3540,7 +3669,7 @@ public class MediaContainerWithDecisionMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3549,7 +3678,7 @@ public class MediaContainerWithDecisionMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3578,7 +3707,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3587,7 +3716,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3610,7 +3739,7 @@ public class MediaContainerWithDecisionMetadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3619,7 +3748,7 @@ public class MediaContainerWithDecisionMetadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3629,7 +3758,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3638,7 +3767,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3648,7 +3777,7 @@ public class MediaContainerWithDecisionMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3657,7 +3786,7 @@ public class MediaContainerWithDecisionMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -3775,7 +3904,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -3784,7 +3913,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -3794,7 +3923,7 @@ public class MediaContainerWithDecisionMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -3803,7 +3932,7 @@ public class MediaContainerWithDecisionMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -3813,7 +3942,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -3822,7 +3951,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -3832,7 +3961,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -3841,7 +3970,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -3851,7 +3980,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -3860,7 +3989,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -3870,7 +3999,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -3879,7 +4008,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -3889,7 +4018,7 @@ public class MediaContainerWithDecisionMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -3898,7 +4027,7 @@ public class MediaContainerWithDecisionMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -3927,7 +4056,7 @@ public class MediaContainerWithDecisionMetadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -3936,7 +4065,7 @@ public class MediaContainerWithDecisionMetadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -3946,7 +4075,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -3955,7 +4084,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -3965,7 +4094,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -3974,7 +4103,7 @@ public class MediaContainerWithDecisionMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -3984,7 +4113,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -3993,7 +4122,7 @@ public class MediaContainerWithDecisionMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4016,7 +4145,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4025,7 +4154,7 @@ public class MediaContainerWithDecisionMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4053,26 +4182,27 @@ public class MediaContainerWithDecisionMetadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year) + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionPart.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionPart.java index 54a0c179..5acd1dc5 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionPart.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionPart.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; @@ -28,31 +29,45 @@ import java.util.Optional; *

`Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part. */ public class MediaContainerWithDecisionPart { + /** + * Indicates if the part is accessible. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("accessible") + private Optional accessible; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioProfile") - private Optional audioProfile; + private Optional audioProfile; /** * The container of the media file, such as `mp4` or `mkv` */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("container") - private Optional container; + private Optional container; /** * The duration of the media item, in milliseconds */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; + + /** + * Indicates if the part exists. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("exists") + private Optional exists; /** * The local file path at which the part is stored on the server */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("file") - private Optional file; + private Optional file; @JsonInclude(Include.NON_ABSENT) @@ -60,16 +75,19 @@ public class MediaContainerWithDecisionPart { private Optional has64bitOffsets; - @JsonInclude(Include.NON_ABSENT) @JsonProperty("id") - private Optional id; + private long id; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("indexes") + private Optional indexes; /** * The key from which the media can be streamed */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; @JsonInclude(Include.NON_ABSENT) @@ -91,7 +109,7 @@ public class MediaContainerWithDecisionPart { @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoProfile") - private Optional videoProfile; + private Optional videoProfile; @JsonInclude(Include.NON_ABSENT) @@ -109,25 +127,31 @@ public class MediaContainerWithDecisionPart { @JsonCreator public MediaContainerWithDecisionPart( - @JsonProperty("audioProfile") Optional audioProfile, - @JsonProperty("container") Optional container, - @JsonProperty("duration") Optional duration, - @JsonProperty("file") Optional file, + @JsonProperty("accessible") Optional accessible, + @JsonProperty("audioProfile") Optional audioProfile, + @JsonProperty("container") Optional container, + @JsonProperty("duration") Optional duration, + @JsonProperty("exists") Optional exists, + @JsonProperty("file") Optional file, @JsonProperty("has64bitOffsets") Optional has64bitOffsets, - @JsonProperty("id") Optional id, - @JsonProperty("key") Optional key, + @JsonProperty("id") long id, + @JsonProperty("indexes") Optional indexes, + @JsonProperty("key") String key, @JsonProperty("optimizedForStreaming") Optional optimizedForStreaming, @JsonProperty("size") Optional size, @JsonProperty("Stream") Optional> stream, - @JsonProperty("videoProfile") Optional videoProfile, + @JsonProperty("videoProfile") Optional videoProfile, @JsonProperty("decision") Optional decision, @JsonProperty("selected") Optional selected) { + Utils.checkNotNull(accessible, "accessible"); Utils.checkNotNull(audioProfile, "audioProfile"); Utils.checkNotNull(container, "container"); Utils.checkNotNull(duration, "duration"); + Utils.checkNotNull(exists, "exists"); Utils.checkNotNull(file, "file"); Utils.checkNotNull(has64bitOffsets, "has64bitOffsets"); Utils.checkNotNull(id, "id"); + Utils.checkNotNull(indexes, "indexes"); Utils.checkNotNull(key, "key"); Utils.checkNotNull(optimizedForStreaming, "optimizedForStreaming"); Utils.checkNotNull(size, "size"); @@ -135,12 +159,15 @@ public class MediaContainerWithDecisionPart { Utils.checkNotNull(videoProfile, "videoProfile"); Utils.checkNotNull(decision, "decision"); Utils.checkNotNull(selected, "selected"); + this.accessible = accessible; this.audioProfile = audioProfile; this.container = container; this.duration = duration; + this.exists = exists; this.file = file; this.has64bitOffsets = has64bitOffsets; this.id = id; + this.indexes = indexes; this.key = key; this.optimizedForStreaming = optimizedForStreaming; this.size = size; @@ -151,44 +178,60 @@ public class MediaContainerWithDecisionPart { this.additionalProperties = new HashMap<>(); } - public MediaContainerWithDecisionPart() { + public MediaContainerWithDecisionPart( + long id, + String key) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), id, Optional.empty(), + key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } - @SuppressWarnings("unchecked") + /** + * Indicates if the part is accessible. + */ @JsonIgnore - public Optional audioProfile() { - return (Optional) audioProfile; + public Optional accessible() { + return accessible; + } + + @JsonIgnore + public Optional audioProfile() { + return audioProfile; } /** * The container of the media file, such as `mp4` or `mkv` */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional container() { - return (Optional) container; + public Optional container() { + return container; } /** * The duration of the media item, in milliseconds */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } + /** + * Indicates if the part exists. + */ + @JsonIgnore + public Optional exists() { + return exists; + } + /** * The local file path at which the part is stored on the server */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional file() { - return (Optional) file; + public Optional file() { + return file; } @JsonIgnore @@ -197,17 +240,21 @@ public class MediaContainerWithDecisionPart { } @JsonIgnore - public Optional id() { + public long id() { return id; } + @JsonIgnore + public Optional indexes() { + return indexes; + } + /** * The key from which the media can be streamed */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } @JsonIgnore @@ -229,10 +276,9 @@ public class MediaContainerWithDecisionPart { return (Optional>) stream; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional videoProfile() { - return (Optional) videoProfile; + public Optional videoProfile() { + return videoProfile; } @SuppressWarnings("unchecked") @@ -256,14 +302,33 @@ public class MediaContainerWithDecisionPart { } - public MediaContainerWithDecisionPart withAudioProfile(Object audioProfile) { + /** + * Indicates if the part is accessible. + */ + public MediaContainerWithDecisionPart withAccessible(boolean accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = Optional.ofNullable(accessible); + return this; + } + + + /** + * Indicates if the part is accessible. + */ + public MediaContainerWithDecisionPart withAccessible(Optional accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = accessible; + return this; + } + + public MediaContainerWithDecisionPart withAudioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public MediaContainerWithDecisionPart withAudioProfile(Optional audioProfile) { + public MediaContainerWithDecisionPart withAudioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; @@ -272,7 +337,7 @@ public class MediaContainerWithDecisionPart { /** * The container of the media file, such as `mp4` or `mkv` */ - public MediaContainerWithDecisionPart withContainer(Object container) { + public MediaContainerWithDecisionPart withContainer(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; @@ -282,7 +347,7 @@ public class MediaContainerWithDecisionPart { /** * The container of the media file, such as `mp4` or `mkv` */ - public MediaContainerWithDecisionPart withContainer(Optional container) { + public MediaContainerWithDecisionPart withContainer(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; @@ -291,7 +356,7 @@ public class MediaContainerWithDecisionPart { /** * The duration of the media item, in milliseconds */ - public MediaContainerWithDecisionPart withDuration(long duration) { + public MediaContainerWithDecisionPart withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -301,16 +366,35 @@ public class MediaContainerWithDecisionPart { /** * The duration of the media item, in milliseconds */ - public MediaContainerWithDecisionPart withDuration(Optional duration) { + public MediaContainerWithDecisionPart withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; } + /** + * Indicates if the part exists. + */ + public MediaContainerWithDecisionPart withExists(boolean exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = Optional.ofNullable(exists); + return this; + } + + + /** + * Indicates if the part exists. + */ + public MediaContainerWithDecisionPart withExists(Optional exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = exists; + return this; + } + /** * The local file path at which the part is stored on the server */ - public MediaContainerWithDecisionPart withFile(Object file) { + public MediaContainerWithDecisionPart withFile(String file) { Utils.checkNotNull(file, "file"); this.file = Optional.ofNullable(file); return this; @@ -320,7 +404,7 @@ public class MediaContainerWithDecisionPart { /** * The local file path at which the part is stored on the server */ - public MediaContainerWithDecisionPart withFile(Optional file) { + public MediaContainerWithDecisionPart withFile(Optional file) { Utils.checkNotNull(file, "file"); this.file = file; return this; @@ -340,32 +424,28 @@ public class MediaContainerWithDecisionPart { } public MediaContainerWithDecisionPart withId(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - - public MediaContainerWithDecisionPart withId(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } - /** - * The key from which the media can be streamed - */ - public MediaContainerWithDecisionPart withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); + public MediaContainerWithDecisionPart withIndexes(String indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = Optional.ofNullable(indexes); return this; } + public MediaContainerWithDecisionPart withIndexes(Optional indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = indexes; + return this; + } + /** * The key from which the media can be streamed */ - public MediaContainerWithDecisionPart withKey(Optional key) { + public MediaContainerWithDecisionPart withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; @@ -416,14 +496,14 @@ public class MediaContainerWithDecisionPart { return this; } - public MediaContainerWithDecisionPart withVideoProfile(Object videoProfile) { + public MediaContainerWithDecisionPart withVideoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public MediaContainerWithDecisionPart withVideoProfile(Optional videoProfile) { + public MediaContainerWithDecisionPart withVideoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; @@ -478,12 +558,15 @@ public class MediaContainerWithDecisionPart { } MediaContainerWithDecisionPart other = (MediaContainerWithDecisionPart) o; return + Utils.enhancedDeepEquals(this.accessible, other.accessible) && Utils.enhancedDeepEquals(this.audioProfile, other.audioProfile) && Utils.enhancedDeepEquals(this.container, other.container) && Utils.enhancedDeepEquals(this.duration, other.duration) && + Utils.enhancedDeepEquals(this.exists, other.exists) && Utils.enhancedDeepEquals(this.file, other.file) && Utils.enhancedDeepEquals(this.has64bitOffsets, other.has64bitOffsets) && Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.indexes, other.indexes) && Utils.enhancedDeepEquals(this.key, other.key) && Utils.enhancedDeepEquals(this.optimizedForStreaming, other.optimizedForStreaming) && Utils.enhancedDeepEquals(this.size, other.size) && @@ -497,8 +580,9 @@ public class MediaContainerWithDecisionPart { @Override public int hashCode() { return Utils.enhancedHash( - audioProfile, container, duration, - file, has64bitOffsets, id, + accessible, audioProfile, container, + duration, exists, file, + has64bitOffsets, id, indexes, key, optimizedForStreaming, size, stream, videoProfile, decision, selected, additionalProperties); @@ -507,12 +591,15 @@ public class MediaContainerWithDecisionPart { @Override public String toString() { return Utils.toString(MediaContainerWithDecisionPart.class, + "accessible", accessible, "audioProfile", audioProfile, "container", container, "duration", duration, + "exists", exists, "file", file, "has64bitOffsets", has64bitOffsets, "id", id, + "indexes", indexes, "key", key, "optimizedForStreaming", optimizedForStreaming, "size", size, @@ -526,19 +613,25 @@ public class MediaContainerWithDecisionPart { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional audioProfile = Optional.empty(); + private Optional accessible = Optional.empty(); - private Optional container = Optional.empty(); + private Optional audioProfile = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional container = Optional.empty(); - private Optional file = Optional.empty(); + private Optional duration = Optional.empty(); + + private Optional exists = Optional.empty(); + + private Optional file = Optional.empty(); private Optional has64bitOffsets = Optional.empty(); - private Optional id = Optional.empty(); + private Long id; - private Optional key = Optional.empty(); + private Optional indexes = Optional.empty(); + + private String key; private Optional optimizedForStreaming = Optional.empty(); @@ -546,7 +639,7 @@ public class MediaContainerWithDecisionPart { private Optional> stream = Optional.empty(); - private Optional videoProfile = Optional.empty(); + private Optional videoProfile = Optional.empty(); private Optional decision = Optional.empty(); @@ -559,13 +652,32 @@ public class MediaContainerWithDecisionPart { } - public Builder audioProfile(Object audioProfile) { + /** + * Indicates if the part is accessible. + */ + public Builder accessible(boolean accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = Optional.ofNullable(accessible); + return this; + } + + /** + * Indicates if the part is accessible. + */ + public Builder accessible(Optional accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = accessible; + return this; + } + + + public Builder audioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public Builder audioProfile(Optional audioProfile) { + public Builder audioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; @@ -575,7 +687,7 @@ public class MediaContainerWithDecisionPart { /** * The container of the media file, such as `mp4` or `mkv` */ - public Builder container(Object container) { + public Builder container(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; @@ -584,7 +696,7 @@ public class MediaContainerWithDecisionPart { /** * The container of the media file, such as `mp4` or `mkv` */ - public Builder container(Optional container) { + public Builder container(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; @@ -594,7 +706,7 @@ public class MediaContainerWithDecisionPart { /** * The duration of the media item, in milliseconds */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -603,17 +715,36 @@ public class MediaContainerWithDecisionPart { /** * The duration of the media item, in milliseconds */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; } + /** + * Indicates if the part exists. + */ + public Builder exists(boolean exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = Optional.ofNullable(exists); + return this; + } + + /** + * Indicates if the part exists. + */ + public Builder exists(Optional exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = exists; + return this; + } + + /** * The local file path at which the part is stored on the server */ - public Builder file(Object file) { + public Builder file(String file) { Utils.checkNotNull(file, "file"); this.file = Optional.ofNullable(file); return this; @@ -622,7 +753,7 @@ public class MediaContainerWithDecisionPart { /** * The local file path at which the part is stored on the server */ - public Builder file(Optional file) { + public Builder file(Optional file) { Utils.checkNotNull(file, "file"); this.file = file; return this; @@ -643,31 +774,29 @@ public class MediaContainerWithDecisionPart { public Builder id(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - public Builder id(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } - /** - * The key from which the media can be streamed - */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); + public Builder indexes(String indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = Optional.ofNullable(indexes); return this; } + public Builder indexes(Optional indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = indexes; + return this; + } + + /** * The key from which the media can be streamed */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; @@ -719,13 +848,13 @@ public class MediaContainerWithDecisionPart { } - public Builder videoProfile(Object videoProfile) { + public Builder videoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public Builder videoProfile(Optional videoProfile) { + public Builder videoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; @@ -776,8 +905,9 @@ public class MediaContainerWithDecisionPart { public MediaContainerWithDecisionPart build() { return new MediaContainerWithDecisionPart( - audioProfile, container, duration, - file, has64bitOffsets, id, + accessible, audioProfile, container, + duration, exists, file, + has64bitOffsets, id, indexes, key, optimizedForStreaming, size, stream, videoProfile, decision, selected) diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionStream.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionStream.java index b6720794..6f99e69f 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionStream.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithDecisionStream.java @@ -10,9 +10,12 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; @@ -28,164 +31,355 @@ import java.util.Optional; *

`Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization). */ public class MediaContainerWithDecisionStream { - + /** + * Indicates if this stream is default. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("default") private Optional default_; - + /** + * Audio channel layout. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioChannelLayout") - private Optional audioChannelLayout; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("bitDepth") - private Optional bitDepth; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("bitrate") - private Optional bitrate; + private Optional audioChannelLayout; /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Number of audio channels (for audio streams). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("channels") + private Optional channels; + + /** + * Bit depth of the video stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("bitDepth") + private Optional bitDepth; + + /** + * Dolby Vision BL compatibility ID. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIBLCompatID") + private Optional doviblCompatID; + + /** + * Indicates if Dolby Vision BL is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIBLPresent") + private Optional doviblPresent; + + /** + * Indicates if Dolby Vision EL is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIELPresent") + private Optional dovielPresent; + + /** + * Dolby Vision level. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVILevel") + private Optional doviLevel; + + /** + * Indicates if Dolby Vision is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIPresent") + private Optional doviPresent; + + /** + * Dolby Vision profile. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIProfile") + private Optional doviProfile; + + /** + * Indicates if Dolby Vision RPU is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIRPUPresent") + private Optional dovirpuPresent; + + /** + * Dolby Vision version. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIVersion") + private Optional doviVersion; + + /** + * Bitrate of the stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("bitrate") + private Optional bitrate; + + /** + * Indicates if the stream can auto-sync. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("canAutoSync") private Optional canAutoSync; - + /** + * Chroma sample location. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chromaLocation") - private Optional chromaLocation; - + private Optional chromaLocation; + /** + * Chroma subsampling format. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chromaSubsampling") - private Optional chromaSubsampling; + private Optional chromaSubsampling; /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ @JsonInclude(Include.NON_ABSENT) + @JsonProperty("codedHeight") + private Optional codedHeight; + + /** + * Coded video width. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("codedWidth") + private Optional codedWidth; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("closedCaptions") + private Optional closedCaptions; + + /** + * Codec used by the stream. + */ @JsonProperty("codec") - private Optional codec; - + private String codec; + /** + * Color primaries used. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("colorPrimaries") - private Optional colorPrimaries; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("colorRange") - private Optional colorRange; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("colorSpace") - private Optional colorSpace; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("colorTrc") - private Optional colorTrc; + private Optional colorPrimaries; /** - * A friendly name for the stream, often comprised of the language and codec information + * Color range (e.g., tv). */ @JsonInclude(Include.NON_ABSENT) + @JsonProperty("colorRange") + private Optional colorRange; + + /** + * Color space. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("colorSpace") + private Optional colorSpace; + + /** + * Color transfer characteristics. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("colorTrc") + private Optional colorTrc; + + /** + * Display title for the stream. + */ @JsonProperty("displayTitle") - private Optional displayTitle; + private String displayTitle; + /** + * Extended display title for the stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("extendedDisplayTitle") + private Optional extendedDisplayTitle; + /** + * Frame rate of the stream. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("frameRate") - private Optional frameRate; + private Optional frameRate; @JsonInclude(Include.NON_ABSENT) @JsonProperty("hasScalingMatrix") - private Optional hasScalingMatrix; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("height") - private Optional height; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("id") - private Optional id; + private Optional hasScalingMatrix; /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Height of the video stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("height") + private Optional height; + + /** + * Unique stream identifier. + */ + @JsonProperty("id") + private int id; + + /** + * Index of the stream. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. + */ + @JsonProperty("key") + private String key; + + /** + * Language of the stream. */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("key") - private Optional key; - - @JsonInclude(Include.NON_ABSENT) @JsonProperty("language") - private Optional language; + private Optional language; /** - * The three character language code for the stream contents + * ISO language code. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("languageCode") - private Optional languageCode; + private Optional languageCode; + /** + * Language tag (e.g., en). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("languageTag") + private Optional languageTag; + /** + * Format of the stream (e.g., srt). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("format") + private Optional format; + + /** + * Indicates whether header compression is enabled. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("headerCompression") + private Optional headerCompression; + + /** + * Video level. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("level") - private Optional level; + private Optional level; + /** + * Indicates if this is the original stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("original") + private Optional original; + /** + * Video profile. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("profile") - private Optional profile; - + private Optional profile; + /** + * Number of reference frames. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("refFrames") - private Optional refFrames; + private Optional refFrames; + + /** + * Sampling rate for the audio stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("samplingRate") + private Optional samplingRate; @JsonInclude(Include.NON_ABSENT) - @JsonProperty("samplingRate") - private Optional samplingRate; + @JsonProperty("scanType") + private Optional scanType; + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("embeddedInVideo") + private Optional embeddedInVideo; + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("selected") private Optional selected; @JsonInclude(Include.NON_ABSENT) - @JsonProperty("streamIdentifier") - private Optional streamIdentifier; + @JsonProperty("forced") + private Optional forced; /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Indicates if the stream is for the hearing impaired. */ @JsonInclude(Include.NON_ABSENT) - @JsonProperty("streamType") - private Optional streamType; + @JsonProperty("hearingImpaired") + private Optional hearingImpaired; + + /** + * Indicates if the stream is a dub. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("dub") + private Optional dub; + + /** + * Optional title for the stream (e.g., language variant). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("title") + private Optional title; + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("streamIdentifier") + private Optional streamIdentifier; + + /** + * Stream type: + * - VIDEO = 1 + * - AUDIO = 2 + * - SUBTITLE = 3 + */ + @JsonProperty("streamType") + private long streamType; + + /** + * Width of the video stream. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("width") - private Optional width; + private Optional width; @JsonInclude(Include.NON_ABSENT) @@ -204,49 +398,84 @@ public class MediaContainerWithDecisionStream { @JsonCreator public MediaContainerWithDecisionStream( @JsonProperty("default") Optional default_, - @JsonProperty("audioChannelLayout") Optional audioChannelLayout, - @JsonProperty("bitDepth") Optional bitDepth, - @JsonProperty("bitrate") Optional bitrate, + @JsonProperty("audioChannelLayout") Optional audioChannelLayout, + @JsonProperty("channels") Optional channels, + @JsonProperty("bitDepth") Optional bitDepth, + @JsonProperty("DOVIBLCompatID") Optional doviblCompatID, + @JsonProperty("DOVIBLPresent") Optional doviblPresent, + @JsonProperty("DOVIELPresent") Optional dovielPresent, + @JsonProperty("DOVILevel") Optional doviLevel, + @JsonProperty("DOVIPresent") Optional doviPresent, + @JsonProperty("DOVIProfile") Optional doviProfile, + @JsonProperty("DOVIRPUPresent") Optional dovirpuPresent, + @JsonProperty("DOVIVersion") Optional doviVersion, + @JsonProperty("bitrate") Optional bitrate, @JsonProperty("canAutoSync") Optional canAutoSync, - @JsonProperty("chromaLocation") Optional chromaLocation, - @JsonProperty("chromaSubsampling") Optional chromaSubsampling, - @JsonProperty("codec") Optional codec, - @JsonProperty("colorPrimaries") Optional colorPrimaries, - @JsonProperty("colorRange") Optional colorRange, - @JsonProperty("colorSpace") Optional colorSpace, - @JsonProperty("colorTrc") Optional colorTrc, - @JsonProperty("displayTitle") Optional displayTitle, - @JsonProperty("frameRate") Optional frameRate, - @JsonProperty("hasScalingMatrix") Optional hasScalingMatrix, - @JsonProperty("height") Optional height, - @JsonProperty("id") Optional id, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, - @JsonProperty("language") Optional language, - @JsonProperty("languageCode") Optional languageCode, - @JsonProperty("level") Optional level, - @JsonProperty("profile") Optional profile, - @JsonProperty("refFrames") Optional refFrames, - @JsonProperty("samplingRate") Optional samplingRate, + @JsonProperty("chromaLocation") Optional chromaLocation, + @JsonProperty("chromaSubsampling") Optional chromaSubsampling, + @JsonProperty("codedHeight") Optional codedHeight, + @JsonProperty("codedWidth") Optional codedWidth, + @JsonProperty("closedCaptions") Optional closedCaptions, + @JsonProperty("codec") String codec, + @JsonProperty("colorPrimaries") Optional colorPrimaries, + @JsonProperty("colorRange") Optional colorRange, + @JsonProperty("colorSpace") Optional colorSpace, + @JsonProperty("colorTrc") Optional colorTrc, + @JsonProperty("displayTitle") String displayTitle, + @JsonProperty("extendedDisplayTitle") Optional extendedDisplayTitle, + @JsonProperty("frameRate") Optional frameRate, + @JsonProperty("hasScalingMatrix") Optional hasScalingMatrix, + @JsonProperty("height") Optional height, + @JsonProperty("id") int id, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, + @JsonProperty("language") Optional language, + @JsonProperty("languageCode") Optional languageCode, + @JsonProperty("languageTag") Optional languageTag, + @JsonProperty("format") Optional format, + @JsonProperty("headerCompression") Optional headerCompression, + @JsonProperty("level") Optional level, + @JsonProperty("original") Optional original, + @JsonProperty("profile") Optional profile, + @JsonProperty("refFrames") Optional refFrames, + @JsonProperty("samplingRate") Optional samplingRate, + @JsonProperty("scanType") Optional scanType, + @JsonProperty("embeddedInVideo") Optional embeddedInVideo, @JsonProperty("selected") Optional selected, - @JsonProperty("streamIdentifier") Optional streamIdentifier, - @JsonProperty("streamType") Optional streamType, - @JsonProperty("width") Optional width, + @JsonProperty("forced") Optional forced, + @JsonProperty("hearingImpaired") Optional hearingImpaired, + @JsonProperty("dub") Optional dub, + @JsonProperty("title") Optional title, + @JsonProperty("streamIdentifier") Optional streamIdentifier, + @JsonProperty("width") Optional width, @JsonProperty("decision") Optional decision, @JsonProperty("location") Optional location) { Utils.checkNotNull(default_, "default_"); Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); + Utils.checkNotNull(channels, "channels"); Utils.checkNotNull(bitDepth, "bitDepth"); + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + Utils.checkNotNull(doviblPresent, "doviblPresent"); + Utils.checkNotNull(dovielPresent, "dovielPresent"); + Utils.checkNotNull(doviLevel, "doviLevel"); + Utils.checkNotNull(doviPresent, "doviPresent"); + Utils.checkNotNull(doviProfile, "doviProfile"); + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + Utils.checkNotNull(doviVersion, "doviVersion"); Utils.checkNotNull(bitrate, "bitrate"); Utils.checkNotNull(canAutoSync, "canAutoSync"); Utils.checkNotNull(chromaLocation, "chromaLocation"); Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); + Utils.checkNotNull(codedHeight, "codedHeight"); + Utils.checkNotNull(codedWidth, "codedWidth"); + Utils.checkNotNull(closedCaptions, "closedCaptions"); Utils.checkNotNull(codec, "codec"); Utils.checkNotNull(colorPrimaries, "colorPrimaries"); Utils.checkNotNull(colorRange, "colorRange"); Utils.checkNotNull(colorSpace, "colorSpace"); Utils.checkNotNull(colorTrc, "colorTrc"); Utils.checkNotNull(displayTitle, "displayTitle"); + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); Utils.checkNotNull(frameRate, "frameRate"); Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); Utils.checkNotNull(height, "height"); @@ -255,29 +484,51 @@ public class MediaContainerWithDecisionStream { Utils.checkNotNull(key, "key"); Utils.checkNotNull(language, "language"); Utils.checkNotNull(languageCode, "languageCode"); + Utils.checkNotNull(languageTag, "languageTag"); + Utils.checkNotNull(format, "format"); + Utils.checkNotNull(headerCompression, "headerCompression"); Utils.checkNotNull(level, "level"); + Utils.checkNotNull(original, "original"); Utils.checkNotNull(profile, "profile"); Utils.checkNotNull(refFrames, "refFrames"); Utils.checkNotNull(samplingRate, "samplingRate"); + Utils.checkNotNull(scanType, "scanType"); + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); Utils.checkNotNull(selected, "selected"); + Utils.checkNotNull(forced, "forced"); + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + Utils.checkNotNull(dub, "dub"); + Utils.checkNotNull(title, "title"); Utils.checkNotNull(streamIdentifier, "streamIdentifier"); - Utils.checkNotNull(streamType, "streamType"); Utils.checkNotNull(width, "width"); Utils.checkNotNull(decision, "decision"); Utils.checkNotNull(location, "location"); this.default_ = default_; this.audioChannelLayout = audioChannelLayout; + this.channels = channels; this.bitDepth = bitDepth; + this.doviblCompatID = doviblCompatID; + this.doviblPresent = doviblPresent; + this.dovielPresent = dovielPresent; + this.doviLevel = doviLevel; + this.doviPresent = doviPresent; + this.doviProfile = doviProfile; + this.dovirpuPresent = dovirpuPresent; + this.doviVersion = doviVersion; this.bitrate = bitrate; this.canAutoSync = canAutoSync; this.chromaLocation = chromaLocation; this.chromaSubsampling = chromaSubsampling; + this.codedHeight = codedHeight; + this.codedWidth = codedWidth; + this.closedCaptions = closedCaptions; this.codec = codec; this.colorPrimaries = colorPrimaries; this.colorRange = colorRange; this.colorSpace = colorSpace; this.colorTrc = colorTrc; this.displayTitle = displayTitle; + this.extendedDisplayTitle = extendedDisplayTitle; this.frameRate = frameRate; this.hasScalingMatrix = hasScalingMatrix; this.height = height; @@ -286,210 +537,452 @@ public class MediaContainerWithDecisionStream { this.key = key; this.language = language; this.languageCode = languageCode; + this.languageTag = languageTag; + this.format = format; + this.headerCompression = headerCompression; this.level = level; + this.original = original; this.profile = profile; this.refFrames = refFrames; this.samplingRate = samplingRate; + this.scanType = scanType; + this.embeddedInVideo = embeddedInVideo; this.selected = selected; + this.forced = forced; + this.hearingImpaired = hearingImpaired; + this.dub = dub; + this.title = title; this.streamIdentifier = streamIdentifier; - this.streamType = streamType; + this.streamType = Builder._SINGLETON_VALUE_StreamType.value(); this.width = width; this.decision = decision; this.location = location; this.additionalProperties = new HashMap<>(); } - public MediaContainerWithDecisionStream() { + public MediaContainerWithDecisionStream( + String codec, + String displayTitle, + int id, + String key) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), codec, Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + displayTitle, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), id, + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty()); } + /** + * Indicates if this stream is default. + */ @JsonIgnore public Optional default_() { return default_; } - @SuppressWarnings("unchecked") + /** + * Audio channel layout. + */ @JsonIgnore - public Optional audioChannelLayout() { - return (Optional) audioChannelLayout; + public Optional audioChannelLayout() { + return audioChannelLayout; } + /** + * Number of audio channels (for audio streams). + */ @JsonIgnore - public Optional bitDepth() { + public Optional channels() { + return channels; + } + + /** + * Bit depth of the video stream. + */ + @JsonIgnore + public Optional bitDepth() { return bitDepth; } + /** + * Dolby Vision BL compatibility ID. + */ @JsonIgnore - public Optional bitrate() { + public Optional doviblCompatID() { + return doviblCompatID; + } + + /** + * Indicates if Dolby Vision BL is present. + */ + @JsonIgnore + public Optional doviblPresent() { + return doviblPresent; + } + + /** + * Indicates if Dolby Vision EL is present. + */ + @JsonIgnore + public Optional dovielPresent() { + return dovielPresent; + } + + /** + * Dolby Vision level. + */ + @JsonIgnore + public Optional doviLevel() { + return doviLevel; + } + + /** + * Indicates if Dolby Vision is present. + */ + @JsonIgnore + public Optional doviPresent() { + return doviPresent; + } + + /** + * Dolby Vision profile. + */ + @JsonIgnore + public Optional doviProfile() { + return doviProfile; + } + + /** + * Indicates if Dolby Vision RPU is present. + */ + @JsonIgnore + public Optional dovirpuPresent() { + return dovirpuPresent; + } + + /** + * Dolby Vision version. + */ + @JsonIgnore + public Optional doviVersion() { + return doviVersion; + } + + /** + * Bitrate of the stream. + */ + @JsonIgnore + public Optional bitrate() { return bitrate; } /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ @JsonIgnore public Optional canAutoSync() { return canAutoSync; } - @SuppressWarnings("unchecked") + /** + * Chroma sample location. + */ @JsonIgnore - public Optional chromaLocation() { - return (Optional) chromaLocation; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional chromaSubsampling() { - return (Optional) chromaSubsampling; + public Optional chromaLocation() { + return chromaLocation; } /** - * The codec of the stream, such as `h264` or `aac` + * Chroma subsampling format. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional codec() { - return (Optional) codec; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorPrimaries() { - return (Optional) colorPrimaries; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorRange() { - return (Optional) colorRange; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorSpace() { - return (Optional) colorSpace; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorTrc() { - return (Optional) colorTrc; + public Optional chromaSubsampling() { + return chromaSubsampling; } /** - * A friendly name for the stream, often comprised of the language and codec information + * Coded video height. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional displayTitle() { - return (Optional) displayTitle; + public Optional codedHeight() { + return codedHeight; + } + + /** + * Coded video width. + */ + @JsonIgnore + public Optional codedWidth() { + return codedWidth; } @JsonIgnore - public Optional frameRate() { + public Optional closedCaptions() { + return closedCaptions; + } + + /** + * Codec used by the stream. + */ + @JsonIgnore + public String codec() { + return codec; + } + + /** + * Color primaries used. + */ + @JsonIgnore + public Optional colorPrimaries() { + return colorPrimaries; + } + + /** + * Color range (e.g., tv). + */ + @JsonIgnore + public Optional colorRange() { + return colorRange; + } + + /** + * Color space. + */ + @JsonIgnore + public Optional colorSpace() { + return colorSpace; + } + + /** + * Color transfer characteristics. + */ + @JsonIgnore + public Optional colorTrc() { + return colorTrc; + } + + /** + * Display title for the stream. + */ + @JsonIgnore + public String displayTitle() { + return displayTitle; + } + + /** + * Extended display title for the stream. + */ + @JsonIgnore + public Optional extendedDisplayTitle() { + return extendedDisplayTitle; + } + + /** + * Frame rate of the stream. + */ + @JsonIgnore + public Optional frameRate() { return frameRate; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hasScalingMatrix() { - return (Optional) hasScalingMatrix; + public Optional hasScalingMatrix() { + return hasScalingMatrix; } + /** + * Height of the video stream. + */ @JsonIgnore - public Optional height() { + public Optional height() { return height; } + /** + * Unique stream identifier. + */ @JsonIgnore - public Optional id() { + public int id() { return id; } /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional language() { - return (Optional) language; + public String key() { + return key; } /** - * The three character language code for the stream contents + * Language of the stream. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional languageCode() { - return (Optional) languageCode; + public Optional language() { + return language; } + /** + * ISO language code. + */ @JsonIgnore - public Optional level() { + public Optional languageCode() { + return languageCode; + } + + /** + * Language tag (e.g., en). + */ + @JsonIgnore + public Optional languageTag() { + return languageTag; + } + + /** + * Format of the stream (e.g., srt). + */ + @JsonIgnore + public Optional format() { + return format; + } + + /** + * Indicates whether header compression is enabled. + */ + @JsonIgnore + public Optional headerCompression() { + return headerCompression; + } + + /** + * Video level. + */ + @JsonIgnore + public Optional level() { return level; } - @SuppressWarnings("unchecked") + /** + * Indicates if this is the original stream. + */ @JsonIgnore - public Optional profile() { - return (Optional) profile; + public Optional original() { + return original; } + /** + * Video profile. + */ @JsonIgnore - public Optional refFrames() { + public Optional profile() { + return profile; + } + + /** + * Number of reference frames. + */ + @JsonIgnore + public Optional refFrames() { return refFrames; } + /** + * Sampling rate for the audio stream. + */ @JsonIgnore - public Optional samplingRate() { + public Optional samplingRate() { return samplingRate; } + @JsonIgnore + public Optional scanType() { + return scanType; + } + + @JsonIgnore + public Optional embeddedInVideo() { + return embeddedInVideo; + } + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ @JsonIgnore public Optional selected() { return selected; } @JsonIgnore - public Optional streamIdentifier() { + public Optional forced() { + return forced; + } + + /** + * Indicates if the stream is for the hearing impaired. + */ + @JsonIgnore + public Optional hearingImpaired() { + return hearingImpaired; + } + + /** + * Indicates if the stream is a dub. + */ + @JsonIgnore + public Optional dub() { + return dub; + } + + /** + * Optional title for the stream (e.g., language variant). + */ + @JsonIgnore + public Optional title() { + return title; + } + + @JsonIgnore + public Optional streamIdentifier() { return streamIdentifier; } /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Stream type: + * - VIDEO = 1 + * - AUDIO = 2 + * - SUBTITLE = 3 */ @JsonIgnore - public Optional streamType() { + public long streamType() { return streamType; } + /** + * Width of the video stream. + */ @JsonIgnore - public Optional width() { + public Optional width() { return width; } @@ -515,6 +1008,9 @@ public class MediaContainerWithDecisionStream { } + /** + * Indicates if this stream is default. + */ public MediaContainerWithDecisionStream withDefault(boolean default_) { Utils.checkNotNull(default_, "default_"); this.default_ = Optional.ofNullable(default_); @@ -522,53 +1018,245 @@ public class MediaContainerWithDecisionStream { } + /** + * Indicates if this stream is default. + */ public MediaContainerWithDecisionStream withDefault(Optional default_) { Utils.checkNotNull(default_, "default_"); this.default_ = default_; return this; } - public MediaContainerWithDecisionStream withAudioChannelLayout(Object audioChannelLayout) { + /** + * Audio channel layout. + */ + public MediaContainerWithDecisionStream withAudioChannelLayout(String audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = Optional.ofNullable(audioChannelLayout); return this; } - public MediaContainerWithDecisionStream withAudioChannelLayout(Optional audioChannelLayout) { + /** + * Audio channel layout. + */ + public MediaContainerWithDecisionStream withAudioChannelLayout(Optional audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = audioChannelLayout; return this; } - public MediaContainerWithDecisionStream withBitDepth(long bitDepth) { + /** + * Number of audio channels (for audio streams). + */ + public MediaContainerWithDecisionStream withChannels(int channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = Optional.ofNullable(channels); + return this; + } + + + /** + * Number of audio channels (for audio streams). + */ + public MediaContainerWithDecisionStream withChannels(Optional channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = channels; + return this; + } + + /** + * Bit depth of the video stream. + */ + public MediaContainerWithDecisionStream withBitDepth(int bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = Optional.ofNullable(bitDepth); return this; } - public MediaContainerWithDecisionStream withBitDepth(Optional bitDepth) { + /** + * Bit depth of the video stream. + */ + public MediaContainerWithDecisionStream withBitDepth(Optional bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = bitDepth; return this; } - public MediaContainerWithDecisionStream withBitrate(long bitrate) { + /** + * Dolby Vision BL compatibility ID. + */ + public MediaContainerWithDecisionStream withDOVIBLCompatID(int doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = Optional.ofNullable(doviblCompatID); + return this; + } + + + /** + * Dolby Vision BL compatibility ID. + */ + public MediaContainerWithDecisionStream withDOVIBLCompatID(Optional doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = doviblCompatID; + return this; + } + + /** + * Indicates if Dolby Vision BL is present. + */ + public MediaContainerWithDecisionStream withDOVIBLPresent(boolean doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = Optional.ofNullable(doviblPresent); + return this; + } + + + /** + * Indicates if Dolby Vision BL is present. + */ + public MediaContainerWithDecisionStream withDOVIBLPresent(Optional doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = doviblPresent; + return this; + } + + /** + * Indicates if Dolby Vision EL is present. + */ + public MediaContainerWithDecisionStream withDOVIELPresent(boolean dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = Optional.ofNullable(dovielPresent); + return this; + } + + + /** + * Indicates if Dolby Vision EL is present. + */ + public MediaContainerWithDecisionStream withDOVIELPresent(Optional dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = dovielPresent; + return this; + } + + /** + * Dolby Vision level. + */ + public MediaContainerWithDecisionStream withDOVILevel(int doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = Optional.ofNullable(doviLevel); + return this; + } + + + /** + * Dolby Vision level. + */ + public MediaContainerWithDecisionStream withDOVILevel(Optional doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = doviLevel; + return this; + } + + /** + * Indicates if Dolby Vision is present. + */ + public MediaContainerWithDecisionStream withDOVIPresent(boolean doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = Optional.ofNullable(doviPresent); + return this; + } + + + /** + * Indicates if Dolby Vision is present. + */ + public MediaContainerWithDecisionStream withDOVIPresent(Optional doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = doviPresent; + return this; + } + + /** + * Dolby Vision profile. + */ + public MediaContainerWithDecisionStream withDOVIProfile(int doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = Optional.ofNullable(doviProfile); + return this; + } + + + /** + * Dolby Vision profile. + */ + public MediaContainerWithDecisionStream withDOVIProfile(Optional doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = doviProfile; + return this; + } + + /** + * Indicates if Dolby Vision RPU is present. + */ + public MediaContainerWithDecisionStream withDOVIRPUPresent(boolean dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = Optional.ofNullable(dovirpuPresent); + return this; + } + + + /** + * Indicates if Dolby Vision RPU is present. + */ + public MediaContainerWithDecisionStream withDOVIRPUPresent(Optional dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = dovirpuPresent; + return this; + } + + /** + * Dolby Vision version. + */ + public MediaContainerWithDecisionStream withDOVIVersion(String doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = Optional.ofNullable(doviVersion); + return this; + } + + + /** + * Dolby Vision version. + */ + public MediaContainerWithDecisionStream withDOVIVersion(Optional doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = doviVersion; + return this; + } + + /** + * Bitrate of the stream. + */ + public MediaContainerWithDecisionStream withBitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public MediaContainerWithDecisionStream withBitrate(Optional bitrate) { + /** + * Bitrate of the stream. + */ + public MediaContainerWithDecisionStream withBitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; } /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public MediaContainerWithDecisionStream withCanAutoSync(boolean canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -578,7 +1266,7 @@ public class MediaContainerWithDecisionStream { /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public MediaContainerWithDecisionStream withCanAutoSync(Optional canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -586,178 +1274,272 @@ public class MediaContainerWithDecisionStream { return this; } - public MediaContainerWithDecisionStream withChromaLocation(Object chromaLocation) { + /** + * Chroma sample location. + */ + public MediaContainerWithDecisionStream withChromaLocation(String chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = Optional.ofNullable(chromaLocation); return this; } - public MediaContainerWithDecisionStream withChromaLocation(Optional chromaLocation) { + /** + * Chroma sample location. + */ + public MediaContainerWithDecisionStream withChromaLocation(Optional chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = chromaLocation; return this; } - public MediaContainerWithDecisionStream withChromaSubsampling(Object chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public MediaContainerWithDecisionStream withChromaSubsampling(String chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = Optional.ofNullable(chromaSubsampling); return this; } - public MediaContainerWithDecisionStream withChromaSubsampling(Optional chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public MediaContainerWithDecisionStream withChromaSubsampling(Optional chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = chromaSubsampling; return this; } /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public MediaContainerWithDecisionStream withCodec(Object codec) { - Utils.checkNotNull(codec, "codec"); - this.codec = Optional.ofNullable(codec); + public MediaContainerWithDecisionStream withCodedHeight(int codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = Optional.ofNullable(codedHeight); return this; } /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public MediaContainerWithDecisionStream withCodec(Optional codec) { + public MediaContainerWithDecisionStream withCodedHeight(Optional codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = codedHeight; + return this; + } + + /** + * Coded video width. + */ + public MediaContainerWithDecisionStream withCodedWidth(int codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = Optional.ofNullable(codedWidth); + return this; + } + + + /** + * Coded video width. + */ + public MediaContainerWithDecisionStream withCodedWidth(Optional codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = codedWidth; + return this; + } + + public MediaContainerWithDecisionStream withClosedCaptions(boolean closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = Optional.ofNullable(closedCaptions); + return this; + } + + + public MediaContainerWithDecisionStream withClosedCaptions(Optional closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = closedCaptions; + return this; + } + + /** + * Codec used by the stream. + */ + public MediaContainerWithDecisionStream withCodec(String codec) { Utils.checkNotNull(codec, "codec"); this.codec = codec; return this; } - public MediaContainerWithDecisionStream withColorPrimaries(Object colorPrimaries) { + /** + * Color primaries used. + */ + public MediaContainerWithDecisionStream withColorPrimaries(String colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = Optional.ofNullable(colorPrimaries); return this; } - public MediaContainerWithDecisionStream withColorPrimaries(Optional colorPrimaries) { + /** + * Color primaries used. + */ + public MediaContainerWithDecisionStream withColorPrimaries(Optional colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = colorPrimaries; return this; } - public MediaContainerWithDecisionStream withColorRange(Object colorRange) { + /** + * Color range (e.g., tv). + */ + public MediaContainerWithDecisionStream withColorRange(String colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = Optional.ofNullable(colorRange); return this; } - public MediaContainerWithDecisionStream withColorRange(Optional colorRange) { + /** + * Color range (e.g., tv). + */ + public MediaContainerWithDecisionStream withColorRange(Optional colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = colorRange; return this; } - public MediaContainerWithDecisionStream withColorSpace(Object colorSpace) { + /** + * Color space. + */ + public MediaContainerWithDecisionStream withColorSpace(String colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = Optional.ofNullable(colorSpace); return this; } - public MediaContainerWithDecisionStream withColorSpace(Optional colorSpace) { + /** + * Color space. + */ + public MediaContainerWithDecisionStream withColorSpace(Optional colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = colorSpace; return this; } - public MediaContainerWithDecisionStream withColorTrc(Object colorTrc) { + /** + * Color transfer characteristics. + */ + public MediaContainerWithDecisionStream withColorTrc(String colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = Optional.ofNullable(colorTrc); return this; } - public MediaContainerWithDecisionStream withColorTrc(Optional colorTrc) { + /** + * Color transfer characteristics. + */ + public MediaContainerWithDecisionStream withColorTrc(Optional colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = colorTrc; return this; } /** - * A friendly name for the stream, often comprised of the language and codec information + * Display title for the stream. */ - public MediaContainerWithDecisionStream withDisplayTitle(Object displayTitle) { - Utils.checkNotNull(displayTitle, "displayTitle"); - this.displayTitle = Optional.ofNullable(displayTitle); - return this; - } - - - /** - * A friendly name for the stream, often comprised of the language and codec information - */ - public MediaContainerWithDecisionStream withDisplayTitle(Optional displayTitle) { + public MediaContainerWithDecisionStream withDisplayTitle(String displayTitle) { Utils.checkNotNull(displayTitle, "displayTitle"); this.displayTitle = displayTitle; return this; } - public MediaContainerWithDecisionStream withFrameRate(double frameRate) { + /** + * Extended display title for the stream. + */ + public MediaContainerWithDecisionStream withExtendedDisplayTitle(String extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = Optional.ofNullable(extendedDisplayTitle); + return this; + } + + + /** + * Extended display title for the stream. + */ + public MediaContainerWithDecisionStream withExtendedDisplayTitle(Optional extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = extendedDisplayTitle; + return this; + } + + /** + * Frame rate of the stream. + */ + public MediaContainerWithDecisionStream withFrameRate(float frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = Optional.ofNullable(frameRate); return this; } - public MediaContainerWithDecisionStream withFrameRate(Optional frameRate) { + /** + * Frame rate of the stream. + */ + public MediaContainerWithDecisionStream withFrameRate(Optional frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = frameRate; return this; } - public MediaContainerWithDecisionStream withHasScalingMatrix(Object hasScalingMatrix) { + public MediaContainerWithDecisionStream withHasScalingMatrix(boolean hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = Optional.ofNullable(hasScalingMatrix); return this; } - public MediaContainerWithDecisionStream withHasScalingMatrix(Optional hasScalingMatrix) { + public MediaContainerWithDecisionStream withHasScalingMatrix(Optional hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = hasScalingMatrix; return this; } - public MediaContainerWithDecisionStream withHeight(long height) { + /** + * Height of the video stream. + */ + public MediaContainerWithDecisionStream withHeight(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public MediaContainerWithDecisionStream withHeight(Optional height) { + /** + * Height of the video stream. + */ + public MediaContainerWithDecisionStream withHeight(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; } - public MediaContainerWithDecisionStream withId(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - - public MediaContainerWithDecisionStream withId(Optional id) { + /** + * Unique stream identifier. + */ + public MediaContainerWithDecisionStream withId(int id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public MediaContainerWithDecisionStream withIndex(long index) { + public MediaContainerWithDecisionStream withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -765,50 +1547,46 @@ public class MediaContainerWithDecisionStream { /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public MediaContainerWithDecisionStream withIndex(Optional index) { + public MediaContainerWithDecisionStream withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; } /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. */ - public MediaContainerWithDecisionStream withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * If the stream is independently streamable, the key from which it can be streamed - */ - public MediaContainerWithDecisionStream withKey(Optional key) { + public MediaContainerWithDecisionStream withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - public MediaContainerWithDecisionStream withLanguage(Object language) { + /** + * Language of the stream. + */ + public MediaContainerWithDecisionStream withLanguage(String language) { Utils.checkNotNull(language, "language"); this.language = Optional.ofNullable(language); return this; } - public MediaContainerWithDecisionStream withLanguage(Optional language) { + /** + * Language of the stream. + */ + public MediaContainerWithDecisionStream withLanguage(Optional language) { Utils.checkNotNull(language, "language"); this.language = language; return this; } /** - * The three character language code for the stream contents + * ISO language code. */ - public MediaContainerWithDecisionStream withLanguageCode(Object languageCode) { + public MediaContainerWithDecisionStream withLanguageCode(String languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = Optional.ofNullable(languageCode); return this; @@ -816,66 +1594,195 @@ public class MediaContainerWithDecisionStream { /** - * The three character language code for the stream contents + * ISO language code. */ - public MediaContainerWithDecisionStream withLanguageCode(Optional languageCode) { + public MediaContainerWithDecisionStream withLanguageCode(Optional languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = languageCode; return this; } - public MediaContainerWithDecisionStream withLevel(long level) { + /** + * Language tag (e.g., en). + */ + public MediaContainerWithDecisionStream withLanguageTag(String languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = Optional.ofNullable(languageTag); + return this; + } + + + /** + * Language tag (e.g., en). + */ + public MediaContainerWithDecisionStream withLanguageTag(Optional languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = languageTag; + return this; + } + + /** + * Format of the stream (e.g., srt). + */ + public MediaContainerWithDecisionStream withFormat(String format) { + Utils.checkNotNull(format, "format"); + this.format = Optional.ofNullable(format); + return this; + } + + + /** + * Format of the stream (e.g., srt). + */ + public MediaContainerWithDecisionStream withFormat(Optional format) { + Utils.checkNotNull(format, "format"); + this.format = format; + return this; + } + + /** + * Indicates whether header compression is enabled. + */ + public MediaContainerWithDecisionStream withHeaderCompression(boolean headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = Optional.ofNullable(headerCompression); + return this; + } + + + /** + * Indicates whether header compression is enabled. + */ + public MediaContainerWithDecisionStream withHeaderCompression(Optional headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = headerCompression; + return this; + } + + /** + * Video level. + */ + public MediaContainerWithDecisionStream withLevel(int level) { Utils.checkNotNull(level, "level"); this.level = Optional.ofNullable(level); return this; } - public MediaContainerWithDecisionStream withLevel(Optional level) { + /** + * Video level. + */ + public MediaContainerWithDecisionStream withLevel(Optional level) { Utils.checkNotNull(level, "level"); this.level = level; return this; } - public MediaContainerWithDecisionStream withProfile(Object profile) { + /** + * Indicates if this is the original stream. + */ + public MediaContainerWithDecisionStream withOriginal(boolean original) { + Utils.checkNotNull(original, "original"); + this.original = Optional.ofNullable(original); + return this; + } + + + /** + * Indicates if this is the original stream. + */ + public MediaContainerWithDecisionStream withOriginal(Optional original) { + Utils.checkNotNull(original, "original"); + this.original = original; + return this; + } + + /** + * Video profile. + */ + public MediaContainerWithDecisionStream withProfile(String profile) { Utils.checkNotNull(profile, "profile"); this.profile = Optional.ofNullable(profile); return this; } - public MediaContainerWithDecisionStream withProfile(Optional profile) { + /** + * Video profile. + */ + public MediaContainerWithDecisionStream withProfile(Optional profile) { Utils.checkNotNull(profile, "profile"); this.profile = profile; return this; } - public MediaContainerWithDecisionStream withRefFrames(long refFrames) { + /** + * Number of reference frames. + */ + public MediaContainerWithDecisionStream withRefFrames(int refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = Optional.ofNullable(refFrames); return this; } - public MediaContainerWithDecisionStream withRefFrames(Optional refFrames) { + /** + * Number of reference frames. + */ + public MediaContainerWithDecisionStream withRefFrames(Optional refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = refFrames; return this; } - public MediaContainerWithDecisionStream withSamplingRate(long samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public MediaContainerWithDecisionStream withSamplingRate(int samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = Optional.ofNullable(samplingRate); return this; } - public MediaContainerWithDecisionStream withSamplingRate(Optional samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public MediaContainerWithDecisionStream withSamplingRate(Optional samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = samplingRate; return this; } + public MediaContainerWithDecisionStream withScanType(String scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = Optional.ofNullable(scanType); + return this; + } + + + public MediaContainerWithDecisionStream withScanType(Optional scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = scanType; + return this; + } + + public MediaContainerWithDecisionStream withEmbeddedInVideo(String embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = Optional.ofNullable(embeddedInVideo); + return this; + } + + + public MediaContainerWithDecisionStream withEmbeddedInVideo(Optional embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = embeddedInVideo; + return this; + } + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public MediaContainerWithDecisionStream withSelected(boolean selected) { Utils.checkNotNull(selected, "selected"); this.selected = Optional.ofNullable(selected); @@ -883,52 +1790,112 @@ public class MediaContainerWithDecisionStream { } + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public MediaContainerWithDecisionStream withSelected(Optional selected) { Utils.checkNotNull(selected, "selected"); this.selected = selected; return this; } - public MediaContainerWithDecisionStream withStreamIdentifier(long streamIdentifier) { + public MediaContainerWithDecisionStream withForced(boolean forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = Optional.ofNullable(forced); + return this; + } + + + public MediaContainerWithDecisionStream withForced(Optional forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = forced; + return this; + } + + /** + * Indicates if the stream is for the hearing impaired. + */ + public MediaContainerWithDecisionStream withHearingImpaired(boolean hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = Optional.ofNullable(hearingImpaired); + return this; + } + + + /** + * Indicates if the stream is for the hearing impaired. + */ + public MediaContainerWithDecisionStream withHearingImpaired(Optional hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = hearingImpaired; + return this; + } + + /** + * Indicates if the stream is a dub. + */ + public MediaContainerWithDecisionStream withDub(boolean dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = Optional.ofNullable(dub); + return this; + } + + + /** + * Indicates if the stream is a dub. + */ + public MediaContainerWithDecisionStream withDub(Optional dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = dub; + return this; + } + + /** + * Optional title for the stream (e.g., language variant). + */ + public MediaContainerWithDecisionStream withTitle(String title) { + Utils.checkNotNull(title, "title"); + this.title = Optional.ofNullable(title); + return this; + } + + + /** + * Optional title for the stream (e.g., language variant). + */ + public MediaContainerWithDecisionStream withTitle(Optional title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + public MediaContainerWithDecisionStream withStreamIdentifier(int streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = Optional.ofNullable(streamIdentifier); return this; } - public MediaContainerWithDecisionStream withStreamIdentifier(Optional streamIdentifier) { + public MediaContainerWithDecisionStream withStreamIdentifier(Optional streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = streamIdentifier; return this; } /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Width of the video stream. */ - public MediaContainerWithDecisionStream withStreamType(long streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = Optional.ofNullable(streamType); - return this; - } - - - /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics - */ - public MediaContainerWithDecisionStream withStreamType(Optional streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = streamType; - return this; - } - - public MediaContainerWithDecisionStream withWidth(long width) { + public MediaContainerWithDecisionStream withWidth(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public MediaContainerWithDecisionStream withWidth(Optional width) { + /** + * Width of the video stream. + */ + public MediaContainerWithDecisionStream withWidth(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; @@ -985,17 +1952,30 @@ public class MediaContainerWithDecisionStream { return Utils.enhancedDeepEquals(this.default_, other.default_) && Utils.enhancedDeepEquals(this.audioChannelLayout, other.audioChannelLayout) && + Utils.enhancedDeepEquals(this.channels, other.channels) && Utils.enhancedDeepEquals(this.bitDepth, other.bitDepth) && + Utils.enhancedDeepEquals(this.doviblCompatID, other.doviblCompatID) && + Utils.enhancedDeepEquals(this.doviblPresent, other.doviblPresent) && + Utils.enhancedDeepEquals(this.dovielPresent, other.dovielPresent) && + Utils.enhancedDeepEquals(this.doviLevel, other.doviLevel) && + Utils.enhancedDeepEquals(this.doviPresent, other.doviPresent) && + Utils.enhancedDeepEquals(this.doviProfile, other.doviProfile) && + Utils.enhancedDeepEquals(this.dovirpuPresent, other.dovirpuPresent) && + Utils.enhancedDeepEquals(this.doviVersion, other.doviVersion) && Utils.enhancedDeepEquals(this.bitrate, other.bitrate) && Utils.enhancedDeepEquals(this.canAutoSync, other.canAutoSync) && Utils.enhancedDeepEquals(this.chromaLocation, other.chromaLocation) && Utils.enhancedDeepEquals(this.chromaSubsampling, other.chromaSubsampling) && + Utils.enhancedDeepEquals(this.codedHeight, other.codedHeight) && + Utils.enhancedDeepEquals(this.codedWidth, other.codedWidth) && + Utils.enhancedDeepEquals(this.closedCaptions, other.closedCaptions) && Utils.enhancedDeepEquals(this.codec, other.codec) && Utils.enhancedDeepEquals(this.colorPrimaries, other.colorPrimaries) && Utils.enhancedDeepEquals(this.colorRange, other.colorRange) && Utils.enhancedDeepEquals(this.colorSpace, other.colorSpace) && Utils.enhancedDeepEquals(this.colorTrc, other.colorTrc) && Utils.enhancedDeepEquals(this.displayTitle, other.displayTitle) && + Utils.enhancedDeepEquals(this.extendedDisplayTitle, other.extendedDisplayTitle) && Utils.enhancedDeepEquals(this.frameRate, other.frameRate) && Utils.enhancedDeepEquals(this.hasScalingMatrix, other.hasScalingMatrix) && Utils.enhancedDeepEquals(this.height, other.height) && @@ -1004,11 +1984,21 @@ public class MediaContainerWithDecisionStream { Utils.enhancedDeepEquals(this.key, other.key) && Utils.enhancedDeepEquals(this.language, other.language) && Utils.enhancedDeepEquals(this.languageCode, other.languageCode) && + Utils.enhancedDeepEquals(this.languageTag, other.languageTag) && + Utils.enhancedDeepEquals(this.format, other.format) && + Utils.enhancedDeepEquals(this.headerCompression, other.headerCompression) && Utils.enhancedDeepEquals(this.level, other.level) && + Utils.enhancedDeepEquals(this.original, other.original) && Utils.enhancedDeepEquals(this.profile, other.profile) && Utils.enhancedDeepEquals(this.refFrames, other.refFrames) && Utils.enhancedDeepEquals(this.samplingRate, other.samplingRate) && + Utils.enhancedDeepEquals(this.scanType, other.scanType) && + Utils.enhancedDeepEquals(this.embeddedInVideo, other.embeddedInVideo) && Utils.enhancedDeepEquals(this.selected, other.selected) && + Utils.enhancedDeepEquals(this.forced, other.forced) && + Utils.enhancedDeepEquals(this.hearingImpaired, other.hearingImpaired) && + Utils.enhancedDeepEquals(this.dub, other.dub) && + Utils.enhancedDeepEquals(this.title, other.title) && Utils.enhancedDeepEquals(this.streamIdentifier, other.streamIdentifier) && Utils.enhancedDeepEquals(this.streamType, other.streamType) && Utils.enhancedDeepEquals(this.width, other.width) && @@ -1020,17 +2010,25 @@ public class MediaContainerWithDecisionStream { @Override public int hashCode() { return Utils.enhancedHash( - default_, audioChannelLayout, bitDepth, + default_, audioChannelLayout, channels, + bitDepth, doviblCompatID, doviblPresent, + dovielPresent, doviLevel, doviPresent, + doviProfile, dovirpuPresent, doviVersion, bitrate, canAutoSync, chromaLocation, - chromaSubsampling, codec, colorPrimaries, + chromaSubsampling, codedHeight, codedWidth, + closedCaptions, codec, colorPrimaries, colorRange, colorSpace, colorTrc, - displayTitle, frameRate, hasScalingMatrix, - height, id, index, - key, language, languageCode, - level, profile, refFrames, - samplingRate, selected, streamIdentifier, - streamType, width, decision, - location, additionalProperties); + displayTitle, extendedDisplayTitle, frameRate, + hasScalingMatrix, height, id, + index, key, language, + languageCode, languageTag, format, + headerCompression, level, original, + profile, refFrames, samplingRate, + scanType, embeddedInVideo, selected, + forced, hearingImpaired, dub, + title, streamIdentifier, streamType, + width, decision, location, + additionalProperties); } @Override @@ -1038,17 +2036,30 @@ public class MediaContainerWithDecisionStream { return Utils.toString(MediaContainerWithDecisionStream.class, "default_", default_, "audioChannelLayout", audioChannelLayout, + "channels", channels, "bitDepth", bitDepth, + "doviblCompatID", doviblCompatID, + "doviblPresent", doviblPresent, + "dovielPresent", dovielPresent, + "doviLevel", doviLevel, + "doviPresent", doviPresent, + "doviProfile", doviProfile, + "dovirpuPresent", dovirpuPresent, + "doviVersion", doviVersion, "bitrate", bitrate, "canAutoSync", canAutoSync, "chromaLocation", chromaLocation, "chromaSubsampling", chromaSubsampling, + "codedHeight", codedHeight, + "codedWidth", codedWidth, + "closedCaptions", closedCaptions, "codec", codec, "colorPrimaries", colorPrimaries, "colorRange", colorRange, "colorSpace", colorSpace, "colorTrc", colorTrc, "displayTitle", displayTitle, + "extendedDisplayTitle", extendedDisplayTitle, "frameRate", frameRate, "hasScalingMatrix", hasScalingMatrix, "height", height, @@ -1057,11 +2068,21 @@ public class MediaContainerWithDecisionStream { "key", key, "language", language, "languageCode", languageCode, + "languageTag", languageTag, + "format", format, + "headerCompression", headerCompression, "level", level, + "original", original, "profile", profile, "refFrames", refFrames, "samplingRate", samplingRate, + "scanType", scanType, + "embeddedInVideo", embeddedInVideo, "selected", selected, + "forced", forced, + "hearingImpaired", hearingImpaired, + "dub", dub, + "title", title, "streamIdentifier", streamIdentifier, "streamType", streamType, "width", width, @@ -1075,61 +2096,105 @@ public class MediaContainerWithDecisionStream { private Optional default_ = Optional.empty(); - private Optional audioChannelLayout = Optional.empty(); + private Optional audioChannelLayout = Optional.empty(); - private Optional bitDepth = Optional.empty(); + private Optional channels = Optional.empty(); - private Optional bitrate = Optional.empty(); + private Optional bitDepth = Optional.empty(); + + private Optional doviblCompatID = Optional.empty(); + + private Optional doviblPresent = Optional.empty(); + + private Optional dovielPresent = Optional.empty(); + + private Optional doviLevel = Optional.empty(); + + private Optional doviPresent = Optional.empty(); + + private Optional doviProfile = Optional.empty(); + + private Optional dovirpuPresent = Optional.empty(); + + private Optional doviVersion = Optional.empty(); + + private Optional bitrate = Optional.empty(); private Optional canAutoSync = Optional.empty(); - private Optional chromaLocation = Optional.empty(); + private Optional chromaLocation = Optional.empty(); - private Optional chromaSubsampling = Optional.empty(); + private Optional chromaSubsampling = Optional.empty(); - private Optional codec = Optional.empty(); + private Optional codedHeight = Optional.empty(); - private Optional colorPrimaries = Optional.empty(); + private Optional codedWidth = Optional.empty(); - private Optional colorRange = Optional.empty(); + private Optional closedCaptions = Optional.empty(); - private Optional colorSpace = Optional.empty(); + private String codec; - private Optional colorTrc = Optional.empty(); + private Optional colorPrimaries = Optional.empty(); - private Optional displayTitle = Optional.empty(); + private Optional colorRange = Optional.empty(); - private Optional frameRate = Optional.empty(); + private Optional colorSpace = Optional.empty(); - private Optional hasScalingMatrix = Optional.empty(); + private Optional colorTrc = Optional.empty(); - private Optional height = Optional.empty(); + private String displayTitle; - private Optional id = Optional.empty(); + private Optional extendedDisplayTitle = Optional.empty(); - private Optional index = Optional.empty(); + private Optional frameRate = Optional.empty(); - private Optional key = Optional.empty(); + private Optional hasScalingMatrix = Optional.empty(); - private Optional language = Optional.empty(); + private Optional height = Optional.empty(); - private Optional languageCode = Optional.empty(); + private Integer id; - private Optional level = Optional.empty(); + private Optional index = Optional.empty(); - private Optional profile = Optional.empty(); + private String key; - private Optional refFrames = Optional.empty(); + private Optional language = Optional.empty(); - private Optional samplingRate = Optional.empty(); + private Optional languageCode = Optional.empty(); + + private Optional languageTag = Optional.empty(); + + private Optional format = Optional.empty(); + + private Optional headerCompression = Optional.empty(); + + private Optional level = Optional.empty(); + + private Optional original = Optional.empty(); + + private Optional profile = Optional.empty(); + + private Optional refFrames = Optional.empty(); + + private Optional samplingRate = Optional.empty(); + + private Optional scanType = Optional.empty(); + + private Optional embeddedInVideo = Optional.empty(); private Optional selected = Optional.empty(); - private Optional streamIdentifier = Optional.empty(); + private Optional forced = Optional.empty(); - private Optional streamType = Optional.empty(); + private Optional hearingImpaired = Optional.empty(); - private Optional width = Optional.empty(); + private Optional dub = Optional.empty(); + + private Optional title = Optional.empty(); + + private Optional streamIdentifier = Optional.empty(); + + private Optional width = Optional.empty(); private Optional decision = Optional.empty(); @@ -1142,12 +2207,18 @@ public class MediaContainerWithDecisionStream { } + /** + * Indicates if this stream is default. + */ public Builder default_(boolean default_) { Utils.checkNotNull(default_, "default_"); this.default_ = Optional.ofNullable(default_); return this; } + /** + * Indicates if this stream is default. + */ public Builder default_(Optional default_) { Utils.checkNotNull(default_, "default_"); this.default_ = default_; @@ -1155,39 +2226,228 @@ public class MediaContainerWithDecisionStream { } - public Builder audioChannelLayout(Object audioChannelLayout) { + /** + * Audio channel layout. + */ + public Builder audioChannelLayout(String audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = Optional.ofNullable(audioChannelLayout); return this; } - public Builder audioChannelLayout(Optional audioChannelLayout) { + /** + * Audio channel layout. + */ + public Builder audioChannelLayout(Optional audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = audioChannelLayout; return this; } - public Builder bitDepth(long bitDepth) { + /** + * Number of audio channels (for audio streams). + */ + public Builder channels(int channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = Optional.ofNullable(channels); + return this; + } + + /** + * Number of audio channels (for audio streams). + */ + public Builder channels(Optional channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = channels; + return this; + } + + + /** + * Bit depth of the video stream. + */ + public Builder bitDepth(int bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = Optional.ofNullable(bitDepth); return this; } - public Builder bitDepth(Optional bitDepth) { + /** + * Bit depth of the video stream. + */ + public Builder bitDepth(Optional bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = bitDepth; return this; } - public Builder bitrate(long bitrate) { + /** + * Dolby Vision BL compatibility ID. + */ + public Builder doviblCompatID(int doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = Optional.ofNullable(doviblCompatID); + return this; + } + + /** + * Dolby Vision BL compatibility ID. + */ + public Builder doviblCompatID(Optional doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = doviblCompatID; + return this; + } + + + /** + * Indicates if Dolby Vision BL is present. + */ + public Builder doviblPresent(boolean doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = Optional.ofNullable(doviblPresent); + return this; + } + + /** + * Indicates if Dolby Vision BL is present. + */ + public Builder doviblPresent(Optional doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = doviblPresent; + return this; + } + + + /** + * Indicates if Dolby Vision EL is present. + */ + public Builder dovielPresent(boolean dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = Optional.ofNullable(dovielPresent); + return this; + } + + /** + * Indicates if Dolby Vision EL is present. + */ + public Builder dovielPresent(Optional dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = dovielPresent; + return this; + } + + + /** + * Dolby Vision level. + */ + public Builder doviLevel(int doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = Optional.ofNullable(doviLevel); + return this; + } + + /** + * Dolby Vision level. + */ + public Builder doviLevel(Optional doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = doviLevel; + return this; + } + + + /** + * Indicates if Dolby Vision is present. + */ + public Builder doviPresent(boolean doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = Optional.ofNullable(doviPresent); + return this; + } + + /** + * Indicates if Dolby Vision is present. + */ + public Builder doviPresent(Optional doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = doviPresent; + return this; + } + + + /** + * Dolby Vision profile. + */ + public Builder doviProfile(int doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = Optional.ofNullable(doviProfile); + return this; + } + + /** + * Dolby Vision profile. + */ + public Builder doviProfile(Optional doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = doviProfile; + return this; + } + + + /** + * Indicates if Dolby Vision RPU is present. + */ + public Builder dovirpuPresent(boolean dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = Optional.ofNullable(dovirpuPresent); + return this; + } + + /** + * Indicates if Dolby Vision RPU is present. + */ + public Builder dovirpuPresent(Optional dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = dovirpuPresent; + return this; + } + + + /** + * Dolby Vision version. + */ + public Builder doviVersion(String doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = Optional.ofNullable(doviVersion); + return this; + } + + /** + * Dolby Vision version. + */ + public Builder doviVersion(Optional doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = doviVersion; + return this; + } + + + /** + * Bitrate of the stream. + */ + public Builder bitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public Builder bitrate(Optional bitrate) { + /** + * Bitrate of the stream. + */ + public Builder bitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; @@ -1195,7 +2455,7 @@ public class MediaContainerWithDecisionStream { /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public Builder canAutoSync(boolean canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -1204,7 +2464,7 @@ public class MediaContainerWithDecisionStream { } /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public Builder canAutoSync(Optional canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -1213,26 +2473,38 @@ public class MediaContainerWithDecisionStream { } - public Builder chromaLocation(Object chromaLocation) { + /** + * Chroma sample location. + */ + public Builder chromaLocation(String chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = Optional.ofNullable(chromaLocation); return this; } - public Builder chromaLocation(Optional chromaLocation) { + /** + * Chroma sample location. + */ + public Builder chromaLocation(Optional chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = chromaLocation; return this; } - public Builder chromaSubsampling(Object chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public Builder chromaSubsampling(String chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = Optional.ofNullable(chromaSubsampling); return this; } - public Builder chromaSubsampling(Optional chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public Builder chromaSubsampling(Optional chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = chromaSubsampling; return this; @@ -1240,70 +2512,136 @@ public class MediaContainerWithDecisionStream { /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public Builder codec(Object codec) { - Utils.checkNotNull(codec, "codec"); - this.codec = Optional.ofNullable(codec); + public Builder codedHeight(int codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = Optional.ofNullable(codedHeight); return this; } /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public Builder codec(Optional codec) { + public Builder codedHeight(Optional codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = codedHeight; + return this; + } + + + /** + * Coded video width. + */ + public Builder codedWidth(int codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = Optional.ofNullable(codedWidth); + return this; + } + + /** + * Coded video width. + */ + public Builder codedWidth(Optional codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = codedWidth; + return this; + } + + + public Builder closedCaptions(boolean closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = Optional.ofNullable(closedCaptions); + return this; + } + + public Builder closedCaptions(Optional closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = closedCaptions; + return this; + } + + + /** + * Codec used by the stream. + */ + public Builder codec(String codec) { Utils.checkNotNull(codec, "codec"); this.codec = codec; return this; } - public Builder colorPrimaries(Object colorPrimaries) { + /** + * Color primaries used. + */ + public Builder colorPrimaries(String colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = Optional.ofNullable(colorPrimaries); return this; } - public Builder colorPrimaries(Optional colorPrimaries) { + /** + * Color primaries used. + */ + public Builder colorPrimaries(Optional colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = colorPrimaries; return this; } - public Builder colorRange(Object colorRange) { + /** + * Color range (e.g., tv). + */ + public Builder colorRange(String colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = Optional.ofNullable(colorRange); return this; } - public Builder colorRange(Optional colorRange) { + /** + * Color range (e.g., tv). + */ + public Builder colorRange(Optional colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = colorRange; return this; } - public Builder colorSpace(Object colorSpace) { + /** + * Color space. + */ + public Builder colorSpace(String colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = Optional.ofNullable(colorSpace); return this; } - public Builder colorSpace(Optional colorSpace) { + /** + * Color space. + */ + public Builder colorSpace(Optional colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = colorSpace; return this; } - public Builder colorTrc(Object colorTrc) { + /** + * Color transfer characteristics. + */ + public Builder colorTrc(String colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = Optional.ofNullable(colorTrc); return this; } - public Builder colorTrc(Optional colorTrc) { + /** + * Color transfer characteristics. + */ + public Builder colorTrc(Optional colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = colorTrc; return this; @@ -1311,70 +2649,89 @@ public class MediaContainerWithDecisionStream { /** - * A friendly name for the stream, often comprised of the language and codec information + * Display title for the stream. */ - public Builder displayTitle(Object displayTitle) { - Utils.checkNotNull(displayTitle, "displayTitle"); - this.displayTitle = Optional.ofNullable(displayTitle); - return this; - } - - /** - * A friendly name for the stream, often comprised of the language and codec information - */ - public Builder displayTitle(Optional displayTitle) { + public Builder displayTitle(String displayTitle) { Utils.checkNotNull(displayTitle, "displayTitle"); this.displayTitle = displayTitle; return this; } - public Builder frameRate(double frameRate) { + /** + * Extended display title for the stream. + */ + public Builder extendedDisplayTitle(String extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = Optional.ofNullable(extendedDisplayTitle); + return this; + } + + /** + * Extended display title for the stream. + */ + public Builder extendedDisplayTitle(Optional extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = extendedDisplayTitle; + return this; + } + + + /** + * Frame rate of the stream. + */ + public Builder frameRate(float frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = Optional.ofNullable(frameRate); return this; } - public Builder frameRate(Optional frameRate) { + /** + * Frame rate of the stream. + */ + public Builder frameRate(Optional frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = frameRate; return this; } - public Builder hasScalingMatrix(Object hasScalingMatrix) { + public Builder hasScalingMatrix(boolean hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = Optional.ofNullable(hasScalingMatrix); return this; } - public Builder hasScalingMatrix(Optional hasScalingMatrix) { + public Builder hasScalingMatrix(Optional hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = hasScalingMatrix; return this; } - public Builder height(long height) { + /** + * Height of the video stream. + */ + public Builder height(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public Builder height(Optional height) { + /** + * Height of the video stream. + */ + public Builder height(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; } - public Builder id(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - public Builder id(Optional id) { + /** + * Unique stream identifier. + */ + public Builder id(int id) { Utils.checkNotNull(id, "id"); this.id = id; return this; @@ -1382,18 +2739,18 @@ public class MediaContainerWithDecisionStream { /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; } /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1401,31 +2758,28 @@ public class MediaContainerWithDecisionStream { /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * If the stream is independently streamable, the key from which it can be streamed - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - public Builder language(Object language) { + /** + * Language of the stream. + */ + public Builder language(String language) { Utils.checkNotNull(language, "language"); this.language = Optional.ofNullable(language); return this; } - public Builder language(Optional language) { + /** + * Language of the stream. + */ + public Builder language(Optional language) { Utils.checkNotNull(language, "language"); this.language = language; return this; @@ -1433,82 +2787,214 @@ public class MediaContainerWithDecisionStream { /** - * The three character language code for the stream contents + * ISO language code. */ - public Builder languageCode(Object languageCode) { + public Builder languageCode(String languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = Optional.ofNullable(languageCode); return this; } /** - * The three character language code for the stream contents + * ISO language code. */ - public Builder languageCode(Optional languageCode) { + public Builder languageCode(Optional languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = languageCode; return this; } - public Builder level(long level) { + /** + * Language tag (e.g., en). + */ + public Builder languageTag(String languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = Optional.ofNullable(languageTag); + return this; + } + + /** + * Language tag (e.g., en). + */ + public Builder languageTag(Optional languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = languageTag; + return this; + } + + + /** + * Format of the stream (e.g., srt). + */ + public Builder format(String format) { + Utils.checkNotNull(format, "format"); + this.format = Optional.ofNullable(format); + return this; + } + + /** + * Format of the stream (e.g., srt). + */ + public Builder format(Optional format) { + Utils.checkNotNull(format, "format"); + this.format = format; + return this; + } + + + /** + * Indicates whether header compression is enabled. + */ + public Builder headerCompression(boolean headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = Optional.ofNullable(headerCompression); + return this; + } + + /** + * Indicates whether header compression is enabled. + */ + public Builder headerCompression(Optional headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = headerCompression; + return this; + } + + + /** + * Video level. + */ + public Builder level(int level) { Utils.checkNotNull(level, "level"); this.level = Optional.ofNullable(level); return this; } - public Builder level(Optional level) { + /** + * Video level. + */ + public Builder level(Optional level) { Utils.checkNotNull(level, "level"); this.level = level; return this; } - public Builder profile(Object profile) { + /** + * Indicates if this is the original stream. + */ + public Builder original(boolean original) { + Utils.checkNotNull(original, "original"); + this.original = Optional.ofNullable(original); + return this; + } + + /** + * Indicates if this is the original stream. + */ + public Builder original(Optional original) { + Utils.checkNotNull(original, "original"); + this.original = original; + return this; + } + + + /** + * Video profile. + */ + public Builder profile(String profile) { Utils.checkNotNull(profile, "profile"); this.profile = Optional.ofNullable(profile); return this; } - public Builder profile(Optional profile) { + /** + * Video profile. + */ + public Builder profile(Optional profile) { Utils.checkNotNull(profile, "profile"); this.profile = profile; return this; } - public Builder refFrames(long refFrames) { + /** + * Number of reference frames. + */ + public Builder refFrames(int refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = Optional.ofNullable(refFrames); return this; } - public Builder refFrames(Optional refFrames) { + /** + * Number of reference frames. + */ + public Builder refFrames(Optional refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = refFrames; return this; } - public Builder samplingRate(long samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public Builder samplingRate(int samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = Optional.ofNullable(samplingRate); return this; } - public Builder samplingRate(Optional samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public Builder samplingRate(Optional samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = samplingRate; return this; } + public Builder scanType(String scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = Optional.ofNullable(scanType); + return this; + } + + public Builder scanType(Optional scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = scanType; + return this; + } + + + public Builder embeddedInVideo(String embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = Optional.ofNullable(embeddedInVideo); + return this; + } + + public Builder embeddedInVideo(Optional embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = embeddedInVideo; + return this; + } + + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public Builder selected(boolean selected) { Utils.checkNotNull(selected, "selected"); this.selected = Optional.ofNullable(selected); return this; } + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public Builder selected(Optional selected) { Utils.checkNotNull(selected, "selected"); this.selected = selected; @@ -1516,13 +3002,83 @@ public class MediaContainerWithDecisionStream { } - public Builder streamIdentifier(long streamIdentifier) { + public Builder forced(boolean forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = Optional.ofNullable(forced); + return this; + } + + public Builder forced(Optional forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = forced; + return this; + } + + + /** + * Indicates if the stream is for the hearing impaired. + */ + public Builder hearingImpaired(boolean hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = Optional.ofNullable(hearingImpaired); + return this; + } + + /** + * Indicates if the stream is for the hearing impaired. + */ + public Builder hearingImpaired(Optional hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = hearingImpaired; + return this; + } + + + /** + * Indicates if the stream is a dub. + */ + public Builder dub(boolean dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = Optional.ofNullable(dub); + return this; + } + + /** + * Indicates if the stream is a dub. + */ + public Builder dub(Optional dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = dub; + return this; + } + + + /** + * Optional title for the stream (e.g., language variant). + */ + public Builder title(String title) { + Utils.checkNotNull(title, "title"); + this.title = Optional.ofNullable(title); + return this; + } + + /** + * Optional title for the stream (e.g., language variant). + */ + public Builder title(Optional title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + + public Builder streamIdentifier(int streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = Optional.ofNullable(streamIdentifier); return this; } - public Builder streamIdentifier(Optional streamIdentifier) { + public Builder streamIdentifier(Optional streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = streamIdentifier; return this; @@ -1530,31 +3086,18 @@ public class MediaContainerWithDecisionStream { /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Width of the video stream. */ - public Builder streamType(long streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = Optional.ofNullable(streamType); - return this; - } - - /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics - */ - public Builder streamType(Optional streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = streamType; - return this; - } - - - public Builder width(long width) { + public Builder width(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public Builder width(Optional width) { + /** + * Width of the video stream. + */ + public Builder width(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; @@ -1605,19 +3148,32 @@ public class MediaContainerWithDecisionStream { public MediaContainerWithDecisionStream build() { return new MediaContainerWithDecisionStream( - default_, audioChannelLayout, bitDepth, + default_, audioChannelLayout, channels, + bitDepth, doviblCompatID, doviblPresent, + dovielPresent, doviLevel, doviPresent, + doviProfile, dovirpuPresent, doviVersion, bitrate, canAutoSync, chromaLocation, - chromaSubsampling, codec, colorPrimaries, + chromaSubsampling, codedHeight, codedWidth, + closedCaptions, codec, colorPrimaries, colorRange, colorSpace, colorTrc, - displayTitle, frameRate, hasScalingMatrix, - height, id, index, - key, language, languageCode, - level, profile, refFrames, - samplingRate, selected, streamIdentifier, - streamType, width, decision, - location) + displayTitle, extendedDisplayTitle, frameRate, + hasScalingMatrix, height, id, + index, key, language, + languageCode, languageTag, format, + headerCompression, level, original, + profile, refFrames, samplingRate, + scanType, embeddedInVideo, selected, + forced, hearingImpaired, dub, + title, streamIdentifier, width, + decision, location) .withAdditionalProperties(additionalProperties); } + + private static final LazySingletonValue _SINGLETON_VALUE_StreamType = + new LazySingletonValue<>( + "streamType", + "1", + new TypeReference() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithNestedMetadataGuids.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithNestedMetadataGuids.java new file mode 100644 index 00000000..4f379412 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithNestedMetadataGuids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class MediaContainerWithNestedMetadataGuids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public MediaContainerWithNestedMetadataGuids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public MediaContainerWithNestedMetadataGuids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaContainerWithNestedMetadataGuids other = (MediaContainerWithNestedMetadataGuids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(MediaContainerWithNestedMetadataGuids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public MediaContainerWithNestedMetadataGuids build() { + + return new MediaContainerWithNestedMetadataGuids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataGuids.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataGuids.java new file mode 100644 index 00000000..558fb078 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataGuids.java @@ -0,0 +1,101 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; + + +public class MediaContainerWithPlaylistMetadataGuids { + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonProperty("id") + private String id; + + @JsonCreator + public MediaContainerWithPlaylistMetadataGuids( + @JsonProperty("id") String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + } + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + @JsonIgnore + public String id() { + return id; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public MediaContainerWithPlaylistMetadataGuids withId(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MediaContainerWithPlaylistMetadataGuids other = (MediaContainerWithPlaylistMetadataGuids) o; + return + Utils.enhancedDeepEquals(this.id, other.id); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + id); + } + + @Override + public String toString() { + return Utils.toString(MediaContainerWithPlaylistMetadataGuids.class, + "id", id); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String id; + + private Builder() { + // force use of static builder() method + } + + + /** + * The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb:// + */ + public Builder id(String id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + public MediaContainerWithPlaylistMetadataGuids build() { + + return new MediaContainerWithPlaylistMetadataGuids( + id); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataMetadata.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataMetadata.java index b5ff5e53..7cb55114 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataMetadata.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaContainerWithPlaylistMetadataMetadata.java @@ -12,12 +12,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -45,28 +47,27 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * When present, the duration for the item, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; /** * For shows and seasons, contains the number of total episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; /** * The type of the playlist. @@ -92,51 +93,48 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -148,21 +146,28 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -193,6 +198,13 @@ public class MediaContainerWithPlaylistMetadataMetadata { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -235,17 +247,24 @@ public class MediaContainerWithPlaylistMetadataMetadata { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -257,11 +276,9 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -276,14 +293,21 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -297,7 +321,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -332,7 +356,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -346,7 +370,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -358,21 +382,21 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -419,49 +443,49 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -475,28 +499,28 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -508,7 +532,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; @JsonIgnore @@ -517,76 +541,80 @@ public class MediaContainerWithPlaylistMetadataMetadata { @JsonCreator public MediaContainerWithPlaylistMetadataMetadata( @JsonProperty("readOnly") Optional readOnly, - @JsonProperty("composite") Optional composite, - @JsonProperty("duration") Optional duration, - @JsonProperty("key") Optional key, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("duration") Optional duration, + @JsonProperty("key") String key, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("playlistType") Optional playlistType, @JsonProperty("smart") Optional smart, @JsonProperty("specialPlaylistType") Optional specialPlaylistType, - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, + @JsonProperty("index") Optional index, @JsonProperty("lastViewedAt") Optional lastViewedAt, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year) { + @JsonProperty("year") Optional year) { Utils.checkNotNull(readOnly, "readOnly"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(duration, "duration"); @@ -605,12 +633,14 @@ public class MediaContainerWithPlaylistMetadataMetadata { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); Utils.checkNotNull(director, "director"); Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -618,6 +648,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -625,6 +656,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -676,12 +708,14 @@ public class MediaContainerWithPlaylistMetadataMetadata { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.contentRating = contentRating; this.country = country; this.director = director; this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -689,6 +723,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -696,6 +731,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -732,8 +768,15 @@ public class MediaContainerWithPlaylistMetadataMetadata { this.additionalProperties = new HashMap<>(); } - public MediaContainerWithPlaylistMetadataMetadata() { + public MediaContainerWithPlaylistMetadataMetadata( + String key, + String title, + String type, + long addedAt) { this(Optional.empty(), Optional.empty(), Optional.empty(), + key, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), title, + type, Optional.empty(), addedAt, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -754,9 +797,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty()); } /** @@ -770,34 +811,32 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } /** * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -829,26 +868,24 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -856,34 +893,32 @@ public class MediaContainerWithPlaylistMetadataMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -895,28 +930,33 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -954,6 +994,14 @@ public class MediaContainerWithPlaylistMetadataMetadata { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -1002,19 +1050,26 @@ public class MediaContainerWithPlaylistMetadataMetadata { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -1027,13 +1082,10 @@ public class MediaContainerWithPlaylistMetadataMetadata { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -1048,19 +1100,25 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1075,7 +1133,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1114,10 +1172,9 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1132,7 +1189,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1146,26 +1203,24 @@ public class MediaContainerWithPlaylistMetadataMetadata { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1218,64 +1273,57 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1290,7 +1338,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1298,7 +1346,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1306,7 +1354,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1314,7 +1362,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1328,7 +1376,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1364,7 +1412,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public MediaContainerWithPlaylistMetadataMetadata withComposite(Object composite) { + public MediaContainerWithPlaylistMetadataMetadata withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1374,7 +1422,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public MediaContainerWithPlaylistMetadataMetadata withComposite(Optional composite) { + public MediaContainerWithPlaylistMetadataMetadata withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1383,7 +1431,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public MediaContainerWithPlaylistMetadataMetadata withDuration(long duration) { + public MediaContainerWithPlaylistMetadataMetadata withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1393,7 +1441,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public MediaContainerWithPlaylistMetadataMetadata withDuration(Optional duration) { + public MediaContainerWithPlaylistMetadataMetadata withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1402,17 +1450,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public MediaContainerWithPlaylistMetadataMetadata withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public MediaContainerWithPlaylistMetadataMetadata withKey(Optional key) { + public MediaContainerWithPlaylistMetadataMetadata withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; @@ -1421,7 +1459,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public MediaContainerWithPlaylistMetadataMetadata withLeafCount(long leafCount) { + public MediaContainerWithPlaylistMetadataMetadata withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1431,7 +1469,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public MediaContainerWithPlaylistMetadataMetadata withLeafCount(Optional leafCount) { + public MediaContainerWithPlaylistMetadataMetadata withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1497,17 +1535,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public MediaContainerWithPlaylistMetadataMetadata withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public MediaContainerWithPlaylistMetadataMetadata withTitle(Optional title) { + public MediaContainerWithPlaylistMetadataMetadata withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1516,17 +1544,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public MediaContainerWithPlaylistMetadataMetadata withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public MediaContainerWithPlaylistMetadataMetadata withType(Optional type) { + public MediaContainerWithPlaylistMetadataMetadata withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1535,7 +1553,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public MediaContainerWithPlaylistMetadataMetadata withAbsoluteIndex(long absoluteIndex) { + public MediaContainerWithPlaylistMetadataMetadata withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1545,7 +1563,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public MediaContainerWithPlaylistMetadataMetadata withAbsoluteIndex(Optional absoluteIndex) { + public MediaContainerWithPlaylistMetadataMetadata withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1555,16 +1573,6 @@ public class MediaContainerWithPlaylistMetadataMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public MediaContainerWithPlaylistMetadataMetadata withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public MediaContainerWithPlaylistMetadataMetadata withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1573,7 +1581,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the background artwork for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withArt(Object art) { + public MediaContainerWithPlaylistMetadataMetadata withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1583,7 +1591,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the background artwork for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withArt(Optional art) { + public MediaContainerWithPlaylistMetadataMetadata withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1592,7 +1600,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public MediaContainerWithPlaylistMetadataMetadata withAudienceRating(double audienceRating) { + public MediaContainerWithPlaylistMetadataMetadata withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1602,7 +1610,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public MediaContainerWithPlaylistMetadataMetadata withAudienceRating(Optional audienceRating) { + public MediaContainerWithPlaylistMetadataMetadata withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1611,7 +1619,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public MediaContainerWithPlaylistMetadataMetadata withAudienceRatingImage(Object audienceRatingImage) { + public MediaContainerWithPlaylistMetadataMetadata withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1621,7 +1629,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public MediaContainerWithPlaylistMetadataMetadata withAudienceRatingImage(Optional audienceRatingImage) { + public MediaContainerWithPlaylistMetadataMetadata withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1643,7 +1651,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a banner graphic for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withBanner(Object banner) { + public MediaContainerWithPlaylistMetadataMetadata withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1653,7 +1661,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a banner graphic for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withBanner(Optional banner) { + public MediaContainerWithPlaylistMetadataMetadata withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1662,7 +1670,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public MediaContainerWithPlaylistMetadataMetadata withChapterSource(Object chapterSource) { + public MediaContainerWithPlaylistMetadataMetadata withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1672,16 +1680,35 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public MediaContainerWithPlaylistMetadataMetadata withChapterSource(Optional chapterSource) { + public MediaContainerWithPlaylistMetadataMetadata withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * If known, the content rating (e.g. MPAA) for an item. */ - public MediaContainerWithPlaylistMetadataMetadata withContentRating(Object contentRating) { + public MediaContainerWithPlaylistMetadataMetadata withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1691,7 +1718,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public MediaContainerWithPlaylistMetadataMetadata withContentRating(Optional contentRating) { + public MediaContainerWithPlaylistMetadataMetadata withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1774,6 +1801,25 @@ public class MediaContainerWithPlaylistMetadataMetadata { return this; } + /** + * The GUID of the grandparent media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1888,23 +1934,42 @@ public class MediaContainerWithPlaylistMetadataMetadata { return this; } - public MediaContainerWithPlaylistMetadataMetadata withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public MediaContainerWithPlaylistMetadataMetadata withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public MediaContainerWithPlaylistMetadataMetadata withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public MediaContainerWithPlaylistMetadataMetadata withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withHero(Object hero) { + public MediaContainerWithPlaylistMetadataMetadata withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1914,7 +1979,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a hero image for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withHero(Optional hero) { + public MediaContainerWithPlaylistMetadataMetadata withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1936,7 +2001,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public MediaContainerWithPlaylistMetadataMetadata withIndex(long index) { + public MediaContainerWithPlaylistMetadataMetadata withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1946,15 +2011,12 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public MediaContainerWithPlaylistMetadataMetadata withIndex(Optional index) { + public MediaContainerWithPlaylistMetadataMetadata withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public MediaContainerWithPlaylistMetadataMetadata withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1962,9 +2024,6 @@ public class MediaContainerWithPlaylistMetadataMetadata { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public MediaContainerWithPlaylistMetadataMetadata withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1987,7 +2046,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public MediaContainerWithPlaylistMetadataMetadata withOriginallyAvailableAt(Object originallyAvailableAt) { + public MediaContainerWithPlaylistMetadataMetadata withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1997,7 +2056,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public MediaContainerWithPlaylistMetadataMetadata withOriginallyAvailableAt(Optional originallyAvailableAt) { + public MediaContainerWithPlaylistMetadataMetadata withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -2006,7 +2065,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public MediaContainerWithPlaylistMetadataMetadata withOriginalTitle(Object originalTitle) { + public MediaContainerWithPlaylistMetadataMetadata withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -2016,12 +2075,31 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public MediaContainerWithPlaylistMetadataMetadata withOriginalTitle(Optional originalTitle) { + public MediaContainerWithPlaylistMetadataMetadata withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public MediaContainerWithPlaylistMetadataMetadata withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -2044,7 +2122,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The `index` of the parent */ - public MediaContainerWithPlaylistMetadataMetadata withParentIndex(long parentIndex) { + public MediaContainerWithPlaylistMetadataMetadata withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -2054,7 +2132,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The `index` of the parent */ - public MediaContainerWithPlaylistMetadataMetadata withParentIndex(Optional parentIndex) { + public MediaContainerWithPlaylistMetadataMetadata withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -2139,7 +2217,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withPrimaryExtraKey(Object primaryExtraKey) { + public MediaContainerWithPlaylistMetadataMetadata withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -2149,7 +2227,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public MediaContainerWithPlaylistMetadataMetadata withPrimaryExtraKey(Optional primaryExtraKey) { + public MediaContainerWithPlaylistMetadataMetadata withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2177,7 +2255,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public MediaContainerWithPlaylistMetadataMetadata withRating(double rating) { + public MediaContainerWithPlaylistMetadataMetadata withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2187,7 +2265,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public MediaContainerWithPlaylistMetadataMetadata withRating(Optional rating) { + public MediaContainerWithPlaylistMetadataMetadata withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2209,7 +2287,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Number of ratings under this metadata */ - public MediaContainerWithPlaylistMetadataMetadata withRatingCount(long ratingCount) { + public MediaContainerWithPlaylistMetadataMetadata withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2219,7 +2297,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Number of ratings under this metadata */ - public MediaContainerWithPlaylistMetadataMetadata withRatingCount(Optional ratingCount) { + public MediaContainerWithPlaylistMetadataMetadata withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2228,7 +2306,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public MediaContainerWithPlaylistMetadataMetadata withRatingImage(Object ratingImage) { + public MediaContainerWithPlaylistMetadataMetadata withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2238,7 +2316,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public MediaContainerWithPlaylistMetadataMetadata withRatingImage(Optional ratingImage) { + public MediaContainerWithPlaylistMetadataMetadata withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2247,7 +2325,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public MediaContainerWithPlaylistMetadataMetadata withRatingKey(Object ratingKey) { + public MediaContainerWithPlaylistMetadataMetadata withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2257,7 +2335,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public MediaContainerWithPlaylistMetadataMetadata withRatingKey(Optional ratingKey) { + public MediaContainerWithPlaylistMetadataMetadata withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2374,7 +2452,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public MediaContainerWithPlaylistMetadataMetadata withStudio(Object studio) { + public MediaContainerWithPlaylistMetadataMetadata withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2384,7 +2462,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public MediaContainerWithPlaylistMetadataMetadata withStudio(Optional studio) { + public MediaContainerWithPlaylistMetadataMetadata withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2393,7 +2471,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public MediaContainerWithPlaylistMetadataMetadata withSubtype(Object subtype) { + public MediaContainerWithPlaylistMetadataMetadata withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2403,7 +2481,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public MediaContainerWithPlaylistMetadataMetadata withSubtype(Optional subtype) { + public MediaContainerWithPlaylistMetadataMetadata withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2412,7 +2490,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public MediaContainerWithPlaylistMetadataMetadata withSummary(Object summary) { + public MediaContainerWithPlaylistMetadataMetadata withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2422,7 +2500,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public MediaContainerWithPlaylistMetadataMetadata withSummary(Optional summary) { + public MediaContainerWithPlaylistMetadataMetadata withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2431,7 +2509,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public MediaContainerWithPlaylistMetadataMetadata withTagline(Object tagline) { + public MediaContainerWithPlaylistMetadataMetadata withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2441,7 +2519,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public MediaContainerWithPlaylistMetadataMetadata withTagline(Optional tagline) { + public MediaContainerWithPlaylistMetadataMetadata withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2450,7 +2528,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public MediaContainerWithPlaylistMetadataMetadata withTheme(Object theme) { + public MediaContainerWithPlaylistMetadataMetadata withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2460,7 +2538,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public MediaContainerWithPlaylistMetadataMetadata withTheme(Optional theme) { + public MediaContainerWithPlaylistMetadataMetadata withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2469,7 +2547,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public MediaContainerWithPlaylistMetadataMetadata withThumb(Object thumb) { + public MediaContainerWithPlaylistMetadataMetadata withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2479,7 +2557,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public MediaContainerWithPlaylistMetadataMetadata withThumb(Optional thumb) { + public MediaContainerWithPlaylistMetadataMetadata withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2488,7 +2566,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public MediaContainerWithPlaylistMetadataMetadata withTitleSort(Object titleSort) { + public MediaContainerWithPlaylistMetadataMetadata withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2498,7 +2576,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public MediaContainerWithPlaylistMetadataMetadata withTitleSort(Optional titleSort) { + public MediaContainerWithPlaylistMetadataMetadata withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2526,7 +2604,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When the user has rated an item, this contains the user rating */ - public MediaContainerWithPlaylistMetadataMetadata withUserRating(double userRating) { + public MediaContainerWithPlaylistMetadataMetadata withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2536,7 +2614,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When the user has rated an item, this contains the user rating */ - public MediaContainerWithPlaylistMetadataMetadata withUserRating(Optional userRating) { + public MediaContainerWithPlaylistMetadataMetadata withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2545,7 +2623,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public MediaContainerWithPlaylistMetadataMetadata withViewCount(long viewCount) { + public MediaContainerWithPlaylistMetadataMetadata withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2555,7 +2633,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public MediaContainerWithPlaylistMetadataMetadata withViewCount(Optional viewCount) { + public MediaContainerWithPlaylistMetadataMetadata withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2564,7 +2642,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public MediaContainerWithPlaylistMetadataMetadata withViewedLeafCount(long viewedLeafCount) { + public MediaContainerWithPlaylistMetadataMetadata withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2574,7 +2652,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public MediaContainerWithPlaylistMetadataMetadata withViewedLeafCount(Optional viewedLeafCount) { + public MediaContainerWithPlaylistMetadataMetadata withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2583,7 +2661,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public MediaContainerWithPlaylistMetadataMetadata withViewOffset(long viewOffset) { + public MediaContainerWithPlaylistMetadataMetadata withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2593,7 +2671,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public MediaContainerWithPlaylistMetadataMetadata withViewOffset(Optional viewOffset) { + public MediaContainerWithPlaylistMetadataMetadata withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2615,7 +2693,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public MediaContainerWithPlaylistMetadataMetadata withYear(long year) { + public MediaContainerWithPlaylistMetadataMetadata withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2625,7 +2703,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public MediaContainerWithPlaylistMetadataMetadata withYear(Optional year) { + public MediaContainerWithPlaylistMetadataMetadata withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2672,12 +2750,14 @@ public class MediaContainerWithPlaylistMetadataMetadata { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && Utils.enhancedDeepEquals(this.director, other.director) && Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2685,6 +2765,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2692,6 +2773,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2737,24 +2819,26 @@ public class MediaContainerWithPlaylistMetadataMetadata { type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, chapterSource, - contentRating, country, director, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + childCount, contentRating, country, + director, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, lastViewedAt, media, - originallyAvailableAt, originalTitle, parentHero, - parentIndex, parentKey, parentRatingKey, - parentThumb, parentTitle, primaryExtraKey, - prompt, rating, ratingArray, - ratingCount, ratingImage, ratingKey, - role, search, secondary, - skipChildren, skipParent, sort, - studio, subtype, summary, - tagline, theme, thumb, - titleSort, updatedAt, userRating, - viewCount, viewedLeafCount, viewOffset, - writer, year, additionalProperties); + originallyAvailableAt, originalTitle, parentGuid, + parentHero, parentIndex, parentKey, + parentRatingKey, parentThumb, parentTitle, + primaryExtraKey, prompt, rating, + ratingArray, ratingCount, ratingImage, + ratingKey, role, search, + secondary, skipChildren, skipParent, + sort, studio, subtype, + summary, tagline, theme, + thumb, titleSort, updatedAt, + userRating, viewCount, viewedLeafCount, + viewOffset, writer, year, + additionalProperties); } @Override @@ -2778,12 +2862,14 @@ public class MediaContainerWithPlaylistMetadataMetadata { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "contentRating", contentRating, "country", country, "director", director, "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2791,6 +2877,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2798,6 +2885,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2839,13 +2927,13 @@ public class MediaContainerWithPlaylistMetadataMetadata { private Optional readOnly = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional composite = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); - private Optional key = Optional.empty(); + private String key; - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional playlistType = Optional.empty(); @@ -2853,27 +2941,29 @@ public class MediaContainerWithPlaylistMetadataMetadata { private Optional specialPlaylistType = Optional.empty(); - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional childCount = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); @@ -2885,6 +2975,8 @@ public class MediaContainerWithPlaylistMetadataMetadata { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2897,25 +2989,29 @@ public class MediaContainerWithPlaylistMetadataMetadata { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); private Optional lastViewedAt = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2925,19 +3021,19 @@ public class MediaContainerWithPlaylistMetadataMetadata { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2951,33 +3047,33 @@ public class MediaContainerWithPlaylistMetadataMetadata { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -3008,7 +3104,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3017,7 +3113,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3027,7 +3123,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3036,7 +3132,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3046,16 +3142,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; @@ -3065,7 +3152,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3074,7 +3161,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3141,16 +3228,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -3160,16 +3238,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -3179,7 +3248,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -3188,7 +3257,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -3199,15 +3268,6 @@ public class MediaContainerWithPlaylistMetadataMetadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -3217,7 +3277,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -3226,7 +3286,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -3236,7 +3296,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -3245,7 +3305,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -3255,7 +3315,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -3264,7 +3324,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -3287,7 +3347,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -3296,7 +3356,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -3306,7 +3366,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -3315,17 +3375,36 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3334,7 +3413,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3418,6 +3497,25 @@ public class MediaContainerWithPlaylistMetadataMetadata { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3532,23 +3630,42 @@ public class MediaContainerWithPlaylistMetadataMetadata { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3557,7 +3674,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3580,7 +3697,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3589,25 +3706,19 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3631,7 +3742,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3640,7 +3751,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3650,7 +3761,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3659,13 +3770,32 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3688,7 +3818,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3697,7 +3827,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3783,7 +3913,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3792,7 +3922,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3821,7 +3951,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3830,7 +3960,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3853,7 +3983,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3862,7 +3992,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3872,7 +4002,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3881,7 +4011,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3891,7 +4021,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3900,7 +4030,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -4018,7 +4148,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -4027,7 +4157,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -4037,7 +4167,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -4046,7 +4176,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -4056,7 +4186,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -4065,7 +4195,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -4075,7 +4205,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -4084,7 +4214,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -4094,7 +4224,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -4103,7 +4233,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -4113,7 +4243,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -4122,7 +4252,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -4132,7 +4262,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -4141,7 +4271,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -4170,7 +4300,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -4179,7 +4309,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -4189,7 +4319,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -4198,7 +4328,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -4208,7 +4338,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -4217,7 +4347,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -4227,7 +4357,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -4236,7 +4366,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4259,7 +4389,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4268,7 +4398,7 @@ public class MediaContainerWithPlaylistMetadataMetadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4299,24 +4429,25 @@ public class MediaContainerWithPlaylistMetadataMetadata { type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, chapterSource, - contentRating, country, director, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + childCount, contentRating, country, + director, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, lastViewedAt, media, - originallyAvailableAt, originalTitle, parentHero, - parentIndex, parentKey, parentRatingKey, - parentThumb, parentTitle, primaryExtraKey, - prompt, rating, ratingArray, - ratingCount, ratingImage, ratingKey, - role, search, secondary, - skipChildren, skipParent, sort, - studio, subtype, summary, - tagline, theme, thumb, - titleSort, updatedAt, userRating, - viewCount, viewedLeafCount, viewOffset, - writer, year) + originallyAvailableAt, originalTitle, parentGuid, + parentHero, parentIndex, parentKey, + parentRatingKey, parentThumb, parentTitle, + primaryExtraKey, prompt, rating, + ratingArray, ratingCount, ratingImage, + ratingKey, role, search, + secondary, skipChildren, skipParent, + sort, studio, subtype, + summary, tagline, theme, + thumb, titleSort, updatedAt, + userRating, viewCount, viewedLeafCount, + viewOffset, writer, year) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaQuery.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaQuery.java index 8e355e85..fe3583ff 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MediaQuery.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaQuery.java @@ -4,14 +4,140 @@ package dev.plexapi.sdk.models.shared; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import dev.plexapi.sdk.utils.SpeakeasyMetadata; import dev.plexapi.sdk.utils.Utils; +import java.lang.Long; import java.lang.Override; import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.Optional; - +/** + * MediaQuery + * + *

A querystring-based filtering language used to select subsets of media. When provided as an object, properties are serialized as a querystring using form style with explode. + * + *

Only the defined properties below are allowed. The object serializes to a querystring format like: `type=4&sourceType=2&sort=duration:desc,index` + */ public class MediaQuery { + /** + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ + @SpeakeasyMetadata("queryParam:name=type") + private Optional type; + + /** + * Change the default level to which fields refer (used with type for hierarchical queries) + */ + @SpeakeasyMetadata("queryParam:name=sourceType") + private Optional sourceType; + + /** + * Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + */ + @SpeakeasyMetadata("queryParam:name=sort") + private Optional sort; + + /** + * Field to group results by (similar to SQL GROUP BY) + */ + @SpeakeasyMetadata("queryParam:name=group") + private Optional group; + + /** + * Maximum number of results to return + */ + @SpeakeasyMetadata("queryParam:name=limit") + private Optional limit; + @JsonCreator + public MediaQuery( + Optional type, + Optional sourceType, + Optional sort, + Optional group, + Optional limit) { + Utils.checkNotNull(type, "type"); + Utils.checkNotNull(sourceType, "sourceType"); + Utils.checkNotNull(sort, "sort"); + Utils.checkNotNull(group, "group"); + Utils.checkNotNull(limit, "limit"); + this.type = type; + this.sourceType = sourceType; + this.sort = sort; + this.group = group; + this.limit = limit; + } + public MediaQuery() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty()); + } + + /** + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional type() { + return (Optional) type; + } + + /** + * Change the default level to which fields refer (used with type for hierarchical queries) + */ + @JsonIgnore + public Optional sourceType() { + return sourceType; + } + + /** + * Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + */ + @JsonIgnore + public Optional sort() { + return sort; + } + + /** + * Field to group results by (similar to SQL GROUP BY) + */ + @JsonIgnore + public Optional group() { + return group; + } + + /** + * Maximum number of results to return + */ + @JsonIgnore + public Optional limit() { + return limit; } public static Builder builder() { @@ -19,6 +145,125 @@ public class MediaQuery { } + /** + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ + public MediaQuery withType(MediaType type) { + Utils.checkNotNull(type, "type"); + this.type = Optional.ofNullable(type); + return this; + } + + + /** + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ + public MediaQuery withType(Optional type) { + Utils.checkNotNull(type, "type"); + this.type = type; + return this; + } + + /** + * Change the default level to which fields refer (used with type for hierarchical queries) + */ + public MediaQuery withSourceType(long sourceType) { + Utils.checkNotNull(sourceType, "sourceType"); + this.sourceType = Optional.ofNullable(sourceType); + return this; + } + + + /** + * Change the default level to which fields refer (used with type for hierarchical queries) + */ + public MediaQuery withSourceType(Optional sourceType) { + Utils.checkNotNull(sourceType, "sourceType"); + this.sourceType = sourceType; + return this; + } + + /** + * Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + */ + public MediaQuery withSort(String sort) { + Utils.checkNotNull(sort, "sort"); + this.sort = Optional.ofNullable(sort); + return this; + } + + + /** + * Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + */ + public MediaQuery withSort(Optional sort) { + Utils.checkNotNull(sort, "sort"); + this.sort = sort; + return this; + } + + /** + * Field to group results by (similar to SQL GROUP BY) + */ + public MediaQuery withGroup(String group) { + Utils.checkNotNull(group, "group"); + this.group = Optional.ofNullable(group); + return this; + } + + + /** + * Field to group results by (similar to SQL GROUP BY) + */ + public MediaQuery withGroup(Optional group) { + Utils.checkNotNull(group, "group"); + this.group = group; + return this; + } + + /** + * Maximum number of results to return + */ + public MediaQuery withLimit(long limit) { + Utils.checkNotNull(limit, "limit"); + this.limit = Optional.ofNullable(limit); + return this; + } + + + /** + * Maximum number of results to return + */ + public MediaQuery withLimit(Optional limit) { + Utils.checkNotNull(limit, "limit"); + this.limit = limit; + return this; + } + @Override public boolean equals(java.lang.Object o) { if (this == o) { @@ -27,31 +272,173 @@ public class MediaQuery { if (o == null || getClass() != o.getClass()) { return false; } - return true; + MediaQuery other = (MediaQuery) o; + return + Utils.enhancedDeepEquals(this.type, other.type) && + Utils.enhancedDeepEquals(this.sourceType, other.sourceType) && + Utils.enhancedDeepEquals(this.sort, other.sort) && + Utils.enhancedDeepEquals(this.group, other.group) && + Utils.enhancedDeepEquals(this.limit, other.limit); } @Override public int hashCode() { return Utils.enhancedHash( - ); + type, sourceType, sort, + group, limit); } @Override public String toString() { - return Utils.toString(MediaQuery.class); + return Utils.toString(MediaQuery.class, + "type", type, + "sourceType", sourceType, + "sort", sort, + "group", group, + "limit", limit); } @SuppressWarnings("UnusedReturnValue") public final static class Builder { + private Optional type = Optional.empty(); + + private Optional sourceType = Optional.empty(); + + private Optional sort = Optional.empty(); + + private Optional group = Optional.empty(); + + private Optional limit = Optional.empty(); + private Builder() { // force use of static builder() method } + + /** + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ + public Builder type(MediaType type) { + Utils.checkNotNull(type, "type"); + this.type = Optional.ofNullable(type); + return this; + } + + /** + * The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ + public Builder type(Optional type) { + Utils.checkNotNull(type, "type"); + this.type = type; + return this; + } + + + /** + * Change the default level to which fields refer (used with type for hierarchical queries) + */ + public Builder sourceType(long sourceType) { + Utils.checkNotNull(sourceType, "sourceType"); + this.sourceType = Optional.ofNullable(sourceType); + return this; + } + + /** + * Change the default level to which fields refer (used with type for hierarchical queries) + */ + public Builder sourceType(Optional sourceType) { + Utils.checkNotNull(sourceType, "sourceType"); + this.sourceType = sourceType; + return this; + } + + + /** + * Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + */ + public Builder sort(String sort) { + Utils.checkNotNull(sort, "sort"); + this.sort = Optional.ofNullable(sort); + return this; + } + + /** + * Field(s) to sort by, with optional modifiers. Use comma to separate multiple fields, and :desc or :nullsLast for modifiers (e.g., "duration:desc,index") + */ + public Builder sort(Optional sort) { + Utils.checkNotNull(sort, "sort"); + this.sort = sort; + return this; + } + + + /** + * Field to group results by (similar to SQL GROUP BY) + */ + public Builder group(String group) { + Utils.checkNotNull(group, "group"); + this.group = Optional.ofNullable(group); + return this; + } + + /** + * Field to group results by (similar to SQL GROUP BY) + */ + public Builder group(Optional group) { + Utils.checkNotNull(group, "group"); + this.group = group; + return this; + } + + + /** + * Maximum number of results to return + */ + public Builder limit(long limit) { + Utils.checkNotNull(limit, "limit"); + this.limit = Optional.ofNullable(limit); + return this; + } + + /** + * Maximum number of results to return + */ + public Builder limit(Optional limit) { + Utils.checkNotNull(limit, "limit"); + this.limit = limit; + return this; + } + public MediaQuery build() { return new MediaQuery( - ); + type, sourceType, sort, + group, limit); } } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaReviewsVisibility.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaReviewsVisibility.java new file mode 100644 index 00000000..3d1a3cda --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaReviewsVisibility.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * MediaReviewsVisibility + * + *

Whether or not the account has media reviews visibility enabled + */ +public enum MediaReviewsVisibility { + NoOne(0), + CriticsOnly(1), + PlexUsersOnly(2), + PlexUsersAndCritics(3); + + @JsonValue + private final int value; + + MediaReviewsVisibility(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (MediaReviewsVisibility o: MediaReviewsVisibility.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaType.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaType.java new file mode 100644 index 00000000..b740cad0 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaType.java @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * MediaType + * + *

The type of media to retrieve or filter by. + * + *

1 = movie + * 2 = show + * 3 = season + * 4 = episode + * 5 = artist + * 6 = album + * 7 = track + * 8 = photo_album + * 9 = photo + * + *

E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries + */ +public enum MediaType { + Movie(1L), + TvShow(2L), + Season(3L), + Episode(4L), + Artist(5L), + Album(6L), + Track(7L), + PhotoAlbum(8L), + Photo(9L); + + @JsonValue + private final long value; + + MediaType(long value) { + this.value = value; + } + + public long value() { + return value; + } + + public static Optional fromValue(long value) { + for (MediaType o: MediaType.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MediaTypeString.java b/src/main/java/dev/plexapi/sdk/models/shared/MediaTypeString.java new file mode 100644 index 00000000..5a749541 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/MediaTypeString.java @@ -0,0 +1,48 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; + +/** + * MediaTypeString + * + *

The type of media content in the Plex library. This can represent videos, music, or photos. + */ +public enum MediaTypeString { + Movie("movie"), + TvShow("show"), + Season("season"), + Episode("episode"), + Artist("artist"), + Album("album"), + Track("track"), + PhotoAlbum("photoalbum"), + Photo("photo"), + Collection("collection"); + + @JsonValue + private final String value; + + MediaTypeString(String value) { + this.value = value; + } + + public String value() { + return value; + } + + public static Optional fromValue(String value) { + for (MediaTypeString o: MediaTypeString.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Metadata.java b/src/main/java/dev/plexapi/sdk/models/shared/Metadata.java index 010e27e5..874ee9de 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/Metadata.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/Metadata.java @@ -12,12 +12,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,51 +38,48 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -92,28 +91,35 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -130,7 +136,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * Typically only seen in metadata at a library's top level @@ -151,6 +157,13 @@ public class Metadata { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -193,17 +206,24 @@ public class Metadata { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -215,18 +235,15 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -236,7 +253,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; @JsonInclude(Include.NON_ABSENT) @@ -248,14 +265,21 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -269,7 +293,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -304,7 +328,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -318,7 +342,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -330,21 +354,21 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -391,49 +415,49 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -447,28 +471,28 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -480,7 +504,7 @@ public class Metadata { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; @JsonIgnore @@ -488,73 +512,77 @@ public class Metadata { @JsonCreator public Metadata( - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("composite") Optional composite, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, - @JsonProperty("duration") Optional duration, + @JsonProperty("duration") Optional duration, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, @JsonProperty("lastViewedAt") Optional lastViewedAt, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year) { + @JsonProperty("year") Optional year) { Utils.checkNotNull(title, "title"); Utils.checkNotNull(type, "type"); Utils.checkNotNull(absoluteIndex, "absoluteIndex"); @@ -565,6 +593,7 @@ public class Metadata { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); @@ -573,6 +602,7 @@ public class Metadata { Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -580,6 +610,7 @@ public class Metadata { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -589,6 +620,7 @@ public class Metadata { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -632,6 +664,7 @@ public class Metadata { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.composite = composite; this.contentRating = contentRating; this.country = country; @@ -640,6 +673,7 @@ public class Metadata { this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -647,6 +681,7 @@ public class Metadata { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -656,6 +691,7 @@ public class Metadata { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -692,8 +728,22 @@ public class Metadata { this.additionalProperties = new HashMap<>(); } - public Metadata() { - this(Optional.empty(), Optional.empty(), Optional.empty(), + public Metadata( + String title, + String type, + long addedAt, + String key) { + this(title, type, Optional.empty(), + addedAt, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -706,41 +756,30 @@ public class Metadata { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty()); + Optional.empty(), Optional.empty()); } /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -748,34 +787,32 @@ public class Metadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -787,37 +824,41 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -836,7 +877,7 @@ public class Metadata { * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -863,6 +904,14 @@ public class Metadata { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -911,19 +960,26 @@ public class Metadata { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -936,22 +992,18 @@ public class Metadata { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -961,7 +1013,7 @@ public class Metadata { * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -974,19 +1026,25 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1001,7 +1059,7 @@ public class Metadata { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1040,10 +1098,9 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1058,7 +1115,7 @@ public class Metadata { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1072,26 +1129,24 @@ public class Metadata { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1144,64 +1199,57 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1216,7 +1264,7 @@ public class Metadata { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1224,7 +1272,7 @@ public class Metadata { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1232,7 +1280,7 @@ public class Metadata { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1240,7 +1288,7 @@ public class Metadata { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1254,7 +1302,7 @@ public class Metadata { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1271,17 +1319,7 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Metadata withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Metadata withTitle(Optional title) { + public Metadata withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1290,17 +1328,7 @@ public class Metadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Metadata withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Metadata withType(Optional type) { + public Metadata withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1309,7 +1337,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Metadata withAbsoluteIndex(long absoluteIndex) { + public Metadata withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1319,7 +1347,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Metadata withAbsoluteIndex(Optional absoluteIndex) { + public Metadata withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1329,16 +1357,6 @@ public class Metadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Metadata withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Metadata withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1347,7 +1365,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Metadata withArt(Object art) { + public Metadata withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1357,7 +1375,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Metadata withArt(Optional art) { + public Metadata withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1366,7 +1384,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Metadata withAudienceRating(double audienceRating) { + public Metadata withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1376,7 +1394,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Metadata withAudienceRating(Optional audienceRating) { + public Metadata withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1385,7 +1403,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Metadata withAudienceRatingImage(Object audienceRatingImage) { + public Metadata withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1395,7 +1413,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Metadata withAudienceRatingImage(Optional audienceRatingImage) { + public Metadata withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1417,7 +1435,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Metadata withBanner(Object banner) { + public Metadata withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1427,7 +1445,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Metadata withBanner(Optional banner) { + public Metadata withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1436,7 +1454,7 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Metadata withChapterSource(Object chapterSource) { + public Metadata withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1446,16 +1464,35 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Metadata withChapterSource(Optional chapterSource) { + public Metadata withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Metadata withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public Metadata withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Metadata withComposite(Object composite) { + public Metadata withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1465,7 +1502,7 @@ public class Metadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Metadata withComposite(Optional composite) { + public Metadata withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1474,7 +1511,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Metadata withContentRating(Object contentRating) { + public Metadata withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1484,7 +1521,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Metadata withContentRating(Optional contentRating) { + public Metadata withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1519,7 +1556,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Metadata withDuration(long duration) { + public Metadata withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1529,7 +1566,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Metadata withDuration(Optional duration) { + public Metadata withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1586,6 +1623,25 @@ public class Metadata { return this; } + /** + * The GUID of the grandparent media item. + */ + public Metadata withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public Metadata withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1700,23 +1756,42 @@ public class Metadata { return this; } - public Metadata withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Metadata withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Metadata withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Metadata withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Metadata withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public Metadata withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public Metadata withHero(Object hero) { + public Metadata withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1726,7 +1801,7 @@ public class Metadata { /** * When present, the URL for a hero image for the item. */ - public Metadata withHero(Optional hero) { + public Metadata withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1748,7 +1823,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Metadata withIndex(long index) { + public Metadata withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1758,7 +1833,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Metadata withIndex(Optional index) { + public Metadata withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1767,25 +1842,12 @@ public class Metadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Metadata withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Metadata withKey(Optional key) { + public Metadata withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Metadata withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1793,9 +1855,6 @@ public class Metadata { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Metadata withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1805,7 +1864,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Metadata withLeafCount(long leafCount) { + public Metadata withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1815,7 +1874,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Metadata withLeafCount(Optional leafCount) { + public Metadata withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1837,7 +1896,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Metadata withOriginallyAvailableAt(Object originallyAvailableAt) { + public Metadata withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1847,7 +1906,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Metadata withOriginallyAvailableAt(Optional originallyAvailableAt) { + public Metadata withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -1856,7 +1915,7 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Metadata withOriginalTitle(Object originalTitle) { + public Metadata withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -1866,12 +1925,31 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Metadata withOriginalTitle(Optional originalTitle) { + public Metadata withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Metadata withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public Metadata withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -1894,7 +1972,7 @@ public class Metadata { /** * The `index` of the parent */ - public Metadata withParentIndex(long parentIndex) { + public Metadata withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -1904,7 +1982,7 @@ public class Metadata { /** * The `index` of the parent */ - public Metadata withParentIndex(Optional parentIndex) { + public Metadata withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -1989,7 +2067,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Metadata withPrimaryExtraKey(Object primaryExtraKey) { + public Metadata withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -1999,7 +2077,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Metadata withPrimaryExtraKey(Optional primaryExtraKey) { + public Metadata withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2027,7 +2105,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Metadata withRating(double rating) { + public Metadata withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2037,7 +2115,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Metadata withRating(Optional rating) { + public Metadata withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2059,7 +2137,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Metadata withRatingCount(long ratingCount) { + public Metadata withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2069,7 +2147,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Metadata withRatingCount(Optional ratingCount) { + public Metadata withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2078,7 +2156,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Metadata withRatingImage(Object ratingImage) { + public Metadata withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2088,7 +2166,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Metadata withRatingImage(Optional ratingImage) { + public Metadata withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2097,7 +2175,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Metadata withRatingKey(Object ratingKey) { + public Metadata withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2107,7 +2185,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Metadata withRatingKey(Optional ratingKey) { + public Metadata withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2224,7 +2302,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Metadata withStudio(Object studio) { + public Metadata withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2234,7 +2312,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Metadata withStudio(Optional studio) { + public Metadata withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2243,7 +2321,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Metadata withSubtype(Object subtype) { + public Metadata withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2253,7 +2331,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Metadata withSubtype(Optional subtype) { + public Metadata withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2262,7 +2340,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Metadata withSummary(Object summary) { + public Metadata withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2272,7 +2350,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Metadata withSummary(Optional summary) { + public Metadata withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2281,7 +2359,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Metadata withTagline(Object tagline) { + public Metadata withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2291,7 +2369,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Metadata withTagline(Optional tagline) { + public Metadata withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2300,7 +2378,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Metadata withTheme(Object theme) { + public Metadata withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2310,7 +2388,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Metadata withTheme(Optional theme) { + public Metadata withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2319,7 +2397,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Metadata withThumb(Object thumb) { + public Metadata withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2329,7 +2407,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Metadata withThumb(Optional thumb) { + public Metadata withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2338,7 +2416,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Metadata withTitleSort(Object titleSort) { + public Metadata withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2348,7 +2426,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Metadata withTitleSort(Optional titleSort) { + public Metadata withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2376,7 +2454,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Metadata withUserRating(double userRating) { + public Metadata withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2386,7 +2464,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Metadata withUserRating(Optional userRating) { + public Metadata withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2395,7 +2473,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Metadata withViewCount(long viewCount) { + public Metadata withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2405,7 +2483,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Metadata withViewCount(Optional viewCount) { + public Metadata withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2414,7 +2492,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Metadata withViewedLeafCount(long viewedLeafCount) { + public Metadata withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2424,7 +2502,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Metadata withViewedLeafCount(Optional viewedLeafCount) { + public Metadata withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2433,7 +2511,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Metadata withViewOffset(long viewOffset) { + public Metadata withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2443,7 +2521,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Metadata withViewOffset(Optional viewOffset) { + public Metadata withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2465,7 +2543,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Metadata withYear(long year) { + public Metadata withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2475,7 +2553,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Metadata withYear(Optional year) { + public Metadata withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2514,6 +2592,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.composite, other.composite) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && @@ -2522,6 +2601,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2529,6 +2609,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2538,6 +2619,7 @@ public class Metadata { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2580,26 +2662,27 @@ public class Metadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, additionalProperties); + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, additionalProperties); } @Override @@ -2615,6 +2698,7 @@ public class Metadata { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "composite", composite, "contentRating", contentRating, "country", country, @@ -2623,6 +2707,7 @@ public class Metadata { "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2630,6 +2715,7 @@ public class Metadata { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2639,6 +2725,7 @@ public class Metadata { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2678,35 +2765,37 @@ public class Metadata { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional childCount = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional composite = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); private Optional> director = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional> filter = Optional.empty(); @@ -2714,6 +2803,8 @@ public class Metadata { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2726,29 +2817,33 @@ public class Metadata { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); - private Optional key = Optional.empty(); + private String key; private Optional lastViewedAt = Optional.empty(); - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2758,19 +2853,19 @@ public class Metadata { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2784,33 +2879,33 @@ public class Metadata { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -2822,16 +2917,7 @@ public class Metadata { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -2841,16 +2927,7 @@ public class Metadata { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -2860,7 +2937,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -2869,7 +2946,7 @@ public class Metadata { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -2880,15 +2957,6 @@ public class Metadata { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -2898,7 +2966,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -2907,7 +2975,7 @@ public class Metadata { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -2917,7 +2985,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -2926,7 +2994,7 @@ public class Metadata { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -2936,7 +3004,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -2945,7 +3013,7 @@ public class Metadata { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -2968,7 +3036,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -2977,7 +3045,7 @@ public class Metadata { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -2987,7 +3055,7 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -2996,17 +3064,36 @@ public class Metadata { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3015,7 +3102,7 @@ public class Metadata { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3025,7 +3112,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3034,7 +3121,7 @@ public class Metadata { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3070,7 +3157,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3079,7 +3166,7 @@ public class Metadata { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3137,6 +3224,25 @@ public class Metadata { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3251,23 +3357,42 @@ public class Metadata { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3276,7 +3401,7 @@ public class Metadata { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3299,7 +3424,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3308,7 +3433,7 @@ public class Metadata { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -3318,34 +3443,19 @@ public class Metadata { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3356,7 +3466,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3365,7 +3475,7 @@ public class Metadata { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3388,7 +3498,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3397,7 +3507,7 @@ public class Metadata { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3407,7 +3517,7 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3416,13 +3526,32 @@ public class Metadata { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3445,7 +3574,7 @@ public class Metadata { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3454,7 +3583,7 @@ public class Metadata { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3540,7 +3669,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3549,7 +3678,7 @@ public class Metadata { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3578,7 +3707,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3587,7 +3716,7 @@ public class Metadata { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3610,7 +3739,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3619,7 +3748,7 @@ public class Metadata { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3629,7 +3758,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3638,7 +3767,7 @@ public class Metadata { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3648,7 +3777,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3657,7 +3786,7 @@ public class Metadata { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -3775,7 +3904,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -3784,7 +3913,7 @@ public class Metadata { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -3794,7 +3923,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -3803,7 +3932,7 @@ public class Metadata { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -3813,7 +3942,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -3822,7 +3951,7 @@ public class Metadata { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -3832,7 +3961,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -3841,7 +3970,7 @@ public class Metadata { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -3851,7 +3980,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -3860,7 +3989,7 @@ public class Metadata { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -3870,7 +3999,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -3879,7 +4008,7 @@ public class Metadata { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -3889,7 +4018,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -3898,7 +4027,7 @@ public class Metadata { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -3927,7 +4056,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -3936,7 +4065,7 @@ public class Metadata { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -3946,7 +4075,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -3955,7 +4084,7 @@ public class Metadata { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -3965,7 +4094,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -3974,7 +4103,7 @@ public class Metadata { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -3984,7 +4113,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -3993,7 +4122,7 @@ public class Metadata { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4016,7 +4145,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4025,7 +4154,7 @@ public class Metadata { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4053,26 +4182,27 @@ public class Metadata { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year) + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/MetadataItem.java b/src/main/java/dev/plexapi/sdk/models/shared/MetadataItem.java index 40ccdef5..0f3444f4 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/MetadataItem.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/MetadataItem.java @@ -12,12 +12,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; +import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,51 +38,48 @@ public class MetadataItem { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("title") - private Optional title; + private String title; /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("type") - private Optional type; + private String type; /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("absoluteIndex") - private Optional absoluteIndex; + private Optional absoluteIndex; /** * In units of seconds since the epoch, returns the time at which the item was added to the library. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("addedAt") - private Optional addedAt; + private long addedAt; /** * When present, the URL for the background artwork for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("art") - private Optional art; + private Optional art; /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRating") - private Optional audienceRating; + private Optional audienceRating; /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audienceRatingImage") - private Optional audienceRatingImage; + private Optional audienceRatingImage; @JsonInclude(Include.NON_ABSENT) @@ -92,28 +91,35 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("banner") - private Optional banner; + private Optional banner; /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chapterSource") - private Optional chapterSource; + private Optional chapterSource; + + /** + * The number of child items associated with this media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("childCount") + private Optional childCount; /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("composite") - private Optional composite; + private Optional composite; /** * If known, the content rating (e.g. MPAA) for an item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("contentRating") - private Optional contentRating; + private Optional contentRating; @JsonInclude(Include.NON_ABSENT) @@ -130,7 +136,7 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; /** * Typically only seen in metadata at a library's top level @@ -151,6 +157,13 @@ public class MetadataItem { @JsonProperty("grandparentArt") private Optional grandparentArt; + /** + * The GUID of the grandparent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("grandparentGuid") + private Optional grandparentGuid; + /** * The `hero` of the grandparent */ @@ -193,17 +206,24 @@ public class MetadataItem { @JsonProperty("grandparentTitle") private Optional grandparentTitle; + /** + * The globally unique identifier for the media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guid") + private Optional guid; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("Guid") - private Optional> guid; + private Optional> guids; /** * When present, the URL for a hero image for the item. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("hero") - private Optional hero; + private Optional hero; @JsonInclude(Include.NON_ABSENT) @@ -215,18 +235,15 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; + - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("lastViewedAt") private Optional lastViewedAt; @@ -236,7 +253,7 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("leafCount") - private Optional leafCount; + private Optional leafCount; @JsonInclude(Include.NON_ABSENT) @@ -248,14 +265,21 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originallyAvailableAt") - private Optional originallyAvailableAt; + private Optional originallyAvailableAt; /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("originalTitle") - private Optional originalTitle; + private Optional originalTitle; + + /** + * The GUID of the parent media item. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("parentGuid") + private Optional parentGuid; /** * The `hero` of the parent @@ -269,7 +293,7 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("parentIndex") - private Optional parentIndex; + private Optional parentIndex; /** * The `key` of the parent @@ -304,7 +328,7 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("primaryExtraKey") - private Optional primaryExtraKey; + private Optional primaryExtraKey; /** * Prompt to give the user for this directory (such as `Search Movies`) @@ -318,7 +342,7 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("rating") - private Optional rating; + private Optional rating; @JsonInclude(Include.NON_ABSENT) @@ -330,21 +354,21 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingCount") - private Optional ratingCount; + private Optional ratingCount; /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingImage") - private Optional ratingImage; + private Optional ratingImage; /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") - private Optional ratingKey; + private Optional ratingKey; @JsonInclude(Include.NON_ABSENT) @@ -391,49 +415,49 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("studio") - private Optional studio; + private Optional studio; /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("subtype") - private Optional subtype; + private Optional subtype; /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("summary") - private Optional summary; + private Optional summary; /** * When present, a pithy one-liner about the item (usually only seen for movies). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagline") - private Optional tagline; + private Optional tagline; /** * When present, the URL for theme music for the item (usually only for TV shows). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("theme") - private Optional theme; + private Optional theme; /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("titleSort") - private Optional titleSort; + private Optional titleSort; /** * In units of seconds since the epoch, returns the time at which the item was last changed (e.g. had its metadata updated). @@ -447,28 +471,28 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("userRating") - private Optional userRating; + private Optional userRating; /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewCount") - private Optional viewCount; + private Optional viewCount; /** * For shows and seasons, contains the number of viewed episodes. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewedLeafCount") - private Optional viewedLeafCount; + private Optional viewedLeafCount; /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("viewOffset") - private Optional viewOffset; + private Optional viewOffset; @JsonInclude(Include.NON_ABSENT) @@ -480,7 +504,7 @@ public class MetadataItem { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("year") - private Optional year; + private Optional year; @JsonInclude(Include.NON_ABSENT) @@ -493,73 +517,77 @@ public class MetadataItem { @JsonCreator public MetadataItem( - @JsonProperty("title") Optional title, - @JsonProperty("type") Optional type, - @JsonProperty("absoluteIndex") Optional absoluteIndex, - @JsonProperty("addedAt") Optional addedAt, - @JsonProperty("art") Optional art, - @JsonProperty("audienceRating") Optional audienceRating, - @JsonProperty("audienceRatingImage") Optional audienceRatingImage, + @JsonProperty("title") String title, + @JsonProperty("type") String type, + @JsonProperty("absoluteIndex") Optional absoluteIndex, + @JsonProperty("addedAt") long addedAt, + @JsonProperty("art") Optional art, + @JsonProperty("audienceRating") Optional audienceRating, + @JsonProperty("audienceRatingImage") Optional audienceRatingImage, @JsonProperty("Autotag") Optional> autotag, - @JsonProperty("banner") Optional banner, - @JsonProperty("chapterSource") Optional chapterSource, - @JsonProperty("composite") Optional composite, - @JsonProperty("contentRating") Optional contentRating, + @JsonProperty("banner") Optional banner, + @JsonProperty("chapterSource") Optional chapterSource, + @JsonProperty("childCount") Optional childCount, + @JsonProperty("composite") Optional composite, + @JsonProperty("contentRating") Optional contentRating, @JsonProperty("Country") Optional> country, @JsonProperty("Director") Optional> director, - @JsonProperty("duration") Optional duration, + @JsonProperty("duration") Optional duration, @JsonProperty("Filter") Optional> filter, @JsonProperty("Genre") Optional> genre, @JsonProperty("grandparentArt") Optional grandparentArt, + @JsonProperty("grandparentGuid") Optional grandparentGuid, @JsonProperty("grandparentHero") Optional grandparentHero, @JsonProperty("grandparentKey") Optional grandparentKey, @JsonProperty("grandparentRatingKey") Optional grandparentRatingKey, @JsonProperty("grandparentTheme") Optional grandparentTheme, @JsonProperty("grandparentThumb") Optional grandparentThumb, @JsonProperty("grandparentTitle") Optional grandparentTitle, - @JsonProperty("Guid") Optional> guid, - @JsonProperty("hero") Optional hero, + @JsonProperty("guid") Optional guid, + @JsonProperty("Guid") Optional> guids, + @JsonProperty("hero") Optional hero, @JsonProperty("Image") Optional> image, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, @JsonProperty("lastViewedAt") Optional lastViewedAt, - @JsonProperty("leafCount") Optional leafCount, + @JsonProperty("leafCount") Optional leafCount, @JsonProperty("Media") Optional> media, - @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, - @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("originallyAvailableAt") Optional originallyAvailableAt, + @JsonProperty("originalTitle") Optional originalTitle, + @JsonProperty("parentGuid") Optional parentGuid, @JsonProperty("parentHero") Optional parentHero, - @JsonProperty("parentIndex") Optional parentIndex, + @JsonProperty("parentIndex") Optional parentIndex, @JsonProperty("parentKey") Optional parentKey, @JsonProperty("parentRatingKey") Optional parentRatingKey, @JsonProperty("parentThumb") Optional parentThumb, @JsonProperty("parentTitle") Optional parentTitle, - @JsonProperty("primaryExtraKey") Optional primaryExtraKey, + @JsonProperty("primaryExtraKey") Optional primaryExtraKey, @JsonProperty("prompt") Optional prompt, - @JsonProperty("rating") Optional rating, + @JsonProperty("rating") Optional rating, @JsonProperty("Rating") Optional> ratingArray, - @JsonProperty("ratingCount") Optional ratingCount, - @JsonProperty("ratingImage") Optional ratingImage, - @JsonProperty("ratingKey") Optional ratingKey, + @JsonProperty("ratingCount") Optional ratingCount, + @JsonProperty("ratingImage") Optional ratingImage, + @JsonProperty("ratingKey") Optional ratingKey, @JsonProperty("Role") Optional> role, @JsonProperty("search") Optional search, @JsonProperty("secondary") Optional secondary, @JsonProperty("skipChildren") Optional skipChildren, @JsonProperty("skipParent") Optional skipParent, @JsonProperty("Sort") Optional> sort, - @JsonProperty("studio") Optional studio, - @JsonProperty("subtype") Optional subtype, - @JsonProperty("summary") Optional summary, - @JsonProperty("tagline") Optional tagline, - @JsonProperty("theme") Optional theme, - @JsonProperty("thumb") Optional thumb, - @JsonProperty("titleSort") Optional titleSort, + @JsonProperty("studio") Optional studio, + @JsonProperty("subtype") Optional subtype, + @JsonProperty("summary") Optional summary, + @JsonProperty("tagline") Optional tagline, + @JsonProperty("theme") Optional theme, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("titleSort") Optional titleSort, @JsonProperty("updatedAt") Optional updatedAt, - @JsonProperty("userRating") Optional userRating, - @JsonProperty("viewCount") Optional viewCount, - @JsonProperty("viewedLeafCount") Optional viewedLeafCount, - @JsonProperty("viewOffset") Optional viewOffset, + @JsonProperty("userRating") Optional userRating, + @JsonProperty("viewCount") Optional viewCount, + @JsonProperty("viewedLeafCount") Optional viewedLeafCount, + @JsonProperty("viewOffset") Optional viewOffset, @JsonProperty("Writer") Optional> writer, - @JsonProperty("year") Optional year, + @JsonProperty("year") Optional year, @JsonProperty("MetadataItem") Optional> metadataItem) { Utils.checkNotNull(title, "title"); Utils.checkNotNull(type, "type"); @@ -571,6 +599,7 @@ public class MetadataItem { Utils.checkNotNull(autotag, "autotag"); Utils.checkNotNull(banner, "banner"); Utils.checkNotNull(chapterSource, "chapterSource"); + Utils.checkNotNull(childCount, "childCount"); Utils.checkNotNull(composite, "composite"); Utils.checkNotNull(contentRating, "contentRating"); Utils.checkNotNull(country, "country"); @@ -579,6 +608,7 @@ public class MetadataItem { Utils.checkNotNull(filter, "filter"); Utils.checkNotNull(genre, "genre"); Utils.checkNotNull(grandparentArt, "grandparentArt"); + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); Utils.checkNotNull(grandparentHero, "grandparentHero"); Utils.checkNotNull(grandparentKey, "grandparentKey"); Utils.checkNotNull(grandparentRatingKey, "grandparentRatingKey"); @@ -586,6 +616,7 @@ public class MetadataItem { Utils.checkNotNull(grandparentThumb, "grandparentThumb"); Utils.checkNotNull(grandparentTitle, "grandparentTitle"); Utils.checkNotNull(guid, "guid"); + Utils.checkNotNull(guids, "guids"); Utils.checkNotNull(hero, "hero"); Utils.checkNotNull(image, "image"); Utils.checkNotNull(index, "index"); @@ -595,6 +626,7 @@ public class MetadataItem { Utils.checkNotNull(media, "media"); Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); Utils.checkNotNull(originalTitle, "originalTitle"); + Utils.checkNotNull(parentGuid, "parentGuid"); Utils.checkNotNull(parentHero, "parentHero"); Utils.checkNotNull(parentIndex, "parentIndex"); Utils.checkNotNull(parentKey, "parentKey"); @@ -639,6 +671,7 @@ public class MetadataItem { this.autotag = autotag; this.banner = banner; this.chapterSource = chapterSource; + this.childCount = childCount; this.composite = composite; this.contentRating = contentRating; this.country = country; @@ -647,6 +680,7 @@ public class MetadataItem { this.filter = filter; this.genre = genre; this.grandparentArt = grandparentArt; + this.grandparentGuid = grandparentGuid; this.grandparentHero = grandparentHero; this.grandparentKey = grandparentKey; this.grandparentRatingKey = grandparentRatingKey; @@ -654,6 +688,7 @@ public class MetadataItem { this.grandparentThumb = grandparentThumb; this.grandparentTitle = grandparentTitle; this.guid = guid; + this.guids = guids; this.hero = hero; this.image = image; this.index = index; @@ -663,6 +698,7 @@ public class MetadataItem { this.media = media; this.originallyAvailableAt = originallyAvailableAt; this.originalTitle = originalTitle; + this.parentGuid = parentGuid; this.parentHero = parentHero; this.parentIndex = parentIndex; this.parentKey = parentKey; @@ -700,8 +736,22 @@ public class MetadataItem { this.additionalProperties = new HashMap<>(); } - public MetadataItem() { - this(Optional.empty(), Optional.empty(), Optional.empty(), + public MetadataItem( + String title, + String type, + long addedAt, + String key) { + this(title, type, Optional.empty(), + addedAt, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), @@ -714,41 +764,30 @@ public class MetadataItem { Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty()); } /** * The title of the item (e.g. “300” or “The Simpsons”) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional title() { - return (Optional) title; + public String title() { + return title; } /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional type() { - return (Optional) type; + public String type() { + return type; } /** * When present, contains the disc number for a track on multi-disc albums. */ @JsonIgnore - public Optional absoluteIndex() { + public Optional absoluteIndex() { return absoluteIndex; } @@ -756,34 +795,32 @@ public class MetadataItem { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ @JsonIgnore - public Optional addedAt() { + public long addedAt() { return addedAt; } /** * When present, the URL for the background artwork for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional art() { - return (Optional) art; + public Optional art() { + return art; } /** * Some rating systems separate reviewer ratings from audience ratings */ @JsonIgnore - public Optional audienceRating() { + public Optional audienceRating() { return audienceRating; } /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional audienceRatingImage() { - return (Optional) audienceRatingImage; + public Optional audienceRatingImage() { + return audienceRatingImage; } @SuppressWarnings("unchecked") @@ -795,37 +832,41 @@ public class MetadataItem { /** * When present, the URL for a banner graphic for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional banner() { - return (Optional) banner; + public Optional banner() { + return banner; } /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional chapterSource() { - return (Optional) chapterSource; + public Optional chapterSource() { + return chapterSource; + } + + /** + * The number of child items associated with this media item. + */ + @JsonIgnore + public Optional childCount() { + return childCount; } /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional composite() { - return (Optional) composite; + public Optional composite() { + return composite; } /** * If known, the content rating (e.g. MPAA) for an item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional contentRating() { - return (Optional) contentRating; + public Optional contentRating() { + return contentRating; } @SuppressWarnings("unchecked") @@ -844,7 +885,7 @@ public class MetadataItem { * When present, the duration for the item, in units of milliseconds. */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } @@ -871,6 +912,14 @@ public class MetadataItem { return grandparentArt; } + /** + * The GUID of the grandparent media item. + */ + @JsonIgnore + public Optional grandparentGuid() { + return grandparentGuid; + } + /** * The `hero` of the grandparent */ @@ -919,19 +968,26 @@ public class MetadataItem { return grandparentTitle; } + /** + * The globally unique identifier for the media item. + */ + @JsonIgnore + public Optional guid() { + return guid; + } + @SuppressWarnings("unchecked") @JsonIgnore - public Optional> guid() { - return (Optional>) guid; + public Optional> guids() { + return (Optional>) guids; } /** * When present, the URL for a hero image for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hero() { - return (Optional) hero; + public Optional hero() { + return hero; } @SuppressWarnings("unchecked") @@ -944,22 +1000,18 @@ public class MetadataItem { * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ @JsonIgnore public Optional lastViewedAt() { return lastViewedAt; @@ -969,7 +1021,7 @@ public class MetadataItem { * For shows and seasons, contains the number of total episodes. */ @JsonIgnore - public Optional leafCount() { + public Optional leafCount() { return leafCount; } @@ -982,19 +1034,25 @@ public class MetadataItem { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originallyAvailableAt() { - return (Optional) originallyAvailableAt; + public Optional originallyAvailableAt() { + return originallyAvailableAt; } /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional originalTitle() { - return (Optional) originalTitle; + public Optional originalTitle() { + return originalTitle; + } + + /** + * The GUID of the parent media item. + */ + @JsonIgnore + public Optional parentGuid() { + return parentGuid; } /** @@ -1009,7 +1067,7 @@ public class MetadataItem { * The `index` of the parent */ @JsonIgnore - public Optional parentIndex() { + public Optional parentIndex() { return parentIndex; } @@ -1048,10 +1106,9 @@ public class MetadataItem { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional primaryExtraKey() { - return (Optional) primaryExtraKey; + public Optional primaryExtraKey() { + return primaryExtraKey; } /** @@ -1066,7 +1123,7 @@ public class MetadataItem { * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ @JsonIgnore - public Optional rating() { + public Optional rating() { return rating; } @@ -1080,26 +1137,24 @@ public class MetadataItem { * Number of ratings under this metadata */ @JsonIgnore - public Optional ratingCount() { + public Optional ratingCount() { return ratingCount; } /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingImage() { - return (Optional) ratingImage; + public Optional ratingImage() { + return ratingImage; } /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional ratingKey() { - return (Optional) ratingKey; + public Optional ratingKey() { + return ratingKey; } @SuppressWarnings("unchecked") @@ -1152,64 +1207,57 @@ public class MetadataItem { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional studio() { - return (Optional) studio; + public Optional studio() { + return studio; } /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional subtype() { - return (Optional) subtype; + public Optional subtype() { + return subtype; } /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional summary() { - return (Optional) summary; + public Optional summary() { + return summary; } /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagline() { - return (Optional) tagline; + public Optional tagline() { + return tagline; } /** * When present, the URL for theme music for the item (usually only for TV shows). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional theme() { - return (Optional) theme; + public Optional theme() { + return theme; } /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional titleSort() { - return (Optional) titleSort; + public Optional titleSort() { + return titleSort; } /** @@ -1224,7 +1272,7 @@ public class MetadataItem { * When the user has rated an item, this contains the user rating */ @JsonIgnore - public Optional userRating() { + public Optional userRating() { return userRating; } @@ -1232,7 +1280,7 @@ public class MetadataItem { * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ @JsonIgnore - public Optional viewCount() { + public Optional viewCount() { return viewCount; } @@ -1240,7 +1288,7 @@ public class MetadataItem { * For shows and seasons, contains the number of viewed episodes. */ @JsonIgnore - public Optional viewedLeafCount() { + public Optional viewedLeafCount() { return viewedLeafCount; } @@ -1248,7 +1296,7 @@ public class MetadataItem { * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ @JsonIgnore - public Optional viewOffset() { + public Optional viewOffset() { return viewOffset; } @@ -1262,7 +1310,7 @@ public class MetadataItem { * When present, the year associated with the item's release (e.g. release year for a movie). */ @JsonIgnore - public Optional year() { + public Optional year() { return year; } @@ -1285,17 +1333,7 @@ public class MetadataItem { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public MetadataItem withTitle(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public MetadataItem withTitle(Optional title) { + public MetadataItem withTitle(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -1304,17 +1342,7 @@ public class MetadataItem { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public MetadataItem withType(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public MetadataItem withType(Optional type) { + public MetadataItem withType(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -1323,7 +1351,7 @@ public class MetadataItem { /** * When present, contains the disc number for a track on multi-disc albums. */ - public MetadataItem withAbsoluteIndex(long absoluteIndex) { + public MetadataItem withAbsoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -1333,7 +1361,7 @@ public class MetadataItem { /** * When present, contains the disc number for a track on multi-disc albums. */ - public MetadataItem withAbsoluteIndex(Optional absoluteIndex) { + public MetadataItem withAbsoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -1343,16 +1371,6 @@ public class MetadataItem { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public MetadataItem withAddedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public MetadataItem withAddedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -1361,7 +1379,7 @@ public class MetadataItem { /** * When present, the URL for the background artwork for the item. */ - public MetadataItem withArt(Object art) { + public MetadataItem withArt(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -1371,7 +1389,7 @@ public class MetadataItem { /** * When present, the URL for the background artwork for the item. */ - public MetadataItem withArt(Optional art) { + public MetadataItem withArt(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -1380,7 +1398,7 @@ public class MetadataItem { /** * Some rating systems separate reviewer ratings from audience ratings */ - public MetadataItem withAudienceRating(double audienceRating) { + public MetadataItem withAudienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -1390,7 +1408,7 @@ public class MetadataItem { /** * Some rating systems separate reviewer ratings from audience ratings */ - public MetadataItem withAudienceRating(Optional audienceRating) { + public MetadataItem withAudienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -1399,7 +1417,7 @@ public class MetadataItem { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public MetadataItem withAudienceRatingImage(Object audienceRatingImage) { + public MetadataItem withAudienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -1409,7 +1427,7 @@ public class MetadataItem { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public MetadataItem withAudienceRatingImage(Optional audienceRatingImage) { + public MetadataItem withAudienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -1431,7 +1449,7 @@ public class MetadataItem { /** * When present, the URL for a banner graphic for the item. */ - public MetadataItem withBanner(Object banner) { + public MetadataItem withBanner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -1441,7 +1459,7 @@ public class MetadataItem { /** * When present, the URL for a banner graphic for the item. */ - public MetadataItem withBanner(Optional banner) { + public MetadataItem withBanner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -1450,7 +1468,7 @@ public class MetadataItem { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public MetadataItem withChapterSource(Object chapterSource) { + public MetadataItem withChapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -1460,16 +1478,35 @@ public class MetadataItem { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public MetadataItem withChapterSource(Optional chapterSource) { + public MetadataItem withChapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public MetadataItem withChildCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + + /** + * The number of child items associated with this media item. + */ + public MetadataItem withChildCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public MetadataItem withComposite(Object composite) { + public MetadataItem withComposite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -1479,7 +1516,7 @@ public class MetadataItem { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public MetadataItem withComposite(Optional composite) { + public MetadataItem withComposite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -1488,7 +1525,7 @@ public class MetadataItem { /** * If known, the content rating (e.g. MPAA) for an item. */ - public MetadataItem withContentRating(Object contentRating) { + public MetadataItem withContentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -1498,7 +1535,7 @@ public class MetadataItem { /** * If known, the content rating (e.g. MPAA) for an item. */ - public MetadataItem withContentRating(Optional contentRating) { + public MetadataItem withContentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -1533,7 +1570,7 @@ public class MetadataItem { /** * When present, the duration for the item, in units of milliseconds. */ - public MetadataItem withDuration(long duration) { + public MetadataItem withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -1543,7 +1580,7 @@ public class MetadataItem { /** * When present, the duration for the item, in units of milliseconds. */ - public MetadataItem withDuration(Optional duration) { + public MetadataItem withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -1600,6 +1637,25 @@ public class MetadataItem { return this; } + /** + * The GUID of the grandparent media item. + */ + public MetadataItem withGrandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + + /** + * The GUID of the grandparent media item. + */ + public MetadataItem withGrandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + /** * The `hero` of the grandparent */ @@ -1714,23 +1770,42 @@ public class MetadataItem { return this; } - public MetadataItem withGuid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public MetadataItem withGuid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public MetadataItem withGuid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public MetadataItem withGuid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public MetadataItem withGuids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + + public MetadataItem withGuids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + /** * When present, the URL for a hero image for the item. */ - public MetadataItem withHero(Object hero) { + public MetadataItem withHero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -1740,7 +1815,7 @@ public class MetadataItem { /** * When present, the URL for a hero image for the item. */ - public MetadataItem withHero(Optional hero) { + public MetadataItem withHero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -1762,7 +1837,7 @@ public class MetadataItem { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public MetadataItem withIndex(long index) { + public MetadataItem withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -1772,7 +1847,7 @@ public class MetadataItem { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public MetadataItem withIndex(Optional index) { + public MetadataItem withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1781,25 +1856,12 @@ public class MetadataItem { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public MetadataItem withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public MetadataItem withKey(Optional key) { + public MetadataItem withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public MetadataItem withLastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); @@ -1807,9 +1869,6 @@ public class MetadataItem { } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public MetadataItem withLastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -1819,7 +1878,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of total episodes. */ - public MetadataItem withLeafCount(long leafCount) { + public MetadataItem withLeafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -1829,7 +1888,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of total episodes. */ - public MetadataItem withLeafCount(Optional leafCount) { + public MetadataItem withLeafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -1851,7 +1910,7 @@ public class MetadataItem { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public MetadataItem withOriginallyAvailableAt(Object originallyAvailableAt) { + public MetadataItem withOriginallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -1861,7 +1920,7 @@ public class MetadataItem { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public MetadataItem withOriginallyAvailableAt(Optional originallyAvailableAt) { + public MetadataItem withOriginallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -1870,7 +1929,7 @@ public class MetadataItem { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public MetadataItem withOriginalTitle(Object originalTitle) { + public MetadataItem withOriginalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -1880,12 +1939,31 @@ public class MetadataItem { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public MetadataItem withOriginalTitle(Optional originalTitle) { + public MetadataItem withOriginalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public MetadataItem withParentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + + /** + * The GUID of the parent media item. + */ + public MetadataItem withParentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + /** * The `hero` of the parent */ @@ -1908,7 +1986,7 @@ public class MetadataItem { /** * The `index` of the parent */ - public MetadataItem withParentIndex(long parentIndex) { + public MetadataItem withParentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -1918,7 +1996,7 @@ public class MetadataItem { /** * The `index` of the parent */ - public MetadataItem withParentIndex(Optional parentIndex) { + public MetadataItem withParentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -2003,7 +2081,7 @@ public class MetadataItem { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public MetadataItem withPrimaryExtraKey(Object primaryExtraKey) { + public MetadataItem withPrimaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -2013,7 +2091,7 @@ public class MetadataItem { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public MetadataItem withPrimaryExtraKey(Optional primaryExtraKey) { + public MetadataItem withPrimaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -2041,7 +2119,7 @@ public class MetadataItem { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public MetadataItem withRating(double rating) { + public MetadataItem withRating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -2051,7 +2129,7 @@ public class MetadataItem { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public MetadataItem withRating(Optional rating) { + public MetadataItem withRating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -2073,7 +2151,7 @@ public class MetadataItem { /** * Number of ratings under this metadata */ - public MetadataItem withRatingCount(long ratingCount) { + public MetadataItem withRatingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -2083,7 +2161,7 @@ public class MetadataItem { /** * Number of ratings under this metadata */ - public MetadataItem withRatingCount(Optional ratingCount) { + public MetadataItem withRatingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -2092,7 +2170,7 @@ public class MetadataItem { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public MetadataItem withRatingImage(Object ratingImage) { + public MetadataItem withRatingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -2102,7 +2180,7 @@ public class MetadataItem { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public MetadataItem withRatingImage(Optional ratingImage) { + public MetadataItem withRatingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -2111,7 +2189,7 @@ public class MetadataItem { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public MetadataItem withRatingKey(Object ratingKey) { + public MetadataItem withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -2121,7 +2199,7 @@ public class MetadataItem { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public MetadataItem withRatingKey(Optional ratingKey) { + public MetadataItem withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -2238,7 +2316,7 @@ public class MetadataItem { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public MetadataItem withStudio(Object studio) { + public MetadataItem withStudio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -2248,7 +2326,7 @@ public class MetadataItem { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public MetadataItem withStudio(Optional studio) { + public MetadataItem withStudio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -2257,7 +2335,7 @@ public class MetadataItem { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public MetadataItem withSubtype(Object subtype) { + public MetadataItem withSubtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -2267,7 +2345,7 @@ public class MetadataItem { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public MetadataItem withSubtype(Optional subtype) { + public MetadataItem withSubtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -2276,7 +2354,7 @@ public class MetadataItem { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public MetadataItem withSummary(Object summary) { + public MetadataItem withSummary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -2286,7 +2364,7 @@ public class MetadataItem { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public MetadataItem withSummary(Optional summary) { + public MetadataItem withSummary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -2295,7 +2373,7 @@ public class MetadataItem { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public MetadataItem withTagline(Object tagline) { + public MetadataItem withTagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -2305,7 +2383,7 @@ public class MetadataItem { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public MetadataItem withTagline(Optional tagline) { + public MetadataItem withTagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -2314,7 +2392,7 @@ public class MetadataItem { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public MetadataItem withTheme(Object theme) { + public MetadataItem withTheme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -2324,7 +2402,7 @@ public class MetadataItem { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public MetadataItem withTheme(Optional theme) { + public MetadataItem withTheme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -2333,7 +2411,7 @@ public class MetadataItem { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public MetadataItem withThumb(Object thumb) { + public MetadataItem withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -2343,7 +2421,7 @@ public class MetadataItem { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public MetadataItem withThumb(Optional thumb) { + public MetadataItem withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -2352,7 +2430,7 @@ public class MetadataItem { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public MetadataItem withTitleSort(Object titleSort) { + public MetadataItem withTitleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -2362,7 +2440,7 @@ public class MetadataItem { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public MetadataItem withTitleSort(Optional titleSort) { + public MetadataItem withTitleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -2390,7 +2468,7 @@ public class MetadataItem { /** * When the user has rated an item, this contains the user rating */ - public MetadataItem withUserRating(double userRating) { + public MetadataItem withUserRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -2400,7 +2478,7 @@ public class MetadataItem { /** * When the user has rated an item, this contains the user rating */ - public MetadataItem withUserRating(Optional userRating) { + public MetadataItem withUserRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -2409,7 +2487,7 @@ public class MetadataItem { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public MetadataItem withViewCount(long viewCount) { + public MetadataItem withViewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -2419,7 +2497,7 @@ public class MetadataItem { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public MetadataItem withViewCount(Optional viewCount) { + public MetadataItem withViewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -2428,7 +2506,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of viewed episodes. */ - public MetadataItem withViewedLeafCount(long viewedLeafCount) { + public MetadataItem withViewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -2438,7 +2516,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of viewed episodes. */ - public MetadataItem withViewedLeafCount(Optional viewedLeafCount) { + public MetadataItem withViewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -2447,7 +2525,7 @@ public class MetadataItem { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public MetadataItem withViewOffset(long viewOffset) { + public MetadataItem withViewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -2457,7 +2535,7 @@ public class MetadataItem { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public MetadataItem withViewOffset(Optional viewOffset) { + public MetadataItem withViewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -2479,7 +2557,7 @@ public class MetadataItem { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public MetadataItem withYear(long year) { + public MetadataItem withYear(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -2489,7 +2567,7 @@ public class MetadataItem { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public MetadataItem withYear(Optional year) { + public MetadataItem withYear(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -2541,6 +2619,7 @@ public class MetadataItem { Utils.enhancedDeepEquals(this.autotag, other.autotag) && Utils.enhancedDeepEquals(this.banner, other.banner) && Utils.enhancedDeepEquals(this.chapterSource, other.chapterSource) && + Utils.enhancedDeepEquals(this.childCount, other.childCount) && Utils.enhancedDeepEquals(this.composite, other.composite) && Utils.enhancedDeepEquals(this.contentRating, other.contentRating) && Utils.enhancedDeepEquals(this.country, other.country) && @@ -2549,6 +2628,7 @@ public class MetadataItem { Utils.enhancedDeepEquals(this.filter, other.filter) && Utils.enhancedDeepEquals(this.genre, other.genre) && Utils.enhancedDeepEquals(this.grandparentArt, other.grandparentArt) && + Utils.enhancedDeepEquals(this.grandparentGuid, other.grandparentGuid) && Utils.enhancedDeepEquals(this.grandparentHero, other.grandparentHero) && Utils.enhancedDeepEquals(this.grandparentKey, other.grandparentKey) && Utils.enhancedDeepEquals(this.grandparentRatingKey, other.grandparentRatingKey) && @@ -2556,6 +2636,7 @@ public class MetadataItem { Utils.enhancedDeepEquals(this.grandparentThumb, other.grandparentThumb) && Utils.enhancedDeepEquals(this.grandparentTitle, other.grandparentTitle) && Utils.enhancedDeepEquals(this.guid, other.guid) && + Utils.enhancedDeepEquals(this.guids, other.guids) && Utils.enhancedDeepEquals(this.hero, other.hero) && Utils.enhancedDeepEquals(this.image, other.image) && Utils.enhancedDeepEquals(this.index, other.index) && @@ -2565,6 +2646,7 @@ public class MetadataItem { Utils.enhancedDeepEquals(this.media, other.media) && Utils.enhancedDeepEquals(this.originallyAvailableAt, other.originallyAvailableAt) && Utils.enhancedDeepEquals(this.originalTitle, other.originalTitle) && + Utils.enhancedDeepEquals(this.parentGuid, other.parentGuid) && Utils.enhancedDeepEquals(this.parentHero, other.parentHero) && Utils.enhancedDeepEquals(this.parentIndex, other.parentIndex) && Utils.enhancedDeepEquals(this.parentKey, other.parentKey) && @@ -2608,26 +2690,28 @@ public class MetadataItem { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, metadataItem, additionalProperties); + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, metadataItem, + additionalProperties); } @Override @@ -2643,6 +2727,7 @@ public class MetadataItem { "autotag", autotag, "banner", banner, "chapterSource", chapterSource, + "childCount", childCount, "composite", composite, "contentRating", contentRating, "country", country, @@ -2651,6 +2736,7 @@ public class MetadataItem { "filter", filter, "genre", genre, "grandparentArt", grandparentArt, + "grandparentGuid", grandparentGuid, "grandparentHero", grandparentHero, "grandparentKey", grandparentKey, "grandparentRatingKey", grandparentRatingKey, @@ -2658,6 +2744,7 @@ public class MetadataItem { "grandparentThumb", grandparentThumb, "grandparentTitle", grandparentTitle, "guid", guid, + "guids", guids, "hero", hero, "image", image, "index", index, @@ -2667,6 +2754,7 @@ public class MetadataItem { "media", media, "originallyAvailableAt", originallyAvailableAt, "originalTitle", originalTitle, + "parentGuid", parentGuid, "parentHero", parentHero, "parentIndex", parentIndex, "parentKey", parentKey, @@ -2707,35 +2795,37 @@ public class MetadataItem { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional title = Optional.empty(); + private String title; - private Optional type = Optional.empty(); + private String type; - private Optional absoluteIndex = Optional.empty(); + private Optional absoluteIndex = Optional.empty(); - private Optional addedAt = Optional.empty(); + private Long addedAt; - private Optional art = Optional.empty(); + private Optional art = Optional.empty(); - private Optional audienceRating = Optional.empty(); + private Optional audienceRating = Optional.empty(); - private Optional audienceRatingImage = Optional.empty(); + private Optional audienceRatingImage = Optional.empty(); private Optional> autotag = Optional.empty(); - private Optional banner = Optional.empty(); + private Optional banner = Optional.empty(); - private Optional chapterSource = Optional.empty(); + private Optional chapterSource = Optional.empty(); - private Optional composite = Optional.empty(); + private Optional childCount = Optional.empty(); - private Optional contentRating = Optional.empty(); + private Optional composite = Optional.empty(); + + private Optional contentRating = Optional.empty(); private Optional> country = Optional.empty(); private Optional> director = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional duration = Optional.empty(); private Optional> filter = Optional.empty(); @@ -2743,6 +2833,8 @@ public class MetadataItem { private Optional grandparentArt = Optional.empty(); + private Optional grandparentGuid = Optional.empty(); + private Optional grandparentHero = Optional.empty(); private Optional grandparentKey = Optional.empty(); @@ -2755,29 +2847,33 @@ public class MetadataItem { private Optional grandparentTitle = Optional.empty(); - private Optional> guid = Optional.empty(); + private Optional guid = Optional.empty(); - private Optional hero = Optional.empty(); + private Optional> guids = Optional.empty(); + + private Optional hero = Optional.empty(); private Optional> image = Optional.empty(); - private Optional index = Optional.empty(); + private Optional index = Optional.empty(); - private Optional key = Optional.empty(); + private String key; private Optional lastViewedAt = Optional.empty(); - private Optional leafCount = Optional.empty(); + private Optional leafCount = Optional.empty(); private Optional> media = Optional.empty(); - private Optional originallyAvailableAt = Optional.empty(); + private Optional originallyAvailableAt = Optional.empty(); - private Optional originalTitle = Optional.empty(); + private Optional originalTitle = Optional.empty(); + + private Optional parentGuid = Optional.empty(); private Optional parentHero = Optional.empty(); - private Optional parentIndex = Optional.empty(); + private Optional parentIndex = Optional.empty(); private Optional parentKey = Optional.empty(); @@ -2787,19 +2883,19 @@ public class MetadataItem { private Optional parentTitle = Optional.empty(); - private Optional primaryExtraKey = Optional.empty(); + private Optional primaryExtraKey = Optional.empty(); private Optional prompt = Optional.empty(); - private Optional rating = Optional.empty(); + private Optional rating = Optional.empty(); private Optional> ratingArray = Optional.empty(); - private Optional ratingCount = Optional.empty(); + private Optional ratingCount = Optional.empty(); - private Optional ratingImage = Optional.empty(); + private Optional ratingImage = Optional.empty(); - private Optional ratingKey = Optional.empty(); + private Optional ratingKey = Optional.empty(); private Optional> role = Optional.empty(); @@ -2813,33 +2909,33 @@ public class MetadataItem { private Optional> sort = Optional.empty(); - private Optional studio = Optional.empty(); + private Optional studio = Optional.empty(); - private Optional subtype = Optional.empty(); + private Optional subtype = Optional.empty(); - private Optional summary = Optional.empty(); + private Optional summary = Optional.empty(); - private Optional tagline = Optional.empty(); + private Optional tagline = Optional.empty(); - private Optional theme = Optional.empty(); + private Optional theme = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); - private Optional titleSort = Optional.empty(); + private Optional titleSort = Optional.empty(); private Optional updatedAt = Optional.empty(); - private Optional userRating = Optional.empty(); + private Optional userRating = Optional.empty(); - private Optional viewCount = Optional.empty(); + private Optional viewCount = Optional.empty(); - private Optional viewedLeafCount = Optional.empty(); + private Optional viewedLeafCount = Optional.empty(); - private Optional viewOffset = Optional.empty(); + private Optional viewOffset = Optional.empty(); private Optional> writer = Optional.empty(); - private Optional year = Optional.empty(); + private Optional year = Optional.empty(); private Optional> metadataItem = Optional.empty(); @@ -2853,16 +2949,7 @@ public class MetadataItem { /** * The title of the item (e.g. “300” or “The Simpsons”) */ - public Builder title(Object title) { - Utils.checkNotNull(title, "title"); - this.title = Optional.ofNullable(title); - return this; - } - - /** - * The title of the item (e.g. “300” or “The Simpsons”) - */ - public Builder title(Optional title) { + public Builder title(String title) { Utils.checkNotNull(title, "title"); this.title = title; return this; @@ -2872,16 +2959,7 @@ public class MetadataItem { /** * The type of the video item, such as `movie`, `episode`, or `clip`. */ - public Builder type(Object type) { - Utils.checkNotNull(type, "type"); - this.type = Optional.ofNullable(type); - return this; - } - - /** - * The type of the video item, such as `movie`, `episode`, or `clip`. - */ - public Builder type(Optional type) { + public Builder type(String type) { Utils.checkNotNull(type, "type"); this.type = type; return this; @@ -2891,7 +2969,7 @@ public class MetadataItem { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(long absoluteIndex) { + public Builder absoluteIndex(int absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = Optional.ofNullable(absoluteIndex); return this; @@ -2900,7 +2978,7 @@ public class MetadataItem { /** * When present, contains the disc number for a track on multi-disc albums. */ - public Builder absoluteIndex(Optional absoluteIndex) { + public Builder absoluteIndex(Optional absoluteIndex) { Utils.checkNotNull(absoluteIndex, "absoluteIndex"); this.absoluteIndex = absoluteIndex; return this; @@ -2911,15 +2989,6 @@ public class MetadataItem { * In units of seconds since the epoch, returns the time at which the item was added to the library. */ public Builder addedAt(long addedAt) { - Utils.checkNotNull(addedAt, "addedAt"); - this.addedAt = Optional.ofNullable(addedAt); - return this; - } - - /** - * In units of seconds since the epoch, returns the time at which the item was added to the library. - */ - public Builder addedAt(Optional addedAt) { Utils.checkNotNull(addedAt, "addedAt"); this.addedAt = addedAt; return this; @@ -2929,7 +2998,7 @@ public class MetadataItem { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Object art) { + public Builder art(String art) { Utils.checkNotNull(art, "art"); this.art = Optional.ofNullable(art); return this; @@ -2938,7 +3007,7 @@ public class MetadataItem { /** * When present, the URL for the background artwork for the item. */ - public Builder art(Optional art) { + public Builder art(Optional art) { Utils.checkNotNull(art, "art"); this.art = art; return this; @@ -2948,7 +3017,7 @@ public class MetadataItem { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(double audienceRating) { + public Builder audienceRating(float audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = Optional.ofNullable(audienceRating); return this; @@ -2957,7 +3026,7 @@ public class MetadataItem { /** * Some rating systems separate reviewer ratings from audience ratings */ - public Builder audienceRating(Optional audienceRating) { + public Builder audienceRating(Optional audienceRating) { Utils.checkNotNull(audienceRating, "audienceRating"); this.audienceRating = audienceRating; return this; @@ -2967,7 +3036,7 @@ public class MetadataItem { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Object audienceRatingImage) { + public Builder audienceRatingImage(String audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = Optional.ofNullable(audienceRatingImage); return this; @@ -2976,7 +3045,7 @@ public class MetadataItem { /** * A URI representing the image to be shown with the audience rating (e.g. rottentomatoes://image.rating.spilled). */ - public Builder audienceRatingImage(Optional audienceRatingImage) { + public Builder audienceRatingImage(Optional audienceRatingImage) { Utils.checkNotNull(audienceRatingImage, "audienceRatingImage"); this.audienceRatingImage = audienceRatingImage; return this; @@ -2999,7 +3068,7 @@ public class MetadataItem { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Object banner) { + public Builder banner(String banner) { Utils.checkNotNull(banner, "banner"); this.banner = Optional.ofNullable(banner); return this; @@ -3008,7 +3077,7 @@ public class MetadataItem { /** * When present, the URL for a banner graphic for the item. */ - public Builder banner(Optional banner) { + public Builder banner(Optional banner) { Utils.checkNotNull(banner, "banner"); this.banner = banner; return this; @@ -3018,7 +3087,7 @@ public class MetadataItem { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Object chapterSource) { + public Builder chapterSource(String chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = Optional.ofNullable(chapterSource); return this; @@ -3027,17 +3096,36 @@ public class MetadataItem { /** * When present, indicates the source for the chapters in the media file. Can be media (the chapters were embedded in the media itself), agent (a metadata agent computed them), or mixed (a combination of the two). */ - public Builder chapterSource(Optional chapterSource) { + public Builder chapterSource(Optional chapterSource) { Utils.checkNotNull(chapterSource, "chapterSource"); this.chapterSource = chapterSource; return this; } + /** + * The number of child items associated with this media item. + */ + public Builder childCount(int childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = Optional.ofNullable(childCount); + return this; + } + + /** + * The number of child items associated with this media item. + */ + public Builder childCount(Optional childCount) { + Utils.checkNotNull(childCount, "childCount"); + this.childCount = childCount; + return this; + } + + /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Object composite) { + public Builder composite(String composite) { Utils.checkNotNull(composite, "composite"); this.composite = Optional.ofNullable(composite); return this; @@ -3046,7 +3134,7 @@ public class MetadataItem { /** * When present, the URL for a composite image for descendent items (e.g. photo albums or playlists). */ - public Builder composite(Optional composite) { + public Builder composite(Optional composite) { Utils.checkNotNull(composite, "composite"); this.composite = composite; return this; @@ -3056,7 +3144,7 @@ public class MetadataItem { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Object contentRating) { + public Builder contentRating(String contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = Optional.ofNullable(contentRating); return this; @@ -3065,7 +3153,7 @@ public class MetadataItem { /** * If known, the content rating (e.g. MPAA) for an item. */ - public Builder contentRating(Optional contentRating) { + public Builder contentRating(Optional contentRating) { Utils.checkNotNull(contentRating, "contentRating"); this.contentRating = contentRating; return this; @@ -3101,7 +3189,7 @@ public class MetadataItem { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -3110,7 +3198,7 @@ public class MetadataItem { /** * When present, the duration for the item, in units of milliseconds. */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; @@ -3168,6 +3256,25 @@ public class MetadataItem { } + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(String grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = Optional.ofNullable(grandparentGuid); + return this; + } + + /** + * The GUID of the grandparent media item. + */ + public Builder grandparentGuid(Optional grandparentGuid) { + Utils.checkNotNull(grandparentGuid, "grandparentGuid"); + this.grandparentGuid = grandparentGuid; + return this; + } + + /** * The `hero` of the grandparent */ @@ -3282,23 +3389,42 @@ public class MetadataItem { } - public Builder guid(List guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(String guid) { Utils.checkNotNull(guid, "guid"); this.guid = Optional.ofNullable(guid); return this; } - public Builder guid(Optional> guid) { + /** + * The globally unique identifier for the media item. + */ + public Builder guid(Optional guid) { Utils.checkNotNull(guid, "guid"); this.guid = guid; return this; } + public Builder guids(List guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = Optional.ofNullable(guids); + return this; + } + + public Builder guids(Optional> guids) { + Utils.checkNotNull(guids, "guids"); + this.guids = guids; + return this; + } + + /** * When present, the URL for a hero image for the item. */ - public Builder hero(Object hero) { + public Builder hero(String hero) { Utils.checkNotNull(hero, "hero"); this.hero = Optional.ofNullable(hero); return this; @@ -3307,7 +3433,7 @@ public class MetadataItem { /** * When present, the URL for a hero image for the item. */ - public Builder hero(Optional hero) { + public Builder hero(Optional hero) { Utils.checkNotNull(hero, "hero"); this.hero = hero; return this; @@ -3330,7 +3456,7 @@ public class MetadataItem { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -3339,7 +3465,7 @@ public class MetadataItem { /** * When present, this represents the episode number for episodes, season number for seasons, or track number for audio tracks. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -3349,34 +3475,19 @@ public class MetadataItem { /** * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * The key at which the item's details can be fetched. In many cases a metadata item may be passed without all the details (such as in a hub) and this key corresponds to the endpoint to fetch additional details. - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(long lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = Optional.ofNullable(lastViewedAt); return this; } - /** - * When a user has watched or listened to an item, this contains a timestamp (epoch seconds) for that last consumption time. - */ public Builder lastViewedAt(Optional lastViewedAt) { Utils.checkNotNull(lastViewedAt, "lastViewedAt"); this.lastViewedAt = lastViewedAt; @@ -3387,7 +3498,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(long leafCount) { + public Builder leafCount(int leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = Optional.ofNullable(leafCount); return this; @@ -3396,7 +3507,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of total episodes. */ - public Builder leafCount(Optional leafCount) { + public Builder leafCount(Optional leafCount) { Utils.checkNotNull(leafCount, "leafCount"); this.leafCount = leafCount; return this; @@ -3419,7 +3530,7 @@ public class MetadataItem { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Object originallyAvailableAt) { + public Builder originallyAvailableAt(LocalDate originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = Optional.ofNullable(originallyAvailableAt); return this; @@ -3428,7 +3539,7 @@ public class MetadataItem { /** * When present, in the format YYYY-MM-DD [HH:MM:SS] (the hours/minutes/seconds part is not always present). The air date, or a higher resolution release date for an item, depending on type. For example, episodes usually have air date like 1979-08-10 (we don't use epoch seconds because media existed prior to 1970). In some cases, recorded over-the-air content has higher resolution air date which includes a time component. Albums and movies may have day-resolution release dates as well. */ - public Builder originallyAvailableAt(Optional originallyAvailableAt) { + public Builder originallyAvailableAt(Optional originallyAvailableAt) { Utils.checkNotNull(originallyAvailableAt, "originallyAvailableAt"); this.originallyAvailableAt = originallyAvailableAt; return this; @@ -3438,7 +3549,7 @@ public class MetadataItem { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Object originalTitle) { + public Builder originalTitle(String originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = Optional.ofNullable(originalTitle); return this; @@ -3447,13 +3558,32 @@ public class MetadataItem { /** * When present, used to indicate an item's original title, e.g. a movie's foreign title. */ - public Builder originalTitle(Optional originalTitle) { + public Builder originalTitle(Optional originalTitle) { Utils.checkNotNull(originalTitle, "originalTitle"); this.originalTitle = originalTitle; return this; } + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(String parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = Optional.ofNullable(parentGuid); + return this; + } + + /** + * The GUID of the parent media item. + */ + public Builder parentGuid(Optional parentGuid) { + Utils.checkNotNull(parentGuid, "parentGuid"); + this.parentGuid = parentGuid; + return this; + } + + /** * The `hero` of the parent */ @@ -3476,7 +3606,7 @@ public class MetadataItem { /** * The `index` of the parent */ - public Builder parentIndex(long parentIndex) { + public Builder parentIndex(int parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = Optional.ofNullable(parentIndex); return this; @@ -3485,7 +3615,7 @@ public class MetadataItem { /** * The `index` of the parent */ - public Builder parentIndex(Optional parentIndex) { + public Builder parentIndex(Optional parentIndex) { Utils.checkNotNull(parentIndex, "parentIndex"); this.parentIndex = parentIndex; return this; @@ -3571,7 +3701,7 @@ public class MetadataItem { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Object primaryExtraKey) { + public Builder primaryExtraKey(String primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = Optional.ofNullable(primaryExtraKey); return this; @@ -3580,7 +3710,7 @@ public class MetadataItem { /** * Indicates that the item has a primary extra; for a movie, this is a trailer, and for a music track it is a music video. The URL points to the metadata details endpoint for the item. */ - public Builder primaryExtraKey(Optional primaryExtraKey) { + public Builder primaryExtraKey(Optional primaryExtraKey) { Utils.checkNotNull(primaryExtraKey, "primaryExtraKey"); this.primaryExtraKey = primaryExtraKey; return this; @@ -3609,7 +3739,7 @@ public class MetadataItem { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(double rating) { + public Builder rating(float rating) { Utils.checkNotNull(rating, "rating"); this.rating = Optional.ofNullable(rating); return this; @@ -3618,7 +3748,7 @@ public class MetadataItem { /** * When present, the rating for the item. The exact meaning and representation depends on where the rating was sourced from. */ - public Builder rating(Optional rating) { + public Builder rating(Optional rating) { Utils.checkNotNull(rating, "rating"); this.rating = rating; return this; @@ -3641,7 +3771,7 @@ public class MetadataItem { /** * Number of ratings under this metadata */ - public Builder ratingCount(long ratingCount) { + public Builder ratingCount(int ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = Optional.ofNullable(ratingCount); return this; @@ -3650,7 +3780,7 @@ public class MetadataItem { /** * Number of ratings under this metadata */ - public Builder ratingCount(Optional ratingCount) { + public Builder ratingCount(Optional ratingCount) { Utils.checkNotNull(ratingCount, "ratingCount"); this.ratingCount = ratingCount; return this; @@ -3660,7 +3790,7 @@ public class MetadataItem { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Object ratingImage) { + public Builder ratingImage(String ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = Optional.ofNullable(ratingImage); return this; @@ -3669,7 +3799,7 @@ public class MetadataItem { /** * When present, indicates an image to be shown with the rating. This is passed back as a small set of defined URI values, e.g. rottentomatoes://image.rating.rotten. */ - public Builder ratingImage(Optional ratingImage) { + public Builder ratingImage(Optional ratingImage) { Utils.checkNotNull(ratingImage, "ratingImage"); this.ratingImage = ratingImage; return this; @@ -3679,7 +3809,7 @@ public class MetadataItem { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Object ratingKey) { + public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; @@ -3688,7 +3818,7 @@ public class MetadataItem { /** * This is the opaque string to be passed into timeline, scrobble, and rating endpoints to identify them. While it often appears to be numeric, this is not guaranteed. */ - public Builder ratingKey(Optional ratingKey) { + public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; return this; @@ -3806,7 +3936,7 @@ public class MetadataItem { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Object studio) { + public Builder studio(String studio) { Utils.checkNotNull(studio, "studio"); this.studio = Optional.ofNullable(studio); return this; @@ -3815,7 +3945,7 @@ public class MetadataItem { /** * When present, the studio or label which produced an item (e.g. movie studio for movies, record label for albums). */ - public Builder studio(Optional studio) { + public Builder studio(Optional studio) { Utils.checkNotNull(studio, "studio"); this.studio = studio; return this; @@ -3825,7 +3955,7 @@ public class MetadataItem { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Object subtype) { + public Builder subtype(String subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = Optional.ofNullable(subtype); return this; @@ -3834,7 +3964,7 @@ public class MetadataItem { /** * The subtype of the video item, such as `photo` when the video item is in a photo library */ - public Builder subtype(Optional subtype) { + public Builder subtype(Optional subtype) { Utils.checkNotNull(subtype, "subtype"); this.subtype = subtype; return this; @@ -3844,7 +3974,7 @@ public class MetadataItem { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Object summary) { + public Builder summary(String summary) { Utils.checkNotNull(summary, "summary"); this.summary = Optional.ofNullable(summary); return this; @@ -3853,7 +3983,7 @@ public class MetadataItem { /** * When present, the extended textual information about the item (e.g. movie plot, artist biography, album review). */ - public Builder summary(Optional summary) { + public Builder summary(Optional summary) { Utils.checkNotNull(summary, "summary"); this.summary = summary; return this; @@ -3863,7 +3993,7 @@ public class MetadataItem { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Object tagline) { + public Builder tagline(String tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = Optional.ofNullable(tagline); return this; @@ -3872,7 +4002,7 @@ public class MetadataItem { /** * When present, a pithy one-liner about the item (usually only seen for movies). */ - public Builder tagline(Optional tagline) { + public Builder tagline(Optional tagline) { Utils.checkNotNull(tagline, "tagline"); this.tagline = tagline; return this; @@ -3882,7 +4012,7 @@ public class MetadataItem { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Object theme) { + public Builder theme(String theme) { Utils.checkNotNull(theme, "theme"); this.theme = Optional.ofNullable(theme); return this; @@ -3891,7 +4021,7 @@ public class MetadataItem { /** * When present, the URL for theme music for the item (usually only for TV shows). */ - public Builder theme(Optional theme) { + public Builder theme(Optional theme) { Utils.checkNotNull(theme, "theme"); this.theme = theme; return this; @@ -3901,7 +4031,7 @@ public class MetadataItem { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; @@ -3910,7 +4040,7 @@ public class MetadataItem { /** * When present, the URL for the poster or thumbnail for the item. When available for types like movie, it will be the poster graphic, but fall-back to the extracted media thumbnail. */ - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -3920,7 +4050,7 @@ public class MetadataItem { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Object titleSort) { + public Builder titleSort(String titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = Optional.ofNullable(titleSort); return this; @@ -3929,7 +4059,7 @@ public class MetadataItem { /** * Whene present, this is the string used for sorting the item. It's usually the title with any leading articles removed (e.g. “Simpsons”). */ - public Builder titleSort(Optional titleSort) { + public Builder titleSort(Optional titleSort) { Utils.checkNotNull(titleSort, "titleSort"); this.titleSort = titleSort; return this; @@ -3958,7 +4088,7 @@ public class MetadataItem { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(double userRating) { + public Builder userRating(float userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = Optional.ofNullable(userRating); return this; @@ -3967,7 +4097,7 @@ public class MetadataItem { /** * When the user has rated an item, this contains the user rating */ - public Builder userRating(Optional userRating) { + public Builder userRating(Optional userRating) { Utils.checkNotNull(userRating, "userRating"); this.userRating = userRating; return this; @@ -3977,7 +4107,7 @@ public class MetadataItem { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(long viewCount) { + public Builder viewCount(int viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = Optional.ofNullable(viewCount); return this; @@ -3986,7 +4116,7 @@ public class MetadataItem { /** * When a users has completed watched or listened to an item, this attribute contains the number of consumptions. */ - public Builder viewCount(Optional viewCount) { + public Builder viewCount(Optional viewCount) { Utils.checkNotNull(viewCount, "viewCount"); this.viewCount = viewCount; return this; @@ -3996,7 +4126,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(long viewedLeafCount) { + public Builder viewedLeafCount(int viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = Optional.ofNullable(viewedLeafCount); return this; @@ -4005,7 +4135,7 @@ public class MetadataItem { /** * For shows and seasons, contains the number of viewed episodes. */ - public Builder viewedLeafCount(Optional viewedLeafCount) { + public Builder viewedLeafCount(Optional viewedLeafCount) { Utils.checkNotNull(viewedLeafCount, "viewedLeafCount"); this.viewedLeafCount = viewedLeafCount; return this; @@ -4015,7 +4145,7 @@ public class MetadataItem { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(long viewOffset) { + public Builder viewOffset(int viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = Optional.ofNullable(viewOffset); return this; @@ -4024,7 +4154,7 @@ public class MetadataItem { /** * When a user is in the process of viewing or listening to this item, this attribute contains the current offset, in units of milliseconds. */ - public Builder viewOffset(Optional viewOffset) { + public Builder viewOffset(Optional viewOffset) { Utils.checkNotNull(viewOffset, "viewOffset"); this.viewOffset = viewOffset; return this; @@ -4047,7 +4177,7 @@ public class MetadataItem { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(long year) { + public Builder year(int year) { Utils.checkNotNull(year, "year"); this.year = Optional.ofNullable(year); return this; @@ -4056,7 +4186,7 @@ public class MetadataItem { /** * When present, the year associated with the item's release (e.g. release year for a movie). */ - public Builder year(Optional year) { + public Builder year(Optional year) { Utils.checkNotNull(year, "year"); this.year = year; return this; @@ -4097,26 +4227,27 @@ public class MetadataItem { title, type, absoluteIndex, addedAt, art, audienceRating, audienceRatingImage, autotag, banner, - chapterSource, composite, contentRating, - country, director, duration, - filter, genre, grandparentArt, - grandparentHero, grandparentKey, grandparentRatingKey, - grandparentTheme, grandparentThumb, grandparentTitle, - guid, hero, image, + chapterSource, childCount, composite, + contentRating, country, director, + duration, filter, genre, + grandparentArt, grandparentGuid, grandparentHero, + grandparentKey, grandparentRatingKey, grandparentTheme, + grandparentThumb, grandparentTitle, guid, + guids, hero, image, index, key, lastViewedAt, leafCount, media, originallyAvailableAt, - originalTitle, parentHero, parentIndex, - parentKey, parentRatingKey, parentThumb, - parentTitle, primaryExtraKey, prompt, - rating, ratingArray, ratingCount, - ratingImage, ratingKey, role, - search, secondary, skipChildren, - skipParent, sort, studio, - subtype, summary, tagline, - theme, thumb, titleSort, - updatedAt, userRating, viewCount, - viewedLeafCount, viewOffset, writer, - year, metadataItem) + originalTitle, parentGuid, parentHero, + parentIndex, parentKey, parentRatingKey, + parentThumb, parentTitle, primaryExtraKey, + prompt, rating, ratingArray, + ratingCount, ratingImage, ratingKey, + role, search, secondary, + skipChildren, skipParent, sort, + studio, subtype, summary, + tagline, theme, thumb, + titleSort, updatedAt, userRating, + viewCount, viewedLeafCount, viewOffset, + writer, year, metadataItem) .withAdditionalProperties(additionalProperties); } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Part.java b/src/main/java/dev/plexapi/sdk/models/shared/Part.java index c0d55693..6f8af76a 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/Part.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/Part.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; @@ -28,31 +29,45 @@ import java.util.Optional; *

`Part` represents a particular file or "part" of a media item. The part is the playable unit of the media hierarchy. Suppose that a movie library contains a movie that is broken up into files, reminiscent of a movie split across two BDs. The metadata item represents information about the movie, the media item represents this instance of the movie at this resolution and quality, and the part items represent the two playable files. If another media were added which contained the joining of these two parts transcoded down to a lower resolution, then this metadata would contain 2 medias, one with 2 parts and one with 1 part. */ public class Part { + /** + * Indicates if the part is accessible. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("accessible") + private Optional accessible; + @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioProfile") - private Optional audioProfile; + private Optional audioProfile; /** * The container of the media file, such as `mp4` or `mkv` */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("container") - private Optional container; + private Optional container; /** * The duration of the media item, in milliseconds */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("duration") - private Optional duration; + private Optional duration; + + /** + * Indicates if the part exists. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("exists") + private Optional exists; /** * The local file path at which the part is stored on the server */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("file") - private Optional file; + private Optional file; @JsonInclude(Include.NON_ABSENT) @@ -60,16 +75,19 @@ public class Part { private Optional has64bitOffsets; - @JsonInclude(Include.NON_ABSENT) @JsonProperty("id") - private Optional id; + private long id; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("indexes") + private Optional indexes; /** * The key from which the media can be streamed */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("key") - private Optional key; + private String key; @JsonInclude(Include.NON_ABSENT) @@ -91,7 +109,7 @@ public class Part { @JsonInclude(Include.NON_ABSENT) @JsonProperty("videoProfile") - private Optional videoProfile; + private Optional videoProfile; @JsonIgnore @@ -99,34 +117,43 @@ public class Part { @JsonCreator public Part( - @JsonProperty("audioProfile") Optional audioProfile, - @JsonProperty("container") Optional container, - @JsonProperty("duration") Optional duration, - @JsonProperty("file") Optional file, + @JsonProperty("accessible") Optional accessible, + @JsonProperty("audioProfile") Optional audioProfile, + @JsonProperty("container") Optional container, + @JsonProperty("duration") Optional duration, + @JsonProperty("exists") Optional exists, + @JsonProperty("file") Optional file, @JsonProperty("has64bitOffsets") Optional has64bitOffsets, - @JsonProperty("id") Optional id, - @JsonProperty("key") Optional key, + @JsonProperty("id") long id, + @JsonProperty("indexes") Optional indexes, + @JsonProperty("key") String key, @JsonProperty("optimizedForStreaming") Optional optimizedForStreaming, @JsonProperty("size") Optional size, @JsonProperty("Stream") Optional> stream, - @JsonProperty("videoProfile") Optional videoProfile) { + @JsonProperty("videoProfile") Optional videoProfile) { + Utils.checkNotNull(accessible, "accessible"); Utils.checkNotNull(audioProfile, "audioProfile"); Utils.checkNotNull(container, "container"); Utils.checkNotNull(duration, "duration"); + Utils.checkNotNull(exists, "exists"); Utils.checkNotNull(file, "file"); Utils.checkNotNull(has64bitOffsets, "has64bitOffsets"); Utils.checkNotNull(id, "id"); + Utils.checkNotNull(indexes, "indexes"); Utils.checkNotNull(key, "key"); Utils.checkNotNull(optimizedForStreaming, "optimizedForStreaming"); Utils.checkNotNull(size, "size"); Utils.checkNotNull(stream, "stream"); Utils.checkNotNull(videoProfile, "videoProfile"); + this.accessible = accessible; this.audioProfile = audioProfile; this.container = container; this.duration = duration; + this.exists = exists; this.file = file; this.has64bitOffsets = has64bitOffsets; this.id = id; + this.indexes = indexes; this.key = key; this.optimizedForStreaming = optimizedForStreaming; this.size = size; @@ -135,43 +162,59 @@ public class Part { this.additionalProperties = new HashMap<>(); } - public Part() { + public Part( + long id, + String key) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), id, Optional.empty(), + key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } - @SuppressWarnings("unchecked") + /** + * Indicates if the part is accessible. + */ @JsonIgnore - public Optional audioProfile() { - return (Optional) audioProfile; + public Optional accessible() { + return accessible; + } + + @JsonIgnore + public Optional audioProfile() { + return audioProfile; } /** * The container of the media file, such as `mp4` or `mkv` */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional container() { - return (Optional) container; + public Optional container() { + return container; } /** * The duration of the media item, in milliseconds */ @JsonIgnore - public Optional duration() { + public Optional duration() { return duration; } + /** + * Indicates if the part exists. + */ + @JsonIgnore + public Optional exists() { + return exists; + } + /** * The local file path at which the part is stored on the server */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional file() { - return (Optional) file; + public Optional file() { + return file; } @JsonIgnore @@ -180,17 +223,21 @@ public class Part { } @JsonIgnore - public Optional id() { + public long id() { return id; } + @JsonIgnore + public Optional indexes() { + return indexes; + } + /** * The key from which the media can be streamed */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; + public String key() { + return key; } @JsonIgnore @@ -212,10 +259,9 @@ public class Part { return (Optional>) stream; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional videoProfile() { - return (Optional) videoProfile; + public Optional videoProfile() { + return videoProfile; } @JsonAnyGetter @@ -228,14 +274,33 @@ public class Part { } - public Part withAudioProfile(Object audioProfile) { + /** + * Indicates if the part is accessible. + */ + public Part withAccessible(boolean accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = Optional.ofNullable(accessible); + return this; + } + + + /** + * Indicates if the part is accessible. + */ + public Part withAccessible(Optional accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = accessible; + return this; + } + + public Part withAudioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public Part withAudioProfile(Optional audioProfile) { + public Part withAudioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; @@ -244,7 +309,7 @@ public class Part { /** * The container of the media file, such as `mp4` or `mkv` */ - public Part withContainer(Object container) { + public Part withContainer(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; @@ -254,7 +319,7 @@ public class Part { /** * The container of the media file, such as `mp4` or `mkv` */ - public Part withContainer(Optional container) { + public Part withContainer(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; @@ -263,7 +328,7 @@ public class Part { /** * The duration of the media item, in milliseconds */ - public Part withDuration(long duration) { + public Part withDuration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -273,16 +338,35 @@ public class Part { /** * The duration of the media item, in milliseconds */ - public Part withDuration(Optional duration) { + public Part withDuration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; } + /** + * Indicates if the part exists. + */ + public Part withExists(boolean exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = Optional.ofNullable(exists); + return this; + } + + + /** + * Indicates if the part exists. + */ + public Part withExists(Optional exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = exists; + return this; + } + /** * The local file path at which the part is stored on the server */ - public Part withFile(Object file) { + public Part withFile(String file) { Utils.checkNotNull(file, "file"); this.file = Optional.ofNullable(file); return this; @@ -292,7 +376,7 @@ public class Part { /** * The local file path at which the part is stored on the server */ - public Part withFile(Optional file) { + public Part withFile(Optional file) { Utils.checkNotNull(file, "file"); this.file = file; return this; @@ -312,32 +396,28 @@ public class Part { } public Part withId(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - - public Part withId(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } - /** - * The key from which the media can be streamed - */ - public Part withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); + public Part withIndexes(String indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = Optional.ofNullable(indexes); return this; } + public Part withIndexes(Optional indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = indexes; + return this; + } + /** * The key from which the media can be streamed */ - public Part withKey(Optional key) { + public Part withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; @@ -388,14 +468,14 @@ public class Part { return this; } - public Part withVideoProfile(Object videoProfile) { + public Part withVideoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public Part withVideoProfile(Optional videoProfile) { + public Part withVideoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; @@ -424,12 +504,15 @@ public class Part { } Part other = (Part) o; return + Utils.enhancedDeepEquals(this.accessible, other.accessible) && Utils.enhancedDeepEquals(this.audioProfile, other.audioProfile) && Utils.enhancedDeepEquals(this.container, other.container) && Utils.enhancedDeepEquals(this.duration, other.duration) && + Utils.enhancedDeepEquals(this.exists, other.exists) && Utils.enhancedDeepEquals(this.file, other.file) && Utils.enhancedDeepEquals(this.has64bitOffsets, other.has64bitOffsets) && Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.indexes, other.indexes) && Utils.enhancedDeepEquals(this.key, other.key) && Utils.enhancedDeepEquals(this.optimizedForStreaming, other.optimizedForStreaming) && Utils.enhancedDeepEquals(this.size, other.size) && @@ -441,8 +524,9 @@ public class Part { @Override public int hashCode() { return Utils.enhancedHash( - audioProfile, container, duration, - file, has64bitOffsets, id, + accessible, audioProfile, container, + duration, exists, file, + has64bitOffsets, id, indexes, key, optimizedForStreaming, size, stream, videoProfile, additionalProperties); } @@ -450,12 +534,15 @@ public class Part { @Override public String toString() { return Utils.toString(Part.class, + "accessible", accessible, "audioProfile", audioProfile, "container", container, "duration", duration, + "exists", exists, "file", file, "has64bitOffsets", has64bitOffsets, "id", id, + "indexes", indexes, "key", key, "optimizedForStreaming", optimizedForStreaming, "size", size, @@ -467,19 +554,25 @@ public class Part { @SuppressWarnings("UnusedReturnValue") public final static class Builder { - private Optional audioProfile = Optional.empty(); + private Optional accessible = Optional.empty(); - private Optional container = Optional.empty(); + private Optional audioProfile = Optional.empty(); - private Optional duration = Optional.empty(); + private Optional container = Optional.empty(); - private Optional file = Optional.empty(); + private Optional duration = Optional.empty(); + + private Optional exists = Optional.empty(); + + private Optional file = Optional.empty(); private Optional has64bitOffsets = Optional.empty(); - private Optional id = Optional.empty(); + private Long id; - private Optional key = Optional.empty(); + private Optional indexes = Optional.empty(); + + private String key; private Optional optimizedForStreaming = Optional.empty(); @@ -487,7 +580,7 @@ public class Part { private Optional> stream = Optional.empty(); - private Optional videoProfile = Optional.empty(); + private Optional videoProfile = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -496,13 +589,32 @@ public class Part { } - public Builder audioProfile(Object audioProfile) { + /** + * Indicates if the part is accessible. + */ + public Builder accessible(boolean accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = Optional.ofNullable(accessible); + return this; + } + + /** + * Indicates if the part is accessible. + */ + public Builder accessible(Optional accessible) { + Utils.checkNotNull(accessible, "accessible"); + this.accessible = accessible; + return this; + } + + + public Builder audioProfile(String audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = Optional.ofNullable(audioProfile); return this; } - public Builder audioProfile(Optional audioProfile) { + public Builder audioProfile(Optional audioProfile) { Utils.checkNotNull(audioProfile, "audioProfile"); this.audioProfile = audioProfile; return this; @@ -512,7 +624,7 @@ public class Part { /** * The container of the media file, such as `mp4` or `mkv` */ - public Builder container(Object container) { + public Builder container(String container) { Utils.checkNotNull(container, "container"); this.container = Optional.ofNullable(container); return this; @@ -521,7 +633,7 @@ public class Part { /** * The container of the media file, such as `mp4` or `mkv` */ - public Builder container(Optional container) { + public Builder container(Optional container) { Utils.checkNotNull(container, "container"); this.container = container; return this; @@ -531,7 +643,7 @@ public class Part { /** * The duration of the media item, in milliseconds */ - public Builder duration(long duration) { + public Builder duration(int duration) { Utils.checkNotNull(duration, "duration"); this.duration = Optional.ofNullable(duration); return this; @@ -540,17 +652,36 @@ public class Part { /** * The duration of the media item, in milliseconds */ - public Builder duration(Optional duration) { + public Builder duration(Optional duration) { Utils.checkNotNull(duration, "duration"); this.duration = duration; return this; } + /** + * Indicates if the part exists. + */ + public Builder exists(boolean exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = Optional.ofNullable(exists); + return this; + } + + /** + * Indicates if the part exists. + */ + public Builder exists(Optional exists) { + Utils.checkNotNull(exists, "exists"); + this.exists = exists; + return this; + } + + /** * The local file path at which the part is stored on the server */ - public Builder file(Object file) { + public Builder file(String file) { Utils.checkNotNull(file, "file"); this.file = Optional.ofNullable(file); return this; @@ -559,7 +690,7 @@ public class Part { /** * The local file path at which the part is stored on the server */ - public Builder file(Optional file) { + public Builder file(Optional file) { Utils.checkNotNull(file, "file"); this.file = file; return this; @@ -580,31 +711,29 @@ public class Part { public Builder id(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - public Builder id(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } - /** - * The key from which the media can be streamed - */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); + public Builder indexes(String indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = Optional.ofNullable(indexes); return this; } + public Builder indexes(Optional indexes) { + Utils.checkNotNull(indexes, "indexes"); + this.indexes = indexes; + return this; + } + + /** * The key from which the media can be streamed */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; @@ -656,13 +785,13 @@ public class Part { } - public Builder videoProfile(Object videoProfile) { + public Builder videoProfile(String videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = Optional.ofNullable(videoProfile); return this; } - public Builder videoProfile(Optional videoProfile) { + public Builder videoProfile(Optional videoProfile) { Utils.checkNotNull(videoProfile, "videoProfile"); this.videoProfile = videoProfile; return this; @@ -687,8 +816,9 @@ public class Part { public Part build() { return new Part( - audioProfile, container, duration, - file, has64bitOffsets, id, + accessible, audioProfile, container, + duration, exists, file, + has64bitOffsets, id, indexes, key, optimizedForStreaming, size, stream, videoProfile) .withAdditionalProperties(additionalProperties); diff --git a/src/main/java/dev/plexapi/sdk/models/shared/PlexDevice.java b/src/main/java/dev/plexapi/sdk/models/shared/PlexDevice.java new file mode 100644 index 00000000..1fdfb3bc --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/PlexDevice.java @@ -0,0 +1,895 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + + +public class PlexDevice { + + @JsonProperty("name") + private String name; + + + @JsonProperty("product") + private String product; + + + @JsonProperty("productVersion") + private String productVersion; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("platform") + private Optional platform; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("platformVersion") + private Optional platformVersion; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("device") + private Optional device; + + + @JsonProperty("clientIdentifier") + private String clientIdentifier; + + + @JsonProperty("createdAt") + private OffsetDateTime createdAt; + + + @JsonProperty("lastSeenAt") + private OffsetDateTime lastSeenAt; + + + @JsonProperty("provides") + private String provides; + + /** + * ownerId is null when the device is owned by the token used to send the request + */ + @JsonInclude(Include.ALWAYS) + @JsonProperty("ownerId") + private Optional ownerId; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("sourceTitle") + private Optional sourceTitle; + + + @JsonProperty("publicAddress") + private String publicAddress; + + + @JsonProperty("accessToken") + private String accessToken; + + + @JsonProperty("owned") + private boolean owned; + + + @JsonProperty("home") + private boolean home; + + + @JsonProperty("synced") + private boolean synced; + + + @JsonProperty("relay") + private boolean relay; + + + @JsonProperty("presence") + private boolean presence; + + + @JsonProperty("httpsRequired") + private boolean httpsRequired; + + + @JsonProperty("publicAddressMatches") + private boolean publicAddressMatches; + + + @JsonProperty("dnsRebindingProtection") + private boolean dnsRebindingProtection; + + + @JsonProperty("natLoopbackSupported") + private boolean natLoopbackSupported; + + + @JsonProperty("connections") + private List connections; + + @JsonCreator + public PlexDevice( + @JsonProperty("name") String name, + @JsonProperty("product") String product, + @JsonProperty("productVersion") String productVersion, + @JsonProperty("platform") Optional platform, + @JsonProperty("platformVersion") Optional platformVersion, + @JsonProperty("device") Optional device, + @JsonProperty("clientIdentifier") String clientIdentifier, + @JsonProperty("createdAt") OffsetDateTime createdAt, + @JsonProperty("lastSeenAt") OffsetDateTime lastSeenAt, + @JsonProperty("provides") String provides, + @JsonProperty("ownerId") Optional ownerId, + @JsonProperty("sourceTitle") Optional sourceTitle, + @JsonProperty("publicAddress") String publicAddress, + @JsonProperty("accessToken") String accessToken, + @JsonProperty("owned") boolean owned, + @JsonProperty("home") boolean home, + @JsonProperty("synced") boolean synced, + @JsonProperty("relay") boolean relay, + @JsonProperty("presence") boolean presence, + @JsonProperty("httpsRequired") boolean httpsRequired, + @JsonProperty("publicAddressMatches") boolean publicAddressMatches, + @JsonProperty("dnsRebindingProtection") boolean dnsRebindingProtection, + @JsonProperty("natLoopbackSupported") boolean natLoopbackSupported, + @JsonProperty("connections") List connections) { + Utils.checkNotNull(name, "name"); + Utils.checkNotNull(product, "product"); + Utils.checkNotNull(productVersion, "productVersion"); + Utils.checkNotNull(platform, "platform"); + Utils.checkNotNull(platformVersion, "platformVersion"); + Utils.checkNotNull(device, "device"); + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + Utils.checkNotNull(createdAt, "createdAt"); + Utils.checkNotNull(lastSeenAt, "lastSeenAt"); + Utils.checkNotNull(provides, "provides"); + Utils.checkNotNull(ownerId, "ownerId"); + Utils.checkNotNull(sourceTitle, "sourceTitle"); + Utils.checkNotNull(publicAddress, "publicAddress"); + Utils.checkNotNull(accessToken, "accessToken"); + Utils.checkNotNull(owned, "owned"); + Utils.checkNotNull(home, "home"); + Utils.checkNotNull(synced, "synced"); + Utils.checkNotNull(relay, "relay"); + Utils.checkNotNull(presence, "presence"); + Utils.checkNotNull(httpsRequired, "httpsRequired"); + Utils.checkNotNull(publicAddressMatches, "publicAddressMatches"); + Utils.checkNotNull(dnsRebindingProtection, "dnsRebindingProtection"); + Utils.checkNotNull(natLoopbackSupported, "natLoopbackSupported"); + Utils.checkNotNull(connections, "connections"); + this.name = name; + this.product = product; + this.productVersion = productVersion; + this.platform = platform; + this.platformVersion = platformVersion; + this.device = device; + this.clientIdentifier = clientIdentifier; + this.createdAt = createdAt; + this.lastSeenAt = lastSeenAt; + this.provides = provides; + this.ownerId = ownerId; + this.sourceTitle = sourceTitle; + this.publicAddress = publicAddress; + this.accessToken = accessToken; + this.owned = owned; + this.home = home; + this.synced = synced; + this.relay = relay; + this.presence = presence; + this.httpsRequired = httpsRequired; + this.publicAddressMatches = publicAddressMatches; + this.dnsRebindingProtection = dnsRebindingProtection; + this.natLoopbackSupported = natLoopbackSupported; + this.connections = connections; + } + + public PlexDevice( + String name, + String product, + String productVersion, + String clientIdentifier, + OffsetDateTime createdAt, + OffsetDateTime lastSeenAt, + String provides, + String publicAddress, + String accessToken, + boolean owned, + boolean home, + boolean synced, + boolean relay, + boolean presence, + boolean httpsRequired, + boolean publicAddressMatches, + boolean dnsRebindingProtection, + boolean natLoopbackSupported, + List connections) { + this(name, product, productVersion, + Optional.empty(), Optional.empty(), Optional.empty(), + clientIdentifier, createdAt, lastSeenAt, + provides, Optional.empty(), Optional.empty(), + publicAddress, accessToken, owned, + home, synced, relay, + presence, httpsRequired, publicAddressMatches, + dnsRebindingProtection, natLoopbackSupported, connections); + } + + @JsonIgnore + public String name() { + return name; + } + + @JsonIgnore + public String product() { + return product; + } + + @JsonIgnore + public String productVersion() { + return productVersion; + } + + @JsonIgnore + public Optional platform() { + return platform; + } + + @JsonIgnore + public Optional platformVersion() { + return platformVersion; + } + + @JsonIgnore + public Optional device() { + return device; + } + + @JsonIgnore + public String clientIdentifier() { + return clientIdentifier; + } + + @JsonIgnore + public OffsetDateTime createdAt() { + return createdAt; + } + + @JsonIgnore + public OffsetDateTime lastSeenAt() { + return lastSeenAt; + } + + @JsonIgnore + public String provides() { + return provides; + } + + /** + * ownerId is null when the device is owned by the token used to send the request + */ + @JsonIgnore + public Optional ownerId() { + return ownerId; + } + + @JsonIgnore + public Optional sourceTitle() { + return sourceTitle; + } + + @JsonIgnore + public String publicAddress() { + return publicAddress; + } + + @JsonIgnore + public String accessToken() { + return accessToken; + } + + @JsonIgnore + public boolean owned() { + return owned; + } + + @JsonIgnore + public boolean home() { + return home; + } + + @JsonIgnore + public boolean synced() { + return synced; + } + + @JsonIgnore + public boolean relay() { + return relay; + } + + @JsonIgnore + public boolean presence() { + return presence; + } + + @JsonIgnore + public boolean httpsRequired() { + return httpsRequired; + } + + @JsonIgnore + public boolean publicAddressMatches() { + return publicAddressMatches; + } + + @JsonIgnore + public boolean dnsRebindingProtection() { + return dnsRebindingProtection; + } + + @JsonIgnore + public boolean natLoopbackSupported() { + return natLoopbackSupported; + } + + @JsonIgnore + public List connections() { + return connections; + } + + public static Builder builder() { + return new Builder(); + } + + + public PlexDevice withName(String name) { + Utils.checkNotNull(name, "name"); + this.name = name; + return this; + } + + public PlexDevice withProduct(String product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + public PlexDevice withProductVersion(String productVersion) { + Utils.checkNotNull(productVersion, "productVersion"); + this.productVersion = productVersion; + return this; + } + + public PlexDevice withPlatform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + + public PlexDevice withPlatform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + public PlexDevice withPlatformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + + public PlexDevice withPlatformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + public PlexDevice withDevice(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + + public PlexDevice withDevice(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + public PlexDevice withClientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + public PlexDevice withCreatedAt(OffsetDateTime createdAt) { + Utils.checkNotNull(createdAt, "createdAt"); + this.createdAt = createdAt; + return this; + } + + public PlexDevice withLastSeenAt(OffsetDateTime lastSeenAt) { + Utils.checkNotNull(lastSeenAt, "lastSeenAt"); + this.lastSeenAt = lastSeenAt; + return this; + } + + public PlexDevice withProvides(String provides) { + Utils.checkNotNull(provides, "provides"); + this.provides = provides; + return this; + } + + /** + * ownerId is null when the device is owned by the token used to send the request + */ + public PlexDevice withOwnerId(long ownerId) { + Utils.checkNotNull(ownerId, "ownerId"); + this.ownerId = Optional.ofNullable(ownerId); + return this; + } + + + /** + * ownerId is null when the device is owned by the token used to send the request + */ + public PlexDevice withOwnerId(Optional ownerId) { + Utils.checkNotNull(ownerId, "ownerId"); + this.ownerId = ownerId; + return this; + } + + public PlexDevice withSourceTitle(String sourceTitle) { + Utils.checkNotNull(sourceTitle, "sourceTitle"); + this.sourceTitle = Optional.ofNullable(sourceTitle); + return this; + } + + + public PlexDevice withSourceTitle(Optional sourceTitle) { + Utils.checkNotNull(sourceTitle, "sourceTitle"); + this.sourceTitle = sourceTitle; + return this; + } + + public PlexDevice withPublicAddress(String publicAddress) { + Utils.checkNotNull(publicAddress, "publicAddress"); + this.publicAddress = publicAddress; + return this; + } + + public PlexDevice withAccessToken(String accessToken) { + Utils.checkNotNull(accessToken, "accessToken"); + this.accessToken = accessToken; + return this; + } + + public PlexDevice withOwned(boolean owned) { + Utils.checkNotNull(owned, "owned"); + this.owned = owned; + return this; + } + + public PlexDevice withHome(boolean home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + public PlexDevice withSynced(boolean synced) { + Utils.checkNotNull(synced, "synced"); + this.synced = synced; + return this; + } + + public PlexDevice withRelay(boolean relay) { + Utils.checkNotNull(relay, "relay"); + this.relay = relay; + return this; + } + + public PlexDevice withPresence(boolean presence) { + Utils.checkNotNull(presence, "presence"); + this.presence = presence; + return this; + } + + public PlexDevice withHttpsRequired(boolean httpsRequired) { + Utils.checkNotNull(httpsRequired, "httpsRequired"); + this.httpsRequired = httpsRequired; + return this; + } + + public PlexDevice withPublicAddressMatches(boolean publicAddressMatches) { + Utils.checkNotNull(publicAddressMatches, "publicAddressMatches"); + this.publicAddressMatches = publicAddressMatches; + return this; + } + + public PlexDevice withDnsRebindingProtection(boolean dnsRebindingProtection) { + Utils.checkNotNull(dnsRebindingProtection, "dnsRebindingProtection"); + this.dnsRebindingProtection = dnsRebindingProtection; + return this; + } + + public PlexDevice withNatLoopbackSupported(boolean natLoopbackSupported) { + Utils.checkNotNull(natLoopbackSupported, "natLoopbackSupported"); + this.natLoopbackSupported = natLoopbackSupported; + return this; + } + + public PlexDevice withConnections(List connections) { + Utils.checkNotNull(connections, "connections"); + this.connections = connections; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PlexDevice other = (PlexDevice) o; + return + Utils.enhancedDeepEquals(this.name, other.name) && + Utils.enhancedDeepEquals(this.product, other.product) && + Utils.enhancedDeepEquals(this.productVersion, other.productVersion) && + Utils.enhancedDeepEquals(this.platform, other.platform) && + Utils.enhancedDeepEquals(this.platformVersion, other.platformVersion) && + Utils.enhancedDeepEquals(this.device, other.device) && + Utils.enhancedDeepEquals(this.clientIdentifier, other.clientIdentifier) && + Utils.enhancedDeepEquals(this.createdAt, other.createdAt) && + Utils.enhancedDeepEquals(this.lastSeenAt, other.lastSeenAt) && + Utils.enhancedDeepEquals(this.provides, other.provides) && + Utils.enhancedDeepEquals(this.ownerId, other.ownerId) && + Utils.enhancedDeepEquals(this.sourceTitle, other.sourceTitle) && + Utils.enhancedDeepEquals(this.publicAddress, other.publicAddress) && + Utils.enhancedDeepEquals(this.accessToken, other.accessToken) && + Utils.enhancedDeepEquals(this.owned, other.owned) && + Utils.enhancedDeepEquals(this.home, other.home) && + Utils.enhancedDeepEquals(this.synced, other.synced) && + Utils.enhancedDeepEquals(this.relay, other.relay) && + Utils.enhancedDeepEquals(this.presence, other.presence) && + Utils.enhancedDeepEquals(this.httpsRequired, other.httpsRequired) && + Utils.enhancedDeepEquals(this.publicAddressMatches, other.publicAddressMatches) && + Utils.enhancedDeepEquals(this.dnsRebindingProtection, other.dnsRebindingProtection) && + Utils.enhancedDeepEquals(this.natLoopbackSupported, other.natLoopbackSupported) && + Utils.enhancedDeepEquals(this.connections, other.connections); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + name, product, productVersion, + platform, platformVersion, device, + clientIdentifier, createdAt, lastSeenAt, + provides, ownerId, sourceTitle, + publicAddress, accessToken, owned, + home, synced, relay, + presence, httpsRequired, publicAddressMatches, + dnsRebindingProtection, natLoopbackSupported, connections); + } + + @Override + public String toString() { + return Utils.toString(PlexDevice.class, + "name", name, + "product", product, + "productVersion", productVersion, + "platform", platform, + "platformVersion", platformVersion, + "device", device, + "clientIdentifier", clientIdentifier, + "createdAt", createdAt, + "lastSeenAt", lastSeenAt, + "provides", provides, + "ownerId", ownerId, + "sourceTitle", sourceTitle, + "publicAddress", publicAddress, + "accessToken", accessToken, + "owned", owned, + "home", home, + "synced", synced, + "relay", relay, + "presence", presence, + "httpsRequired", httpsRequired, + "publicAddressMatches", publicAddressMatches, + "dnsRebindingProtection", dnsRebindingProtection, + "natLoopbackSupported", natLoopbackSupported, + "connections", connections); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String name; + + private String product; + + private String productVersion; + + private Optional platform = Optional.empty(); + + private Optional platformVersion = Optional.empty(); + + private Optional device = Optional.empty(); + + private String clientIdentifier; + + private OffsetDateTime createdAt; + + private OffsetDateTime lastSeenAt; + + private String provides; + + private Optional ownerId = Optional.empty(); + + private Optional sourceTitle = Optional.empty(); + + private String publicAddress; + + private String accessToken; + + private Boolean owned; + + private Boolean home; + + private Boolean synced; + + private Boolean relay; + + private Boolean presence; + + private Boolean httpsRequired; + + private Boolean publicAddressMatches; + + private Boolean dnsRebindingProtection; + + private Boolean natLoopbackSupported; + + private List connections; + + private Builder() { + // force use of static builder() method + } + + + public Builder name(String name) { + Utils.checkNotNull(name, "name"); + this.name = name; + return this; + } + + + public Builder product(String product) { + Utils.checkNotNull(product, "product"); + this.product = product; + return this; + } + + + public Builder productVersion(String productVersion) { + Utils.checkNotNull(productVersion, "productVersion"); + this.productVersion = productVersion; + return this; + } + + + public Builder platform(String platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = Optional.ofNullable(platform); + return this; + } + + public Builder platform(Optional platform) { + Utils.checkNotNull(platform, "platform"); + this.platform = platform; + return this; + } + + + public Builder platformVersion(String platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = Optional.ofNullable(platformVersion); + return this; + } + + public Builder platformVersion(Optional platformVersion) { + Utils.checkNotNull(platformVersion, "platformVersion"); + this.platformVersion = platformVersion; + return this; + } + + + public Builder device(String device) { + Utils.checkNotNull(device, "device"); + this.device = Optional.ofNullable(device); + return this; + } + + public Builder device(Optional device) { + Utils.checkNotNull(device, "device"); + this.device = device; + return this; + } + + + public Builder clientIdentifier(String clientIdentifier) { + Utils.checkNotNull(clientIdentifier, "clientIdentifier"); + this.clientIdentifier = clientIdentifier; + return this; + } + + + public Builder createdAt(OffsetDateTime createdAt) { + Utils.checkNotNull(createdAt, "createdAt"); + this.createdAt = createdAt; + return this; + } + + + public Builder lastSeenAt(OffsetDateTime lastSeenAt) { + Utils.checkNotNull(lastSeenAt, "lastSeenAt"); + this.lastSeenAt = lastSeenAt; + return this; + } + + + public Builder provides(String provides) { + Utils.checkNotNull(provides, "provides"); + this.provides = provides; + return this; + } + + + /** + * ownerId is null when the device is owned by the token used to send the request + */ + public Builder ownerId(long ownerId) { + Utils.checkNotNull(ownerId, "ownerId"); + this.ownerId = Optional.ofNullable(ownerId); + return this; + } + + /** + * ownerId is null when the device is owned by the token used to send the request + */ + public Builder ownerId(Optional ownerId) { + Utils.checkNotNull(ownerId, "ownerId"); + this.ownerId = ownerId; + return this; + } + + + public Builder sourceTitle(String sourceTitle) { + Utils.checkNotNull(sourceTitle, "sourceTitle"); + this.sourceTitle = Optional.ofNullable(sourceTitle); + return this; + } + + public Builder sourceTitle(Optional sourceTitle) { + Utils.checkNotNull(sourceTitle, "sourceTitle"); + this.sourceTitle = sourceTitle; + return this; + } + + + public Builder publicAddress(String publicAddress) { + Utils.checkNotNull(publicAddress, "publicAddress"); + this.publicAddress = publicAddress; + return this; + } + + + public Builder accessToken(String accessToken) { + Utils.checkNotNull(accessToken, "accessToken"); + this.accessToken = accessToken; + return this; + } + + + public Builder owned(boolean owned) { + Utils.checkNotNull(owned, "owned"); + this.owned = owned; + return this; + } + + + public Builder home(boolean home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + + public Builder synced(boolean synced) { + Utils.checkNotNull(synced, "synced"); + this.synced = synced; + return this; + } + + + public Builder relay(boolean relay) { + Utils.checkNotNull(relay, "relay"); + this.relay = relay; + return this; + } + + + public Builder presence(boolean presence) { + Utils.checkNotNull(presence, "presence"); + this.presence = presence; + return this; + } + + + public Builder httpsRequired(boolean httpsRequired) { + Utils.checkNotNull(httpsRequired, "httpsRequired"); + this.httpsRequired = httpsRequired; + return this; + } + + + public Builder publicAddressMatches(boolean publicAddressMatches) { + Utils.checkNotNull(publicAddressMatches, "publicAddressMatches"); + this.publicAddressMatches = publicAddressMatches; + return this; + } + + + public Builder dnsRebindingProtection(boolean dnsRebindingProtection) { + Utils.checkNotNull(dnsRebindingProtection, "dnsRebindingProtection"); + this.dnsRebindingProtection = dnsRebindingProtection; + return this; + } + + + public Builder natLoopbackSupported(boolean natLoopbackSupported) { + Utils.checkNotNull(natLoopbackSupported, "natLoopbackSupported"); + this.natLoopbackSupported = natLoopbackSupported; + return this; + } + + + public Builder connections(List connections) { + Utils.checkNotNull(connections, "connections"); + this.connections = connections; + return this; + } + + public PlexDevice build() { + + return new PlexDevice( + name, product, productVersion, + platform, platformVersion, device, + clientIdentifier, createdAt, lastSeenAt, + provides, ownerId, sourceTitle, + publicAddress, accessToken, owned, + home, synced, relay, + presence, httpsRequired, publicAddressMatches, + dnsRebindingProtection, natLoopbackSupported, connections); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/PlexDeviceProtocol.java b/src/main/java/dev/plexapi/sdk/models/shared/PlexDeviceProtocol.java new file mode 100644 index 00000000..2a911f1f --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/PlexDeviceProtocol.java @@ -0,0 +1,40 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; + +/** + * PlexDeviceProtocol + * + *

The protocol used for the connection (http, https, etc) + */ +public enum PlexDeviceProtocol { + HTTP("http"), + HTTPS("https"); + + @JsonValue + private final String value; + + PlexDeviceProtocol(String value) { + this.value = value; + } + + public String value() { + return value; + } + + public static Optional fromValue(String value) { + for (PlexDeviceProtocol o: PlexDeviceProtocol.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Services.java b/src/main/java/dev/plexapi/sdk/models/shared/Services.java new file mode 100644 index 00000000..ef47588d --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/Services.java @@ -0,0 +1,247 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Override; +import java.lang.String; +import java.util.Optional; + + +public class Services { + + @JsonProperty("identifier") + private String identifier; + + + @JsonProperty("endpoint") + private String endpoint; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("token") + private Optional token; + + + @JsonInclude(Include.ALWAYS) + @JsonProperty("secret") + private Optional secret; + + + @JsonProperty("status") + private UserPlexAccountStatus status; + + @JsonCreator + public Services( + @JsonProperty("identifier") String identifier, + @JsonProperty("endpoint") String endpoint, + @JsonProperty("token") Optional token, + @JsonProperty("secret") Optional secret, + @JsonProperty("status") UserPlexAccountStatus status) { + Utils.checkNotNull(identifier, "identifier"); + Utils.checkNotNull(endpoint, "endpoint"); + Utils.checkNotNull(token, "token"); + Utils.checkNotNull(secret, "secret"); + Utils.checkNotNull(status, "status"); + this.identifier = identifier; + this.endpoint = endpoint; + this.token = token; + this.secret = secret; + this.status = status; + } + + public Services( + String identifier, + String endpoint, + UserPlexAccountStatus status) { + this(identifier, endpoint, Optional.empty(), + Optional.empty(), status); + } + + @JsonIgnore + public String identifier() { + return identifier; + } + + @JsonIgnore + public String endpoint() { + return endpoint; + } + + @JsonIgnore + public Optional token() { + return token; + } + + @JsonIgnore + public Optional secret() { + return secret; + } + + @JsonIgnore + public UserPlexAccountStatus status() { + return status; + } + + public static Builder builder() { + return new Builder(); + } + + + public Services withIdentifier(String identifier) { + Utils.checkNotNull(identifier, "identifier"); + this.identifier = identifier; + return this; + } + + public Services withEndpoint(String endpoint) { + Utils.checkNotNull(endpoint, "endpoint"); + this.endpoint = endpoint; + return this; + } + + public Services withToken(String token) { + Utils.checkNotNull(token, "token"); + this.token = Optional.ofNullable(token); + return this; + } + + + public Services withToken(Optional token) { + Utils.checkNotNull(token, "token"); + this.token = token; + return this; + } + + public Services withSecret(String secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = Optional.ofNullable(secret); + return this; + } + + + public Services withSecret(Optional secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = secret; + return this; + } + + public Services withStatus(UserPlexAccountStatus status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Services other = (Services) o; + return + Utils.enhancedDeepEquals(this.identifier, other.identifier) && + Utils.enhancedDeepEquals(this.endpoint, other.endpoint) && + Utils.enhancedDeepEquals(this.token, other.token) && + Utils.enhancedDeepEquals(this.secret, other.secret) && + Utils.enhancedDeepEquals(this.status, other.status); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + identifier, endpoint, token, + secret, status); + } + + @Override + public String toString() { + return Utils.toString(Services.class, + "identifier", identifier, + "endpoint", endpoint, + "token", token, + "secret", secret, + "status", status); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private String identifier; + + private String endpoint; + + private Optional token = Optional.empty(); + + private Optional secret = Optional.empty(); + + private UserPlexAccountStatus status; + + private Builder() { + // force use of static builder() method + } + + + public Builder identifier(String identifier) { + Utils.checkNotNull(identifier, "identifier"); + this.identifier = identifier; + return this; + } + + + public Builder endpoint(String endpoint) { + Utils.checkNotNull(endpoint, "endpoint"); + this.endpoint = endpoint; + return this; + } + + + public Builder token(String token) { + Utils.checkNotNull(token, "token"); + this.token = Optional.ofNullable(token); + return this; + } + + public Builder token(Optional token) { + Utils.checkNotNull(token, "token"); + this.token = token; + return this; + } + + + public Builder secret(String secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = Optional.ofNullable(secret); + return this; + } + + public Builder secret(Optional secret) { + Utils.checkNotNull(secret, "secret"); + this.secret = secret; + return this; + } + + + public Builder status(UserPlexAccountStatus status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + public Services build() { + + return new Services( + identifier, endpoint, token, + secret, status); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Stream.java b/src/main/java/dev/plexapi/sdk/models/shared/Stream.java index b9c12e1f..29674cbd 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/Stream.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/Stream.java @@ -10,14 +10,16 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; import dev.plexapi.sdk.utils.Utils; import java.lang.Boolean; -import java.lang.Double; +import java.lang.Float; +import java.lang.Integer; import java.lang.Long; import java.lang.Object; import java.lang.Override; import java.lang.String; -import java.lang.SuppressWarnings; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -28,164 +30,355 @@ import java.util.Optional; *

`Stream` represents a particular stream from a media item, such as the video stream, audio stream, or subtitle stream. The stream may either be part of the file represented by the parent `Part` or, especially for subtitles, an external file. The stream contains more detailed information about the specific stream. For example, a video may include the `aspectRatio` at the `Media` level, but detailed information about the video stream like the color space will be included on the `Stream` for the video stream. Note that photos do not have streams (mostly as an optimization). */ public class Stream { - + /** + * Indicates if this stream is default. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("default") private Optional default_; - + /** + * Audio channel layout. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("audioChannelLayout") - private Optional audioChannelLayout; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("bitDepth") - private Optional bitDepth; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("bitrate") - private Optional bitrate; + private Optional audioChannelLayout; /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Number of audio channels (for audio streams). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("channels") + private Optional channels; + + /** + * Bit depth of the video stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("bitDepth") + private Optional bitDepth; + + /** + * Dolby Vision BL compatibility ID. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIBLCompatID") + private Optional doviblCompatID; + + /** + * Indicates if Dolby Vision BL is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIBLPresent") + private Optional doviblPresent; + + /** + * Indicates if Dolby Vision EL is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIELPresent") + private Optional dovielPresent; + + /** + * Dolby Vision level. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVILevel") + private Optional doviLevel; + + /** + * Indicates if Dolby Vision is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIPresent") + private Optional doviPresent; + + /** + * Dolby Vision profile. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIProfile") + private Optional doviProfile; + + /** + * Indicates if Dolby Vision RPU is present. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIRPUPresent") + private Optional dovirpuPresent; + + /** + * Dolby Vision version. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("DOVIVersion") + private Optional doviVersion; + + /** + * Bitrate of the stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("bitrate") + private Optional bitrate; + + /** + * Indicates if the stream can auto-sync. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("canAutoSync") private Optional canAutoSync; - + /** + * Chroma sample location. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chromaLocation") - private Optional chromaLocation; - + private Optional chromaLocation; + /** + * Chroma subsampling format. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("chromaSubsampling") - private Optional chromaSubsampling; + private Optional chromaSubsampling; /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ @JsonInclude(Include.NON_ABSENT) + @JsonProperty("codedHeight") + private Optional codedHeight; + + /** + * Coded video width. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("codedWidth") + private Optional codedWidth; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("closedCaptions") + private Optional closedCaptions; + + /** + * Codec used by the stream. + */ @JsonProperty("codec") - private Optional codec; - + private String codec; + /** + * Color primaries used. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("colorPrimaries") - private Optional colorPrimaries; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("colorRange") - private Optional colorRange; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("colorSpace") - private Optional colorSpace; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("colorTrc") - private Optional colorTrc; + private Optional colorPrimaries; /** - * A friendly name for the stream, often comprised of the language and codec information + * Color range (e.g., tv). */ @JsonInclude(Include.NON_ABSENT) + @JsonProperty("colorRange") + private Optional colorRange; + + /** + * Color space. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("colorSpace") + private Optional colorSpace; + + /** + * Color transfer characteristics. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("colorTrc") + private Optional colorTrc; + + /** + * Display title for the stream. + */ @JsonProperty("displayTitle") - private Optional displayTitle; + private String displayTitle; + /** + * Extended display title for the stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("extendedDisplayTitle") + private Optional extendedDisplayTitle; + /** + * Frame rate of the stream. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("frameRate") - private Optional frameRate; + private Optional frameRate; @JsonInclude(Include.NON_ABSENT) @JsonProperty("hasScalingMatrix") - private Optional hasScalingMatrix; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("height") - private Optional height; - - - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("id") - private Optional id; + private Optional hasScalingMatrix; /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Height of the video stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("height") + private Optional height; + + /** + * Unique stream identifier. + */ + @JsonProperty("id") + private int id; + + /** + * Index of the stream. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("index") - private Optional index; + private Optional index; /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. + */ + @JsonProperty("key") + private String key; + + /** + * Language of the stream. */ - @JsonInclude(Include.NON_ABSENT) - @JsonProperty("key") - private Optional key; - - @JsonInclude(Include.NON_ABSENT) @JsonProperty("language") - private Optional language; + private Optional language; /** - * The three character language code for the stream contents + * ISO language code. */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("languageCode") - private Optional languageCode; + private Optional languageCode; + /** + * Language tag (e.g., en). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("languageTag") + private Optional languageTag; + /** + * Format of the stream (e.g., srt). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("format") + private Optional format; + + /** + * Indicates whether header compression is enabled. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("headerCompression") + private Optional headerCompression; + + /** + * Video level. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("level") - private Optional level; + private Optional level; + /** + * Indicates if this is the original stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("original") + private Optional original; + /** + * Video profile. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("profile") - private Optional profile; - + private Optional profile; + /** + * Number of reference frames. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("refFrames") - private Optional refFrames; + private Optional refFrames; + + /** + * Sampling rate for the audio stream. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("samplingRate") + private Optional samplingRate; @JsonInclude(Include.NON_ABSENT) - @JsonProperty("samplingRate") - private Optional samplingRate; + @JsonProperty("scanType") + private Optional scanType; + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("embeddedInVideo") + private Optional embeddedInVideo; + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("selected") private Optional selected; @JsonInclude(Include.NON_ABSENT) - @JsonProperty("streamIdentifier") - private Optional streamIdentifier; + @JsonProperty("forced") + private Optional forced; /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Indicates if the stream is for the hearing impaired. */ @JsonInclude(Include.NON_ABSENT) - @JsonProperty("streamType") - private Optional streamType; + @JsonProperty("hearingImpaired") + private Optional hearingImpaired; + + /** + * Indicates if the stream is a dub. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("dub") + private Optional dub; + + /** + * Optional title for the stream (e.g., language variant). + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("title") + private Optional title; + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("streamIdentifier") + private Optional streamIdentifier; + + /** + * Stream type: + * - VIDEO = 1 + * - AUDIO = 2 + * - SUBTITLE = 3 + */ + @JsonProperty("streamType") + private long streamType; + + /** + * Width of the video stream. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("width") - private Optional width; + private Optional width; @JsonIgnore @@ -194,47 +387,82 @@ public class Stream { @JsonCreator public Stream( @JsonProperty("default") Optional default_, - @JsonProperty("audioChannelLayout") Optional audioChannelLayout, - @JsonProperty("bitDepth") Optional bitDepth, - @JsonProperty("bitrate") Optional bitrate, + @JsonProperty("audioChannelLayout") Optional audioChannelLayout, + @JsonProperty("channels") Optional channels, + @JsonProperty("bitDepth") Optional bitDepth, + @JsonProperty("DOVIBLCompatID") Optional doviblCompatID, + @JsonProperty("DOVIBLPresent") Optional doviblPresent, + @JsonProperty("DOVIELPresent") Optional dovielPresent, + @JsonProperty("DOVILevel") Optional doviLevel, + @JsonProperty("DOVIPresent") Optional doviPresent, + @JsonProperty("DOVIProfile") Optional doviProfile, + @JsonProperty("DOVIRPUPresent") Optional dovirpuPresent, + @JsonProperty("DOVIVersion") Optional doviVersion, + @JsonProperty("bitrate") Optional bitrate, @JsonProperty("canAutoSync") Optional canAutoSync, - @JsonProperty("chromaLocation") Optional chromaLocation, - @JsonProperty("chromaSubsampling") Optional chromaSubsampling, - @JsonProperty("codec") Optional codec, - @JsonProperty("colorPrimaries") Optional colorPrimaries, - @JsonProperty("colorRange") Optional colorRange, - @JsonProperty("colorSpace") Optional colorSpace, - @JsonProperty("colorTrc") Optional colorTrc, - @JsonProperty("displayTitle") Optional displayTitle, - @JsonProperty("frameRate") Optional frameRate, - @JsonProperty("hasScalingMatrix") Optional hasScalingMatrix, - @JsonProperty("height") Optional height, - @JsonProperty("id") Optional id, - @JsonProperty("index") Optional index, - @JsonProperty("key") Optional key, - @JsonProperty("language") Optional language, - @JsonProperty("languageCode") Optional languageCode, - @JsonProperty("level") Optional level, - @JsonProperty("profile") Optional profile, - @JsonProperty("refFrames") Optional refFrames, - @JsonProperty("samplingRate") Optional samplingRate, + @JsonProperty("chromaLocation") Optional chromaLocation, + @JsonProperty("chromaSubsampling") Optional chromaSubsampling, + @JsonProperty("codedHeight") Optional codedHeight, + @JsonProperty("codedWidth") Optional codedWidth, + @JsonProperty("closedCaptions") Optional closedCaptions, + @JsonProperty("codec") String codec, + @JsonProperty("colorPrimaries") Optional colorPrimaries, + @JsonProperty("colorRange") Optional colorRange, + @JsonProperty("colorSpace") Optional colorSpace, + @JsonProperty("colorTrc") Optional colorTrc, + @JsonProperty("displayTitle") String displayTitle, + @JsonProperty("extendedDisplayTitle") Optional extendedDisplayTitle, + @JsonProperty("frameRate") Optional frameRate, + @JsonProperty("hasScalingMatrix") Optional hasScalingMatrix, + @JsonProperty("height") Optional height, + @JsonProperty("id") int id, + @JsonProperty("index") Optional index, + @JsonProperty("key") String key, + @JsonProperty("language") Optional language, + @JsonProperty("languageCode") Optional languageCode, + @JsonProperty("languageTag") Optional languageTag, + @JsonProperty("format") Optional format, + @JsonProperty("headerCompression") Optional headerCompression, + @JsonProperty("level") Optional level, + @JsonProperty("original") Optional original, + @JsonProperty("profile") Optional profile, + @JsonProperty("refFrames") Optional refFrames, + @JsonProperty("samplingRate") Optional samplingRate, + @JsonProperty("scanType") Optional scanType, + @JsonProperty("embeddedInVideo") Optional embeddedInVideo, @JsonProperty("selected") Optional selected, - @JsonProperty("streamIdentifier") Optional streamIdentifier, - @JsonProperty("streamType") Optional streamType, - @JsonProperty("width") Optional width) { + @JsonProperty("forced") Optional forced, + @JsonProperty("hearingImpaired") Optional hearingImpaired, + @JsonProperty("dub") Optional dub, + @JsonProperty("title") Optional title, + @JsonProperty("streamIdentifier") Optional streamIdentifier, + @JsonProperty("width") Optional width) { Utils.checkNotNull(default_, "default_"); Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); + Utils.checkNotNull(channels, "channels"); Utils.checkNotNull(bitDepth, "bitDepth"); + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + Utils.checkNotNull(doviblPresent, "doviblPresent"); + Utils.checkNotNull(dovielPresent, "dovielPresent"); + Utils.checkNotNull(doviLevel, "doviLevel"); + Utils.checkNotNull(doviPresent, "doviPresent"); + Utils.checkNotNull(doviProfile, "doviProfile"); + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + Utils.checkNotNull(doviVersion, "doviVersion"); Utils.checkNotNull(bitrate, "bitrate"); Utils.checkNotNull(canAutoSync, "canAutoSync"); Utils.checkNotNull(chromaLocation, "chromaLocation"); Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); + Utils.checkNotNull(codedHeight, "codedHeight"); + Utils.checkNotNull(codedWidth, "codedWidth"); + Utils.checkNotNull(closedCaptions, "closedCaptions"); Utils.checkNotNull(codec, "codec"); Utils.checkNotNull(colorPrimaries, "colorPrimaries"); Utils.checkNotNull(colorRange, "colorRange"); Utils.checkNotNull(colorSpace, "colorSpace"); Utils.checkNotNull(colorTrc, "colorTrc"); Utils.checkNotNull(displayTitle, "displayTitle"); + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); Utils.checkNotNull(frameRate, "frameRate"); Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); Utils.checkNotNull(height, "height"); @@ -243,27 +471,49 @@ public class Stream { Utils.checkNotNull(key, "key"); Utils.checkNotNull(language, "language"); Utils.checkNotNull(languageCode, "languageCode"); + Utils.checkNotNull(languageTag, "languageTag"); + Utils.checkNotNull(format, "format"); + Utils.checkNotNull(headerCompression, "headerCompression"); Utils.checkNotNull(level, "level"); + Utils.checkNotNull(original, "original"); Utils.checkNotNull(profile, "profile"); Utils.checkNotNull(refFrames, "refFrames"); Utils.checkNotNull(samplingRate, "samplingRate"); + Utils.checkNotNull(scanType, "scanType"); + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); Utils.checkNotNull(selected, "selected"); + Utils.checkNotNull(forced, "forced"); + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + Utils.checkNotNull(dub, "dub"); + Utils.checkNotNull(title, "title"); Utils.checkNotNull(streamIdentifier, "streamIdentifier"); - Utils.checkNotNull(streamType, "streamType"); Utils.checkNotNull(width, "width"); this.default_ = default_; this.audioChannelLayout = audioChannelLayout; + this.channels = channels; this.bitDepth = bitDepth; + this.doviblCompatID = doviblCompatID; + this.doviblPresent = doviblPresent; + this.dovielPresent = dovielPresent; + this.doviLevel = doviLevel; + this.doviPresent = doviPresent; + this.doviProfile = doviProfile; + this.dovirpuPresent = dovirpuPresent; + this.doviVersion = doviVersion; this.bitrate = bitrate; this.canAutoSync = canAutoSync; this.chromaLocation = chromaLocation; this.chromaSubsampling = chromaSubsampling; + this.codedHeight = codedHeight; + this.codedWidth = codedWidth; + this.closedCaptions = closedCaptions; this.codec = codec; this.colorPrimaries = colorPrimaries; this.colorRange = colorRange; this.colorSpace = colorSpace; this.colorTrc = colorTrc; this.displayTitle = displayTitle; + this.extendedDisplayTitle = extendedDisplayTitle; this.frameRate = frameRate; this.hasScalingMatrix = hasScalingMatrix; this.height = height; @@ -272,207 +522,449 @@ public class Stream { this.key = key; this.language = language; this.languageCode = languageCode; + this.languageTag = languageTag; + this.format = format; + this.headerCompression = headerCompression; this.level = level; + this.original = original; this.profile = profile; this.refFrames = refFrames; this.samplingRate = samplingRate; + this.scanType = scanType; + this.embeddedInVideo = embeddedInVideo; this.selected = selected; + this.forced = forced; + this.hearingImpaired = hearingImpaired; + this.dub = dub; + this.title = title; this.streamIdentifier = streamIdentifier; - this.streamType = streamType; + this.streamType = Builder._SINGLETON_VALUE_StreamType.value(); this.width = width; this.additionalProperties = new HashMap<>(); } - public Stream() { + public Stream( + String codec, + String displayTitle, + int id, + String key) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), codec, Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + displayTitle, Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), id, + Optional.empty(), key, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty()); + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty()); } + /** + * Indicates if this stream is default. + */ @JsonIgnore public Optional default_() { return default_; } - @SuppressWarnings("unchecked") + /** + * Audio channel layout. + */ @JsonIgnore - public Optional audioChannelLayout() { - return (Optional) audioChannelLayout; + public Optional audioChannelLayout() { + return audioChannelLayout; } + /** + * Number of audio channels (for audio streams). + */ @JsonIgnore - public Optional bitDepth() { + public Optional channels() { + return channels; + } + + /** + * Bit depth of the video stream. + */ + @JsonIgnore + public Optional bitDepth() { return bitDepth; } + /** + * Dolby Vision BL compatibility ID. + */ @JsonIgnore - public Optional bitrate() { + public Optional doviblCompatID() { + return doviblCompatID; + } + + /** + * Indicates if Dolby Vision BL is present. + */ + @JsonIgnore + public Optional doviblPresent() { + return doviblPresent; + } + + /** + * Indicates if Dolby Vision EL is present. + */ + @JsonIgnore + public Optional dovielPresent() { + return dovielPresent; + } + + /** + * Dolby Vision level. + */ + @JsonIgnore + public Optional doviLevel() { + return doviLevel; + } + + /** + * Indicates if Dolby Vision is present. + */ + @JsonIgnore + public Optional doviPresent() { + return doviPresent; + } + + /** + * Dolby Vision profile. + */ + @JsonIgnore + public Optional doviProfile() { + return doviProfile; + } + + /** + * Indicates if Dolby Vision RPU is present. + */ + @JsonIgnore + public Optional dovirpuPresent() { + return dovirpuPresent; + } + + /** + * Dolby Vision version. + */ + @JsonIgnore + public Optional doviVersion() { + return doviVersion; + } + + /** + * Bitrate of the stream. + */ + @JsonIgnore + public Optional bitrate() { return bitrate; } /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ @JsonIgnore public Optional canAutoSync() { return canAutoSync; } - @SuppressWarnings("unchecked") + /** + * Chroma sample location. + */ @JsonIgnore - public Optional chromaLocation() { - return (Optional) chromaLocation; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional chromaSubsampling() { - return (Optional) chromaSubsampling; + public Optional chromaLocation() { + return chromaLocation; } /** - * The codec of the stream, such as `h264` or `aac` + * Chroma subsampling format. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional codec() { - return (Optional) codec; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorPrimaries() { - return (Optional) colorPrimaries; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorRange() { - return (Optional) colorRange; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorSpace() { - return (Optional) colorSpace; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional colorTrc() { - return (Optional) colorTrc; + public Optional chromaSubsampling() { + return chromaSubsampling; } /** - * A friendly name for the stream, often comprised of the language and codec information + * Coded video height. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional displayTitle() { - return (Optional) displayTitle; + public Optional codedHeight() { + return codedHeight; + } + + /** + * Coded video width. + */ + @JsonIgnore + public Optional codedWidth() { + return codedWidth; } @JsonIgnore - public Optional frameRate() { + public Optional closedCaptions() { + return closedCaptions; + } + + /** + * Codec used by the stream. + */ + @JsonIgnore + public String codec() { + return codec; + } + + /** + * Color primaries used. + */ + @JsonIgnore + public Optional colorPrimaries() { + return colorPrimaries; + } + + /** + * Color range (e.g., tv). + */ + @JsonIgnore + public Optional colorRange() { + return colorRange; + } + + /** + * Color space. + */ + @JsonIgnore + public Optional colorSpace() { + return colorSpace; + } + + /** + * Color transfer characteristics. + */ + @JsonIgnore + public Optional colorTrc() { + return colorTrc; + } + + /** + * Display title for the stream. + */ + @JsonIgnore + public String displayTitle() { + return displayTitle; + } + + /** + * Extended display title for the stream. + */ + @JsonIgnore + public Optional extendedDisplayTitle() { + return extendedDisplayTitle; + } + + /** + * Frame rate of the stream. + */ + @JsonIgnore + public Optional frameRate() { return frameRate; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional hasScalingMatrix() { - return (Optional) hasScalingMatrix; + public Optional hasScalingMatrix() { + return hasScalingMatrix; } + /** + * Height of the video stream. + */ @JsonIgnore - public Optional height() { + public Optional height() { return height; } + /** + * Unique stream identifier. + */ @JsonIgnore - public Optional id() { + public int id() { return id; } /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ @JsonIgnore - public Optional index() { + public Optional index() { return index; } /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional key() { - return (Optional) key; - } - - @SuppressWarnings("unchecked") - @JsonIgnore - public Optional language() { - return (Optional) language; + public String key() { + return key; } /** - * The three character language code for the stream contents + * Language of the stream. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional languageCode() { - return (Optional) languageCode; + public Optional language() { + return language; } + /** + * ISO language code. + */ @JsonIgnore - public Optional level() { + public Optional languageCode() { + return languageCode; + } + + /** + * Language tag (e.g., en). + */ + @JsonIgnore + public Optional languageTag() { + return languageTag; + } + + /** + * Format of the stream (e.g., srt). + */ + @JsonIgnore + public Optional format() { + return format; + } + + /** + * Indicates whether header compression is enabled. + */ + @JsonIgnore + public Optional headerCompression() { + return headerCompression; + } + + /** + * Video level. + */ + @JsonIgnore + public Optional level() { return level; } - @SuppressWarnings("unchecked") + /** + * Indicates if this is the original stream. + */ @JsonIgnore - public Optional profile() { - return (Optional) profile; + public Optional original() { + return original; } + /** + * Video profile. + */ @JsonIgnore - public Optional refFrames() { + public Optional profile() { + return profile; + } + + /** + * Number of reference frames. + */ + @JsonIgnore + public Optional refFrames() { return refFrames; } + /** + * Sampling rate for the audio stream. + */ @JsonIgnore - public Optional samplingRate() { + public Optional samplingRate() { return samplingRate; } + @JsonIgnore + public Optional scanType() { + return scanType; + } + + @JsonIgnore + public Optional embeddedInVideo() { + return embeddedInVideo; + } + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ @JsonIgnore public Optional selected() { return selected; } @JsonIgnore - public Optional streamIdentifier() { + public Optional forced() { + return forced; + } + + /** + * Indicates if the stream is for the hearing impaired. + */ + @JsonIgnore + public Optional hearingImpaired() { + return hearingImpaired; + } + + /** + * Indicates if the stream is a dub. + */ + @JsonIgnore + public Optional dub() { + return dub; + } + + /** + * Optional title for the stream (e.g., language variant). + */ + @JsonIgnore + public Optional title() { + return title; + } + + @JsonIgnore + public Optional streamIdentifier() { return streamIdentifier; } /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Stream type: + * - VIDEO = 1 + * - AUDIO = 2 + * - SUBTITLE = 3 */ @JsonIgnore - public Optional streamType() { + public long streamType() { return streamType; } + /** + * Width of the video stream. + */ @JsonIgnore - public Optional width() { + public Optional width() { return width; } @@ -486,6 +978,9 @@ public class Stream { } + /** + * Indicates if this stream is default. + */ public Stream withDefault(boolean default_) { Utils.checkNotNull(default_, "default_"); this.default_ = Optional.ofNullable(default_); @@ -493,53 +988,245 @@ public class Stream { } + /** + * Indicates if this stream is default. + */ public Stream withDefault(Optional default_) { Utils.checkNotNull(default_, "default_"); this.default_ = default_; return this; } - public Stream withAudioChannelLayout(Object audioChannelLayout) { + /** + * Audio channel layout. + */ + public Stream withAudioChannelLayout(String audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = Optional.ofNullable(audioChannelLayout); return this; } - public Stream withAudioChannelLayout(Optional audioChannelLayout) { + /** + * Audio channel layout. + */ + public Stream withAudioChannelLayout(Optional audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = audioChannelLayout; return this; } - public Stream withBitDepth(long bitDepth) { + /** + * Number of audio channels (for audio streams). + */ + public Stream withChannels(int channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = Optional.ofNullable(channels); + return this; + } + + + /** + * Number of audio channels (for audio streams). + */ + public Stream withChannels(Optional channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = channels; + return this; + } + + /** + * Bit depth of the video stream. + */ + public Stream withBitDepth(int bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = Optional.ofNullable(bitDepth); return this; } - public Stream withBitDepth(Optional bitDepth) { + /** + * Bit depth of the video stream. + */ + public Stream withBitDepth(Optional bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = bitDepth; return this; } - public Stream withBitrate(long bitrate) { + /** + * Dolby Vision BL compatibility ID. + */ + public Stream withDOVIBLCompatID(int doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = Optional.ofNullable(doviblCompatID); + return this; + } + + + /** + * Dolby Vision BL compatibility ID. + */ + public Stream withDOVIBLCompatID(Optional doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = doviblCompatID; + return this; + } + + /** + * Indicates if Dolby Vision BL is present. + */ + public Stream withDOVIBLPresent(boolean doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = Optional.ofNullable(doviblPresent); + return this; + } + + + /** + * Indicates if Dolby Vision BL is present. + */ + public Stream withDOVIBLPresent(Optional doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = doviblPresent; + return this; + } + + /** + * Indicates if Dolby Vision EL is present. + */ + public Stream withDOVIELPresent(boolean dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = Optional.ofNullable(dovielPresent); + return this; + } + + + /** + * Indicates if Dolby Vision EL is present. + */ + public Stream withDOVIELPresent(Optional dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = dovielPresent; + return this; + } + + /** + * Dolby Vision level. + */ + public Stream withDOVILevel(int doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = Optional.ofNullable(doviLevel); + return this; + } + + + /** + * Dolby Vision level. + */ + public Stream withDOVILevel(Optional doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = doviLevel; + return this; + } + + /** + * Indicates if Dolby Vision is present. + */ + public Stream withDOVIPresent(boolean doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = Optional.ofNullable(doviPresent); + return this; + } + + + /** + * Indicates if Dolby Vision is present. + */ + public Stream withDOVIPresent(Optional doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = doviPresent; + return this; + } + + /** + * Dolby Vision profile. + */ + public Stream withDOVIProfile(int doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = Optional.ofNullable(doviProfile); + return this; + } + + + /** + * Dolby Vision profile. + */ + public Stream withDOVIProfile(Optional doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = doviProfile; + return this; + } + + /** + * Indicates if Dolby Vision RPU is present. + */ + public Stream withDOVIRPUPresent(boolean dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = Optional.ofNullable(dovirpuPresent); + return this; + } + + + /** + * Indicates if Dolby Vision RPU is present. + */ + public Stream withDOVIRPUPresent(Optional dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = dovirpuPresent; + return this; + } + + /** + * Dolby Vision version. + */ + public Stream withDOVIVersion(String doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = Optional.ofNullable(doviVersion); + return this; + } + + + /** + * Dolby Vision version. + */ + public Stream withDOVIVersion(Optional doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = doviVersion; + return this; + } + + /** + * Bitrate of the stream. + */ + public Stream withBitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public Stream withBitrate(Optional bitrate) { + /** + * Bitrate of the stream. + */ + public Stream withBitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; } /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public Stream withCanAutoSync(boolean canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -549,7 +1236,7 @@ public class Stream { /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public Stream withCanAutoSync(Optional canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -557,178 +1244,272 @@ public class Stream { return this; } - public Stream withChromaLocation(Object chromaLocation) { + /** + * Chroma sample location. + */ + public Stream withChromaLocation(String chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = Optional.ofNullable(chromaLocation); return this; } - public Stream withChromaLocation(Optional chromaLocation) { + /** + * Chroma sample location. + */ + public Stream withChromaLocation(Optional chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = chromaLocation; return this; } - public Stream withChromaSubsampling(Object chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public Stream withChromaSubsampling(String chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = Optional.ofNullable(chromaSubsampling); return this; } - public Stream withChromaSubsampling(Optional chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public Stream withChromaSubsampling(Optional chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = chromaSubsampling; return this; } /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public Stream withCodec(Object codec) { - Utils.checkNotNull(codec, "codec"); - this.codec = Optional.ofNullable(codec); + public Stream withCodedHeight(int codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = Optional.ofNullable(codedHeight); return this; } /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public Stream withCodec(Optional codec) { + public Stream withCodedHeight(Optional codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = codedHeight; + return this; + } + + /** + * Coded video width. + */ + public Stream withCodedWidth(int codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = Optional.ofNullable(codedWidth); + return this; + } + + + /** + * Coded video width. + */ + public Stream withCodedWidth(Optional codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = codedWidth; + return this; + } + + public Stream withClosedCaptions(boolean closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = Optional.ofNullable(closedCaptions); + return this; + } + + + public Stream withClosedCaptions(Optional closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = closedCaptions; + return this; + } + + /** + * Codec used by the stream. + */ + public Stream withCodec(String codec) { Utils.checkNotNull(codec, "codec"); this.codec = codec; return this; } - public Stream withColorPrimaries(Object colorPrimaries) { + /** + * Color primaries used. + */ + public Stream withColorPrimaries(String colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = Optional.ofNullable(colorPrimaries); return this; } - public Stream withColorPrimaries(Optional colorPrimaries) { + /** + * Color primaries used. + */ + public Stream withColorPrimaries(Optional colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = colorPrimaries; return this; } - public Stream withColorRange(Object colorRange) { + /** + * Color range (e.g., tv). + */ + public Stream withColorRange(String colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = Optional.ofNullable(colorRange); return this; } - public Stream withColorRange(Optional colorRange) { + /** + * Color range (e.g., tv). + */ + public Stream withColorRange(Optional colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = colorRange; return this; } - public Stream withColorSpace(Object colorSpace) { + /** + * Color space. + */ + public Stream withColorSpace(String colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = Optional.ofNullable(colorSpace); return this; } - public Stream withColorSpace(Optional colorSpace) { + /** + * Color space. + */ + public Stream withColorSpace(Optional colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = colorSpace; return this; } - public Stream withColorTrc(Object colorTrc) { + /** + * Color transfer characteristics. + */ + public Stream withColorTrc(String colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = Optional.ofNullable(colorTrc); return this; } - public Stream withColorTrc(Optional colorTrc) { + /** + * Color transfer characteristics. + */ + public Stream withColorTrc(Optional colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = colorTrc; return this; } /** - * A friendly name for the stream, often comprised of the language and codec information + * Display title for the stream. */ - public Stream withDisplayTitle(Object displayTitle) { - Utils.checkNotNull(displayTitle, "displayTitle"); - this.displayTitle = Optional.ofNullable(displayTitle); - return this; - } - - - /** - * A friendly name for the stream, often comprised of the language and codec information - */ - public Stream withDisplayTitle(Optional displayTitle) { + public Stream withDisplayTitle(String displayTitle) { Utils.checkNotNull(displayTitle, "displayTitle"); this.displayTitle = displayTitle; return this; } - public Stream withFrameRate(double frameRate) { + /** + * Extended display title for the stream. + */ + public Stream withExtendedDisplayTitle(String extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = Optional.ofNullable(extendedDisplayTitle); + return this; + } + + + /** + * Extended display title for the stream. + */ + public Stream withExtendedDisplayTitle(Optional extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = extendedDisplayTitle; + return this; + } + + /** + * Frame rate of the stream. + */ + public Stream withFrameRate(float frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = Optional.ofNullable(frameRate); return this; } - public Stream withFrameRate(Optional frameRate) { + /** + * Frame rate of the stream. + */ + public Stream withFrameRate(Optional frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = frameRate; return this; } - public Stream withHasScalingMatrix(Object hasScalingMatrix) { + public Stream withHasScalingMatrix(boolean hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = Optional.ofNullable(hasScalingMatrix); return this; } - public Stream withHasScalingMatrix(Optional hasScalingMatrix) { + public Stream withHasScalingMatrix(Optional hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = hasScalingMatrix; return this; } - public Stream withHeight(long height) { + /** + * Height of the video stream. + */ + public Stream withHeight(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public Stream withHeight(Optional height) { + /** + * Height of the video stream. + */ + public Stream withHeight(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; } - public Stream withId(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - - public Stream withId(Optional id) { + /** + * Unique stream identifier. + */ + public Stream withId(int id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public Stream withIndex(long index) { + public Stream withIndex(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; @@ -736,50 +1517,46 @@ public class Stream { /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public Stream withIndex(Optional index) { + public Stream withIndex(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; } /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. */ - public Stream withKey(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - - /** - * If the stream is independently streamable, the key from which it can be streamed - */ - public Stream withKey(Optional key) { + public Stream withKey(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - public Stream withLanguage(Object language) { + /** + * Language of the stream. + */ + public Stream withLanguage(String language) { Utils.checkNotNull(language, "language"); this.language = Optional.ofNullable(language); return this; } - public Stream withLanguage(Optional language) { + /** + * Language of the stream. + */ + public Stream withLanguage(Optional language) { Utils.checkNotNull(language, "language"); this.language = language; return this; } /** - * The three character language code for the stream contents + * ISO language code. */ - public Stream withLanguageCode(Object languageCode) { + public Stream withLanguageCode(String languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = Optional.ofNullable(languageCode); return this; @@ -787,66 +1564,195 @@ public class Stream { /** - * The three character language code for the stream contents + * ISO language code. */ - public Stream withLanguageCode(Optional languageCode) { + public Stream withLanguageCode(Optional languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = languageCode; return this; } - public Stream withLevel(long level) { + /** + * Language tag (e.g., en). + */ + public Stream withLanguageTag(String languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = Optional.ofNullable(languageTag); + return this; + } + + + /** + * Language tag (e.g., en). + */ + public Stream withLanguageTag(Optional languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = languageTag; + return this; + } + + /** + * Format of the stream (e.g., srt). + */ + public Stream withFormat(String format) { + Utils.checkNotNull(format, "format"); + this.format = Optional.ofNullable(format); + return this; + } + + + /** + * Format of the stream (e.g., srt). + */ + public Stream withFormat(Optional format) { + Utils.checkNotNull(format, "format"); + this.format = format; + return this; + } + + /** + * Indicates whether header compression is enabled. + */ + public Stream withHeaderCompression(boolean headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = Optional.ofNullable(headerCompression); + return this; + } + + + /** + * Indicates whether header compression is enabled. + */ + public Stream withHeaderCompression(Optional headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = headerCompression; + return this; + } + + /** + * Video level. + */ + public Stream withLevel(int level) { Utils.checkNotNull(level, "level"); this.level = Optional.ofNullable(level); return this; } - public Stream withLevel(Optional level) { + /** + * Video level. + */ + public Stream withLevel(Optional level) { Utils.checkNotNull(level, "level"); this.level = level; return this; } - public Stream withProfile(Object profile) { + /** + * Indicates if this is the original stream. + */ + public Stream withOriginal(boolean original) { + Utils.checkNotNull(original, "original"); + this.original = Optional.ofNullable(original); + return this; + } + + + /** + * Indicates if this is the original stream. + */ + public Stream withOriginal(Optional original) { + Utils.checkNotNull(original, "original"); + this.original = original; + return this; + } + + /** + * Video profile. + */ + public Stream withProfile(String profile) { Utils.checkNotNull(profile, "profile"); this.profile = Optional.ofNullable(profile); return this; } - public Stream withProfile(Optional profile) { + /** + * Video profile. + */ + public Stream withProfile(Optional profile) { Utils.checkNotNull(profile, "profile"); this.profile = profile; return this; } - public Stream withRefFrames(long refFrames) { + /** + * Number of reference frames. + */ + public Stream withRefFrames(int refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = Optional.ofNullable(refFrames); return this; } - public Stream withRefFrames(Optional refFrames) { + /** + * Number of reference frames. + */ + public Stream withRefFrames(Optional refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = refFrames; return this; } - public Stream withSamplingRate(long samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public Stream withSamplingRate(int samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = Optional.ofNullable(samplingRate); return this; } - public Stream withSamplingRate(Optional samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public Stream withSamplingRate(Optional samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = samplingRate; return this; } + public Stream withScanType(String scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = Optional.ofNullable(scanType); + return this; + } + + + public Stream withScanType(Optional scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = scanType; + return this; + } + + public Stream withEmbeddedInVideo(String embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = Optional.ofNullable(embeddedInVideo); + return this; + } + + + public Stream withEmbeddedInVideo(Optional embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = embeddedInVideo; + return this; + } + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public Stream withSelected(boolean selected) { Utils.checkNotNull(selected, "selected"); this.selected = Optional.ofNullable(selected); @@ -854,52 +1760,112 @@ public class Stream { } + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public Stream withSelected(Optional selected) { Utils.checkNotNull(selected, "selected"); this.selected = selected; return this; } - public Stream withStreamIdentifier(long streamIdentifier) { + public Stream withForced(boolean forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = Optional.ofNullable(forced); + return this; + } + + + public Stream withForced(Optional forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = forced; + return this; + } + + /** + * Indicates if the stream is for the hearing impaired. + */ + public Stream withHearingImpaired(boolean hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = Optional.ofNullable(hearingImpaired); + return this; + } + + + /** + * Indicates if the stream is for the hearing impaired. + */ + public Stream withHearingImpaired(Optional hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = hearingImpaired; + return this; + } + + /** + * Indicates if the stream is a dub. + */ + public Stream withDub(boolean dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = Optional.ofNullable(dub); + return this; + } + + + /** + * Indicates if the stream is a dub. + */ + public Stream withDub(Optional dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = dub; + return this; + } + + /** + * Optional title for the stream (e.g., language variant). + */ + public Stream withTitle(String title) { + Utils.checkNotNull(title, "title"); + this.title = Optional.ofNullable(title); + return this; + } + + + /** + * Optional title for the stream (e.g., language variant). + */ + public Stream withTitle(Optional title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + public Stream withStreamIdentifier(int streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = Optional.ofNullable(streamIdentifier); return this; } - public Stream withStreamIdentifier(Optional streamIdentifier) { + public Stream withStreamIdentifier(Optional streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = streamIdentifier; return this; } /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Width of the video stream. */ - public Stream withStreamType(long streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = Optional.ofNullable(streamType); - return this; - } - - - /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics - */ - public Stream withStreamType(Optional streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = streamType; - return this; - } - - public Stream withWidth(long width) { + public Stream withWidth(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public Stream withWidth(Optional width) { + /** + * Width of the video stream. + */ + public Stream withWidth(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; @@ -930,17 +1896,30 @@ public class Stream { return Utils.enhancedDeepEquals(this.default_, other.default_) && Utils.enhancedDeepEquals(this.audioChannelLayout, other.audioChannelLayout) && + Utils.enhancedDeepEquals(this.channels, other.channels) && Utils.enhancedDeepEquals(this.bitDepth, other.bitDepth) && + Utils.enhancedDeepEquals(this.doviblCompatID, other.doviblCompatID) && + Utils.enhancedDeepEquals(this.doviblPresent, other.doviblPresent) && + Utils.enhancedDeepEquals(this.dovielPresent, other.dovielPresent) && + Utils.enhancedDeepEquals(this.doviLevel, other.doviLevel) && + Utils.enhancedDeepEquals(this.doviPresent, other.doviPresent) && + Utils.enhancedDeepEquals(this.doviProfile, other.doviProfile) && + Utils.enhancedDeepEquals(this.dovirpuPresent, other.dovirpuPresent) && + Utils.enhancedDeepEquals(this.doviVersion, other.doviVersion) && Utils.enhancedDeepEquals(this.bitrate, other.bitrate) && Utils.enhancedDeepEquals(this.canAutoSync, other.canAutoSync) && Utils.enhancedDeepEquals(this.chromaLocation, other.chromaLocation) && Utils.enhancedDeepEquals(this.chromaSubsampling, other.chromaSubsampling) && + Utils.enhancedDeepEquals(this.codedHeight, other.codedHeight) && + Utils.enhancedDeepEquals(this.codedWidth, other.codedWidth) && + Utils.enhancedDeepEquals(this.closedCaptions, other.closedCaptions) && Utils.enhancedDeepEquals(this.codec, other.codec) && Utils.enhancedDeepEquals(this.colorPrimaries, other.colorPrimaries) && Utils.enhancedDeepEquals(this.colorRange, other.colorRange) && Utils.enhancedDeepEquals(this.colorSpace, other.colorSpace) && Utils.enhancedDeepEquals(this.colorTrc, other.colorTrc) && Utils.enhancedDeepEquals(this.displayTitle, other.displayTitle) && + Utils.enhancedDeepEquals(this.extendedDisplayTitle, other.extendedDisplayTitle) && Utils.enhancedDeepEquals(this.frameRate, other.frameRate) && Utils.enhancedDeepEquals(this.hasScalingMatrix, other.hasScalingMatrix) && Utils.enhancedDeepEquals(this.height, other.height) && @@ -949,11 +1928,21 @@ public class Stream { Utils.enhancedDeepEquals(this.key, other.key) && Utils.enhancedDeepEquals(this.language, other.language) && Utils.enhancedDeepEquals(this.languageCode, other.languageCode) && + Utils.enhancedDeepEquals(this.languageTag, other.languageTag) && + Utils.enhancedDeepEquals(this.format, other.format) && + Utils.enhancedDeepEquals(this.headerCompression, other.headerCompression) && Utils.enhancedDeepEquals(this.level, other.level) && + Utils.enhancedDeepEquals(this.original, other.original) && Utils.enhancedDeepEquals(this.profile, other.profile) && Utils.enhancedDeepEquals(this.refFrames, other.refFrames) && Utils.enhancedDeepEquals(this.samplingRate, other.samplingRate) && + Utils.enhancedDeepEquals(this.scanType, other.scanType) && + Utils.enhancedDeepEquals(this.embeddedInVideo, other.embeddedInVideo) && Utils.enhancedDeepEquals(this.selected, other.selected) && + Utils.enhancedDeepEquals(this.forced, other.forced) && + Utils.enhancedDeepEquals(this.hearingImpaired, other.hearingImpaired) && + Utils.enhancedDeepEquals(this.dub, other.dub) && + Utils.enhancedDeepEquals(this.title, other.title) && Utils.enhancedDeepEquals(this.streamIdentifier, other.streamIdentifier) && Utils.enhancedDeepEquals(this.streamType, other.streamType) && Utils.enhancedDeepEquals(this.width, other.width) && @@ -963,16 +1952,24 @@ public class Stream { @Override public int hashCode() { return Utils.enhancedHash( - default_, audioChannelLayout, bitDepth, + default_, audioChannelLayout, channels, + bitDepth, doviblCompatID, doviblPresent, + dovielPresent, doviLevel, doviPresent, + doviProfile, dovirpuPresent, doviVersion, bitrate, canAutoSync, chromaLocation, - chromaSubsampling, codec, colorPrimaries, + chromaSubsampling, codedHeight, codedWidth, + closedCaptions, codec, colorPrimaries, colorRange, colorSpace, colorTrc, - displayTitle, frameRate, hasScalingMatrix, - height, id, index, - key, language, languageCode, - level, profile, refFrames, - samplingRate, selected, streamIdentifier, - streamType, width, additionalProperties); + displayTitle, extendedDisplayTitle, frameRate, + hasScalingMatrix, height, id, + index, key, language, + languageCode, languageTag, format, + headerCompression, level, original, + profile, refFrames, samplingRate, + scanType, embeddedInVideo, selected, + forced, hearingImpaired, dub, + title, streamIdentifier, streamType, + width, additionalProperties); } @Override @@ -980,17 +1977,30 @@ public class Stream { return Utils.toString(Stream.class, "default_", default_, "audioChannelLayout", audioChannelLayout, + "channels", channels, "bitDepth", bitDepth, + "doviblCompatID", doviblCompatID, + "doviblPresent", doviblPresent, + "dovielPresent", dovielPresent, + "doviLevel", doviLevel, + "doviPresent", doviPresent, + "doviProfile", doviProfile, + "dovirpuPresent", dovirpuPresent, + "doviVersion", doviVersion, "bitrate", bitrate, "canAutoSync", canAutoSync, "chromaLocation", chromaLocation, "chromaSubsampling", chromaSubsampling, + "codedHeight", codedHeight, + "codedWidth", codedWidth, + "closedCaptions", closedCaptions, "codec", codec, "colorPrimaries", colorPrimaries, "colorRange", colorRange, "colorSpace", colorSpace, "colorTrc", colorTrc, "displayTitle", displayTitle, + "extendedDisplayTitle", extendedDisplayTitle, "frameRate", frameRate, "hasScalingMatrix", hasScalingMatrix, "height", height, @@ -999,11 +2009,21 @@ public class Stream { "key", key, "language", language, "languageCode", languageCode, + "languageTag", languageTag, + "format", format, + "headerCompression", headerCompression, "level", level, + "original", original, "profile", profile, "refFrames", refFrames, "samplingRate", samplingRate, + "scanType", scanType, + "embeddedInVideo", embeddedInVideo, "selected", selected, + "forced", forced, + "hearingImpaired", hearingImpaired, + "dub", dub, + "title", title, "streamIdentifier", streamIdentifier, "streamType", streamType, "width", width, @@ -1015,61 +2035,105 @@ public class Stream { private Optional default_ = Optional.empty(); - private Optional audioChannelLayout = Optional.empty(); + private Optional audioChannelLayout = Optional.empty(); - private Optional bitDepth = Optional.empty(); + private Optional channels = Optional.empty(); - private Optional bitrate = Optional.empty(); + private Optional bitDepth = Optional.empty(); + + private Optional doviblCompatID = Optional.empty(); + + private Optional doviblPresent = Optional.empty(); + + private Optional dovielPresent = Optional.empty(); + + private Optional doviLevel = Optional.empty(); + + private Optional doviPresent = Optional.empty(); + + private Optional doviProfile = Optional.empty(); + + private Optional dovirpuPresent = Optional.empty(); + + private Optional doviVersion = Optional.empty(); + + private Optional bitrate = Optional.empty(); private Optional canAutoSync = Optional.empty(); - private Optional chromaLocation = Optional.empty(); + private Optional chromaLocation = Optional.empty(); - private Optional chromaSubsampling = Optional.empty(); + private Optional chromaSubsampling = Optional.empty(); - private Optional codec = Optional.empty(); + private Optional codedHeight = Optional.empty(); - private Optional colorPrimaries = Optional.empty(); + private Optional codedWidth = Optional.empty(); - private Optional colorRange = Optional.empty(); + private Optional closedCaptions = Optional.empty(); - private Optional colorSpace = Optional.empty(); + private String codec; - private Optional colorTrc = Optional.empty(); + private Optional colorPrimaries = Optional.empty(); - private Optional displayTitle = Optional.empty(); + private Optional colorRange = Optional.empty(); - private Optional frameRate = Optional.empty(); + private Optional colorSpace = Optional.empty(); - private Optional hasScalingMatrix = Optional.empty(); + private Optional colorTrc = Optional.empty(); - private Optional height = Optional.empty(); + private String displayTitle; - private Optional id = Optional.empty(); + private Optional extendedDisplayTitle = Optional.empty(); - private Optional index = Optional.empty(); + private Optional frameRate = Optional.empty(); - private Optional key = Optional.empty(); + private Optional hasScalingMatrix = Optional.empty(); - private Optional language = Optional.empty(); + private Optional height = Optional.empty(); - private Optional languageCode = Optional.empty(); + private Integer id; - private Optional level = Optional.empty(); + private Optional index = Optional.empty(); - private Optional profile = Optional.empty(); + private String key; - private Optional refFrames = Optional.empty(); + private Optional language = Optional.empty(); - private Optional samplingRate = Optional.empty(); + private Optional languageCode = Optional.empty(); + + private Optional languageTag = Optional.empty(); + + private Optional format = Optional.empty(); + + private Optional headerCompression = Optional.empty(); + + private Optional level = Optional.empty(); + + private Optional original = Optional.empty(); + + private Optional profile = Optional.empty(); + + private Optional refFrames = Optional.empty(); + + private Optional samplingRate = Optional.empty(); + + private Optional scanType = Optional.empty(); + + private Optional embeddedInVideo = Optional.empty(); private Optional selected = Optional.empty(); - private Optional streamIdentifier = Optional.empty(); + private Optional forced = Optional.empty(); - private Optional streamType = Optional.empty(); + private Optional hearingImpaired = Optional.empty(); - private Optional width = Optional.empty(); + private Optional dub = Optional.empty(); + + private Optional title = Optional.empty(); + + private Optional streamIdentifier = Optional.empty(); + + private Optional width = Optional.empty(); private Map additionalProperties = new HashMap<>(); @@ -1078,12 +2142,18 @@ public class Stream { } + /** + * Indicates if this stream is default. + */ public Builder default_(boolean default_) { Utils.checkNotNull(default_, "default_"); this.default_ = Optional.ofNullable(default_); return this; } + /** + * Indicates if this stream is default. + */ public Builder default_(Optional default_) { Utils.checkNotNull(default_, "default_"); this.default_ = default_; @@ -1091,39 +2161,228 @@ public class Stream { } - public Builder audioChannelLayout(Object audioChannelLayout) { + /** + * Audio channel layout. + */ + public Builder audioChannelLayout(String audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = Optional.ofNullable(audioChannelLayout); return this; } - public Builder audioChannelLayout(Optional audioChannelLayout) { + /** + * Audio channel layout. + */ + public Builder audioChannelLayout(Optional audioChannelLayout) { Utils.checkNotNull(audioChannelLayout, "audioChannelLayout"); this.audioChannelLayout = audioChannelLayout; return this; } - public Builder bitDepth(long bitDepth) { + /** + * Number of audio channels (for audio streams). + */ + public Builder channels(int channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = Optional.ofNullable(channels); + return this; + } + + /** + * Number of audio channels (for audio streams). + */ + public Builder channels(Optional channels) { + Utils.checkNotNull(channels, "channels"); + this.channels = channels; + return this; + } + + + /** + * Bit depth of the video stream. + */ + public Builder bitDepth(int bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = Optional.ofNullable(bitDepth); return this; } - public Builder bitDepth(Optional bitDepth) { + /** + * Bit depth of the video stream. + */ + public Builder bitDepth(Optional bitDepth) { Utils.checkNotNull(bitDepth, "bitDepth"); this.bitDepth = bitDepth; return this; } - public Builder bitrate(long bitrate) { + /** + * Dolby Vision BL compatibility ID. + */ + public Builder doviblCompatID(int doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = Optional.ofNullable(doviblCompatID); + return this; + } + + /** + * Dolby Vision BL compatibility ID. + */ + public Builder doviblCompatID(Optional doviblCompatID) { + Utils.checkNotNull(doviblCompatID, "doviblCompatID"); + this.doviblCompatID = doviblCompatID; + return this; + } + + + /** + * Indicates if Dolby Vision BL is present. + */ + public Builder doviblPresent(boolean doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = Optional.ofNullable(doviblPresent); + return this; + } + + /** + * Indicates if Dolby Vision BL is present. + */ + public Builder doviblPresent(Optional doviblPresent) { + Utils.checkNotNull(doviblPresent, "doviblPresent"); + this.doviblPresent = doviblPresent; + return this; + } + + + /** + * Indicates if Dolby Vision EL is present. + */ + public Builder dovielPresent(boolean dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = Optional.ofNullable(dovielPresent); + return this; + } + + /** + * Indicates if Dolby Vision EL is present. + */ + public Builder dovielPresent(Optional dovielPresent) { + Utils.checkNotNull(dovielPresent, "dovielPresent"); + this.dovielPresent = dovielPresent; + return this; + } + + + /** + * Dolby Vision level. + */ + public Builder doviLevel(int doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = Optional.ofNullable(doviLevel); + return this; + } + + /** + * Dolby Vision level. + */ + public Builder doviLevel(Optional doviLevel) { + Utils.checkNotNull(doviLevel, "doviLevel"); + this.doviLevel = doviLevel; + return this; + } + + + /** + * Indicates if Dolby Vision is present. + */ + public Builder doviPresent(boolean doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = Optional.ofNullable(doviPresent); + return this; + } + + /** + * Indicates if Dolby Vision is present. + */ + public Builder doviPresent(Optional doviPresent) { + Utils.checkNotNull(doviPresent, "doviPresent"); + this.doviPresent = doviPresent; + return this; + } + + + /** + * Dolby Vision profile. + */ + public Builder doviProfile(int doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = Optional.ofNullable(doviProfile); + return this; + } + + /** + * Dolby Vision profile. + */ + public Builder doviProfile(Optional doviProfile) { + Utils.checkNotNull(doviProfile, "doviProfile"); + this.doviProfile = doviProfile; + return this; + } + + + /** + * Indicates if Dolby Vision RPU is present. + */ + public Builder dovirpuPresent(boolean dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = Optional.ofNullable(dovirpuPresent); + return this; + } + + /** + * Indicates if Dolby Vision RPU is present. + */ + public Builder dovirpuPresent(Optional dovirpuPresent) { + Utils.checkNotNull(dovirpuPresent, "dovirpuPresent"); + this.dovirpuPresent = dovirpuPresent; + return this; + } + + + /** + * Dolby Vision version. + */ + public Builder doviVersion(String doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = Optional.ofNullable(doviVersion); + return this; + } + + /** + * Dolby Vision version. + */ + public Builder doviVersion(Optional doviVersion) { + Utils.checkNotNull(doviVersion, "doviVersion"); + this.doviVersion = doviVersion; + return this; + } + + + /** + * Bitrate of the stream. + */ + public Builder bitrate(int bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = Optional.ofNullable(bitrate); return this; } - public Builder bitrate(Optional bitrate) { + /** + * Bitrate of the stream. + */ + public Builder bitrate(Optional bitrate) { Utils.checkNotNull(bitrate, "bitrate"); this.bitrate = bitrate; return this; @@ -1131,7 +2390,7 @@ public class Stream { /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public Builder canAutoSync(boolean canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -1140,7 +2399,7 @@ public class Stream { } /** - * For subtitle streams only. If `true` then the server can attempt to automatically sync the subtitle timestamps with the video. + * Indicates if the stream can auto-sync. */ public Builder canAutoSync(Optional canAutoSync) { Utils.checkNotNull(canAutoSync, "canAutoSync"); @@ -1149,26 +2408,38 @@ public class Stream { } - public Builder chromaLocation(Object chromaLocation) { + /** + * Chroma sample location. + */ + public Builder chromaLocation(String chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = Optional.ofNullable(chromaLocation); return this; } - public Builder chromaLocation(Optional chromaLocation) { + /** + * Chroma sample location. + */ + public Builder chromaLocation(Optional chromaLocation) { Utils.checkNotNull(chromaLocation, "chromaLocation"); this.chromaLocation = chromaLocation; return this; } - public Builder chromaSubsampling(Object chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public Builder chromaSubsampling(String chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = Optional.ofNullable(chromaSubsampling); return this; } - public Builder chromaSubsampling(Optional chromaSubsampling) { + /** + * Chroma subsampling format. + */ + public Builder chromaSubsampling(Optional chromaSubsampling) { Utils.checkNotNull(chromaSubsampling, "chromaSubsampling"); this.chromaSubsampling = chromaSubsampling; return this; @@ -1176,70 +2447,136 @@ public class Stream { /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public Builder codec(Object codec) { - Utils.checkNotNull(codec, "codec"); - this.codec = Optional.ofNullable(codec); + public Builder codedHeight(int codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = Optional.ofNullable(codedHeight); return this; } /** - * The codec of the stream, such as `h264` or `aac` + * Coded video height. */ - public Builder codec(Optional codec) { + public Builder codedHeight(Optional codedHeight) { + Utils.checkNotNull(codedHeight, "codedHeight"); + this.codedHeight = codedHeight; + return this; + } + + + /** + * Coded video width. + */ + public Builder codedWidth(int codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = Optional.ofNullable(codedWidth); + return this; + } + + /** + * Coded video width. + */ + public Builder codedWidth(Optional codedWidth) { + Utils.checkNotNull(codedWidth, "codedWidth"); + this.codedWidth = codedWidth; + return this; + } + + + public Builder closedCaptions(boolean closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = Optional.ofNullable(closedCaptions); + return this; + } + + public Builder closedCaptions(Optional closedCaptions) { + Utils.checkNotNull(closedCaptions, "closedCaptions"); + this.closedCaptions = closedCaptions; + return this; + } + + + /** + * Codec used by the stream. + */ + public Builder codec(String codec) { Utils.checkNotNull(codec, "codec"); this.codec = codec; return this; } - public Builder colorPrimaries(Object colorPrimaries) { + /** + * Color primaries used. + */ + public Builder colorPrimaries(String colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = Optional.ofNullable(colorPrimaries); return this; } - public Builder colorPrimaries(Optional colorPrimaries) { + /** + * Color primaries used. + */ + public Builder colorPrimaries(Optional colorPrimaries) { Utils.checkNotNull(colorPrimaries, "colorPrimaries"); this.colorPrimaries = colorPrimaries; return this; } - public Builder colorRange(Object colorRange) { + /** + * Color range (e.g., tv). + */ + public Builder colorRange(String colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = Optional.ofNullable(colorRange); return this; } - public Builder colorRange(Optional colorRange) { + /** + * Color range (e.g., tv). + */ + public Builder colorRange(Optional colorRange) { Utils.checkNotNull(colorRange, "colorRange"); this.colorRange = colorRange; return this; } - public Builder colorSpace(Object colorSpace) { + /** + * Color space. + */ + public Builder colorSpace(String colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = Optional.ofNullable(colorSpace); return this; } - public Builder colorSpace(Optional colorSpace) { + /** + * Color space. + */ + public Builder colorSpace(Optional colorSpace) { Utils.checkNotNull(colorSpace, "colorSpace"); this.colorSpace = colorSpace; return this; } - public Builder colorTrc(Object colorTrc) { + /** + * Color transfer characteristics. + */ + public Builder colorTrc(String colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = Optional.ofNullable(colorTrc); return this; } - public Builder colorTrc(Optional colorTrc) { + /** + * Color transfer characteristics. + */ + public Builder colorTrc(Optional colorTrc) { Utils.checkNotNull(colorTrc, "colorTrc"); this.colorTrc = colorTrc; return this; @@ -1247,70 +2584,89 @@ public class Stream { /** - * A friendly name for the stream, often comprised of the language and codec information + * Display title for the stream. */ - public Builder displayTitle(Object displayTitle) { - Utils.checkNotNull(displayTitle, "displayTitle"); - this.displayTitle = Optional.ofNullable(displayTitle); - return this; - } - - /** - * A friendly name for the stream, often comprised of the language and codec information - */ - public Builder displayTitle(Optional displayTitle) { + public Builder displayTitle(String displayTitle) { Utils.checkNotNull(displayTitle, "displayTitle"); this.displayTitle = displayTitle; return this; } - public Builder frameRate(double frameRate) { + /** + * Extended display title for the stream. + */ + public Builder extendedDisplayTitle(String extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = Optional.ofNullable(extendedDisplayTitle); + return this; + } + + /** + * Extended display title for the stream. + */ + public Builder extendedDisplayTitle(Optional extendedDisplayTitle) { + Utils.checkNotNull(extendedDisplayTitle, "extendedDisplayTitle"); + this.extendedDisplayTitle = extendedDisplayTitle; + return this; + } + + + /** + * Frame rate of the stream. + */ + public Builder frameRate(float frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = Optional.ofNullable(frameRate); return this; } - public Builder frameRate(Optional frameRate) { + /** + * Frame rate of the stream. + */ + public Builder frameRate(Optional frameRate) { Utils.checkNotNull(frameRate, "frameRate"); this.frameRate = frameRate; return this; } - public Builder hasScalingMatrix(Object hasScalingMatrix) { + public Builder hasScalingMatrix(boolean hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = Optional.ofNullable(hasScalingMatrix); return this; } - public Builder hasScalingMatrix(Optional hasScalingMatrix) { + public Builder hasScalingMatrix(Optional hasScalingMatrix) { Utils.checkNotNull(hasScalingMatrix, "hasScalingMatrix"); this.hasScalingMatrix = hasScalingMatrix; return this; } - public Builder height(long height) { + /** + * Height of the video stream. + */ + public Builder height(int height) { Utils.checkNotNull(height, "height"); this.height = Optional.ofNullable(height); return this; } - public Builder height(Optional height) { + /** + * Height of the video stream. + */ + public Builder height(Optional height) { Utils.checkNotNull(height, "height"); this.height = height; return this; } - public Builder id(long id) { - Utils.checkNotNull(id, "id"); - this.id = Optional.ofNullable(id); - return this; - } - - public Builder id(Optional id) { + /** + * Unique stream identifier. + */ + public Builder id(int id) { Utils.checkNotNull(id, "id"); this.id = id; return this; @@ -1318,18 +2674,18 @@ public class Stream { /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public Builder index(long index) { + public Builder index(int index) { Utils.checkNotNull(index, "index"); this.index = Optional.ofNullable(index); return this; } /** - * If the stream is part of the `Part` and not an external resource, the index of the stream within that part + * Index of the stream. */ - public Builder index(Optional index) { + public Builder index(Optional index) { Utils.checkNotNull(index, "index"); this.index = index; return this; @@ -1337,31 +2693,28 @@ public class Stream { /** - * If the stream is independently streamable, the key from which it can be streamed + * Key to access this stream part. */ - public Builder key(Object key) { - Utils.checkNotNull(key, "key"); - this.key = Optional.ofNullable(key); - return this; - } - - /** - * If the stream is independently streamable, the key from which it can be streamed - */ - public Builder key(Optional key) { + public Builder key(String key) { Utils.checkNotNull(key, "key"); this.key = key; return this; } - public Builder language(Object language) { + /** + * Language of the stream. + */ + public Builder language(String language) { Utils.checkNotNull(language, "language"); this.language = Optional.ofNullable(language); return this; } - public Builder language(Optional language) { + /** + * Language of the stream. + */ + public Builder language(Optional language) { Utils.checkNotNull(language, "language"); this.language = language; return this; @@ -1369,82 +2722,214 @@ public class Stream { /** - * The three character language code for the stream contents + * ISO language code. */ - public Builder languageCode(Object languageCode) { + public Builder languageCode(String languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = Optional.ofNullable(languageCode); return this; } /** - * The three character language code for the stream contents + * ISO language code. */ - public Builder languageCode(Optional languageCode) { + public Builder languageCode(Optional languageCode) { Utils.checkNotNull(languageCode, "languageCode"); this.languageCode = languageCode; return this; } - public Builder level(long level) { + /** + * Language tag (e.g., en). + */ + public Builder languageTag(String languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = Optional.ofNullable(languageTag); + return this; + } + + /** + * Language tag (e.g., en). + */ + public Builder languageTag(Optional languageTag) { + Utils.checkNotNull(languageTag, "languageTag"); + this.languageTag = languageTag; + return this; + } + + + /** + * Format of the stream (e.g., srt). + */ + public Builder format(String format) { + Utils.checkNotNull(format, "format"); + this.format = Optional.ofNullable(format); + return this; + } + + /** + * Format of the stream (e.g., srt). + */ + public Builder format(Optional format) { + Utils.checkNotNull(format, "format"); + this.format = format; + return this; + } + + + /** + * Indicates whether header compression is enabled. + */ + public Builder headerCompression(boolean headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = Optional.ofNullable(headerCompression); + return this; + } + + /** + * Indicates whether header compression is enabled. + */ + public Builder headerCompression(Optional headerCompression) { + Utils.checkNotNull(headerCompression, "headerCompression"); + this.headerCompression = headerCompression; + return this; + } + + + /** + * Video level. + */ + public Builder level(int level) { Utils.checkNotNull(level, "level"); this.level = Optional.ofNullable(level); return this; } - public Builder level(Optional level) { + /** + * Video level. + */ + public Builder level(Optional level) { Utils.checkNotNull(level, "level"); this.level = level; return this; } - public Builder profile(Object profile) { + /** + * Indicates if this is the original stream. + */ + public Builder original(boolean original) { + Utils.checkNotNull(original, "original"); + this.original = Optional.ofNullable(original); + return this; + } + + /** + * Indicates if this is the original stream. + */ + public Builder original(Optional original) { + Utils.checkNotNull(original, "original"); + this.original = original; + return this; + } + + + /** + * Video profile. + */ + public Builder profile(String profile) { Utils.checkNotNull(profile, "profile"); this.profile = Optional.ofNullable(profile); return this; } - public Builder profile(Optional profile) { + /** + * Video profile. + */ + public Builder profile(Optional profile) { Utils.checkNotNull(profile, "profile"); this.profile = profile; return this; } - public Builder refFrames(long refFrames) { + /** + * Number of reference frames. + */ + public Builder refFrames(int refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = Optional.ofNullable(refFrames); return this; } - public Builder refFrames(Optional refFrames) { + /** + * Number of reference frames. + */ + public Builder refFrames(Optional refFrames) { Utils.checkNotNull(refFrames, "refFrames"); this.refFrames = refFrames; return this; } - public Builder samplingRate(long samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public Builder samplingRate(int samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = Optional.ofNullable(samplingRate); return this; } - public Builder samplingRate(Optional samplingRate) { + /** + * Sampling rate for the audio stream. + */ + public Builder samplingRate(Optional samplingRate) { Utils.checkNotNull(samplingRate, "samplingRate"); this.samplingRate = samplingRate; return this; } + public Builder scanType(String scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = Optional.ofNullable(scanType); + return this; + } + + public Builder scanType(Optional scanType) { + Utils.checkNotNull(scanType, "scanType"); + this.scanType = scanType; + return this; + } + + + public Builder embeddedInVideo(String embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = Optional.ofNullable(embeddedInVideo); + return this; + } + + public Builder embeddedInVideo(Optional embeddedInVideo) { + Utils.checkNotNull(embeddedInVideo, "embeddedInVideo"); + this.embeddedInVideo = embeddedInVideo; + return this; + } + + + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public Builder selected(boolean selected) { Utils.checkNotNull(selected, "selected"); this.selected = Optional.ofNullable(selected); return this; } + /** + * Indicates if this stream is selected (applicable for audio streams). + */ public Builder selected(Optional selected) { Utils.checkNotNull(selected, "selected"); this.selected = selected; @@ -1452,13 +2937,83 @@ public class Stream { } - public Builder streamIdentifier(long streamIdentifier) { + public Builder forced(boolean forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = Optional.ofNullable(forced); + return this; + } + + public Builder forced(Optional forced) { + Utils.checkNotNull(forced, "forced"); + this.forced = forced; + return this; + } + + + /** + * Indicates if the stream is for the hearing impaired. + */ + public Builder hearingImpaired(boolean hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = Optional.ofNullable(hearingImpaired); + return this; + } + + /** + * Indicates if the stream is for the hearing impaired. + */ + public Builder hearingImpaired(Optional hearingImpaired) { + Utils.checkNotNull(hearingImpaired, "hearingImpaired"); + this.hearingImpaired = hearingImpaired; + return this; + } + + + /** + * Indicates if the stream is a dub. + */ + public Builder dub(boolean dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = Optional.ofNullable(dub); + return this; + } + + /** + * Indicates if the stream is a dub. + */ + public Builder dub(Optional dub) { + Utils.checkNotNull(dub, "dub"); + this.dub = dub; + return this; + } + + + /** + * Optional title for the stream (e.g., language variant). + */ + public Builder title(String title) { + Utils.checkNotNull(title, "title"); + this.title = Optional.ofNullable(title); + return this; + } + + /** + * Optional title for the stream (e.g., language variant). + */ + public Builder title(Optional title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + + public Builder streamIdentifier(int streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = Optional.ofNullable(streamIdentifier); return this; } - public Builder streamIdentifier(Optional streamIdentifier) { + public Builder streamIdentifier(Optional streamIdentifier) { Utils.checkNotNull(streamIdentifier, "streamIdentifier"); this.streamIdentifier = streamIdentifier; return this; @@ -1466,31 +3021,18 @@ public class Stream { /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics + * Width of the video stream. */ - public Builder streamType(long streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = Optional.ofNullable(streamType); - return this; - } - - /** - * A number indicating the type of the stream. `1` for video, `2` for audio, `3` for subtitles, `4` for lyrics - */ - public Builder streamType(Optional streamType) { - Utils.checkNotNull(streamType, "streamType"); - this.streamType = streamType; - return this; - } - - - public Builder width(long width) { + public Builder width(int width) { Utils.checkNotNull(width, "width"); this.width = Optional.ofNullable(width); return this; } - public Builder width(Optional width) { + /** + * Width of the video stream. + */ + public Builder width(Optional width) { Utils.checkNotNull(width, "width"); this.width = width; return this; @@ -1515,18 +3057,31 @@ public class Stream { public Stream build() { return new Stream( - default_, audioChannelLayout, bitDepth, + default_, audioChannelLayout, channels, + bitDepth, doviblCompatID, doviblPresent, + dovielPresent, doviLevel, doviPresent, + doviProfile, dovirpuPresent, doviVersion, bitrate, canAutoSync, chromaLocation, - chromaSubsampling, codec, colorPrimaries, + chromaSubsampling, codedHeight, codedWidth, + closedCaptions, codec, colorPrimaries, colorRange, colorSpace, colorTrc, - displayTitle, frameRate, hasScalingMatrix, - height, id, index, - key, language, languageCode, - level, profile, refFrames, - samplingRate, selected, streamIdentifier, - streamType, width) + displayTitle, extendedDisplayTitle, frameRate, + hasScalingMatrix, height, id, + index, key, language, + languageCode, languageTag, format, + headerCompression, level, original, + profile, refFrames, samplingRate, + scanType, embeddedInVideo, selected, + forced, hearingImpaired, dub, + title, streamIdentifier, width) .withAdditionalProperties(additionalProperties); } + + private static final LazySingletonValue _SINGLETON_VALUE_StreamType = + new LazySingletonValue<>( + "streamType", + "1", + new TypeReference() {}); } } diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Subscription.java b/src/main/java/dev/plexapi/sdk/models/shared/Subscription.java new file mode 100644 index 00000000..2757ecb6 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/Subscription.java @@ -0,0 +1,438 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + +/** + * Subscription + * + *

If the account's Plex Pass subscription is active + */ +public class Subscription { + /** + * List of features allowed on your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("features") + private Optional> features; + + /** + * If the account's Plex Pass subscription is active + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("active") + private Optional active; + + /** + * Date the account subscribed to Plex Pass + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscribedAt") + private JsonNullable subscribedAt; + + /** + * String representation of subscriptionActive + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("paymentService") + private JsonNullable paymentService; + + /** + * Name of Plex Pass subscription plan + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("plan") + private JsonNullable plan; + + @JsonCreator + public Subscription( + @JsonProperty("features") Optional> features, + @JsonProperty("active") Optional active, + @JsonProperty("subscribedAt") JsonNullable subscribedAt, + @JsonProperty("status") Optional status, + @JsonProperty("paymentService") JsonNullable paymentService, + @JsonProperty("plan") JsonNullable plan) { + Utils.checkNotNull(features, "features"); + Utils.checkNotNull(active, "active"); + Utils.checkNotNull(subscribedAt, "subscribedAt"); + Utils.checkNotNull(status, "status"); + Utils.checkNotNull(paymentService, "paymentService"); + Utils.checkNotNull(plan, "plan"); + this.features = features; + this.active = active; + this.subscribedAt = subscribedAt; + this.status = status; + this.paymentService = paymentService; + this.plan = plan; + } + + public Subscription() { + this(Optional.empty(), Optional.empty(), JsonNullable.undefined(), + Optional.empty(), JsonNullable.undefined(), JsonNullable.undefined()); + } + + /** + * List of features allowed on your Plex Pass subscription + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> features() { + return (Optional>) features; + } + + /** + * If the account's Plex Pass subscription is active + */ + @JsonIgnore + public Optional active() { + return active; + } + + /** + * Date the account subscribed to Plex Pass + */ + @JsonIgnore + public JsonNullable subscribedAt() { + return subscribedAt; + } + + /** + * String representation of subscriptionActive + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional status() { + return (Optional) status; + } + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonIgnore + public JsonNullable paymentService() { + return paymentService; + } + + /** + * Name of Plex Pass subscription plan + */ + @JsonIgnore + public JsonNullable plan() { + return plan; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Subscription withFeatures(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Subscription withFeatures(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Subscription withActive(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Subscription withActive(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Subscription withSubscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Subscription withSubscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + /** + * String representation of subscriptionActive + */ + public Subscription withStatus(UserPlexAccountSubscriptionStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + /** + * String representation of subscriptionActive + */ + public Subscription withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Subscription withPaymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Subscription withPaymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Subscription withPlan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Subscription withPlan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Subscription other = (Subscription) o; + return + Utils.enhancedDeepEquals(this.features, other.features) && + Utils.enhancedDeepEquals(this.active, other.active) && + Utils.enhancedDeepEquals(this.subscribedAt, other.subscribedAt) && + Utils.enhancedDeepEquals(this.status, other.status) && + Utils.enhancedDeepEquals(this.paymentService, other.paymentService) && + Utils.enhancedDeepEquals(this.plan, other.plan); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + features, active, subscribedAt, + status, paymentService, plan); + } + + @Override + public String toString() { + return Utils.toString(Subscription.class, + "features", features, + "active", active, + "subscribedAt", subscribedAt, + "status", status, + "paymentService", paymentService, + "plan", plan); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> features = Optional.empty(); + + private Optional active = Optional.empty(); + + private JsonNullable subscribedAt = JsonNullable.undefined(); + + private Optional status = Optional.empty(); + + private JsonNullable paymentService = JsonNullable.undefined(); + + private JsonNullable plan = JsonNullable.undefined(); + + private Builder() { + // force use of static builder() method + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + + /** + * String representation of subscriptionActive + */ + public Builder status(UserPlexAccountSubscriptionStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + /** + * String representation of subscriptionActive + */ + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + public Subscription build() { + + return new Subscription( + features, active, subscribedAt, + status, paymentService, plan); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/Tag.java b/src/main/java/dev/plexapi/sdk/models/shared/Tag.java index c6d6731f..b1660ad3 100644 --- a/src/main/java/dev/plexapi/sdk/models/shared/Tag.java +++ b/src/main/java/dev/plexapi/sdk/models/shared/Tag.java @@ -10,11 +10,9 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import dev.plexapi.sdk.utils.Utils; import java.lang.Double; -import java.lang.Long; -import java.lang.Object; +import java.lang.Integer; import java.lang.Override; import java.lang.String; -import java.lang.SuppressWarnings; import java.util.Optional; /** @@ -40,14 +38,16 @@ public class Tag { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("filter") - private Optional filter; + private Optional filter; @JsonInclude(Include.NON_ABSENT) @JsonProperty("id") - private Optional id; - + private Optional id; + /** + * 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. + */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("ratingKey") private Optional ratingKey; @@ -57,44 +57,43 @@ public class Tag { */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("role") - private Optional role; + private Optional role; /** * The value of the tag (the name) */ - @JsonInclude(Include.NON_ABSENT) @JsonProperty("tag") - private Optional tag; + private String tag; /** * Plex identifier for this tag which can be used to fetch additional information from plex.tv */ @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagKey") - private Optional tagKey; + private Optional tagKey; @JsonInclude(Include.NON_ABSENT) @JsonProperty("tagType") - private Optional tagType; + private Optional tagType; @JsonInclude(Include.NON_ABSENT) @JsonProperty("thumb") - private Optional thumb; + private Optional thumb; @JsonCreator public Tag( @JsonProperty("confidence") Optional confidence, @JsonProperty("context") Optional context, - @JsonProperty("filter") Optional filter, - @JsonProperty("id") Optional id, + @JsonProperty("filter") Optional filter, + @JsonProperty("id") Optional id, @JsonProperty("ratingKey") Optional ratingKey, - @JsonProperty("role") Optional role, - @JsonProperty("tag") Optional tag, - @JsonProperty("tagKey") Optional tagKey, - @JsonProperty("tagType") Optional tagType, - @JsonProperty("thumb") Optional thumb) { + @JsonProperty("role") Optional role, + @JsonProperty("tag") String tag, + @JsonProperty("tagKey") Optional tagKey, + @JsonProperty("tagType") Optional tagType, + @JsonProperty("thumb") Optional thumb) { Utils.checkNotNull(confidence, "confidence"); Utils.checkNotNull(context, "context"); Utils.checkNotNull(filter, "filter"); @@ -117,10 +116,11 @@ public class Tag { this.thumb = thumb; } - public Tag() { + public Tag( + String tag) { this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), - Optional.empty(), Optional.empty(), Optional.empty(), + tag, Optional.empty(), Optional.empty(), Optional.empty()); } @@ -140,17 +140,19 @@ public class Tag { /** * A filter parameter that can be used to query for more content that matches this tag value. */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional filter() { - return (Optional) filter; + public Optional filter() { + return filter; } @JsonIgnore - public Optional id() { + public Optional id() { return id; } + /** + * 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. + */ @JsonIgnore public Optional ratingKey() { return ratingKey; @@ -159,39 +161,35 @@ public class Tag { /** * The role this actor played */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional role() { - return (Optional) role; + public Optional role() { + return role; } /** * The value of the tag (the name) */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tag() { - return (Optional) tag; + public String tag() { + return tag; } /** * Plex identifier for this tag which can be used to fetch additional information from plex.tv */ - @SuppressWarnings("unchecked") @JsonIgnore - public Optional tagKey() { - return (Optional) tagKey; + public Optional tagKey() { + return tagKey; } @JsonIgnore - public Optional tagType() { + public Optional tagType() { return tagType; } - @SuppressWarnings("unchecked") @JsonIgnore - public Optional thumb() { - return (Optional) thumb; + public Optional thumb() { + return thumb; } public static Builder builder() { @@ -234,7 +232,7 @@ public class Tag { /** * A filter parameter that can be used to query for more content that matches this tag value. */ - public Tag withFilter(Object filter) { + public Tag withFilter(String filter) { Utils.checkNotNull(filter, "filter"); this.filter = Optional.ofNullable(filter); return this; @@ -244,25 +242,28 @@ public class Tag { /** * A filter parameter that can be used to query for more content that matches this tag value. */ - public Tag withFilter(Optional filter) { + public Tag withFilter(Optional filter) { Utils.checkNotNull(filter, "filter"); this.filter = filter; return this; } - public Tag withId(long id) { + public Tag withId(int id) { Utils.checkNotNull(id, "id"); this.id = Optional.ofNullable(id); return this; } - public Tag withId(Optional id) { + public Tag withId(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } + /** + * 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. + */ public Tag withRatingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); @@ -270,6 +271,9 @@ public class Tag { } + /** + * 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. + */ public Tag withRatingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; @@ -279,7 +283,7 @@ public class Tag { /** * The role this actor played */ - public Tag withRole(Object role) { + public Tag withRole(String role) { Utils.checkNotNull(role, "role"); this.role = Optional.ofNullable(role); return this; @@ -289,7 +293,7 @@ public class Tag { /** * The role this actor played */ - public Tag withRole(Optional role) { + public Tag withRole(Optional role) { Utils.checkNotNull(role, "role"); this.role = role; return this; @@ -298,17 +302,7 @@ public class Tag { /** * The value of the tag (the name) */ - public Tag withTag(Object tag) { - Utils.checkNotNull(tag, "tag"); - this.tag = Optional.ofNullable(tag); - return this; - } - - - /** - * The value of the tag (the name) - */ - public Tag withTag(Optional tag) { + public Tag withTag(String tag) { Utils.checkNotNull(tag, "tag"); this.tag = tag; return this; @@ -317,7 +311,7 @@ public class Tag { /** * Plex identifier for this tag which can be used to fetch additional information from plex.tv */ - public Tag withTagKey(Object tagKey) { + public Tag withTagKey(String tagKey) { Utils.checkNotNull(tagKey, "tagKey"); this.tagKey = Optional.ofNullable(tagKey); return this; @@ -327,33 +321,33 @@ public class Tag { /** * Plex identifier for this tag which can be used to fetch additional information from plex.tv */ - public Tag withTagKey(Optional tagKey) { + public Tag withTagKey(Optional tagKey) { Utils.checkNotNull(tagKey, "tagKey"); this.tagKey = tagKey; return this; } - public Tag withTagType(long tagType) { + public Tag withTagType(int tagType) { Utils.checkNotNull(tagType, "tagType"); this.tagType = Optional.ofNullable(tagType); return this; } - public Tag withTagType(Optional tagType) { + public Tag withTagType(Optional tagType) { Utils.checkNotNull(tagType, "tagType"); this.tagType = tagType; return this; } - public Tag withThumb(Object thumb) { + public Tag withThumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; } - public Tag withThumb(Optional thumb) { + public Tag withThumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; @@ -412,21 +406,21 @@ public class Tag { private Optional context = Optional.empty(); - private Optional filter = Optional.empty(); + private Optional filter = Optional.empty(); - private Optional id = Optional.empty(); + private Optional id = Optional.empty(); private Optional ratingKey = Optional.empty(); - private Optional role = Optional.empty(); + private Optional role = Optional.empty(); - private Optional tag = Optional.empty(); + private String tag; - private Optional tagKey = Optional.empty(); + private Optional tagKey = Optional.empty(); - private Optional tagType = Optional.empty(); + private Optional tagType = Optional.empty(); - private Optional thumb = Optional.empty(); + private Optional thumb = Optional.empty(); private Builder() { // force use of static builder() method @@ -468,7 +462,7 @@ public class Tag { /** * A filter parameter that can be used to query for more content that matches this tag value. */ - public Builder filter(Object filter) { + public Builder filter(String filter) { Utils.checkNotNull(filter, "filter"); this.filter = Optional.ofNullable(filter); return this; @@ -477,32 +471,38 @@ public class Tag { /** * A filter parameter that can be used to query for more content that matches this tag value. */ - public Builder filter(Optional filter) { + public Builder filter(Optional filter) { Utils.checkNotNull(filter, "filter"); this.filter = filter; return this; } - public Builder id(long id) { + public Builder id(int id) { Utils.checkNotNull(id, "id"); this.id = Optional.ofNullable(id); return this; } - public Builder id(Optional id) { + public Builder id(Optional id) { Utils.checkNotNull(id, "id"); this.id = id; return this; } + /** + * 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. + */ public Builder ratingKey(String ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = Optional.ofNullable(ratingKey); return this; } + /** + * 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. + */ public Builder ratingKey(Optional ratingKey) { Utils.checkNotNull(ratingKey, "ratingKey"); this.ratingKey = ratingKey; @@ -513,7 +513,7 @@ public class Tag { /** * The role this actor played */ - public Builder role(Object role) { + public Builder role(String role) { Utils.checkNotNull(role, "role"); this.role = Optional.ofNullable(role); return this; @@ -522,7 +522,7 @@ public class Tag { /** * The role this actor played */ - public Builder role(Optional role) { + public Builder role(Optional role) { Utils.checkNotNull(role, "role"); this.role = role; return this; @@ -532,16 +532,7 @@ public class Tag { /** * The value of the tag (the name) */ - public Builder tag(Object tag) { - Utils.checkNotNull(tag, "tag"); - this.tag = Optional.ofNullable(tag); - return this; - } - - /** - * The value of the tag (the name) - */ - public Builder tag(Optional tag) { + public Builder tag(String tag) { Utils.checkNotNull(tag, "tag"); this.tag = tag; return this; @@ -551,7 +542,7 @@ public class Tag { /** * Plex identifier for this tag which can be used to fetch additional information from plex.tv */ - public Builder tagKey(Object tagKey) { + public Builder tagKey(String tagKey) { Utils.checkNotNull(tagKey, "tagKey"); this.tagKey = Optional.ofNullable(tagKey); return this; @@ -560,33 +551,33 @@ public class Tag { /** * Plex identifier for this tag which can be used to fetch additional information from plex.tv */ - public Builder tagKey(Optional tagKey) { + public Builder tagKey(Optional tagKey) { Utils.checkNotNull(tagKey, "tagKey"); this.tagKey = tagKey; return this; } - public Builder tagType(long tagType) { + public Builder tagType(int tagType) { Utils.checkNotNull(tagType, "tagType"); this.tagType = Optional.ofNullable(tagType); return this; } - public Builder tagType(Optional tagType) { + public Builder tagType(Optional tagType) { Utils.checkNotNull(tagType, "tagType"); this.tagType = tagType; return this; } - public Builder thumb(Object thumb) { + public Builder thumb(String thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = Optional.ofNullable(thumb); return this; } - public Builder thumb(Optional thumb) { + public Builder thumb(Optional thumb) { Utils.checkNotNull(thumb, "thumb"); this.thumb = thumb; return this; diff --git a/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccount.java b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccount.java new file mode 100644 index 00000000..76217973 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccount.java @@ -0,0 +1,2458 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Deprecated; +import java.lang.Integer; +import java.lang.Long; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + + +public class UserPlexAccount { + /** + * Unknown + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("adsConsent") + private JsonNullable adsConsent; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("adsConsentReminderAt") + private JsonNullable adsConsentReminderAt; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("adsConsentSetAt") + private JsonNullable adsConsentSetAt; + + /** + * Unknown + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("anonymous") + private JsonNullable anonymous; + + /** + * The account token + */ + @JsonProperty("authToken") + private String authToken; + + /** + * If the two-factor authentication backup codes have been created + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("backupCodesCreated") + private Optional backupCodesCreated; + + /** + * If the account has been confirmed + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("confirmed") + private Optional confirmed; + + /** + * The account country + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("country") + private Optional country; + + /** + * The account email address + */ + @JsonProperty("email") + private String email; + + /** + * If login with email only is enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("emailOnlyAuth") + private Optional emailOnlyAuth; + + /** + * If experimental features are enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("experimentalFeatures") + private Optional experimentalFeatures; + + /** + * Your account full name + */ + @JsonProperty("friendlyName") + private String friendlyName; + + /** + * List of devices your allowed to use with this account + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("entitlements") + private Optional> entitlements; + + /** + * If the account is a Plex Home guest user + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("guest") + private Optional guest; + + /** + * If the account has a password + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("hasPassword") + private Optional hasPassword; + + /** + * If the account is a Plex Home user + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("home") + private Optional home; + + /** + * If the account is the Plex Home admin + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("homeAdmin") + private Optional homeAdmin; + + /** + * The number of accounts in the Plex Home + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("homeSize") + private Optional homeSize; + + /** + * The Plex account ID + */ + @JsonProperty("id") + private int id; + + /** + * Unix epoch datetime in seconds + */ + @JsonProperty("joinedAt") + private long joinedAt; + + /** + * The account locale + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("locale") + private JsonNullable locale; + + /** + * If you are subscribed to the Plex newsletter + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("mailingListActive") + private Optional mailingListActive; + + /** + * Your current mailing list status + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("mailingListStatus") + private Optional mailingListStatus; + + /** + * The maximum number of accounts allowed in the Plex Home + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("maxHomeSize") + private Optional maxHomeSize; + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("pin") + @Deprecated + private Optional pin; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("profile") + private Optional profile; + + /** + * If the account has a Plex Home PIN enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("protected") + private Optional protected_; + + /** + * Unix epoch datetime in seconds + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("rememberExpiresAt") + private Optional rememberExpiresAt; + + /** + * If the account is a Plex Home managed user + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("restricted") + private Optional restricted; + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("roles") + private Optional> roles; + + /** + * Unknown + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("scrobbleTypes") + private Optional scrobbleTypes; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("services") + private Optional> services; + + /** + * If the account's Plex Pass subscription is active + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscription") + private Optional subscription; + + /** + * Description of the Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscriptionDescription") + private JsonNullable subscriptionDescription; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscriptions") + private Optional> subscriptions; + + /** + * URL of the account thumbnail + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("thumb") + private Optional thumb; + + /** + * The title of the account (username or friendly name) + */ + @JsonProperty("title") + private String title; + + /** + * If two-factor authentication is enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("twoFactorEnabled") + private Optional twoFactorEnabled; + + /** + * The account username + */ + @JsonProperty("username") + private String username; + + /** + * The account UUID + */ + @JsonProperty("uuid") + private String uuid; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("attributionPartner") + private JsonNullable attributionPartner; + + @JsonCreator + public UserPlexAccount( + @JsonProperty("adsConsent") JsonNullable adsConsent, + @JsonProperty("adsConsentReminderAt") JsonNullable adsConsentReminderAt, + @JsonProperty("adsConsentSetAt") JsonNullable adsConsentSetAt, + @JsonProperty("anonymous") JsonNullable anonymous, + @JsonProperty("authToken") String authToken, + @JsonProperty("backupCodesCreated") Optional backupCodesCreated, + @JsonProperty("confirmed") Optional confirmed, + @JsonProperty("country") Optional country, + @JsonProperty("email") String email, + @JsonProperty("emailOnlyAuth") Optional emailOnlyAuth, + @JsonProperty("experimentalFeatures") Optional experimentalFeatures, + @JsonProperty("friendlyName") String friendlyName, + @JsonProperty("entitlements") Optional> entitlements, + @JsonProperty("guest") Optional guest, + @JsonProperty("hasPassword") Optional hasPassword, + @JsonProperty("home") Optional home, + @JsonProperty("homeAdmin") Optional homeAdmin, + @JsonProperty("homeSize") Optional homeSize, + @JsonProperty("id") int id, + @JsonProperty("joinedAt") long joinedAt, + @JsonProperty("locale") JsonNullable locale, + @JsonProperty("mailingListActive") Optional mailingListActive, + @JsonProperty("mailingListStatus") Optional mailingListStatus, + @JsonProperty("maxHomeSize") Optional maxHomeSize, + @JsonProperty("pin") Optional pin, + @JsonProperty("profile") Optional profile, + @JsonProperty("protected") Optional protected_, + @JsonProperty("rememberExpiresAt") Optional rememberExpiresAt, + @JsonProperty("restricted") Optional restricted, + @JsonProperty("roles") Optional> roles, + @JsonProperty("scrobbleTypes") Optional scrobbleTypes, + @JsonProperty("services") Optional> services, + @JsonProperty("subscription") Optional subscription, + @JsonProperty("subscriptionDescription") JsonNullable subscriptionDescription, + @JsonProperty("subscriptions") Optional> subscriptions, + @JsonProperty("thumb") Optional thumb, + @JsonProperty("title") String title, + @JsonProperty("twoFactorEnabled") Optional twoFactorEnabled, + @JsonProperty("username") String username, + @JsonProperty("uuid") String uuid, + @JsonProperty("attributionPartner") JsonNullable attributionPartner) { + Utils.checkNotNull(adsConsent, "adsConsent"); + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + Utils.checkNotNull(anonymous, "anonymous"); + Utils.checkNotNull(authToken, "authToken"); + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + Utils.checkNotNull(confirmed, "confirmed"); + Utils.checkNotNull(country, "country"); + Utils.checkNotNull(email, "email"); + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + Utils.checkNotNull(friendlyName, "friendlyName"); + Utils.checkNotNull(entitlements, "entitlements"); + Utils.checkNotNull(guest, "guest"); + Utils.checkNotNull(hasPassword, "hasPassword"); + Utils.checkNotNull(home, "home"); + Utils.checkNotNull(homeAdmin, "homeAdmin"); + Utils.checkNotNull(homeSize, "homeSize"); + Utils.checkNotNull(id, "id"); + Utils.checkNotNull(joinedAt, "joinedAt"); + Utils.checkNotNull(locale, "locale"); + Utils.checkNotNull(mailingListActive, "mailingListActive"); + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + Utils.checkNotNull(pin, "pin"); + Utils.checkNotNull(profile, "profile"); + Utils.checkNotNull(protected_, "protected_"); + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + Utils.checkNotNull(restricted, "restricted"); + Utils.checkNotNull(roles, "roles"); + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + Utils.checkNotNull(services, "services"); + Utils.checkNotNull(subscription, "subscription"); + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + Utils.checkNotNull(subscriptions, "subscriptions"); + Utils.checkNotNull(thumb, "thumb"); + Utils.checkNotNull(title, "title"); + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + Utils.checkNotNull(username, "username"); + Utils.checkNotNull(uuid, "uuid"); + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.adsConsent = adsConsent; + this.adsConsentReminderAt = adsConsentReminderAt; + this.adsConsentSetAt = adsConsentSetAt; + this.anonymous = anonymous; + this.authToken = authToken; + this.backupCodesCreated = backupCodesCreated; + this.confirmed = confirmed; + this.country = country; + this.email = email; + this.emailOnlyAuth = emailOnlyAuth; + this.experimentalFeatures = experimentalFeatures; + this.friendlyName = friendlyName; + this.entitlements = entitlements; + this.guest = guest; + this.hasPassword = hasPassword; + this.home = home; + this.homeAdmin = homeAdmin; + this.homeSize = homeSize; + this.id = id; + this.joinedAt = joinedAt; + this.locale = locale; + this.mailingListActive = mailingListActive; + this.mailingListStatus = mailingListStatus; + this.maxHomeSize = maxHomeSize; + this.pin = pin; + this.profile = profile; + this.protected_ = protected_; + this.rememberExpiresAt = rememberExpiresAt; + this.restricted = restricted; + this.roles = roles; + this.scrobbleTypes = scrobbleTypes; + this.services = services; + this.subscription = subscription; + this.subscriptionDescription = subscriptionDescription; + this.subscriptions = subscriptions; + this.thumb = thumb; + this.title = title; + this.twoFactorEnabled = twoFactorEnabled; + this.username = username; + this.uuid = uuid; + this.attributionPartner = attributionPartner; + } + + public UserPlexAccount( + String authToken, + String email, + String friendlyName, + int id, + long joinedAt, + String title, + String username, + String uuid) { + this(JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), + JsonNullable.undefined(), authToken, Optional.empty(), + Optional.empty(), Optional.empty(), email, + Optional.empty(), Optional.empty(), friendlyName, + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + id, joinedAt, JsonNullable.undefined(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), + JsonNullable.undefined(), Optional.empty(), Optional.empty(), + title, Optional.empty(), username, + uuid, JsonNullable.undefined()); + } + + /** + * Unknown + */ + @JsonIgnore + public JsonNullable adsConsent() { + return adsConsent; + } + + @JsonIgnore + public JsonNullable adsConsentReminderAt() { + return adsConsentReminderAt; + } + + @JsonIgnore + public JsonNullable adsConsentSetAt() { + return adsConsentSetAt; + } + + /** + * Unknown + */ + @JsonIgnore + public JsonNullable anonymous() { + return anonymous; + } + + /** + * The account token + */ + @JsonIgnore + public String authToken() { + return authToken; + } + + /** + * If the two-factor authentication backup codes have been created + */ + @JsonIgnore + public Optional backupCodesCreated() { + return backupCodesCreated; + } + + /** + * If the account has been confirmed + */ + @JsonIgnore + public Optional confirmed() { + return confirmed; + } + + /** + * The account country + */ + @JsonIgnore + public Optional country() { + return country; + } + + /** + * The account email address + */ + @JsonIgnore + public String email() { + return email; + } + + /** + * If login with email only is enabled + */ + @JsonIgnore + public Optional emailOnlyAuth() { + return emailOnlyAuth; + } + + /** + * If experimental features are enabled + */ + @JsonIgnore + public Optional experimentalFeatures() { + return experimentalFeatures; + } + + /** + * Your account full name + */ + @JsonIgnore + public String friendlyName() { + return friendlyName; + } + + /** + * List of devices your allowed to use with this account + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> entitlements() { + return (Optional>) entitlements; + } + + /** + * If the account is a Plex Home guest user + */ + @JsonIgnore + public Optional guest() { + return guest; + } + + /** + * If the account has a password + */ + @JsonIgnore + public Optional hasPassword() { + return hasPassword; + } + + /** + * If the account is a Plex Home user + */ + @JsonIgnore + public Optional home() { + return home; + } + + /** + * If the account is the Plex Home admin + */ + @JsonIgnore + public Optional homeAdmin() { + return homeAdmin; + } + + /** + * The number of accounts in the Plex Home + */ + @JsonIgnore + public Optional homeSize() { + return homeSize; + } + + /** + * The Plex account ID + */ + @JsonIgnore + public int id() { + return id; + } + + /** + * Unix epoch datetime in seconds + */ + @JsonIgnore + public long joinedAt() { + return joinedAt; + } + + /** + * The account locale + */ + @JsonIgnore + public JsonNullable locale() { + return locale; + } + + /** + * If you are subscribed to the Plex newsletter + */ + @JsonIgnore + public Optional mailingListActive() { + return mailingListActive; + } + + /** + * Your current mailing list status + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional mailingListStatus() { + return (Optional) mailingListStatus; + } + + /** + * The maximum number of accounts allowed in the Plex Home + */ + @JsonIgnore + public Optional maxHomeSize() { + return maxHomeSize; + } + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + @JsonIgnore + public Optional pin() { + return pin; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional profile() { + return (Optional) profile; + } + + /** + * If the account has a Plex Home PIN enabled + */ + @JsonIgnore + public Optional protected_() { + return protected_; + } + + /** + * Unix epoch datetime in seconds + */ + @JsonIgnore + public Optional rememberExpiresAt() { + return rememberExpiresAt; + } + + /** + * If the account is a Plex Home managed user + */ + @JsonIgnore + public Optional restricted() { + return restricted; + } + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> roles() { + return (Optional>) roles; + } + + /** + * Unknown + */ + @JsonIgnore + public Optional scrobbleTypes() { + return scrobbleTypes; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> services() { + return (Optional>) services; + } + + /** + * If the account's Plex Pass subscription is active + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional subscription() { + return (Optional) subscription; + } + + /** + * Description of the Plex Pass subscription + */ + @JsonIgnore + public JsonNullable subscriptionDescription() { + return subscriptionDescription; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> subscriptions() { + return (Optional>) subscriptions; + } + + /** + * URL of the account thumbnail + */ + @JsonIgnore + public Optional thumb() { + return thumb; + } + + /** + * The title of the account (username or friendly name) + */ + @JsonIgnore + public String title() { + return title; + } + + /** + * If two-factor authentication is enabled + */ + @JsonIgnore + public Optional twoFactorEnabled() { + return twoFactorEnabled; + } + + /** + * The account username + */ + @JsonIgnore + public String username() { + return username; + } + + /** + * The account UUID + */ + @JsonIgnore + public String uuid() { + return uuid; + } + + @JsonIgnore + public JsonNullable attributionPartner() { + return attributionPartner; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * Unknown + */ + public UserPlexAccount withAdsConsent(boolean adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = JsonNullable.of(adsConsent); + return this; + } + + /** + * Unknown + */ + public UserPlexAccount withAdsConsent(JsonNullable adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = adsConsent; + return this; + } + + public UserPlexAccount withAdsConsentReminderAt(long adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = JsonNullable.of(adsConsentReminderAt); + return this; + } + + public UserPlexAccount withAdsConsentReminderAt(JsonNullable adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = adsConsentReminderAt; + return this; + } + + public UserPlexAccount withAdsConsentSetAt(long adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = JsonNullable.of(adsConsentSetAt); + return this; + } + + public UserPlexAccount withAdsConsentSetAt(JsonNullable adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = adsConsentSetAt; + return this; + } + + /** + * Unknown + */ + public UserPlexAccount withAnonymous(boolean anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = JsonNullable.of(anonymous); + return this; + } + + /** + * Unknown + */ + public UserPlexAccount withAnonymous(JsonNullable anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = anonymous; + return this; + } + + /** + * The account token + */ + public UserPlexAccount withAuthToken(String authToken) { + Utils.checkNotNull(authToken, "authToken"); + this.authToken = authToken; + return this; + } + + /** + * If the two-factor authentication backup codes have been created + */ + public UserPlexAccount withBackupCodesCreated(boolean backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = Optional.ofNullable(backupCodesCreated); + return this; + } + + + /** + * If the two-factor authentication backup codes have been created + */ + public UserPlexAccount withBackupCodesCreated(Optional backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = backupCodesCreated; + return this; + } + + /** + * If the account has been confirmed + */ + public UserPlexAccount withConfirmed(boolean confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = Optional.ofNullable(confirmed); + return this; + } + + + /** + * If the account has been confirmed + */ + public UserPlexAccount withConfirmed(Optional confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = confirmed; + return this; + } + + /** + * The account country + */ + public UserPlexAccount withCountry(String country) { + Utils.checkNotNull(country, "country"); + this.country = Optional.ofNullable(country); + return this; + } + + + /** + * The account country + */ + public UserPlexAccount withCountry(Optional country) { + Utils.checkNotNull(country, "country"); + this.country = country; + return this; + } + + /** + * The account email address + */ + public UserPlexAccount withEmail(String email) { + Utils.checkNotNull(email, "email"); + this.email = email; + return this; + } + + /** + * If login with email only is enabled + */ + public UserPlexAccount withEmailOnlyAuth(boolean emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = Optional.ofNullable(emailOnlyAuth); + return this; + } + + + /** + * If login with email only is enabled + */ + public UserPlexAccount withEmailOnlyAuth(Optional emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = emailOnlyAuth; + return this; + } + + /** + * If experimental features are enabled + */ + public UserPlexAccount withExperimentalFeatures(boolean experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = Optional.ofNullable(experimentalFeatures); + return this; + } + + + /** + * If experimental features are enabled + */ + public UserPlexAccount withExperimentalFeatures(Optional experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = experimentalFeatures; + return this; + } + + /** + * Your account full name + */ + public UserPlexAccount withFriendlyName(String friendlyName) { + Utils.checkNotNull(friendlyName, "friendlyName"); + this.friendlyName = friendlyName; + return this; + } + + /** + * List of devices your allowed to use with this account + */ + public UserPlexAccount withEntitlements(List entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = Optional.ofNullable(entitlements); + return this; + } + + + /** + * List of devices your allowed to use with this account + */ + public UserPlexAccount withEntitlements(Optional> entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = entitlements; + return this; + } + + /** + * If the account is a Plex Home guest user + */ + public UserPlexAccount withGuest(boolean guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = Optional.ofNullable(guest); + return this; + } + + + /** + * If the account is a Plex Home guest user + */ + public UserPlexAccount withGuest(Optional guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = guest; + return this; + } + + /** + * If the account has a password + */ + public UserPlexAccount withHasPassword(boolean hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = Optional.ofNullable(hasPassword); + return this; + } + + + /** + * If the account has a password + */ + public UserPlexAccount withHasPassword(Optional hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = hasPassword; + return this; + } + + /** + * If the account is a Plex Home user + */ + public UserPlexAccount withHome(boolean home) { + Utils.checkNotNull(home, "home"); + this.home = Optional.ofNullable(home); + return this; + } + + + /** + * If the account is a Plex Home user + */ + public UserPlexAccount withHome(Optional home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + /** + * If the account is the Plex Home admin + */ + public UserPlexAccount withHomeAdmin(boolean homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = Optional.ofNullable(homeAdmin); + return this; + } + + + /** + * If the account is the Plex Home admin + */ + public UserPlexAccount withHomeAdmin(Optional homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = homeAdmin; + return this; + } + + /** + * The number of accounts in the Plex Home + */ + public UserPlexAccount withHomeSize(int homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = Optional.ofNullable(homeSize); + return this; + } + + + /** + * The number of accounts in the Plex Home + */ + public UserPlexAccount withHomeSize(Optional homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = homeSize; + return this; + } + + /** + * The Plex account ID + */ + public UserPlexAccount withId(int id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public UserPlexAccount withJoinedAt(long joinedAt) { + Utils.checkNotNull(joinedAt, "joinedAt"); + this.joinedAt = joinedAt; + return this; + } + + /** + * The account locale + */ + public UserPlexAccount withLocale(String locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = JsonNullable.of(locale); + return this; + } + + /** + * The account locale + */ + public UserPlexAccount withLocale(JsonNullable locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = locale; + return this; + } + + /** + * If you are subscribed to the Plex newsletter + */ + public UserPlexAccount withMailingListActive(boolean mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = Optional.ofNullable(mailingListActive); + return this; + } + + + /** + * If you are subscribed to the Plex newsletter + */ + public UserPlexAccount withMailingListActive(Optional mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = mailingListActive; + return this; + } + + /** + * Your current mailing list status + */ + public UserPlexAccount withMailingListStatus(MailingListStatus mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = Optional.ofNullable(mailingListStatus); + return this; + } + + + /** + * Your current mailing list status + */ + public UserPlexAccount withMailingListStatus(Optional mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = mailingListStatus; + return this; + } + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public UserPlexAccount withMaxHomeSize(int maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = Optional.ofNullable(maxHomeSize); + return this; + } + + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public UserPlexAccount withMaxHomeSize(Optional maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = maxHomeSize; + return this; + } + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public UserPlexAccount withPin(String pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = Optional.ofNullable(pin); + return this; + } + + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public UserPlexAccount withPin(Optional pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = pin; + return this; + } + + public UserPlexAccount withProfile(UserProfile profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = Optional.ofNullable(profile); + return this; + } + + + public UserPlexAccount withProfile(Optional profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = profile; + return this; + } + + /** + * If the account has a Plex Home PIN enabled + */ + public UserPlexAccount withProtected(boolean protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = Optional.ofNullable(protected_); + return this; + } + + + /** + * If the account has a Plex Home PIN enabled + */ + public UserPlexAccount withProtected(Optional protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = protected_; + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public UserPlexAccount withRememberExpiresAt(long rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = Optional.ofNullable(rememberExpiresAt); + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public UserPlexAccount withRememberExpiresAt(Optional rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = rememberExpiresAt; + return this; + } + + /** + * If the account is a Plex Home managed user + */ + public UserPlexAccount withRestricted(boolean restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = Optional.ofNullable(restricted); + return this; + } + + + /** + * If the account is a Plex Home managed user + */ + public UserPlexAccount withRestricted(Optional restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = restricted; + return this; + } + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public UserPlexAccount withRoles(List roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = Optional.ofNullable(roles); + return this; + } + + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public UserPlexAccount withRoles(Optional> roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = roles; + return this; + } + + /** + * Unknown + */ + public UserPlexAccount withScrobbleTypes(String scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = Optional.ofNullable(scrobbleTypes); + return this; + } + + + /** + * Unknown + */ + public UserPlexAccount withScrobbleTypes(Optional scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = scrobbleTypes; + return this; + } + + public UserPlexAccount withServices(List services) { + Utils.checkNotNull(services, "services"); + this.services = Optional.ofNullable(services); + return this; + } + + + public UserPlexAccount withServices(Optional> services) { + Utils.checkNotNull(services, "services"); + this.services = services; + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public UserPlexAccount withSubscription(Subscription subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = Optional.ofNullable(subscription); + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public UserPlexAccount withSubscription(Optional subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = subscription; + return this; + } + + /** + * Description of the Plex Pass subscription + */ + public UserPlexAccount withSubscriptionDescription(String subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = JsonNullable.of(subscriptionDescription); + return this; + } + + /** + * Description of the Plex Pass subscription + */ + public UserPlexAccount withSubscriptionDescription(JsonNullable subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = subscriptionDescription; + return this; + } + + public UserPlexAccount withSubscriptions(List subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = Optional.ofNullable(subscriptions); + return this; + } + + + public UserPlexAccount withSubscriptions(Optional> subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = subscriptions; + return this; + } + + /** + * URL of the account thumbnail + */ + public UserPlexAccount withThumb(String thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = Optional.ofNullable(thumb); + return this; + } + + + /** + * URL of the account thumbnail + */ + public UserPlexAccount withThumb(Optional thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = thumb; + return this; + } + + /** + * The title of the account (username or friendly name) + */ + public UserPlexAccount withTitle(String title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + /** + * If two-factor authentication is enabled + */ + public UserPlexAccount withTwoFactorEnabled(boolean twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = Optional.ofNullable(twoFactorEnabled); + return this; + } + + + /** + * If two-factor authentication is enabled + */ + public UserPlexAccount withTwoFactorEnabled(Optional twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = twoFactorEnabled; + return this; + } + + /** + * The account username + */ + public UserPlexAccount withUsername(String username) { + Utils.checkNotNull(username, "username"); + this.username = username; + return this; + } + + /** + * The account UUID + */ + public UserPlexAccount withUuid(String uuid) { + Utils.checkNotNull(uuid, "uuid"); + this.uuid = uuid; + return this; + } + + public UserPlexAccount withAttributionPartner(String attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = JsonNullable.of(attributionPartner); + return this; + } + + public UserPlexAccount withAttributionPartner(JsonNullable attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = attributionPartner; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UserPlexAccount other = (UserPlexAccount) o; + return + Utils.enhancedDeepEquals(this.adsConsent, other.adsConsent) && + Utils.enhancedDeepEquals(this.adsConsentReminderAt, other.adsConsentReminderAt) && + Utils.enhancedDeepEquals(this.adsConsentSetAt, other.adsConsentSetAt) && + Utils.enhancedDeepEquals(this.anonymous, other.anonymous) && + Utils.enhancedDeepEquals(this.authToken, other.authToken) && + Utils.enhancedDeepEquals(this.backupCodesCreated, other.backupCodesCreated) && + Utils.enhancedDeepEquals(this.confirmed, other.confirmed) && + Utils.enhancedDeepEquals(this.country, other.country) && + Utils.enhancedDeepEquals(this.email, other.email) && + Utils.enhancedDeepEquals(this.emailOnlyAuth, other.emailOnlyAuth) && + Utils.enhancedDeepEquals(this.experimentalFeatures, other.experimentalFeatures) && + Utils.enhancedDeepEquals(this.friendlyName, other.friendlyName) && + Utils.enhancedDeepEquals(this.entitlements, other.entitlements) && + Utils.enhancedDeepEquals(this.guest, other.guest) && + Utils.enhancedDeepEquals(this.hasPassword, other.hasPassword) && + Utils.enhancedDeepEquals(this.home, other.home) && + Utils.enhancedDeepEquals(this.homeAdmin, other.homeAdmin) && + Utils.enhancedDeepEquals(this.homeSize, other.homeSize) && + Utils.enhancedDeepEquals(this.id, other.id) && + Utils.enhancedDeepEquals(this.joinedAt, other.joinedAt) && + Utils.enhancedDeepEquals(this.locale, other.locale) && + Utils.enhancedDeepEquals(this.mailingListActive, other.mailingListActive) && + Utils.enhancedDeepEquals(this.mailingListStatus, other.mailingListStatus) && + Utils.enhancedDeepEquals(this.maxHomeSize, other.maxHomeSize) && + Utils.enhancedDeepEquals(this.pin, other.pin) && + Utils.enhancedDeepEquals(this.profile, other.profile) && + Utils.enhancedDeepEquals(this.protected_, other.protected_) && + Utils.enhancedDeepEquals(this.rememberExpiresAt, other.rememberExpiresAt) && + Utils.enhancedDeepEquals(this.restricted, other.restricted) && + Utils.enhancedDeepEquals(this.roles, other.roles) && + Utils.enhancedDeepEquals(this.scrobbleTypes, other.scrobbleTypes) && + Utils.enhancedDeepEquals(this.services, other.services) && + Utils.enhancedDeepEquals(this.subscription, other.subscription) && + Utils.enhancedDeepEquals(this.subscriptionDescription, other.subscriptionDescription) && + Utils.enhancedDeepEquals(this.subscriptions, other.subscriptions) && + Utils.enhancedDeepEquals(this.thumb, other.thumb) && + Utils.enhancedDeepEquals(this.title, other.title) && + Utils.enhancedDeepEquals(this.twoFactorEnabled, other.twoFactorEnabled) && + Utils.enhancedDeepEquals(this.username, other.username) && + Utils.enhancedDeepEquals(this.uuid, other.uuid) && + Utils.enhancedDeepEquals(this.attributionPartner, other.attributionPartner); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + adsConsent, adsConsentReminderAt, adsConsentSetAt, + anonymous, authToken, backupCodesCreated, + confirmed, country, email, + emailOnlyAuth, experimentalFeatures, friendlyName, + entitlements, guest, hasPassword, + home, homeAdmin, homeSize, + id, joinedAt, locale, + mailingListActive, mailingListStatus, maxHomeSize, + pin, profile, protected_, + rememberExpiresAt, restricted, roles, + scrobbleTypes, services, subscription, + subscriptionDescription, subscriptions, thumb, + title, twoFactorEnabled, username, + uuid, attributionPartner); + } + + @Override + public String toString() { + return Utils.toString(UserPlexAccount.class, + "adsConsent", adsConsent, + "adsConsentReminderAt", adsConsentReminderAt, + "adsConsentSetAt", adsConsentSetAt, + "anonymous", anonymous, + "authToken", authToken, + "backupCodesCreated", backupCodesCreated, + "confirmed", confirmed, + "country", country, + "email", email, + "emailOnlyAuth", emailOnlyAuth, + "experimentalFeatures", experimentalFeatures, + "friendlyName", friendlyName, + "entitlements", entitlements, + "guest", guest, + "hasPassword", hasPassword, + "home", home, + "homeAdmin", homeAdmin, + "homeSize", homeSize, + "id", id, + "joinedAt", joinedAt, + "locale", locale, + "mailingListActive", mailingListActive, + "mailingListStatus", mailingListStatus, + "maxHomeSize", maxHomeSize, + "pin", pin, + "profile", profile, + "protected_", protected_, + "rememberExpiresAt", rememberExpiresAt, + "restricted", restricted, + "roles", roles, + "scrobbleTypes", scrobbleTypes, + "services", services, + "subscription", subscription, + "subscriptionDescription", subscriptionDescription, + "subscriptions", subscriptions, + "thumb", thumb, + "title", title, + "twoFactorEnabled", twoFactorEnabled, + "username", username, + "uuid", uuid, + "attributionPartner", attributionPartner); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private JsonNullable adsConsent = JsonNullable.undefined(); + + private JsonNullable adsConsentReminderAt = JsonNullable.undefined(); + + private JsonNullable adsConsentSetAt = JsonNullable.undefined(); + + private JsonNullable anonymous; + + private String authToken; + + private Optional backupCodesCreated; + + private Optional confirmed; + + private Optional country = Optional.empty(); + + private String email; + + private Optional emailOnlyAuth; + + private Optional experimentalFeatures; + + private String friendlyName; + + private Optional> entitlements = Optional.empty(); + + private Optional guest; + + private Optional hasPassword; + + private Optional home; + + private Optional homeAdmin; + + private Optional homeSize = Optional.empty(); + + private Integer id; + + private Long joinedAt; + + private JsonNullable locale = JsonNullable.undefined(); + + private Optional mailingListActive; + + private Optional mailingListStatus = Optional.empty(); + + private Optional maxHomeSize = Optional.empty(); + + @Deprecated + private Optional pin = Optional.empty(); + + private Optional profile = Optional.empty(); + + private Optional protected_; + + private Optional rememberExpiresAt = Optional.empty(); + + private Optional restricted; + + private Optional> roles = Optional.empty(); + + private Optional scrobbleTypes = Optional.empty(); + + private Optional> services = Optional.empty(); + + private Optional subscription = Optional.empty(); + + private JsonNullable subscriptionDescription = JsonNullable.undefined(); + + private Optional> subscriptions = Optional.empty(); + + private Optional thumb = Optional.empty(); + + private String title; + + private Optional twoFactorEnabled; + + private String username; + + private String uuid; + + private JsonNullable attributionPartner = JsonNullable.undefined(); + + private Builder() { + // force use of static builder() method + } + + + /** + * Unknown + */ + public Builder adsConsent(boolean adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = JsonNullable.of(adsConsent); + return this; + } + + /** + * Unknown + */ + public Builder adsConsent(JsonNullable adsConsent) { + Utils.checkNotNull(adsConsent, "adsConsent"); + this.adsConsent = adsConsent; + return this; + } + + + public Builder adsConsentReminderAt(long adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = JsonNullable.of(adsConsentReminderAt); + return this; + } + + public Builder adsConsentReminderAt(JsonNullable adsConsentReminderAt) { + Utils.checkNotNull(adsConsentReminderAt, "adsConsentReminderAt"); + this.adsConsentReminderAt = adsConsentReminderAt; + return this; + } + + + public Builder adsConsentSetAt(long adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = JsonNullable.of(adsConsentSetAt); + return this; + } + + public Builder adsConsentSetAt(JsonNullable adsConsentSetAt) { + Utils.checkNotNull(adsConsentSetAt, "adsConsentSetAt"); + this.adsConsentSetAt = adsConsentSetAt; + return this; + } + + + /** + * Unknown + */ + public Builder anonymous(boolean anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = JsonNullable.of(anonymous); + return this; + } + + /** + * Unknown + */ + public Builder anonymous(JsonNullable anonymous) { + Utils.checkNotNull(anonymous, "anonymous"); + this.anonymous = anonymous; + return this; + } + + + /** + * The account token + */ + public Builder authToken(String authToken) { + Utils.checkNotNull(authToken, "authToken"); + this.authToken = authToken; + return this; + } + + + /** + * If the two-factor authentication backup codes have been created + */ + public Builder backupCodesCreated(boolean backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = Optional.ofNullable(backupCodesCreated); + return this; + } + + /** + * If the two-factor authentication backup codes have been created + */ + public Builder backupCodesCreated(Optional backupCodesCreated) { + Utils.checkNotNull(backupCodesCreated, "backupCodesCreated"); + this.backupCodesCreated = backupCodesCreated; + return this; + } + + + /** + * If the account has been confirmed + */ + public Builder confirmed(boolean confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = Optional.ofNullable(confirmed); + return this; + } + + /** + * If the account has been confirmed + */ + public Builder confirmed(Optional confirmed) { + Utils.checkNotNull(confirmed, "confirmed"); + this.confirmed = confirmed; + return this; + } + + + /** + * The account country + */ + public Builder country(String country) { + Utils.checkNotNull(country, "country"); + this.country = Optional.ofNullable(country); + return this; + } + + /** + * The account country + */ + public Builder country(Optional country) { + Utils.checkNotNull(country, "country"); + this.country = country; + return this; + } + + + /** + * The account email address + */ + public Builder email(String email) { + Utils.checkNotNull(email, "email"); + this.email = email; + return this; + } + + + /** + * If login with email only is enabled + */ + public Builder emailOnlyAuth(boolean emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = Optional.ofNullable(emailOnlyAuth); + return this; + } + + /** + * If login with email only is enabled + */ + public Builder emailOnlyAuth(Optional emailOnlyAuth) { + Utils.checkNotNull(emailOnlyAuth, "emailOnlyAuth"); + this.emailOnlyAuth = emailOnlyAuth; + return this; + } + + + /** + * If experimental features are enabled + */ + public Builder experimentalFeatures(boolean experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = Optional.ofNullable(experimentalFeatures); + return this; + } + + /** + * If experimental features are enabled + */ + public Builder experimentalFeatures(Optional experimentalFeatures) { + Utils.checkNotNull(experimentalFeatures, "experimentalFeatures"); + this.experimentalFeatures = experimentalFeatures; + return this; + } + + + /** + * Your account full name + */ + public Builder friendlyName(String friendlyName) { + Utils.checkNotNull(friendlyName, "friendlyName"); + this.friendlyName = friendlyName; + return this; + } + + + /** + * List of devices your allowed to use with this account + */ + public Builder entitlements(List entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = Optional.ofNullable(entitlements); + return this; + } + + /** + * List of devices your allowed to use with this account + */ + public Builder entitlements(Optional> entitlements) { + Utils.checkNotNull(entitlements, "entitlements"); + this.entitlements = entitlements; + return this; + } + + + /** + * If the account is a Plex Home guest user + */ + public Builder guest(boolean guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = Optional.ofNullable(guest); + return this; + } + + /** + * If the account is a Plex Home guest user + */ + public Builder guest(Optional guest) { + Utils.checkNotNull(guest, "guest"); + this.guest = guest; + return this; + } + + + /** + * If the account has a password + */ + public Builder hasPassword(boolean hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = Optional.ofNullable(hasPassword); + return this; + } + + /** + * If the account has a password + */ + public Builder hasPassword(Optional hasPassword) { + Utils.checkNotNull(hasPassword, "hasPassword"); + this.hasPassword = hasPassword; + return this; + } + + + /** + * If the account is a Plex Home user + */ + public Builder home(boolean home) { + Utils.checkNotNull(home, "home"); + this.home = Optional.ofNullable(home); + return this; + } + + /** + * If the account is a Plex Home user + */ + public Builder home(Optional home) { + Utils.checkNotNull(home, "home"); + this.home = home; + return this; + } + + + /** + * If the account is the Plex Home admin + */ + public Builder homeAdmin(boolean homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = Optional.ofNullable(homeAdmin); + return this; + } + + /** + * If the account is the Plex Home admin + */ + public Builder homeAdmin(Optional homeAdmin) { + Utils.checkNotNull(homeAdmin, "homeAdmin"); + this.homeAdmin = homeAdmin; + return this; + } + + + /** + * The number of accounts in the Plex Home + */ + public Builder homeSize(int homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = Optional.ofNullable(homeSize); + return this; + } + + /** + * The number of accounts in the Plex Home + */ + public Builder homeSize(Optional homeSize) { + Utils.checkNotNull(homeSize, "homeSize"); + this.homeSize = homeSize; + return this; + } + + + /** + * The Plex account ID + */ + public Builder id(int id) { + Utils.checkNotNull(id, "id"); + this.id = id; + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public Builder joinedAt(long joinedAt) { + Utils.checkNotNull(joinedAt, "joinedAt"); + this.joinedAt = joinedAt; + return this; + } + + + /** + * The account locale + */ + public Builder locale(String locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = JsonNullable.of(locale); + return this; + } + + /** + * The account locale + */ + public Builder locale(JsonNullable locale) { + Utils.checkNotNull(locale, "locale"); + this.locale = locale; + return this; + } + + + /** + * If you are subscribed to the Plex newsletter + */ + public Builder mailingListActive(boolean mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = Optional.ofNullable(mailingListActive); + return this; + } + + /** + * If you are subscribed to the Plex newsletter + */ + public Builder mailingListActive(Optional mailingListActive) { + Utils.checkNotNull(mailingListActive, "mailingListActive"); + this.mailingListActive = mailingListActive; + return this; + } + + + /** + * Your current mailing list status + */ + public Builder mailingListStatus(MailingListStatus mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = Optional.ofNullable(mailingListStatus); + return this; + } + + /** + * Your current mailing list status + */ + public Builder mailingListStatus(Optional mailingListStatus) { + Utils.checkNotNull(mailingListStatus, "mailingListStatus"); + this.mailingListStatus = mailingListStatus; + return this; + } + + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public Builder maxHomeSize(int maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = Optional.ofNullable(maxHomeSize); + return this; + } + + /** + * The maximum number of accounts allowed in the Plex Home + */ + public Builder maxHomeSize(Optional maxHomeSize) { + Utils.checkNotNull(maxHomeSize, "maxHomeSize"); + this.maxHomeSize = maxHomeSize; + return this; + } + + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public Builder pin(String pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = Optional.ofNullable(pin); + return this; + } + + /** + * [Might be removed] The hashed Plex Home PIN + * + * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. + */ + @Deprecated + public Builder pin(Optional pin) { + Utils.checkNotNull(pin, "pin"); + this.pin = pin; + return this; + } + + + public Builder profile(UserProfile profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = Optional.ofNullable(profile); + return this; + } + + public Builder profile(Optional profile) { + Utils.checkNotNull(profile, "profile"); + this.profile = profile; + return this; + } + + + /** + * If the account has a Plex Home PIN enabled + */ + public Builder protected_(boolean protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = Optional.ofNullable(protected_); + return this; + } + + /** + * If the account has a Plex Home PIN enabled + */ + public Builder protected_(Optional protected_) { + Utils.checkNotNull(protected_, "protected_"); + this.protected_ = protected_; + return this; + } + + + /** + * Unix epoch datetime in seconds + */ + public Builder rememberExpiresAt(long rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = Optional.ofNullable(rememberExpiresAt); + return this; + } + + /** + * Unix epoch datetime in seconds + */ + public Builder rememberExpiresAt(Optional rememberExpiresAt) { + Utils.checkNotNull(rememberExpiresAt, "rememberExpiresAt"); + this.rememberExpiresAt = rememberExpiresAt; + return this; + } + + + /** + * If the account is a Plex Home managed user + */ + public Builder restricted(boolean restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = Optional.ofNullable(restricted); + return this; + } + + /** + * If the account is a Plex Home managed user + */ + public Builder restricted(Optional restricted) { + Utils.checkNotNull(restricted, "restricted"); + this.restricted = restricted; + return this; + } + + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public Builder roles(List roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = Optional.ofNullable(roles); + return this; + } + + /** + * [Might be removed] List of account roles. Plexpass membership listed here + */ + public Builder roles(Optional> roles) { + Utils.checkNotNull(roles, "roles"); + this.roles = roles; + return this; + } + + + /** + * Unknown + */ + public Builder scrobbleTypes(String scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = Optional.ofNullable(scrobbleTypes); + return this; + } + + /** + * Unknown + */ + public Builder scrobbleTypes(Optional scrobbleTypes) { + Utils.checkNotNull(scrobbleTypes, "scrobbleTypes"); + this.scrobbleTypes = scrobbleTypes; + return this; + } + + + public Builder services(List services) { + Utils.checkNotNull(services, "services"); + this.services = Optional.ofNullable(services); + return this; + } + + public Builder services(Optional> services) { + Utils.checkNotNull(services, "services"); + this.services = services; + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Builder subscription(Subscription subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = Optional.ofNullable(subscription); + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Builder subscription(Optional subscription) { + Utils.checkNotNull(subscription, "subscription"); + this.subscription = subscription; + return this; + } + + + /** + * Description of the Plex Pass subscription + */ + public Builder subscriptionDescription(String subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = JsonNullable.of(subscriptionDescription); + return this; + } + + /** + * Description of the Plex Pass subscription + */ + public Builder subscriptionDescription(JsonNullable subscriptionDescription) { + Utils.checkNotNull(subscriptionDescription, "subscriptionDescription"); + this.subscriptionDescription = subscriptionDescription; + return this; + } + + + public Builder subscriptions(List subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = Optional.ofNullable(subscriptions); + return this; + } + + public Builder subscriptions(Optional> subscriptions) { + Utils.checkNotNull(subscriptions, "subscriptions"); + this.subscriptions = subscriptions; + return this; + } + + + /** + * URL of the account thumbnail + */ + public Builder thumb(String thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = Optional.ofNullable(thumb); + return this; + } + + /** + * URL of the account thumbnail + */ + public Builder thumb(Optional thumb) { + Utils.checkNotNull(thumb, "thumb"); + this.thumb = thumb; + return this; + } + + + /** + * The title of the account (username or friendly name) + */ + public Builder title(String title) { + Utils.checkNotNull(title, "title"); + this.title = title; + return this; + } + + + /** + * If two-factor authentication is enabled + */ + public Builder twoFactorEnabled(boolean twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = Optional.ofNullable(twoFactorEnabled); + return this; + } + + /** + * If two-factor authentication is enabled + */ + public Builder twoFactorEnabled(Optional twoFactorEnabled) { + Utils.checkNotNull(twoFactorEnabled, "twoFactorEnabled"); + this.twoFactorEnabled = twoFactorEnabled; + return this; + } + + + /** + * The account username + */ + public Builder username(String username) { + Utils.checkNotNull(username, "username"); + this.username = username; + return this; + } + + + /** + * The account UUID + */ + public Builder uuid(String uuid) { + Utils.checkNotNull(uuid, "uuid"); + this.uuid = uuid; + return this; + } + + + public Builder attributionPartner(String attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = JsonNullable.of(attributionPartner); + return this; + } + + public Builder attributionPartner(JsonNullable attributionPartner) { + Utils.checkNotNull(attributionPartner, "attributionPartner"); + this.attributionPartner = attributionPartner; + return this; + } + + public UserPlexAccount build() { + if (anonymous == null) { + anonymous = _SINGLETON_VALUE_Anonymous.value(); + } + if (backupCodesCreated == null) { + backupCodesCreated = _SINGLETON_VALUE_BackupCodesCreated.value(); + } + if (confirmed == null) { + confirmed = _SINGLETON_VALUE_Confirmed.value(); + } + if (emailOnlyAuth == null) { + emailOnlyAuth = _SINGLETON_VALUE_EmailOnlyAuth.value(); + } + if (experimentalFeatures == null) { + experimentalFeatures = _SINGLETON_VALUE_ExperimentalFeatures.value(); + } + if (guest == null) { + guest = _SINGLETON_VALUE_Guest.value(); + } + if (hasPassword == null) { + hasPassword = _SINGLETON_VALUE_HasPassword.value(); + } + if (home == null) { + home = _SINGLETON_VALUE_Home.value(); + } + if (homeAdmin == null) { + homeAdmin = _SINGLETON_VALUE_HomeAdmin.value(); + } + if (mailingListActive == null) { + mailingListActive = _SINGLETON_VALUE_MailingListActive.value(); + } + if (protected_ == null) { + protected_ = _SINGLETON_VALUE_Protected.value(); + } + if (restricted == null) { + restricted = _SINGLETON_VALUE_Restricted.value(); + } + if (twoFactorEnabled == null) { + twoFactorEnabled = _SINGLETON_VALUE_TwoFactorEnabled.value(); + } + + return new UserPlexAccount( + adsConsent, adsConsentReminderAt, adsConsentSetAt, + anonymous, authToken, backupCodesCreated, + confirmed, country, email, + emailOnlyAuth, experimentalFeatures, friendlyName, + entitlements, guest, hasPassword, + home, homeAdmin, homeSize, + id, joinedAt, locale, + mailingListActive, mailingListStatus, maxHomeSize, + pin, profile, protected_, + rememberExpiresAt, restricted, roles, + scrobbleTypes, services, subscription, + subscriptionDescription, subscriptions, thumb, + title, twoFactorEnabled, username, + uuid, attributionPartner); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_Anonymous = + new LazySingletonValue<>( + "anonymous", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_BackupCodesCreated = + new LazySingletonValue<>( + "backupCodesCreated", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Confirmed = + new LazySingletonValue<>( + "confirmed", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_EmailOnlyAuth = + new LazySingletonValue<>( + "emailOnlyAuth", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_ExperimentalFeatures = + new LazySingletonValue<>( + "experimentalFeatures", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Guest = + new LazySingletonValue<>( + "guest", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HasPassword = + new LazySingletonValue<>( + "hasPassword", + "true", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Home = + new LazySingletonValue<>( + "home", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_HomeAdmin = + new LazySingletonValue<>( + "homeAdmin", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_MailingListActive = + new LazySingletonValue<>( + "mailingListActive", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Protected = + new LazySingletonValue<>( + "protected", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_Restricted = + new LazySingletonValue<>( + "restricted", + "false", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_TwoFactorEnabled = + new LazySingletonValue<>( + "twoFactorEnabled", + "false", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountStatus.java b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountStatus.java new file mode 100644 index 00000000..455018a8 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountStatus.java @@ -0,0 +1,179 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). + * + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * + */ +@JsonDeserialize(using = UserPlexAccountStatus._Deserializer.class) +@JsonSerialize(using = UserPlexAccountStatus._Serializer.class) +public class UserPlexAccountStatus { + + public static final UserPlexAccountStatus Online = new UserPlexAccountStatus("online"); + public static final UserPlexAccountStatus Offline = new UserPlexAccountStatus("offline"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); + + private final String value; + + private UserPlexAccountStatus(String value) { + this.value = value; + } + + /** + * Returns a UserPlexAccountStatus with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as UserPlexAccountStatus + */ + public static UserPlexAccountStatus of(String value) { + synchronized (UserPlexAccountStatus.class) { + return values.computeIfAbsent(value, v -> new UserPlexAccountStatus(v)); + } + } + + public String value() { + return value; + } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserPlexAccountStatus other = (UserPlexAccountStatus) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "UserPlexAccountStatus [value=" + value + "]"; + } + + // return an array just like an enum + public static UserPlexAccountStatus[] values() { + synchronized (UserPlexAccountStatus.class) { + return values.values().toArray(new UserPlexAccountStatus[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("online", Online); + map.put("offline", Offline); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("online", UserPlexAccountStatusEnum.Online); + map.put("offline", UserPlexAccountStatusEnum.Offline); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(UserPlexAccountStatus.class); + } + + @Override + public void serialize(UserPlexAccountStatus value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(UserPlexAccountStatus.class); + } + + @Override + public UserPlexAccountStatus deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return UserPlexAccountStatus.of(v); + } + } + + public enum UserPlexAccountStatusEnum { + + Online("online"), + Offline("offline"),; + + private final String value; + + private UserPlexAccountStatusEnum(String value) { + this.value = value; + } + + public String value() { + return value; + } + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscription.java b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscription.java new file mode 100644 index 00000000..479e04f9 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscription.java @@ -0,0 +1,434 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + + +public class UserPlexAccountSubscription { + /** + * List of features allowed on your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("features") + private Optional> features; + + /** + * If the account's Plex Pass subscription is active + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("active") + private Optional active; + + /** + * Date the account subscribed to Plex Pass + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("subscribedAt") + private JsonNullable subscribedAt; + + /** + * String representation of subscriptionActive + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("status") + private Optional status; + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("paymentService") + private JsonNullable paymentService; + + /** + * Name of Plex Pass subscription plan + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("plan") + private JsonNullable plan; + + @JsonCreator + public UserPlexAccountSubscription( + @JsonProperty("features") Optional> features, + @JsonProperty("active") Optional active, + @JsonProperty("subscribedAt") JsonNullable subscribedAt, + @JsonProperty("status") Optional status, + @JsonProperty("paymentService") JsonNullable paymentService, + @JsonProperty("plan") JsonNullable plan) { + Utils.checkNotNull(features, "features"); + Utils.checkNotNull(active, "active"); + Utils.checkNotNull(subscribedAt, "subscribedAt"); + Utils.checkNotNull(status, "status"); + Utils.checkNotNull(paymentService, "paymentService"); + Utils.checkNotNull(plan, "plan"); + this.features = features; + this.active = active; + this.subscribedAt = subscribedAt; + this.status = status; + this.paymentService = paymentService; + this.plan = plan; + } + + public UserPlexAccountSubscription() { + this(Optional.empty(), Optional.empty(), JsonNullable.undefined(), + Optional.empty(), JsonNullable.undefined(), JsonNullable.undefined()); + } + + /** + * List of features allowed on your Plex Pass subscription + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional> features() { + return (Optional>) features; + } + + /** + * If the account's Plex Pass subscription is active + */ + @JsonIgnore + public Optional active() { + return active; + } + + /** + * Date the account subscribed to Plex Pass + */ + @JsonIgnore + public JsonNullable subscribedAt() { + return subscribedAt; + } + + /** + * String representation of subscriptionActive + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional status() { + return (Optional) status; + } + + /** + * Payment service used for your Plex Pass subscription + */ + @JsonIgnore + public JsonNullable paymentService() { + return paymentService; + } + + /** + * Name of Plex Pass subscription plan + */ + @JsonIgnore + public JsonNullable plan() { + return plan; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public UserPlexAccountSubscription withFeatures(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public UserPlexAccountSubscription withFeatures(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public UserPlexAccountSubscription withActive(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public UserPlexAccountSubscription withActive(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public UserPlexAccountSubscription withSubscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public UserPlexAccountSubscription withSubscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + /** + * String representation of subscriptionActive + */ + public UserPlexAccountSubscription withStatus(UserPlexAccountSubscriptionsStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + + /** + * String representation of subscriptionActive + */ + public UserPlexAccountSubscription withStatus(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public UserPlexAccountSubscription withPaymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public UserPlexAccountSubscription withPaymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public UserPlexAccountSubscription withPlan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public UserPlexAccountSubscription withPlan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UserPlexAccountSubscription other = (UserPlexAccountSubscription) o; + return + Utils.enhancedDeepEquals(this.features, other.features) && + Utils.enhancedDeepEquals(this.active, other.active) && + Utils.enhancedDeepEquals(this.subscribedAt, other.subscribedAt) && + Utils.enhancedDeepEquals(this.status, other.status) && + Utils.enhancedDeepEquals(this.paymentService, other.paymentService) && + Utils.enhancedDeepEquals(this.plan, other.plan); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + features, active, subscribedAt, + status, paymentService, plan); + } + + @Override + public String toString() { + return Utils.toString(UserPlexAccountSubscription.class, + "features", features, + "active", active, + "subscribedAt", subscribedAt, + "status", status, + "paymentService", paymentService, + "plan", plan); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional> features = Optional.empty(); + + private Optional active = Optional.empty(); + + private JsonNullable subscribedAt = JsonNullable.undefined(); + + private Optional status = Optional.empty(); + + private JsonNullable paymentService = JsonNullable.undefined(); + + private JsonNullable plan = JsonNullable.undefined(); + + private Builder() { + // force use of static builder() method + } + + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(List features) { + Utils.checkNotNull(features, "features"); + this.features = Optional.ofNullable(features); + return this; + } + + /** + * List of features allowed on your Plex Pass subscription + */ + public Builder features(Optional> features) { + Utils.checkNotNull(features, "features"); + this.features = features; + return this; + } + + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(boolean active) { + Utils.checkNotNull(active, "active"); + this.active = Optional.ofNullable(active); + return this; + } + + /** + * If the account's Plex Pass subscription is active + */ + public Builder active(Optional active) { + Utils.checkNotNull(active, "active"); + this.active = active; + return this; + } + + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(String subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = JsonNullable.of(subscribedAt); + return this; + } + + /** + * Date the account subscribed to Plex Pass + */ + public Builder subscribedAt(JsonNullable subscribedAt) { + Utils.checkNotNull(subscribedAt, "subscribedAt"); + this.subscribedAt = subscribedAt; + return this; + } + + + /** + * String representation of subscriptionActive + */ + public Builder status(UserPlexAccountSubscriptionsStatus status) { + Utils.checkNotNull(status, "status"); + this.status = Optional.ofNullable(status); + return this; + } + + /** + * String representation of subscriptionActive + */ + public Builder status(Optional status) { + Utils.checkNotNull(status, "status"); + this.status = status; + return this; + } + + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(String paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = JsonNullable.of(paymentService); + return this; + } + + /** + * Payment service used for your Plex Pass subscription + */ + public Builder paymentService(JsonNullable paymentService) { + Utils.checkNotNull(paymentService, "paymentService"); + this.paymentService = paymentService; + return this; + } + + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(String plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = JsonNullable.of(plan); + return this; + } + + /** + * Name of Plex Pass subscription plan + */ + public Builder plan(JsonNullable plan) { + Utils.checkNotNull(plan, "plan"); + this.plan = plan; + return this; + } + + public UserPlexAccountSubscription build() { + + return new UserPlexAccountSubscription( + features, active, subscribedAt, + status, paymentService, plan); + } + + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionStatus.java b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionStatus.java new file mode 100644 index 00000000..e38ece7a --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionStatus.java @@ -0,0 +1,184 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). + * + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * + */ +/** + * UserPlexAccountSubscriptionStatus + * + *

String representation of subscriptionActive + */ +@JsonDeserialize(using = UserPlexAccountSubscriptionStatus._Deserializer.class) +@JsonSerialize(using = UserPlexAccountSubscriptionStatus._Serializer.class) +public class UserPlexAccountSubscriptionStatus { + + public static final UserPlexAccountSubscriptionStatus Inactive = new UserPlexAccountSubscriptionStatus("Inactive"); + public static final UserPlexAccountSubscriptionStatus Active = new UserPlexAccountSubscriptionStatus("Active"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); + + private final String value; + + private UserPlexAccountSubscriptionStatus(String value) { + this.value = value; + } + + /** + * Returns a UserPlexAccountSubscriptionStatus with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as UserPlexAccountSubscriptionStatus + */ + public static UserPlexAccountSubscriptionStatus of(String value) { + synchronized (UserPlexAccountSubscriptionStatus.class) { + return values.computeIfAbsent(value, v -> new UserPlexAccountSubscriptionStatus(v)); + } + } + + public String value() { + return value; + } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserPlexAccountSubscriptionStatus other = (UserPlexAccountSubscriptionStatus) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "UserPlexAccountSubscriptionStatus [value=" + value + "]"; + } + + // return an array just like an enum + public static UserPlexAccountSubscriptionStatus[] values() { + synchronized (UserPlexAccountSubscriptionStatus.class) { + return values.values().toArray(new UserPlexAccountSubscriptionStatus[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("Inactive", Inactive); + map.put("Active", Active); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("Inactive", UserPlexAccountSubscriptionStatusEnum.Inactive); + map.put("Active", UserPlexAccountSubscriptionStatusEnum.Active); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(UserPlexAccountSubscriptionStatus.class); + } + + @Override + public void serialize(UserPlexAccountSubscriptionStatus value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(UserPlexAccountSubscriptionStatus.class); + } + + @Override + public UserPlexAccountSubscriptionStatus deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return UserPlexAccountSubscriptionStatus.of(v); + } + } + + public enum UserPlexAccountSubscriptionStatusEnum { + + Inactive("Inactive"), + Active("Active"),; + + private final String value; + + private UserPlexAccountSubscriptionStatusEnum(String value) { + this.value = value; + } + + public String value() { + return value; + } + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionsStatus.java b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionsStatus.java new file mode 100644 index 00000000..cd8dc928 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/UserPlexAccountSubscriptionsStatus.java @@ -0,0 +1,184 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +/** + *

Wrapper class for an "open" enum. "Open" enums are those that are expected + * to evolve (particularly with the addition of enum members over time). If an + * open enum is used then the appearance of unexpected enum values (say in a + * response from an updated an API) will not bring about a runtime error thus + * ensuring that non-updated client versions can continue to work without error. + * + *

Note that instances are immutable and are singletons (an internal thread-safe + * cache is maintained to ensure that). As a consequence instances created with the + * same value will satisfy reference equality (via {@code ==}). + * + *

This class is intended to emulate an enum (in terms of common usage and with + * reference equality) but with the ability to carry unknown values. Unfortunately + * Java does not permit the use of an instance in a switch expression but you can + * use the {@code asEnum()} method (after dealing with the `Optional` appropriately). + * + */ +/** + * UserPlexAccountSubscriptionsStatus + * + *

String representation of subscriptionActive + */ +@JsonDeserialize(using = UserPlexAccountSubscriptionsStatus._Deserializer.class) +@JsonSerialize(using = UserPlexAccountSubscriptionsStatus._Serializer.class) +public class UserPlexAccountSubscriptionsStatus { + + public static final UserPlexAccountSubscriptionsStatus INACTIVE = new UserPlexAccountSubscriptionsStatus("Inactive"); + public static final UserPlexAccountSubscriptionsStatus ACTIVE = new UserPlexAccountSubscriptionsStatus("Active"); + + // This map will grow whenever a Color gets created with a new + // unrecognized value (a potential memory leak if the user is not + // careful). Keep this field lower case to avoid clashing with + // generated member names which will always be upper cased (Java + // convention) + private static final Map values = createValuesMap(); + private static final Map enums = createEnumsMap(); + + private final String value; + + private UserPlexAccountSubscriptionsStatus(String value) { + this.value = value; + } + + /** + * Returns a UserPlexAccountSubscriptionsStatus with the given value. For a specific value the + * returned object will always be a singleton so reference equality + * is satisfied when the values are the same. + * + * @param value value to be wrapped as UserPlexAccountSubscriptionsStatus + */ + public static UserPlexAccountSubscriptionsStatus of(String value) { + synchronized (UserPlexAccountSubscriptionsStatus.class) { + return values.computeIfAbsent(value, v -> new UserPlexAccountSubscriptionsStatus(v)); + } + } + + public String value() { + return value; + } + + public Optional asEnum() { + return Optional.ofNullable(enums.getOrDefault(value, null)); + } + + public boolean isKnown() { + return asEnum().isPresent(); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public boolean equals(java.lang.Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserPlexAccountSubscriptionsStatus other = (UserPlexAccountSubscriptionsStatus) obj; + return Objects.equals(value, other.value); + } + + @Override + public String toString() { + return "UserPlexAccountSubscriptionsStatus [value=" + value + "]"; + } + + // return an array just like an enum + public static UserPlexAccountSubscriptionsStatus[] values() { + synchronized (UserPlexAccountSubscriptionsStatus.class) { + return values.values().toArray(new UserPlexAccountSubscriptionsStatus[] {}); + } + } + + private static final Map createValuesMap() { + Map map = new LinkedHashMap<>(); + map.put("Inactive", INACTIVE); + map.put("Active", ACTIVE); + return map; + } + + private static final Map createEnumsMap() { + Map map = new HashMap<>(); + map.put("Inactive", UserPlexAccountSubscriptionsStatusEnum.INACTIVE); + map.put("Active", UserPlexAccountSubscriptionsStatusEnum.ACTIVE); + return map; + } + + @SuppressWarnings("serial") + public static final class _Serializer extends StdSerializer { + + protected _Serializer() { + super(UserPlexAccountSubscriptionsStatus.class); + } + + @Override + public void serialize(UserPlexAccountSubscriptionsStatus value, JsonGenerator g, SerializerProvider provider) + throws IOException, JsonProcessingException { + g.writeObject(value.value); + } + } + + @SuppressWarnings("serial") + public static final class _Deserializer extends StdDeserializer { + + protected _Deserializer() { + super(UserPlexAccountSubscriptionsStatus.class); + } + + @Override + public UserPlexAccountSubscriptionsStatus deserialize(JsonParser p, DeserializationContext ctxt) + throws IOException, JacksonException { + String v = p.readValueAs(new TypeReference() {}); + // use the factory method to ensure we get singletons + return UserPlexAccountSubscriptionsStatus.of(v); + } + } + + public enum UserPlexAccountSubscriptionsStatusEnum { + + INACTIVE("Inactive"), + ACTIVE("Active"),; + + private final String value; + + private UserPlexAccountSubscriptionsStatusEnum(String value) { + this.value = value; + } + + public String value() { + return value; + } + } +} + diff --git a/src/main/java/dev/plexapi/sdk/models/shared/UserProfile.java b/src/main/java/dev/plexapi/sdk/models/shared/UserProfile.java new file mode 100644 index 00000000..ac6c73c1 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/UserProfile.java @@ -0,0 +1,770 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.utils.LazySingletonValue; +import dev.plexapi.sdk.utils.Utils; +import java.lang.Boolean; +import java.lang.Override; +import java.lang.String; +import java.lang.SuppressWarnings; +import java.util.List; +import java.util.Optional; +import org.openapitools.jackson.nullable.JsonNullable; + + +public class UserProfile { + /** + * If the account has automatically select audio and subtitle tracks enabled + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("autoSelectAudio") + private Optional autoSelectAudio; + + /** + * The preferred audio language for the account + */ + @JsonInclude(Include.ALWAYS) + @JsonProperty("defaultAudioLanguage") + private Optional defaultAudioLanguage; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("defaultAudioAccessibility") + private Optional defaultAudioAccessibility; + + /** + * The preferred audio languages for the account + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("defaultAudioLanguages") + private JsonNullable> defaultAudioLanguages; + + /** + * The preferred subtitle language for the account + */ + @JsonInclude(Include.ALWAYS) + @JsonProperty("defaultSubtitleLanguage") + private Optional defaultSubtitleLanguage; + + /** + * The preferred subtitle languages for the account + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("defaultSubtitleLanguages") + private JsonNullable> defaultSubtitleLanguages; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("autoSelectSubtitle") + private Optional autoSelectSubtitle; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("defaultSubtitleAccessibility") + private Optional defaultSubtitleAccessibility; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("defaultSubtitleForced") + private Optional defaultSubtitleForced; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("watchedIndicator") + private Optional watchedIndicator; + + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("mediaReviewsVisibility") + private Optional mediaReviewsVisibility; + + /** + * The languages for media reviews visibility + */ + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("mediaReviewsLanguages") + private JsonNullable> mediaReviewsLanguages; + + @JsonCreator + public UserProfile( + @JsonProperty("autoSelectAudio") Optional autoSelectAudio, + @JsonProperty("defaultAudioLanguage") Optional defaultAudioLanguage, + @JsonProperty("defaultAudioAccessibility") Optional defaultAudioAccessibility, + @JsonProperty("defaultAudioLanguages") JsonNullable> defaultAudioLanguages, + @JsonProperty("defaultSubtitleLanguage") Optional defaultSubtitleLanguage, + @JsonProperty("defaultSubtitleLanguages") JsonNullable> defaultSubtitleLanguages, + @JsonProperty("autoSelectSubtitle") Optional autoSelectSubtitle, + @JsonProperty("defaultSubtitleAccessibility") Optional defaultSubtitleAccessibility, + @JsonProperty("defaultSubtitleForced") Optional defaultSubtitleForced, + @JsonProperty("watchedIndicator") Optional watchedIndicator, + @JsonProperty("mediaReviewsVisibility") Optional mediaReviewsVisibility, + @JsonProperty("mediaReviewsLanguages") JsonNullable> mediaReviewsLanguages) { + Utils.checkNotNull(autoSelectAudio, "autoSelectAudio"); + Utils.checkNotNull(defaultAudioLanguage, "defaultAudioLanguage"); + Utils.checkNotNull(defaultAudioAccessibility, "defaultAudioAccessibility"); + Utils.checkNotNull(defaultAudioLanguages, "defaultAudioLanguages"); + Utils.checkNotNull(defaultSubtitleLanguage, "defaultSubtitleLanguage"); + Utils.checkNotNull(defaultSubtitleLanguages, "defaultSubtitleLanguages"); + Utils.checkNotNull(autoSelectSubtitle, "autoSelectSubtitle"); + Utils.checkNotNull(defaultSubtitleAccessibility, "defaultSubtitleAccessibility"); + Utils.checkNotNull(defaultSubtitleForced, "defaultSubtitleForced"); + Utils.checkNotNull(watchedIndicator, "watchedIndicator"); + Utils.checkNotNull(mediaReviewsVisibility, "mediaReviewsVisibility"); + Utils.checkNotNull(mediaReviewsLanguages, "mediaReviewsLanguages"); + this.autoSelectAudio = autoSelectAudio; + this.defaultAudioLanguage = defaultAudioLanguage; + this.defaultAudioAccessibility = defaultAudioAccessibility; + this.defaultAudioLanguages = defaultAudioLanguages; + this.defaultSubtitleLanguage = defaultSubtitleLanguage; + this.defaultSubtitleLanguages = defaultSubtitleLanguages; + this.autoSelectSubtitle = autoSelectSubtitle; + this.defaultSubtitleAccessibility = defaultSubtitleAccessibility; + this.defaultSubtitleForced = defaultSubtitleForced; + this.watchedIndicator = watchedIndicator; + this.mediaReviewsVisibility = mediaReviewsVisibility; + this.mediaReviewsLanguages = mediaReviewsLanguages; + } + + public UserProfile() { + this(Optional.empty(), Optional.empty(), Optional.empty(), + JsonNullable.undefined(), Optional.empty(), JsonNullable.undefined(), + Optional.empty(), Optional.empty(), Optional.empty(), + Optional.empty(), Optional.empty(), JsonNullable.undefined()); + } + + /** + * If the account has automatically select audio and subtitle tracks enabled + */ + @JsonIgnore + public Optional autoSelectAudio() { + return autoSelectAudio; + } + + /** + * The preferred audio language for the account + */ + @JsonIgnore + public Optional defaultAudioLanguage() { + return defaultAudioLanguage; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional defaultAudioAccessibility() { + return (Optional) defaultAudioAccessibility; + } + + /** + * The preferred audio languages for the account + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public JsonNullable> defaultAudioLanguages() { + return (JsonNullable>) defaultAudioLanguages; + } + + /** + * The preferred subtitle language for the account + */ + @JsonIgnore + public Optional defaultSubtitleLanguage() { + return defaultSubtitleLanguage; + } + + /** + * The preferred subtitle languages for the account + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public JsonNullable> defaultSubtitleLanguages() { + return (JsonNullable>) defaultSubtitleLanguages; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional autoSelectSubtitle() { + return (Optional) autoSelectSubtitle; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional defaultSubtitleAccessibility() { + return (Optional) defaultSubtitleAccessibility; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional defaultSubtitleForced() { + return (Optional) defaultSubtitleForced; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional watchedIndicator() { + return (Optional) watchedIndicator; + } + + @SuppressWarnings("unchecked") + @JsonIgnore + public Optional mediaReviewsVisibility() { + return (Optional) mediaReviewsVisibility; + } + + /** + * The languages for media reviews visibility + */ + @SuppressWarnings("unchecked") + @JsonIgnore + public JsonNullable> mediaReviewsLanguages() { + return (JsonNullable>) mediaReviewsLanguages; + } + + public static Builder builder() { + return new Builder(); + } + + + /** + * If the account has automatically select audio and subtitle tracks enabled + */ + public UserProfile withAutoSelectAudio(boolean autoSelectAudio) { + Utils.checkNotNull(autoSelectAudio, "autoSelectAudio"); + this.autoSelectAudio = Optional.ofNullable(autoSelectAudio); + return this; + } + + + /** + * If the account has automatically select audio and subtitle tracks enabled + */ + public UserProfile withAutoSelectAudio(Optional autoSelectAudio) { + Utils.checkNotNull(autoSelectAudio, "autoSelectAudio"); + this.autoSelectAudio = autoSelectAudio; + return this; + } + + /** + * The preferred audio language for the account + */ + public UserProfile withDefaultAudioLanguage(String defaultAudioLanguage) { + Utils.checkNotNull(defaultAudioLanguage, "defaultAudioLanguage"); + this.defaultAudioLanguage = Optional.ofNullable(defaultAudioLanguage); + return this; + } + + + /** + * The preferred audio language for the account + */ + public UserProfile withDefaultAudioLanguage(Optional defaultAudioLanguage) { + Utils.checkNotNull(defaultAudioLanguage, "defaultAudioLanguage"); + this.defaultAudioLanguage = defaultAudioLanguage; + return this; + } + + public UserProfile withDefaultAudioAccessibility(DefaultAudioAccessibility defaultAudioAccessibility) { + Utils.checkNotNull(defaultAudioAccessibility, "defaultAudioAccessibility"); + this.defaultAudioAccessibility = Optional.ofNullable(defaultAudioAccessibility); + return this; + } + + + public UserProfile withDefaultAudioAccessibility(Optional defaultAudioAccessibility) { + Utils.checkNotNull(defaultAudioAccessibility, "defaultAudioAccessibility"); + this.defaultAudioAccessibility = defaultAudioAccessibility; + return this; + } + + /** + * The preferred audio languages for the account + */ + public UserProfile withDefaultAudioLanguages(List defaultAudioLanguages) { + Utils.checkNotNull(defaultAudioLanguages, "defaultAudioLanguages"); + this.defaultAudioLanguages = JsonNullable.of(defaultAudioLanguages); + return this; + } + + /** + * The preferred audio languages for the account + */ + public UserProfile withDefaultAudioLanguages(JsonNullable> defaultAudioLanguages) { + Utils.checkNotNull(defaultAudioLanguages, "defaultAudioLanguages"); + this.defaultAudioLanguages = defaultAudioLanguages; + return this; + } + + /** + * The preferred subtitle language for the account + */ + public UserProfile withDefaultSubtitleLanguage(String defaultSubtitleLanguage) { + Utils.checkNotNull(defaultSubtitleLanguage, "defaultSubtitleLanguage"); + this.defaultSubtitleLanguage = Optional.ofNullable(defaultSubtitleLanguage); + return this; + } + + + /** + * The preferred subtitle language for the account + */ + public UserProfile withDefaultSubtitleLanguage(Optional defaultSubtitleLanguage) { + Utils.checkNotNull(defaultSubtitleLanguage, "defaultSubtitleLanguage"); + this.defaultSubtitleLanguage = defaultSubtitleLanguage; + return this; + } + + /** + * The preferred subtitle languages for the account + */ + public UserProfile withDefaultSubtitleLanguages(List defaultSubtitleLanguages) { + Utils.checkNotNull(defaultSubtitleLanguages, "defaultSubtitleLanguages"); + this.defaultSubtitleLanguages = JsonNullable.of(defaultSubtitleLanguages); + return this; + } + + /** + * The preferred subtitle languages for the account + */ + public UserProfile withDefaultSubtitleLanguages(JsonNullable> defaultSubtitleLanguages) { + Utils.checkNotNull(defaultSubtitleLanguages, "defaultSubtitleLanguages"); + this.defaultSubtitleLanguages = defaultSubtitleLanguages; + return this; + } + + public UserProfile withAutoSelectSubtitle(AutoSelectSubtitle autoSelectSubtitle) { + Utils.checkNotNull(autoSelectSubtitle, "autoSelectSubtitle"); + this.autoSelectSubtitle = Optional.ofNullable(autoSelectSubtitle); + return this; + } + + + public UserProfile withAutoSelectSubtitle(Optional autoSelectSubtitle) { + Utils.checkNotNull(autoSelectSubtitle, "autoSelectSubtitle"); + this.autoSelectSubtitle = autoSelectSubtitle; + return this; + } + + public UserProfile withDefaultSubtitleAccessibility(DefaultSubtitleAccessibility defaultSubtitleAccessibility) { + Utils.checkNotNull(defaultSubtitleAccessibility, "defaultSubtitleAccessibility"); + this.defaultSubtitleAccessibility = Optional.ofNullable(defaultSubtitleAccessibility); + return this; + } + + + public UserProfile withDefaultSubtitleAccessibility(Optional defaultSubtitleAccessibility) { + Utils.checkNotNull(defaultSubtitleAccessibility, "defaultSubtitleAccessibility"); + this.defaultSubtitleAccessibility = defaultSubtitleAccessibility; + return this; + } + + public UserProfile withDefaultSubtitleForced(DefaultSubtitleForced defaultSubtitleForced) { + Utils.checkNotNull(defaultSubtitleForced, "defaultSubtitleForced"); + this.defaultSubtitleForced = Optional.ofNullable(defaultSubtitleForced); + return this; + } + + + public UserProfile withDefaultSubtitleForced(Optional defaultSubtitleForced) { + Utils.checkNotNull(defaultSubtitleForced, "defaultSubtitleForced"); + this.defaultSubtitleForced = defaultSubtitleForced; + return this; + } + + public UserProfile withWatchedIndicator(WatchedIndicator watchedIndicator) { + Utils.checkNotNull(watchedIndicator, "watchedIndicator"); + this.watchedIndicator = Optional.ofNullable(watchedIndicator); + return this; + } + + + public UserProfile withWatchedIndicator(Optional watchedIndicator) { + Utils.checkNotNull(watchedIndicator, "watchedIndicator"); + this.watchedIndicator = watchedIndicator; + return this; + } + + public UserProfile withMediaReviewsVisibility(MediaReviewsVisibility mediaReviewsVisibility) { + Utils.checkNotNull(mediaReviewsVisibility, "mediaReviewsVisibility"); + this.mediaReviewsVisibility = Optional.ofNullable(mediaReviewsVisibility); + return this; + } + + + public UserProfile withMediaReviewsVisibility(Optional mediaReviewsVisibility) { + Utils.checkNotNull(mediaReviewsVisibility, "mediaReviewsVisibility"); + this.mediaReviewsVisibility = mediaReviewsVisibility; + return this; + } + + /** + * The languages for media reviews visibility + */ + public UserProfile withMediaReviewsLanguages(List mediaReviewsLanguages) { + Utils.checkNotNull(mediaReviewsLanguages, "mediaReviewsLanguages"); + this.mediaReviewsLanguages = JsonNullable.of(mediaReviewsLanguages); + return this; + } + + /** + * The languages for media reviews visibility + */ + public UserProfile withMediaReviewsLanguages(JsonNullable> mediaReviewsLanguages) { + Utils.checkNotNull(mediaReviewsLanguages, "mediaReviewsLanguages"); + this.mediaReviewsLanguages = mediaReviewsLanguages; + return this; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UserProfile other = (UserProfile) o; + return + Utils.enhancedDeepEquals(this.autoSelectAudio, other.autoSelectAudio) && + Utils.enhancedDeepEquals(this.defaultAudioLanguage, other.defaultAudioLanguage) && + Utils.enhancedDeepEquals(this.defaultAudioAccessibility, other.defaultAudioAccessibility) && + Utils.enhancedDeepEquals(this.defaultAudioLanguages, other.defaultAudioLanguages) && + Utils.enhancedDeepEquals(this.defaultSubtitleLanguage, other.defaultSubtitleLanguage) && + Utils.enhancedDeepEquals(this.defaultSubtitleLanguages, other.defaultSubtitleLanguages) && + Utils.enhancedDeepEquals(this.autoSelectSubtitle, other.autoSelectSubtitle) && + Utils.enhancedDeepEquals(this.defaultSubtitleAccessibility, other.defaultSubtitleAccessibility) && + Utils.enhancedDeepEquals(this.defaultSubtitleForced, other.defaultSubtitleForced) && + Utils.enhancedDeepEquals(this.watchedIndicator, other.watchedIndicator) && + Utils.enhancedDeepEquals(this.mediaReviewsVisibility, other.mediaReviewsVisibility) && + Utils.enhancedDeepEquals(this.mediaReviewsLanguages, other.mediaReviewsLanguages); + } + + @Override + public int hashCode() { + return Utils.enhancedHash( + autoSelectAudio, defaultAudioLanguage, defaultAudioAccessibility, + defaultAudioLanguages, defaultSubtitleLanguage, defaultSubtitleLanguages, + autoSelectSubtitle, defaultSubtitleAccessibility, defaultSubtitleForced, + watchedIndicator, mediaReviewsVisibility, mediaReviewsLanguages); + } + + @Override + public String toString() { + return Utils.toString(UserProfile.class, + "autoSelectAudio", autoSelectAudio, + "defaultAudioLanguage", defaultAudioLanguage, + "defaultAudioAccessibility", defaultAudioAccessibility, + "defaultAudioLanguages", defaultAudioLanguages, + "defaultSubtitleLanguage", defaultSubtitleLanguage, + "defaultSubtitleLanguages", defaultSubtitleLanguages, + "autoSelectSubtitle", autoSelectSubtitle, + "defaultSubtitleAccessibility", defaultSubtitleAccessibility, + "defaultSubtitleForced", defaultSubtitleForced, + "watchedIndicator", watchedIndicator, + "mediaReviewsVisibility", mediaReviewsVisibility, + "mediaReviewsLanguages", mediaReviewsLanguages); + } + + @SuppressWarnings("UnusedReturnValue") + public final static class Builder { + + private Optional autoSelectAudio; + + private Optional defaultAudioLanguage = Optional.empty(); + + private Optional defaultAudioAccessibility; + + private JsonNullable> defaultAudioLanguages = JsonNullable.undefined(); + + private Optional defaultSubtitleLanguage = Optional.empty(); + + private JsonNullable> defaultSubtitleLanguages = JsonNullable.undefined(); + + private Optional autoSelectSubtitle; + + private Optional defaultSubtitleAccessibility; + + private Optional defaultSubtitleForced; + + private Optional watchedIndicator; + + private Optional mediaReviewsVisibility; + + private JsonNullable> mediaReviewsLanguages = JsonNullable.undefined(); + + private Builder() { + // force use of static builder() method + } + + + /** + * If the account has automatically select audio and subtitle tracks enabled + */ + public Builder autoSelectAudio(boolean autoSelectAudio) { + Utils.checkNotNull(autoSelectAudio, "autoSelectAudio"); + this.autoSelectAudio = Optional.ofNullable(autoSelectAudio); + return this; + } + + /** + * If the account has automatically select audio and subtitle tracks enabled + */ + public Builder autoSelectAudio(Optional autoSelectAudio) { + Utils.checkNotNull(autoSelectAudio, "autoSelectAudio"); + this.autoSelectAudio = autoSelectAudio; + return this; + } + + + /** + * The preferred audio language for the account + */ + public Builder defaultAudioLanguage(String defaultAudioLanguage) { + Utils.checkNotNull(defaultAudioLanguage, "defaultAudioLanguage"); + this.defaultAudioLanguage = Optional.ofNullable(defaultAudioLanguage); + return this; + } + + /** + * The preferred audio language for the account + */ + public Builder defaultAudioLanguage(Optional defaultAudioLanguage) { + Utils.checkNotNull(defaultAudioLanguage, "defaultAudioLanguage"); + this.defaultAudioLanguage = defaultAudioLanguage; + return this; + } + + + public Builder defaultAudioAccessibility(DefaultAudioAccessibility defaultAudioAccessibility) { + Utils.checkNotNull(defaultAudioAccessibility, "defaultAudioAccessibility"); + this.defaultAudioAccessibility = Optional.ofNullable(defaultAudioAccessibility); + return this; + } + + public Builder defaultAudioAccessibility(Optional defaultAudioAccessibility) { + Utils.checkNotNull(defaultAudioAccessibility, "defaultAudioAccessibility"); + this.defaultAudioAccessibility = defaultAudioAccessibility; + return this; + } + + + /** + * The preferred audio languages for the account + */ + public Builder defaultAudioLanguages(List defaultAudioLanguages) { + Utils.checkNotNull(defaultAudioLanguages, "defaultAudioLanguages"); + this.defaultAudioLanguages = JsonNullable.of(defaultAudioLanguages); + return this; + } + + /** + * The preferred audio languages for the account + */ + public Builder defaultAudioLanguages(JsonNullable> defaultAudioLanguages) { + Utils.checkNotNull(defaultAudioLanguages, "defaultAudioLanguages"); + this.defaultAudioLanguages = defaultAudioLanguages; + return this; + } + + + /** + * The preferred subtitle language for the account + */ + public Builder defaultSubtitleLanguage(String defaultSubtitleLanguage) { + Utils.checkNotNull(defaultSubtitleLanguage, "defaultSubtitleLanguage"); + this.defaultSubtitleLanguage = Optional.ofNullable(defaultSubtitleLanguage); + return this; + } + + /** + * The preferred subtitle language for the account + */ + public Builder defaultSubtitleLanguage(Optional defaultSubtitleLanguage) { + Utils.checkNotNull(defaultSubtitleLanguage, "defaultSubtitleLanguage"); + this.defaultSubtitleLanguage = defaultSubtitleLanguage; + return this; + } + + + /** + * The preferred subtitle languages for the account + */ + public Builder defaultSubtitleLanguages(List defaultSubtitleLanguages) { + Utils.checkNotNull(defaultSubtitleLanguages, "defaultSubtitleLanguages"); + this.defaultSubtitleLanguages = JsonNullable.of(defaultSubtitleLanguages); + return this; + } + + /** + * The preferred subtitle languages for the account + */ + public Builder defaultSubtitleLanguages(JsonNullable> defaultSubtitleLanguages) { + Utils.checkNotNull(defaultSubtitleLanguages, "defaultSubtitleLanguages"); + this.defaultSubtitleLanguages = defaultSubtitleLanguages; + return this; + } + + + public Builder autoSelectSubtitle(AutoSelectSubtitle autoSelectSubtitle) { + Utils.checkNotNull(autoSelectSubtitle, "autoSelectSubtitle"); + this.autoSelectSubtitle = Optional.ofNullable(autoSelectSubtitle); + return this; + } + + public Builder autoSelectSubtitle(Optional autoSelectSubtitle) { + Utils.checkNotNull(autoSelectSubtitle, "autoSelectSubtitle"); + this.autoSelectSubtitle = autoSelectSubtitle; + return this; + } + + + public Builder defaultSubtitleAccessibility(DefaultSubtitleAccessibility defaultSubtitleAccessibility) { + Utils.checkNotNull(defaultSubtitleAccessibility, "defaultSubtitleAccessibility"); + this.defaultSubtitleAccessibility = Optional.ofNullable(defaultSubtitleAccessibility); + return this; + } + + public Builder defaultSubtitleAccessibility(Optional defaultSubtitleAccessibility) { + Utils.checkNotNull(defaultSubtitleAccessibility, "defaultSubtitleAccessibility"); + this.defaultSubtitleAccessibility = defaultSubtitleAccessibility; + return this; + } + + + public Builder defaultSubtitleForced(DefaultSubtitleForced defaultSubtitleForced) { + Utils.checkNotNull(defaultSubtitleForced, "defaultSubtitleForced"); + this.defaultSubtitleForced = Optional.ofNullable(defaultSubtitleForced); + return this; + } + + public Builder defaultSubtitleForced(Optional defaultSubtitleForced) { + Utils.checkNotNull(defaultSubtitleForced, "defaultSubtitleForced"); + this.defaultSubtitleForced = defaultSubtitleForced; + return this; + } + + + public Builder watchedIndicator(WatchedIndicator watchedIndicator) { + Utils.checkNotNull(watchedIndicator, "watchedIndicator"); + this.watchedIndicator = Optional.ofNullable(watchedIndicator); + return this; + } + + public Builder watchedIndicator(Optional watchedIndicator) { + Utils.checkNotNull(watchedIndicator, "watchedIndicator"); + this.watchedIndicator = watchedIndicator; + return this; + } + + + public Builder mediaReviewsVisibility(MediaReviewsVisibility mediaReviewsVisibility) { + Utils.checkNotNull(mediaReviewsVisibility, "mediaReviewsVisibility"); + this.mediaReviewsVisibility = Optional.ofNullable(mediaReviewsVisibility); + return this; + } + + public Builder mediaReviewsVisibility(Optional mediaReviewsVisibility) { + Utils.checkNotNull(mediaReviewsVisibility, "mediaReviewsVisibility"); + this.mediaReviewsVisibility = mediaReviewsVisibility; + return this; + } + + + /** + * The languages for media reviews visibility + */ + public Builder mediaReviewsLanguages(List mediaReviewsLanguages) { + Utils.checkNotNull(mediaReviewsLanguages, "mediaReviewsLanguages"); + this.mediaReviewsLanguages = JsonNullable.of(mediaReviewsLanguages); + return this; + } + + /** + * The languages for media reviews visibility + */ + public Builder mediaReviewsLanguages(JsonNullable> mediaReviewsLanguages) { + Utils.checkNotNull(mediaReviewsLanguages, "mediaReviewsLanguages"); + this.mediaReviewsLanguages = mediaReviewsLanguages; + return this; + } + + public UserProfile build() { + if (autoSelectAudio == null) { + autoSelectAudio = _SINGLETON_VALUE_AutoSelectAudio.value(); + } + if (defaultAudioAccessibility == null) { + defaultAudioAccessibility = _SINGLETON_VALUE_DefaultAudioAccessibility.value(); + } + if (autoSelectSubtitle == null) { + autoSelectSubtitle = _SINGLETON_VALUE_AutoSelectSubtitle.value(); + } + if (defaultSubtitleAccessibility == null) { + defaultSubtitleAccessibility = _SINGLETON_VALUE_DefaultSubtitleAccessibility.value(); + } + if (defaultSubtitleForced == null) { + defaultSubtitleForced = _SINGLETON_VALUE_DefaultSubtitleForced.value(); + } + if (watchedIndicator == null) { + watchedIndicator = _SINGLETON_VALUE_WatchedIndicator.value(); + } + if (mediaReviewsVisibility == null) { + mediaReviewsVisibility = _SINGLETON_VALUE_MediaReviewsVisibility.value(); + } + + return new UserProfile( + autoSelectAudio, defaultAudioLanguage, defaultAudioAccessibility, + defaultAudioLanguages, defaultSubtitleLanguage, defaultSubtitleLanguages, + autoSelectSubtitle, defaultSubtitleAccessibility, defaultSubtitleForced, + watchedIndicator, mediaReviewsVisibility, mediaReviewsLanguages); + } + + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoSelectAudio = + new LazySingletonValue<>( + "autoSelectAudio", + "true", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DefaultAudioAccessibility = + new LazySingletonValue<>( + "defaultAudioAccessibility", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_AutoSelectSubtitle = + new LazySingletonValue<>( + "autoSelectSubtitle", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DefaultSubtitleAccessibility = + new LazySingletonValue<>( + "defaultSubtitleAccessibility", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_DefaultSubtitleForced = + new LazySingletonValue<>( + "defaultSubtitleForced", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_WatchedIndicator = + new LazySingletonValue<>( + "watchedIndicator", + "0", + new TypeReference>() {}); + + private static final LazySingletonValue> _SINGLETON_VALUE_MediaReviewsVisibility = + new LazySingletonValue<>( + "mediaReviewsVisibility", + "0", + new TypeReference>() {}); + } +} diff --git a/src/main/java/dev/plexapi/sdk/models/shared/WatchedIndicator.java b/src/main/java/dev/plexapi/sdk/models/shared/WatchedIndicator.java new file mode 100644 index 00000000..bce07959 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/models/shared/WatchedIndicator.java @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.models.shared; + +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; +import java.util.Optional; + +/** + * WatchedIndicator + * + *

Whether or not media watched indicators are enabled (little orange dot on media) + */ +public enum WatchedIndicator { + None(0), + MoviesAndTvShows(1), + Movies(2), + TvShows(3); + + @JsonValue + private final int value; + + WatchedIndicator(int value) { + this.value = value; + } + + public int value() { + return value; + } + + public static Optional fromValue(int value) { + for (WatchedIndicator o: WatchedIndicator.values()) { + if (Objects.deepEquals(o.value, value)) { + return Optional.of(o); + } + } + return Optional.empty(); + } +} + diff --git a/src/main/java/dev/plexapi/sdk/operations/GetServerResources.java b/src/main/java/dev/plexapi/sdk/operations/GetServerResources.java new file mode 100644 index 00000000..d4981e13 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/operations/GetServerResources.java @@ -0,0 +1,334 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.SecuritySource; +import dev.plexapi.sdk.models.errors.GetServerResourcesUnauthorized; +import dev.plexapi.sdk.models.errors.SDKError; +import dev.plexapi.sdk.models.operations.GetServerResourcesRequest; +import dev.plexapi.sdk.models.operations.GetServerResourcesResponse; +import dev.plexapi.sdk.models.shared.PlexDevice; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Exceptions; +import dev.plexapi.sdk.utils.HTTPClient; +import dev.plexapi.sdk.utils.HTTPRequest; +import dev.plexapi.sdk.utils.Hook.AfterErrorContextImpl; +import dev.plexapi.sdk.utils.Hook.AfterSuccessContextImpl; +import dev.plexapi.sdk.utils.Hook.BeforeRequestContextImpl; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Exception; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.Throwable; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + + +public class GetServerResources { + + /** + * GET_SERVER_RESOURCES_SERVERS contains the list of server urls available to the SDK. + */ + public static final String[] GET_SERVER_RESOURCES_SERVERS = { + "https://plex.tv/api/v2", + }; + + static abstract class Base { + final SDKConfiguration sdkConfiguration; + final String baseUrl; + final SecuritySource securitySource; + final HTTPClient client; + + public Base(SDKConfiguration sdkConfiguration, Optional serverURL) { + this.sdkConfiguration = sdkConfiguration; + this.baseUrl = serverURL + .filter(u -> !u.isBlank()) + .orElse(Utils.templateUrl( + GET_SERVER_RESOURCES_SERVERS[0], + Map.of())); + this.securitySource = this.sdkConfiguration.securitySource(); + this.client = this.sdkConfiguration.client(); + } + + Optional securitySource() { + return Optional.ofNullable(this.securitySource); + } + + BeforeRequestContextImpl createBeforeRequestContext() { + return new BeforeRequestContextImpl( + this.sdkConfiguration, + this.baseUrl, + "get-server-resources", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterSuccessContextImpl createAfterSuccessContext() { + return new AfterSuccessContextImpl( + this.sdkConfiguration, + this.baseUrl, + "get-server-resources", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterErrorContextImpl createAfterErrorContext() { + return new AfterErrorContextImpl( + this.sdkConfiguration, + this.baseUrl, + "get-server-resources", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + HttpRequest buildRequest(T request, Class klass) throws Exception { + String url = Utils.generateURL( + this.baseUrl, + "/resources"); + HTTPRequest req = new HTTPRequest(url, "GET"); + req.addHeader("Accept", "application/json") + .addHeader("user-agent", SDKConfiguration.USER_AGENT); + + req.addQueryParams(Utils.getQueryParams( + klass, + request, + this.sdkConfiguration.globals)); + req.addHeaders(Utils.getHeadersFromMetadata(request, this.sdkConfiguration.globals)); + Utils.configureSecurity(req, this.sdkConfiguration.securitySource().getSecurity()); + + return req.build(); + } + } + + public static class Sync extends Base + implements RequestOperation { + public Sync(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private HttpRequest onBuildRequest(GetServerResourcesRequest request) throws Exception { + HttpRequest req = buildRequest(request, GetServerResourcesRequest.class); + return sdkConfiguration.hooks().beforeRequest(createBeforeRequestContext(), req); + } + + private HttpResponse onError(HttpResponse response, Exception error) throws Exception { + return sdkConfiguration.hooks().afterError( + createAfterErrorContext(), + Optional.ofNullable(response), + Optional.ofNullable(error)); + } + + private HttpResponse onSuccess(HttpResponse response) throws Exception { + return sdkConfiguration.hooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public HttpResponse doRequest(GetServerResourcesRequest request) throws Exception { + HttpRequest r = onBuildRequest(request); + HttpResponse httpRes; + try { + httpRes = client.send(r); + if (Utils.statusCodeMatches(httpRes.statusCode(), "400", "401", "4XX", "5XX")) { + httpRes = onError(httpRes, null); + } else { + httpRes = onSuccess(httpRes); + } + } catch (Exception e) { + httpRes = onError(null, e); + } + + return httpRes; + } + + + @Override + public GetServerResourcesResponse handleResponse(HttpResponse response) throws Exception { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + GetServerResourcesResponse.Builder resBuilder = + GetServerResourcesResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + GetServerResourcesResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "200")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + List out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + res.withPlexDevices(out); + return res; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + GetServerResourcesUnauthorized out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400", "4XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + throw new SDKError( + response, + response.statusCode(), + "Unexpected status code received: " + response.statusCode(), + Utils.extractByteArrayFromBody(response)); + } + } + public static class Async extends Base + implements AsyncRequestOperation { + + public Async(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private CompletableFuture onBuildRequest(GetServerResourcesRequest request) throws Exception { + HttpRequest req = buildRequest(request, GetServerResourcesRequest.class); + return this.sdkConfiguration.asyncHooks().beforeRequest(createBeforeRequestContext(), req); + } + + private CompletableFuture> onError(HttpResponse response, Throwable error) { + return this.sdkConfiguration.asyncHooks().afterError(createAfterErrorContext(), response, error); + } + + private CompletableFuture> onSuccess(HttpResponse response) { + return this.sdkConfiguration.asyncHooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public CompletableFuture> doRequest(GetServerResourcesRequest request) { + return Exceptions.unchecked(() -> onBuildRequest(request)).get().thenCompose(client::sendAsync) + .handle((resp, err) -> { + if (err != null) { + return onError(null, err); + } + if (Utils.statusCodeMatches(resp.statusCode(), "400", "401", "4XX", "5XX")) { + return onError(resp, null); + } + return CompletableFuture.completedFuture(resp); + }) + .thenCompose(Function.identity()) + .thenCompose(this::onSuccess); + } + + @Override + public CompletableFuture handleResponse( + HttpResponse response) { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + dev.plexapi.sdk.models.operations.async.GetServerResourcesResponse.Builder resBuilder = + dev.plexapi.sdk.models.operations.async.GetServerResourcesResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + dev.plexapi.sdk.models.operations.async.GetServerResourcesResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "200")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + try { + List out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + res.withPlexDevices(out); + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.GetServerResourcesUnauthorized out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400", "4XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + return Utils.createAsyncApiError(response, "Unexpected status code received: " + response.statusCode()); + } + } +} diff --git a/src/main/java/dev/plexapi/sdk/operations/GetTokenDetails.java b/src/main/java/dev/plexapi/sdk/operations/GetTokenDetails.java new file mode 100644 index 00000000..9291f468 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/operations/GetTokenDetails.java @@ -0,0 +1,367 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.SecuritySource; +import dev.plexapi.sdk.models.errors.GetTokenDetailsBadRequest; +import dev.plexapi.sdk.models.errors.GetTokenDetailsUnauthorized; +import dev.plexapi.sdk.models.errors.SDKError; +import dev.plexapi.sdk.models.operations.GetTokenDetailsRequest; +import dev.plexapi.sdk.models.operations.GetTokenDetailsResponse; +import dev.plexapi.sdk.models.shared.UserPlexAccount; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Exceptions; +import dev.plexapi.sdk.utils.HTTPClient; +import dev.plexapi.sdk.utils.HTTPRequest; +import dev.plexapi.sdk.utils.Hook.AfterErrorContextImpl; +import dev.plexapi.sdk.utils.Hook.AfterSuccessContextImpl; +import dev.plexapi.sdk.utils.Hook.BeforeRequestContextImpl; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Exception; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.Throwable; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + + +public class GetTokenDetails { + + /** + * GET_TOKEN_DETAILS_SERVERS contains the list of server urls available to the SDK. + */ + public static final String[] GET_TOKEN_DETAILS_SERVERS = { + "https://plex.tv/api/v2", + }; + + static abstract class Base { + final SDKConfiguration sdkConfiguration; + final String baseUrl; + final SecuritySource securitySource; + final HTTPClient client; + + public Base(SDKConfiguration sdkConfiguration, Optional serverURL) { + this.sdkConfiguration = sdkConfiguration; + this.baseUrl = serverURL + .filter(u -> !u.isBlank()) + .orElse(Utils.templateUrl( + GET_TOKEN_DETAILS_SERVERS[0], + Map.of())); + this.securitySource = this.sdkConfiguration.securitySource(); + this.client = this.sdkConfiguration.client(); + } + + Optional securitySource() { + return Optional.ofNullable(this.securitySource); + } + + BeforeRequestContextImpl createBeforeRequestContext() { + return new BeforeRequestContextImpl( + this.sdkConfiguration, + this.baseUrl, + "getTokenDetails", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterSuccessContextImpl createAfterSuccessContext() { + return new AfterSuccessContextImpl( + this.sdkConfiguration, + this.baseUrl, + "getTokenDetails", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterErrorContextImpl createAfterErrorContext() { + return new AfterErrorContextImpl( + this.sdkConfiguration, + this.baseUrl, + "getTokenDetails", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + HttpRequest buildRequest(T request) throws Exception { + String url = Utils.generateURL( + this.baseUrl, + "/user"); + HTTPRequest req = new HTTPRequest(url, "GET"); + req.addHeader("Accept", "application/json") + .addHeader("user-agent", SDKConfiguration.USER_AGENT); + req.addHeaders(Utils.getHeadersFromMetadata(request, this.sdkConfiguration.globals)); + Utils.configureSecurity(req, this.sdkConfiguration.securitySource().getSecurity()); + + return req.build(); + } + } + + public static class Sync extends Base + implements RequestOperation { + public Sync(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private HttpRequest onBuildRequest(GetTokenDetailsRequest request) throws Exception { + HttpRequest req = buildRequest(request); + return sdkConfiguration.hooks().beforeRequest(createBeforeRequestContext(), req); + } + + private HttpResponse onError(HttpResponse response, Exception error) throws Exception { + return sdkConfiguration.hooks().afterError( + createAfterErrorContext(), + Optional.ofNullable(response), + Optional.ofNullable(error)); + } + + private HttpResponse onSuccess(HttpResponse response) throws Exception { + return sdkConfiguration.hooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public HttpResponse doRequest(GetTokenDetailsRequest request) throws Exception { + HttpRequest r = onBuildRequest(request); + HttpResponse httpRes; + try { + httpRes = client.send(r); + if (Utils.statusCodeMatches(httpRes.statusCode(), "400", "401", "4XX", "5XX")) { + httpRes = onError(httpRes, null); + } else { + httpRes = onSuccess(httpRes); + } + } catch (Exception e) { + httpRes = onError(null, e); + } + + return httpRes; + } + + + @Override + public GetTokenDetailsResponse handleResponse(HttpResponse response) throws Exception { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + GetTokenDetailsResponse.Builder resBuilder = + GetTokenDetailsResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + GetTokenDetailsResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "200")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + UserPlexAccount out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + res.withUserPlexAccount(out); + return res; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + GetTokenDetailsBadRequest out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + GetTokenDetailsUnauthorized out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "4XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + throw new SDKError( + response, + response.statusCode(), + "Unexpected status code received: " + response.statusCode(), + Utils.extractByteArrayFromBody(response)); + } + } + public static class Async extends Base + implements AsyncRequestOperation { + + public Async(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private CompletableFuture onBuildRequest(GetTokenDetailsRequest request) throws Exception { + HttpRequest req = buildRequest(request); + return this.sdkConfiguration.asyncHooks().beforeRequest(createBeforeRequestContext(), req); + } + + private CompletableFuture> onError(HttpResponse response, Throwable error) { + return this.sdkConfiguration.asyncHooks().afterError(createAfterErrorContext(), response, error); + } + + private CompletableFuture> onSuccess(HttpResponse response) { + return this.sdkConfiguration.asyncHooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public CompletableFuture> doRequest(GetTokenDetailsRequest request) { + return Exceptions.unchecked(() -> onBuildRequest(request)).get().thenCompose(client::sendAsync) + .handle((resp, err) -> { + if (err != null) { + return onError(null, err); + } + if (Utils.statusCodeMatches(resp.statusCode(), "400", "401", "4XX", "5XX")) { + return onError(resp, null); + } + return CompletableFuture.completedFuture(resp); + }) + .thenCompose(Function.identity()) + .thenCompose(this::onSuccess); + } + + @Override + public CompletableFuture handleResponse( + HttpResponse response) { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + dev.plexapi.sdk.models.operations.async.GetTokenDetailsResponse.Builder resBuilder = + dev.plexapi.sdk.models.operations.async.GetTokenDetailsResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + dev.plexapi.sdk.models.operations.async.GetTokenDetailsResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "200")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + try { + UserPlexAccount out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + res.withUserPlexAccount(out); + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.GetTokenDetailsBadRequest out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.GetTokenDetailsUnauthorized out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "4XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + return Utils.createAsyncApiError(response, "Unexpected status code received: " + response.statusCode()); + } + } +} diff --git a/src/main/java/dev/plexapi/sdk/operations/GetUsers.java b/src/main/java/dev/plexapi/sdk/operations/GetUsers.java new file mode 100644 index 00000000..0c129b31 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/operations/GetUsers.java @@ -0,0 +1,367 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.SecuritySource; +import dev.plexapi.sdk.models.errors.GetUsersBadRequest; +import dev.plexapi.sdk.models.errors.GetUsersUnauthorized; +import dev.plexapi.sdk.models.errors.SDKError; +import dev.plexapi.sdk.models.operations.GetUsersRequest; +import dev.plexapi.sdk.models.operations.GetUsersResponse; +import dev.plexapi.sdk.models.operations.GetUsersResponseBody; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Exceptions; +import dev.plexapi.sdk.utils.HTTPClient; +import dev.plexapi.sdk.utils.HTTPRequest; +import dev.plexapi.sdk.utils.Hook.AfterErrorContextImpl; +import dev.plexapi.sdk.utils.Hook.AfterSuccessContextImpl; +import dev.plexapi.sdk.utils.Hook.BeforeRequestContextImpl; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Exception; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.Throwable; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + + +public class GetUsers { + + /** + * GET_USERS_SERVERS contains the list of server urls available to the SDK. + */ + public static final String[] GET_USERS_SERVERS = { + "https://plex.tv/api", + }; + + static abstract class Base { + final SDKConfiguration sdkConfiguration; + final String baseUrl; + final SecuritySource securitySource; + final HTTPClient client; + + public Base(SDKConfiguration sdkConfiguration, Optional serverURL) { + this.sdkConfiguration = sdkConfiguration; + this.baseUrl = serverURL + .filter(u -> !u.isBlank()) + .orElse(Utils.templateUrl( + GET_USERS_SERVERS[0], + Map.of())); + this.securitySource = this.sdkConfiguration.securitySource(); + this.client = this.sdkConfiguration.client(); + } + + Optional securitySource() { + return Optional.ofNullable(this.securitySource); + } + + BeforeRequestContextImpl createBeforeRequestContext() { + return new BeforeRequestContextImpl( + this.sdkConfiguration, + this.baseUrl, + "get-users", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterSuccessContextImpl createAfterSuccessContext() { + return new AfterSuccessContextImpl( + this.sdkConfiguration, + this.baseUrl, + "get-users", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterErrorContextImpl createAfterErrorContext() { + return new AfterErrorContextImpl( + this.sdkConfiguration, + this.baseUrl, + "get-users", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + HttpRequest buildRequest(T request) throws Exception { + String url = Utils.generateURL( + this.baseUrl, + "/users"); + HTTPRequest req = new HTTPRequest(url, "GET"); + req.addHeader("Accept", "application/json") + .addHeader("user-agent", SDKConfiguration.USER_AGENT); + req.addHeaders(Utils.getHeadersFromMetadata(request, this.sdkConfiguration.globals)); + Utils.configureSecurity(req, this.sdkConfiguration.securitySource().getSecurity()); + + return req.build(); + } + } + + public static class Sync extends Base + implements RequestOperation { + public Sync(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private HttpRequest onBuildRequest(GetUsersRequest request) throws Exception { + HttpRequest req = buildRequest(request); + return sdkConfiguration.hooks().beforeRequest(createBeforeRequestContext(), req); + } + + private HttpResponse onError(HttpResponse response, Exception error) throws Exception { + return sdkConfiguration.hooks().afterError( + createAfterErrorContext(), + Optional.ofNullable(response), + Optional.ofNullable(error)); + } + + private HttpResponse onSuccess(HttpResponse response) throws Exception { + return sdkConfiguration.hooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public HttpResponse doRequest(GetUsersRequest request) throws Exception { + HttpRequest r = onBuildRequest(request); + HttpResponse httpRes; + try { + httpRes = client.send(r); + if (Utils.statusCodeMatches(httpRes.statusCode(), "400", "401", "4XX", "5XX")) { + httpRes = onError(httpRes, null); + } else { + httpRes = onSuccess(httpRes); + } + } catch (Exception e) { + httpRes = onError(null, e); + } + + return httpRes; + } + + + @Override + public GetUsersResponse handleResponse(HttpResponse response) throws Exception { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + GetUsersResponse.Builder resBuilder = + GetUsersResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + GetUsersResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "200")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + GetUsersResponseBody out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + res.withObject(out); + return res; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + GetUsersBadRequest out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + GetUsersUnauthorized out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "4XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + throw new SDKError( + response, + response.statusCode(), + "Unexpected status code received: " + response.statusCode(), + Utils.extractByteArrayFromBody(response)); + } + } + public static class Async extends Base + implements AsyncRequestOperation { + + public Async(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private CompletableFuture onBuildRequest(GetUsersRequest request) throws Exception { + HttpRequest req = buildRequest(request); + return this.sdkConfiguration.asyncHooks().beforeRequest(createBeforeRequestContext(), req); + } + + private CompletableFuture> onError(HttpResponse response, Throwable error) { + return this.sdkConfiguration.asyncHooks().afterError(createAfterErrorContext(), response, error); + } + + private CompletableFuture> onSuccess(HttpResponse response) { + return this.sdkConfiguration.asyncHooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public CompletableFuture> doRequest(GetUsersRequest request) { + return Exceptions.unchecked(() -> onBuildRequest(request)).get().thenCompose(client::sendAsync) + .handle((resp, err) -> { + if (err != null) { + return onError(null, err); + } + if (Utils.statusCodeMatches(resp.statusCode(), "400", "401", "4XX", "5XX")) { + return onError(resp, null); + } + return CompletableFuture.completedFuture(resp); + }) + .thenCompose(Function.identity()) + .thenCompose(this::onSuccess); + } + + @Override + public CompletableFuture handleResponse( + HttpResponse response) { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + dev.plexapi.sdk.models.operations.async.GetUsersResponse.Builder resBuilder = + dev.plexapi.sdk.models.operations.async.GetUsersResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + dev.plexapi.sdk.models.operations.async.GetUsersResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "200")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + try { + GetUsersResponseBody out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + res.withObject(out); + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.GetUsersBadRequest out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.GetUsersUnauthorized out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "4XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + return Utils.createAsyncApiError(response, "Unexpected status code received: " + response.statusCode()); + } + } +} diff --git a/src/main/java/dev/plexapi/sdk/operations/PostUsersSignInData.java b/src/main/java/dev/plexapi/sdk/operations/PostUsersSignInData.java new file mode 100644 index 00000000..d04374b2 --- /dev/null +++ b/src/main/java/dev/plexapi/sdk/operations/PostUsersSignInData.java @@ -0,0 +1,379 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ +package dev.plexapi.sdk.operations; + +import static dev.plexapi.sdk.operations.Operations.RequestOperation; +import static dev.plexapi.sdk.operations.Operations.AsyncRequestOperation; + +import com.fasterxml.jackson.core.type.TypeReference; +import dev.plexapi.sdk.SDKConfiguration; +import dev.plexapi.sdk.SecuritySource; +import dev.plexapi.sdk.models.errors.PostUsersSignInDataBadRequest; +import dev.plexapi.sdk.models.errors.PostUsersSignInDataUnauthorized; +import dev.plexapi.sdk.models.errors.SDKError; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataRequest; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataResponse; +import dev.plexapi.sdk.models.operations.PostUsersSignInDataUserPlexAccount; +import dev.plexapi.sdk.utils.Blob; +import dev.plexapi.sdk.utils.Exceptions; +import dev.plexapi.sdk.utils.HTTPClient; +import dev.plexapi.sdk.utils.HTTPRequest; +import dev.plexapi.sdk.utils.Hook.AfterErrorContextImpl; +import dev.plexapi.sdk.utils.Hook.AfterSuccessContextImpl; +import dev.plexapi.sdk.utils.Hook.BeforeRequestContextImpl; +import dev.plexapi.sdk.utils.SerializedBody; +import dev.plexapi.sdk.utils.Utils.JsonShape; +import dev.plexapi.sdk.utils.Utils; +import java.io.InputStream; +import java.lang.Exception; +import java.lang.Object; +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.Throwable; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + + +public class PostUsersSignInData { + + /** + * POST_USERS_SIGN_IN_DATA_SERVERS contains the list of server urls available to the SDK. + */ + public static final String[] POST_USERS_SIGN_IN_DATA_SERVERS = { + "https://plex.tv/api/v2", + }; + + static abstract class Base { + final SDKConfiguration sdkConfiguration; + final String baseUrl; + final SecuritySource securitySource; + final HTTPClient client; + + public Base(SDKConfiguration sdkConfiguration, Optional serverURL) { + this.sdkConfiguration = sdkConfiguration; + this.baseUrl = serverURL + .filter(u -> !u.isBlank()) + .orElse(Utils.templateUrl( + POST_USERS_SIGN_IN_DATA_SERVERS[0], + Map.of())); + this.securitySource = null; + this.client = this.sdkConfiguration.client(); + } + + Optional securitySource() { + return Optional.ofNullable(this.securitySource); + } + + BeforeRequestContextImpl createBeforeRequestContext() { + return new BeforeRequestContextImpl( + this.sdkConfiguration, + this.baseUrl, + "post-users-sign-in-data", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterSuccessContextImpl createAfterSuccessContext() { + return new AfterSuccessContextImpl( + this.sdkConfiguration, + this.baseUrl, + "post-users-sign-in-data", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + + AfterErrorContextImpl createAfterErrorContext() { + return new AfterErrorContextImpl( + this.sdkConfiguration, + this.baseUrl, + "post-users-sign-in-data", + java.util.Optional.of(java.util.List.of()), + securitySource()); + } + HttpRequest buildRequest(T request, TypeReference typeReference) throws Exception { + String url = Utils.generateURL( + this.baseUrl, + "/users/signin"); + HTTPRequest req = new HTTPRequest(url, "POST"); + Object convertedRequest = Utils.convertToShape( + request, + JsonShape.DEFAULT, + typeReference); + SerializedBody serializedRequestBody = Utils.serializeRequestBody( + convertedRequest, + "requestBody", + "form", + false); + req.setBody(Optional.ofNullable(serializedRequestBody)); + req.addHeader("Accept", "application/json") + .addHeader("user-agent", SDKConfiguration.USER_AGENT); + req.addHeaders(Utils.getHeadersFromMetadata(request, this.sdkConfiguration.globals)); + + return req.build(); + } + } + + public static class Sync extends Base + implements RequestOperation { + public Sync(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private HttpRequest onBuildRequest(PostUsersSignInDataRequest request) throws Exception { + HttpRequest req = buildRequest(request, new TypeReference() {}); + return sdkConfiguration.hooks().beforeRequest(createBeforeRequestContext(), req); + } + + private HttpResponse onError(HttpResponse response, Exception error) throws Exception { + return sdkConfiguration.hooks().afterError( + createAfterErrorContext(), + Optional.ofNullable(response), + Optional.ofNullable(error)); + } + + private HttpResponse onSuccess(HttpResponse response) throws Exception { + return sdkConfiguration.hooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public HttpResponse doRequest(PostUsersSignInDataRequest request) throws Exception { + HttpRequest r = onBuildRequest(request); + HttpResponse httpRes; + try { + httpRes = client.send(r); + if (Utils.statusCodeMatches(httpRes.statusCode(), "400", "401", "4XX", "5XX")) { + httpRes = onError(httpRes, null); + } else { + httpRes = onSuccess(httpRes); + } + } catch (Exception e) { + httpRes = onError(null, e); + } + + return httpRes; + } + + + @Override + public PostUsersSignInDataResponse handleResponse(HttpResponse response) throws Exception { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + PostUsersSignInDataResponse.Builder resBuilder = + PostUsersSignInDataResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + PostUsersSignInDataResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "201")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + PostUsersSignInDataUserPlexAccount out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + res.withUserPlexAccount(out); + return res; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + PostUsersSignInDataBadRequest out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + PostUsersSignInDataUnauthorized out = Utils.mapper().readValue( + response.body(), + new TypeReference<>() { + }); + out.withRawResponse(response); + + throw out; + } else { + throw new SDKError( + response, + response.statusCode(), + "Unexpected content-type received: " + contentType, + Utils.extractByteArrayFromBody(response)); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "4XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + throw new SDKError( + response, + response.statusCode(), + "API error occurred", + Utils.extractByteArrayFromBody(response)); + } + + throw new SDKError( + response, + response.statusCode(), + "Unexpected status code received: " + response.statusCode(), + Utils.extractByteArrayFromBody(response)); + } + } + public static class Async extends Base + implements AsyncRequestOperation { + + public Async(SDKConfiguration sdkConfiguration, Optional serverURL) { + super(sdkConfiguration, serverURL); + } + + private CompletableFuture onBuildRequest(PostUsersSignInDataRequest request) throws Exception { + HttpRequest req = buildRequest(request, new TypeReference() {}); + return this.sdkConfiguration.asyncHooks().beforeRequest(createBeforeRequestContext(), req); + } + + private CompletableFuture> onError(HttpResponse response, Throwable error) { + return this.sdkConfiguration.asyncHooks().afterError(createAfterErrorContext(), response, error); + } + + private CompletableFuture> onSuccess(HttpResponse response) { + return this.sdkConfiguration.asyncHooks().afterSuccess(createAfterSuccessContext(), response); + } + + @Override + public CompletableFuture> doRequest(PostUsersSignInDataRequest request) { + return Exceptions.unchecked(() -> onBuildRequest(request)).get().thenCompose(client::sendAsync) + .handle((resp, err) -> { + if (err != null) { + return onError(null, err); + } + if (Utils.statusCodeMatches(resp.statusCode(), "400", "401", "4XX", "5XX")) { + return onError(resp, null); + } + return CompletableFuture.completedFuture(resp); + }) + .thenCompose(Function.identity()) + .thenCompose(this::onSuccess); + } + + @Override + public CompletableFuture handleResponse( + HttpResponse response) { + String contentType = response + .headers() + .firstValue("Content-Type") + .orElse("application/octet-stream"); + dev.plexapi.sdk.models.operations.async.PostUsersSignInDataResponse.Builder resBuilder = + dev.plexapi.sdk.models.operations.async.PostUsersSignInDataResponse + .builder() + .contentType(contentType) + .statusCode(response.statusCode()) + .rawResponse(response); + + dev.plexapi.sdk.models.operations.async.PostUsersSignInDataResponse res = resBuilder.build(); + + if (Utils.statusCodeMatches(response.statusCode(), "201")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + try { + PostUsersSignInDataUserPlexAccount out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + res.withUserPlexAccount(out); + return res; + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "400")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.PostUsersSignInDataBadRequest out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "401")) { + if (Utils.contentTypeMatches(contentType, "application/json")) { + return response.body().toByteArray().thenApply(bodyBytes -> { + dev.plexapi.sdk.models.errors.async.PostUsersSignInDataUnauthorized out; + try { + out = Utils.mapper().readValue( + bodyBytes, + new TypeReference<>() { + }); + out.withRawResponse(response); + } catch (Exception e) { + throw new RuntimeException(e); + } + throw out; + }); + } else { + return Utils.createAsyncApiError(response, "Unexpected content-type received: " + contentType); + } + } + + if (Utils.statusCodeMatches(response.statusCode(), "4XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + if (Utils.statusCodeMatches(response.statusCode(), "5XX")) { + // no content + return Utils.createAsyncApiError(response, "API error occurred"); + } + + return Utils.createAsyncApiError(response, "Unexpected status code received: " + response.statusCode()); + } + } +} diff --git a/src/main/java/dev/plexapi/sdk/operations/StartTask.java b/src/main/java/dev/plexapi/sdk/operations/StartTask.java index cd9c0657..f2dcd758 100644 --- a/src/main/java/dev/plexapi/sdk/operations/StartTask.java +++ b/src/main/java/dev/plexapi/sdk/operations/StartTask.java @@ -80,7 +80,7 @@ public class StartTask { String url = Utils.generateURL( klass, this.baseUrl, - "/butler/{task}", + "/butler/{butlerTask}", request, this.sdkConfiguration.globals); HTTPRequest req = new HTTPRequest(url, "POST"); req.addHeader("Accept", "*/*") diff --git a/src/main/java/dev/plexapi/sdk/operations/StopTask.java b/src/main/java/dev/plexapi/sdk/operations/StopTask.java index 1d174e3a..a75ac425 100644 --- a/src/main/java/dev/plexapi/sdk/operations/StopTask.java +++ b/src/main/java/dev/plexapi/sdk/operations/StopTask.java @@ -80,7 +80,7 @@ public class StopTask { String url = Utils.generateURL( klass, this.baseUrl, - "/butler/{task}", + "/butler/{butlerTask}", request, this.sdkConfiguration.globals); HTTPRequest req = new HTTPRequest(url, "DELETE"); req.addHeader("Accept", "*/*")