diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 8f66049..fcfa3d2 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -3,10 +3,10 @@ id: 5d77204e-e413-4fd0-a14a-bad3aee2247a management: docChecksum: a6fee1797b2da7ccbaf7743772a40b56 docVersion: 0.0.3 - speakeasyVersion: 1.397.2 + speakeasyVersion: 1.398.0 generationVersion: 2.415.8 - releaseVersion: 0.6.0 - configChecksum: 0897ca18bf2617121c5febd2b7e34231 + releaseVersion: 0.6.1 + configChecksum: 623c272e19e5fbaa50ca4d945b4308b5 repoURL: https://github.com/LukeHagar/plexswift.git features: swift: @@ -868,420 +868,166 @@ generatedFiles: - Sources/plexswift/internal/serialization/Serializable.swift - USAGE.md examples: - getServerCapabilities: - speakeasy-default-get-server-capabilities: - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getServerPreferences: - speakeasy-default-get-server-preferences: - responses: - "200": - application/json: {"MediaContainer": {"size": 161, "Setting": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getAvailableClients: - speakeasy-default-get-available-clients: - responses: - "200": - application/json: {"MediaContainer": {"size": 1, "Server": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getDevices: - speakeasy-default-get-devices: - responses: - "200": - application/json: {"MediaContainer": {"size": 151, "identifier": "com.plexapp.system.devices", "Device": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - get-server-identity: - speakeasy-default-get-server-identity: - responses: - "200": - application/json: {"MediaContainer": {"size": 0, "machineIdentifier": "96f2fe7a78c9dc1f16a16bedbe90f98149be16b4", "version": "1.31.3.6868-28fc46b27"}} - "408": - application/json: {"code": 408, "message": "The server timed out waiting for the request."} - getMyPlexAccount: - speakeasy-default-get-my-plex-account: - responses: - "200": - application/json: {"MyPlex": {"authToken": "Z5v-PrNASDFpsaCi3CPK7", "username": "example.email@mail.com", "mappingState": "mapped", "signInState": "ok", "publicAddress": "140.20.68.140", "publicPort": 32400, "privateAddress": "10.10.10.47", "privatePort": 32400, "subscriptionFeatures": "federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks", "subscriptionState": "Active"}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getResizedPhoto: - speakeasy-default-get-resized-photo: + addPlaylistContents: + speakeasy-default-add-playlist-contents: parameters: + path: + playlistID: "8502.01" query: - width: 110 - height: 165 - opacity: 643869 - blur: 4000 - minSize: 0 - upscale: 0 - url: "/library/metadata/49564/thumb/1654258204" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - get-media-providers: - speakeasy-default-get-media-providers: - parameters: - query: - X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getServerList: - speakeasy-default-get-server-list: + playQueueID: 123 + uri: server://12345/com.plexapp.plugins.library/library/metadata/1 responses: "200": - application/json: {"MediaContainer": {"size": 1, "Server": []}} + application/json: + MediaContainer: + Metadata: [] + leafCountAdded: 1 + leafCountRequested: 1 + size: 1 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - markPlayed: - speakeasy-default-mark-played: - parameters: - query: - key: 59398 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - markUnplayed: - speakeasy-default-mark-unplayed: - parameters: - query: - key: 59398 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - updatePlayProgress: + application/json: + errors: [] + applyUpdates: "": parameters: query: - key: "" - time: 90000 - state: "played" + skip: 1 + tonight: 1 responses: "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] + cancelServerActivities: + "": + parameters: + path: + activityUUID: 25b71ed5-0f9d-461c-baa7-d404e9e10d3e + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + checkForUpdates: + "": + parameters: + query: + download: 1 + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + clearPlaylistContents: + speakeasy-default-clear-playlist-contents: + parameters: + path: + playlistID: "1893.18" + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + createPlaylist: + speakeasy-default-create-playlist: + parameters: + query: + smart: 1 + title: + type: photo + uri: https://inborn-brochure.biz + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + size: 7 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + deleteLibrary: + speakeasy-default-delete-library: + parameters: + path: + sectionKey: 9518 + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + deletePlaylist: + speakeasy-default-delete-playlist: + parameters: + path: + playlistID: "216.22" + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + enablePaperTrail: + speakeasy-default-enable-paper-trail: + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + get-all-libraries: + speakeasy-default-get-all-libraries: + responses: + "200": + application/json: + MediaContainer: + Directory: [] + allowSync: false + size: 5 + title1: Plex Library + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] get-banner-image: speakeasy-default-get-banner-image: parameters: path: ratingKey: 9518 query: - width: 396 + X-Plex-Token: CV5xoxjTpFKUzBTShsaf height: 396 minSize: 1 upscale: 1 - X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" + width: 396 responses: "200": image/jpeg: "0xE5A1092305" "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - get-thumb-image: - speakeasy-default-get-thumb-image: - parameters: - path: - ratingKey: 9518 - query: - width: 396 - height: 396 - minSize: 1 - upscale: 1 - X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" - responses: - "200": - image/jpeg: "0x4f576BaCaA" - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getTimeline: - "": - parameters: - query: - ratingKey: 23409 - key: "/library/metadata/23409" - state: "playing" - hasMDE: 1 - time: 2000 - duration: 10000 - context: "home:hub.continueWatching" - playQueueItemID: 1 - playBackTime: 2000 - row: 1 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - startUniversalTranscode: - "": - parameters: - query: - hasMDE: 1 - path: "/library/metadata/23409" - mediaIndex: 0 - partIndex: 0 - protocol: "hls" - fastSeek: 0 - directPlay: 0 - directStream: 0 - subtitleSize: 100 - subtites: "burn" - audioBoost: 100 - location: "lan" - mediaBufferSize: 102400 - session: "zvcage8b7rkioqcm8f4uns4c" - addDebugOverlay: 0 - autoAdjustQuality: 0 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getServerActivities: - speakeasy-default-get-server-activities: - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - cancelServerActivities: - "": - parameters: - path: - activityUUID: "25b71ed5-0f9d-461c-baa7-d404e9e10d3e" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getButlerTasks: - speakeasy-default-get-butler-tasks: - responses: - "200": - application/json: {"ButlerTasks": {"ButlerTask": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - startAllTasks: - speakeasy-default-start-all-tasks: - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - stopAllTasks: - speakeasy-default-stop-all-tasks: - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - startTask: - speakeasy-default-start-task: - parameters: - path: - taskName: "CleanOldBundles" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - stopTask: - speakeasy-default-stop-task: - parameters: - path: - taskName: "BackupDatabase" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getCompanionsData: - speakeasy-default-get-companions-data: - responses: - "200": - application/json: [] - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getUserFriends: - speakeasy-default-get-user-friends: - responses: - "200": - application/json: [{"email": "username@email.com", "friendlyName": "exampleUser", "home": true, "id": 0, "restricted": false, "sharedServers": [], "sharedSources": [], "status": "accepted", "thumb": "https://plex.tv/users/7d1916e0d8f6e76b/avatar?c=1694481578", "title": "username123", "username": "username123", "uuid": "7d1916e0d8f6e76b"}] - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getGeoData: - speakeasy-default-get-geo-data: - responses: - "200": - application/json: {"code": "VI", "continent_code": "NA", "country": "United States Virgin Islands", "city": "Amsterdam", "european_union_member": true, "time_zone": "America/St_Thomas", "postal_code": 802, "in_privacy_restricted_country": true, "in_privacy_restricted_region": true, "subdivisions": "Saint Thomas", "coordinates": "18.3381, -64.8941"} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getHomeData: - speakeasy-default-get-home-data: - responses: - "200": - application/json: {"id": 1841489, "name": "Blindkitty38's home", "guestUserID": 58815432, "guestUserUUID": "f3df4e01bfca0787"} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - get-server-resources: - speakeasy-default-get-server-resources: - parameters: - query: - includeHttps: 1 - includeRelay: 1 - includeIPv6: 1 - responses: - "200": - application/json: [] - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getPin: - "": - parameters: - query: - X-Plex-Product: "Plex Web" - responses: - "200": - application/json: {"id": 308667304, "code": "7RQZ", "product": "0", "trusted": false, "qr": "https://plex.tv/api/v2/pins/qr/7RQZ", "clientIdentifier": "string", "location": {"code": "VI", "continent_code": "NA", "country": "United States Virgin Islands", "city": "Amsterdam", "european_union_member": true, "time_zone": "America/St_Thomas", "postal_code": 802, "in_privacy_restricted_country": true, "in_privacy_restricted_region": true, "subdivisions": "Saint Thomas", "coordinates": "18.3381, -64.8941"}, "expiresIn": 876, "createdAt": "2024-07-16T17:03:05Z", "expiresAt": "2024-07-16T17:18:05Z", "authToken": null, "newRegistration": null} - "400": - application/json: {"errors": []} - getTokenByPinId: - "": - parameters: - path: - pinID: 408895 - query: {} - responses: - "404": - application/json: {"errors": [{"code": 1020, "message": "Code not found or expired"}]} - getGlobalHubs: - speakeasy-default-get-global-hubs: - responses: - "200": - application/json: {"MediaContainer": {"size": 8, "allowSync": true, "identifier": "com.plexapp.plugins.library", "Hub": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getLibraryHubs: - speakeasy-default-get-library-hubs: - parameters: - path: - sectionId: "6728.76" - query: {} - responses: - "200": - application/json: {"MediaContainer": {"size": 7, "allowSync": true, "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "Hub": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - performSearch: - speakeasy-default-perform-search: - parameters: - query: - query: "dylan" - limit: 5 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - performVoiceSearch: - speakeasy-default-perform-voice-search: - parameters: - query: - query: "dead+poop" - limit: 5 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getSearchResults: - speakeasy-default-get-search-results: - parameters: - query: - query: "110" - responses: - "200": - application/json: {"MediaContainer": {"size": 26, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": [], "Provider": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getFileHash: - speakeasy-default-get-file-hash: - parameters: - query: - url: "file://C:\\Image.png&type=13" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getRecentlyAdded: - speakeasy-default-get-recently-added: - parameters: - query: - X-Plex-Container-Start: 0 - X-Plex-Container-Size: 50 - responses: - "200": - application/json: {"MediaContainer": {"size": 50, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - get-all-libraries: - speakeasy-default-get-all-libraries: - responses: - "200": - application/json: {"MediaContainer": {"size": 5, "allowSync": false, "title1": "Plex Library", "Directory": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} + application/json: + errors: [] get-library-details: speakeasy-default-get-library-details: parameters: @@ -1290,40 +1036,103 @@ examples: query: {} responses: "200": - application/json: {"MediaContainer": {"size": 29, "allowSync": false, "art": "/:/resources/movie-fanart.jpg", "content": "secondary", "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "viewGroup": "secondary", "viewMode": 65592, "Directory": [], "Type": [], "FieldType": []}} + application/json: + MediaContainer: + Directory: [] + FieldType: [] + Type: [] + allowSync: false + art: /:/resources/movie-fanart.jpg + content: secondary + identifier: com.plexapp.plugins.library + librarySectionID: 1 + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1701731894 + size: 29 + thumb: /:/resources/movie.png + title1: Movies + viewGroup: secondary + viewMode: 65592 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - deleteLibrary: - speakeasy-default-delete-library: - parameters: - path: - sectionKey: 9518 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} + application/json: + errors: [] get-library-items: "": parameters: path: sectionKey: 9518 - tag: "edition" + tag: edition query: + X-Plex-Container-Size: 50 + X-Plex-Container-Start: 0 includeGuids: 1 includeMeta: 1 type: 2 - X-Plex-Container-Start: 0 - X-Plex-Container-Size: 50 responses: "200": - application/json: {"MediaContainer": {"size": 70, "allowSync": true, "art": "/:/resources/movie-fanart.jpg", "identifier": "com.plexapp.plugins.library", "librarySectionTitle": "Movies", "librarySectionUUID": "322a231a-b7f7-49f5-920f-14c61199cd30", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "thumb": "/:/resources/movie.png", "title1": "Movies", "title2": "Recently Released", "viewGroup": "movie", "viewMode": 65592, "mixedParents": true, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + allowSync: true + art: /:/resources/movie-fanart.jpg + identifier: com.plexapp.plugins.library + librarySectionTitle: Movies + librarySectionUUID: 322a231a-b7f7-49f5-920f-14c61199cd30 + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1701731894 + mixedParents: true + size: 70 + thumb: /:/resources/movie.png + title1: Movies + title2: Recently Released + viewGroup: movie + viewMode: 65592 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] + get-media-providers: + speakeasy-default-get-media-providers: + parameters: + query: + X-Plex-Token: CV5xoxjTpFKUzBTShsaf + responses: + "200": {} + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + get-meta-data-by-rating-key: + speakeasy-default-get-meta-data-by-rating-key: + parameters: + path: + ratingKey: 9518 + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + allowSync: true + identifier: com.plexapp.plugins.library + librarySectionID: 1 + librarySectionTitle: Movies + librarySectionUUID: cfc899d7-3000-46f6-8489-b9592714ada5 + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1698860922 + size: 1 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] get-refresh-library-metadata: speakeasy-default-get-refresh-library-metadata: parameters: @@ -1333,9 +1142,11 @@ examples: force: 0 responses: "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] get-search-library: speakeasy-default-get-search-library: parameters: @@ -1345,151 +1156,459 @@ examples: type: 2 responses: "200": - application/json: {"MediaContainer": {"size": 2, "allowSync": false, "art": "/:/resources/show-fanart.jpg", "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "nocache": true, "thumb": "/:/resources/show.png", "title1": "TV Shows", "title2": "Search for ''", "viewGroup": "season", "viewMode": 65593, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + allowSync: false + art: /:/resources/show-fanart.jpg + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1698860922 + nocache: true + size: 2 + thumb: /:/resources/show.png + title1: TV Shows + title2: Search for '' + viewGroup: season + viewMode: 65593 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - get-meta-data-by-rating-key: - speakeasy-default-get-meta-data-by-rating-key: + application/json: + errors: [] + get-server-identity: + speakeasy-default-get-server-identity: + responses: + "200": + application/json: + MediaContainer: + machineIdentifier: 96f2fe7a78c9dc1f16a16bedbe90f98149be16b4 + size: 0 + version: 1.31.3.6868-28fc46b27 + "408": + application/json: + code: 408 + message: The server timed out waiting for the request. + get-server-resources: + speakeasy-default-get-server-resources: + parameters: + query: + includeHttps: 1 + includeIPv6: 1 + includeRelay: 1 + responses: + "200": + application/json: [] + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + get-thumb-image: + speakeasy-default-get-thumb-image: parameters: path: ratingKey: 9518 + query: + X-Plex-Token: CV5xoxjTpFKUzBTShsaf + height: 396 + minSize: 1 + upscale: 1 + width: 396 responses: "200": - application/json: {"MediaContainer": {"size": 1, "allowSync": true, "identifier": "com.plexapp.plugins.library", "librarySectionID": 1, "librarySectionTitle": "Movies", "librarySectionUUID": "cfc899d7-3000-46f6-8489-b9592714ada5", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "Metadata": []}} + image/jpeg: "0x4f576BaCaA" "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] + get-watch-list: + speakeasy-default-get-watch-list: + parameters: + path: + filter: available + query: + X-Plex-Container-Size: 50 + X-Plex-Container-Start: 0 + X-Plex-Token: CV5xoxjTpFKUzBTShsaf + responses: + "200": {} + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getAvailableClients: + speakeasy-default-get-available-clients: + responses: + "200": + application/json: + MediaContainer: + Server: [] + size: 1 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getBandwidthStatistics: + "": + parameters: + query: + Timespan: 4 + responses: + "200": + application/json: + MediaContainer: + Account: [] + Device: [] + StatisticsBandwidth: [] + size: 5497 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getButlerTasks: + speakeasy-default-get-butler-tasks: + responses: + "200": + application/json: + ButlerTasks: + ButlerTask: [] + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getCompanionsData: + speakeasy-default-get-companions-data: + responses: + "200": + application/json: [] + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getDevices: + speakeasy-default-get-devices: + responses: + "200": + application/json: + MediaContainer: + Device: [] + identifier: com.plexapp.system.devices + size: 151 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getFileHash: + speakeasy-default-get-file-hash: + parameters: + query: + url: file://C:\Image.png&type=13 + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getGeoData: + speakeasy-default-get-geo-data: + responses: + "200": + application/json: + city: Amsterdam + code: VI + continent_code: NA + coordinates: 18.3381, -64.8941 + country: United States Virgin Islands + european_union_member: true + in_privacy_restricted_country: true + in_privacy_restricted_region: true + postal_code: 802 + subdivisions: Saint Thomas + time_zone: America/St_Thomas + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getGlobalHubs: + speakeasy-default-get-global-hubs: + responses: + "200": + application/json: + MediaContainer: + Hub: [] + allowSync: true + identifier: com.plexapp.plugins.library + size: 8 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getHomeData: + speakeasy-default-get-home-data: + responses: + "200": + application/json: + guestUserID: 58815432 + guestUserUUID: f3df4e01bfca0787 + id: 1841489 + name: Blindkitty38's home + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getLibraryHubs: + speakeasy-default-get-library-hubs: + parameters: + path: + sectionId: "6728.76" + query: {} + responses: + "200": + application/json: + MediaContainer: + Hub: [] + allowSync: true + identifier: com.plexapp.plugins.library + librarySectionID: 1 + librarySectionTitle: Movies + librarySectionUUID: 322a231a-b7f7-49f5-920f-14c61199cd30 + size: 7 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] getMetadataChildren: include-stream: parameters: path: ratingKey: "1539.14" query: - includeElements: "Stream" + includeElements: Stream responses: "200": - application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": []}} + application/json: + MediaContainer: + Directory: + - key: /library/metadata/30072/allLeaves + leafCount: 16 + thumb: /library/metadata/30072/thumb/1705739923 + title: All episodes + viewedLeafCount: 16 + Metadata: [] + allowSync: true + art: /library/metadata/30072/art/1705739923 + identifier: com.plexapp.plugins.library + key: "30072" + librarySectionID: 2 + librarySectionTitle: TV Shows + librarySectionUUID: 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1701731894 + nocache: true + parentIndex: 1 + parentTitle: Reacher + parentYear: 2022 + size: 3 + summary: When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. + theme: /library/metadata/30072/theme/1705739923 + thumb: /library/metadata/30072/thumb/1705739923 + title1: TV Shows + title2: Reacher + viewGroup: season + viewMode: 65593 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] include-stream-otheritem: parameters: path: ratingKey: "8449.64" query: - includeElements: "Stream,OtherItem" + includeElements: Stream,OtherItem responses: "200": - application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": []}} + application/json: + MediaContainer: + Directory: + - key: /library/metadata/30072/allLeaves + leafCount: 16 + thumb: /library/metadata/30072/thumb/1705739923 + title: All episodes + viewedLeafCount: 16 + Metadata: [] + allowSync: true + art: /library/metadata/30072/art/1705739923 + identifier: com.plexapp.plugins.library + key: "30072" + librarySectionID: 2 + librarySectionTitle: TV Shows + librarySectionUUID: 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1701731894 + nocache: true + parentIndex: 1 + parentTitle: Reacher + parentYear: 2022 + size: 3 + summary: When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. + theme: /library/metadata/30072/theme/1705739923 + thumb: /library/metadata/30072/thumb/1705739923 + title1: TV Shows + title2: Reacher + viewGroup: season + viewMode: 65593 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] include-stream-otheritem-anotheritem: parameters: path: ratingKey: "5800.4" query: - includeElements: "Stream,OtherItem,AnotherItem" + includeElements: Stream,OtherItem,AnotherItem responses: "200": - application/json: {"MediaContainer": {"size": 3, "allowSync": true, "art": "/library/metadata/30072/art/1705739923", "identifier": "com.plexapp.plugins.library", "key": "30072", "librarySectionID": 2, "librarySectionTitle": "TV Shows", "librarySectionUUID": "4bb2521c-8ba9-459b-aaee-8ab8bc35eabd", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1701731894, "nocache": true, "parentIndex": 1, "parentTitle": "Reacher", "parentYear": 2022, "summary": "When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia.", "theme": "/library/metadata/30072/theme/1705739923", "thumb": "/library/metadata/30072/thumb/1705739923", "title1": "TV Shows", "title2": "Reacher", "viewGroup": "season", "viewMode": 65593, "Directory": [{"leafCount": 16, "thumb": "/library/metadata/30072/thumb/1705739923", "viewedLeafCount": 16, "key": "/library/metadata/30072/allLeaves", "title": "All episodes"}], "Metadata": []}} + application/json: + MediaContainer: + Directory: + - key: /library/metadata/30072/allLeaves + leafCount: 16 + thumb: /library/metadata/30072/thumb/1705739923 + title: All episodes + viewedLeafCount: 16 + Metadata: [] + allowSync: true + art: /library/metadata/30072/art/1705739923 + identifier: com.plexapp.plugins.library + key: "30072" + librarySectionID: 2 + librarySectionTitle: TV Shows + librarySectionUUID: 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1701731894 + nocache: true + parentIndex: 1 + parentTitle: Reacher + parentYear: 2022 + size: 3 + summary: When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. + theme: /library/metadata/30072/theme/1705739923 + thumb: /library/metadata/30072/thumb/1705739923 + title1: TV Shows + title2: Reacher + viewGroup: season + viewMode: 65593 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - getTopWatchedContent: - "": - parameters: - query: - type: 2 - includeGuids: 1 + application/json: + errors: [] + getMyPlexAccount: + speakeasy-default-get-my-plex-account: responses: "200": - application/json: {"MediaContainer": {"size": 1, "allowSync": true, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1698860922, "Metadata": []}} + application/json: + MyPlex: + authToken: Z5v-PrNASDFpsaCi3CPK7 + mappingState: mapped + privateAddress: 10.10.10.47 + privatePort: 32400 + publicAddress: 140.20.68.140 + publicPort: 32400 + signInState: ok + subscriptionFeatures: federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks + subscriptionState: Active + username: example.email@mail.com "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] getOnDeck: speakeasy-default-get-on-deck: responses: "200": - application/json: {"MediaContainer": {"size": 16, "identifier": "com.plexapp.plugins.library", "mediaTagPrefix": "/system/bundle/media/flags/", "mediaTagVersion": 1680021154, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1680021154 + size: 16 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - get-watch-list: - speakeasy-default-get-watch-list: - parameters: - path: - filter: "available" - query: - X-Plex-Container-Start: 0 - X-Plex-Container-Size: 50 - X-Plex-Token: "CV5xoxjTpFKUzBTShsaf" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - logLine: - speakeasy-default-log-line: + application/json: + errors: [] + getPin: + "": parameters: query: - level: 3 - message: "Test log message" - source: "Postman" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - logMultiLine: - speakeasy-default-log-multi-line: - requestBody: - text/plain: "level=4&message=Test%20message%201&source=postman\nlevel=3&message=Test%20message%202&source=postman\nlevel=1&message=Test%20message%203&source=postman" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - enablePaperTrail: - speakeasy-default-enable-paper-trail: - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - createPlaylist: - speakeasy-default-create-playlist: - parameters: - query: - title: "" - type: "photo" - smart: 1 - uri: "https://inborn-brochure.biz" + X-Plex-Product: Plex Web responses: "200": - application/json: {"MediaContainer": {"size": 7, "Metadata": []}} + application/json: + authToken: null + clientIdentifier: string + code: 7RQZ + createdAt: "2024-07-16T17:03:05Z" + expiresAt: "2024-07-16T17:18:05Z" + expiresIn: 876 + id: 308667304 + location: + city: Amsterdam + code: VI + continent_code: NA + coordinates: 18.3381, -64.8941 + country: United States Virgin Islands + european_union_member: true + in_privacy_restricted_country: true + in_privacy_restricted_region: true + postal_code: 802 + subdivisions: Saint Thomas + time_zone: America/St_Thomas + newRegistration: null + product: "0" + qr: https://plex.tv/api/v2/pins/qr/7RQZ + trusted: false "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getPlaylists: - speakeasy-default-get-playlists: - responses: - "200": - application/json: {"MediaContainer": {"size": 4, "Metadata": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} + application/json: + errors: [] getPlaylist: speakeasy-default-get-playlist: parameters: @@ -1497,32 +1616,16 @@ examples: playlistID: "4109.48" responses: "200": - application/json: {"MediaContainer": {"size": 1, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + size: 1 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - deletePlaylist: - speakeasy-default-delete-playlist: - parameters: - path: - playlistID: "216.22" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - updatePlaylist: - speakeasy-default-update-playlist: - parameters: - path: - playlistID: "3915" - query: {} - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} + application/json: + errors: [] getPlaylistContents: speakeasy-default-get-playlist-contents: parameters: @@ -1532,100 +1635,76 @@ examples: type: 2 responses: "200": - application/json: {"MediaContainer": {"size": 2, "composite": "/playlists/95/composite/1705717521", "duration": 282, "leafCount": 2, "playlistType": "video", "ratingKey": "95", "smart": true, "title": "Smart Movie Playlist", "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + composite: /playlists/95/composite/1705717521 + duration: 282 + leafCount: 2 + playlistType: video + ratingKey: "95" + size: 2 + smart: true + title: Smart Movie Playlist "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - clearPlaylistContents: - speakeasy-default-clear-playlist-contents: - parameters: - path: - playlistID: "1893.18" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - addPlaylistContents: - speakeasy-default-add-playlist-contents: - parameters: - path: - playlistID: "8502.01" - query: - uri: "server://12345/com.plexapp.plugins.library/library/metadata/1" - playQueueID: 123 + application/json: + errors: [] + getPlaylists: + speakeasy-default-get-playlists: responses: "200": - application/json: {"MediaContainer": {"size": 1, "leafCountAdded": 1, "leafCountRequested": 1, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + size: 4 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - uploadPlaylist: - speakeasy-default-upload-playlist: + application/json: + errors: [] + getRecentlyAdded: + speakeasy-default-get-recently-added: parameters: query: - path: "/home/barkley/playlist.m3u" - force: 0 - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getTransientToken: - speakeasy-default-get-transient-token: - parameters: - query: - type: "delegation" - scope: "all" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getSourceConnectionInformation: - speakeasy-default-get-source-connection-information: - parameters: - query: - source: "server://client-identifier" - responses: - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getTokenDetails: - speakeasy-default-get-token-details: + X-Plex-Container-Size: 50 + X-Plex-Container-Start: 0 responses: "200": - application/json: {"adsConsent": true, "adsConsentReminderAt": "2019-08-24T14:15:22Z", "adsConsentSetAt": "2019-08-24T14:15:22Z", "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": 1721154902, "locale": null, "mailingListActive": false, "mailingListStatus": "unsubscribed", "maxHomeSize": 15, "pin": "string", "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": "1", "defaultSubtitleAccessibility": "1", "defaultSubtitleForced": "0", "watchedIndicator": "1", "mediaReviewsVisibility": 0}, "protected": false, "rememberExpiresAt": 1722364046, "restricted": false, "roles": ["string"], "scrobbleTypes": "", "services": [{"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "string", "status": "online"}], "subscription": {"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}, "subscriptionDescription": "string", "subscriptions": [{"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f"} + application/json: + MediaContainer: + Metadata: [] + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1680021154 + size: 50 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - post-users-sign-in-data: - speakeasy-default-post-users-sign-in-data: - requestBody: - application/x-www-form-urlencoded: {"login": "username@email.com", "password": "password123", "verificationCode": "123456"} - responses: - "201": - application/json: {"adsConsent": true, "adsConsentReminderAt": "2019-08-24T14:15:22Z", "adsConsentSetAt": "2019-08-24T14:15:22Z", "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": 1721154902, "locale": null, "mailingListActive": false, "mailingListStatus": "unsubscribed", "maxHomeSize": 15, "pin": "string", "profile": {"autoSelectAudio": true, "defaultAudioLanguage": "ja", "defaultSubtitleLanguage": "en", "autoSelectSubtitle": "1", "defaultSubtitleAccessibility": "1", "defaultSubtitleForced": "0", "watchedIndicator": "1", "mediaReviewsVisibility": 0}, "protected": false, "rememberExpiresAt": 1722364046, "restricted": false, "roles": ["string"], "scrobbleTypes": "", "services": [{"identifier": "metadata-dev", "endpoint": "https://epg.provider.plex.tv", "token": "DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv", "secret": "string", "status": "online"}], "subscription": {"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}, "subscriptionDescription": "string", "subscriptions": [{"features": ["Android - Dolby Vision"], "active": true, "subscribedAt": "2021-04-12T18:21:12Z", "status": "Inactive", "paymentService": "string", "plan": "string"}], "thumb": "https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101", "title": "UsernameTitle", "twoFactorEnabled": false, "username": "Username", "uuid": "dae343c1f45beb4f", "pastSubscriptions": [{"id": "string", "mode": "string", "renewsAt": "string", "endsAt": "1556281940", "canceled": "0", "gracePeriod": "0", "onHold": "0", "canReactivate": "0", "canUpgrade": "0", "canDowngrade": "0", "canConvert": "0", "type": "plexpass", "transfer": "string", "state": "ended", "billing": {"paymentMethodId": 569045}}], "trials": [{}]} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - getStatistics: - "": + application/json: + errors: [] + getResizedPhoto: + speakeasy-default-get-resized-photo: parameters: query: - Timespan: 4 + blur: 4000 + height: 165 + minSize: 0 + opacity: 643869 + upscale: 0 + url: /library/metadata/49564/thumb/1654258204 + width: 110 responses: - "200": - application/json: {"MediaContainer": {"size": 5497, "Device": [], "Account": [], "StatisticsMedia": []}} "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] getResourcesStatistics: "": parameters: @@ -1633,85 +1712,86 @@ examples: Timespan: 4 responses: "200": - application/json: {"MediaContainer": {"size": 5497, "StatisticsResources": []}} + application/json: + MediaContainer: + StatisticsResources: [] + size: 5497 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - getBandwidthStatistics: - "": + application/json: + errors: [] + getSearchResults: + speakeasy-default-get-search-results: parameters: query: - Timespan: 4 + query: "110" responses: "200": - application/json: {"MediaContainer": {"size": 5497, "Device": [], "Account": [], "StatisticsBandwidth": []}} + application/json: + MediaContainer: + Metadata: [] + Provider: [] + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1680021154 + size: 26 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - getSessions: - speakeasy-default-get-sessions: + application/json: + errors: [] + getServerActivities: + speakeasy-default-get-server-activities: + responses: + "200": {} + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getServerCapabilities: + speakeasy-default-get-server-capabilities: + responses: + "200": {} + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getServerList: + speakeasy-default-get-server-list: responses: "200": - application/json: {"MediaContainer": {"size": 1, "Metadata": []}} + application/json: + MediaContainer: + Server: [] + size: 1 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] + getServerPreferences: + speakeasy-default-get-server-preferences: + responses: + "200": + application/json: + MediaContainer: + Setting: [] + size: 161 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] getSessionHistory: - viewed-at-descending: - parameters: - query: - sort: "viewedAt:desc" - accountId: 1 - librarySectionID: 12 - responses: - "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - viewed-at-ascending: - parameters: - query: - sort: "viewedAt:asc" - accountId: 1 - librarySectionID: 12 - responses: - "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - rating-descending: - parameters: - query: - sort: "rating:desc" - accountId: 1 - librarySectionID: 12 - responses: - "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} - rating-ascending: - parameters: - query: - sort: "rating:asc" - accountId: 1 - librarySectionID: 12 - responses: - "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} - "400": - application/json: {"errors": []} - "401": - application/json: {"errors": []} "": parameters: query: @@ -1719,11 +1799,16 @@ examples: librarySectionID: 12 responses: "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + size: 10855 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] ViewedAt: parameters: query: @@ -1732,57 +1817,681 @@ examples: librarySectionID: 12 responses: "200": - application/json: {"MediaContainer": {"size": 10855, "Metadata": []}} + application/json: + MediaContainer: + Metadata: [] + size: 10855 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] + rating-ascending: + parameters: + query: + accountId: 1 + librarySectionID: 12 + sort: rating:asc + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + size: 10855 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + rating-descending: + parameters: + query: + accountId: 1 + librarySectionID: 12 + sort: rating:desc + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + size: 10855 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + viewed-at-ascending: + parameters: + query: + accountId: 1 + librarySectionID: 12 + sort: viewedAt:asc + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + size: 10855 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + viewed-at-descending: + parameters: + query: + accountId: 1 + librarySectionID: 12 + sort: viewedAt:desc + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + size: 10855 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getSessions: + speakeasy-default-get-sessions: + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + size: 1 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getSourceConnectionInformation: + speakeasy-default-get-source-connection-information: + parameters: + query: + source: server://client-identifier + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getStatistics: + "": + parameters: + query: + Timespan: 4 + responses: + "200": + application/json: + MediaContainer: + Account: [] + Device: [] + StatisticsMedia: [] + size: 5497 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getTimeline: + "": + parameters: + query: + context: home:hub.continueWatching + duration: 10000 + hasMDE: 1 + key: /library/metadata/23409 + playBackTime: 2000 + playQueueItemID: 1 + ratingKey: 23409 + row: 1 + state: playing + time: 2000 + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getTokenByPinId: + "": + parameters: + path: + pinID: 408895 + query: {} + responses: + "404": + application/json: + errors: + - code: 1020 + message: Code not found or expired + getTokenDetails: + speakeasy-default-get-token-details: + responses: + "200": + application/json: + adsConsent: true + adsConsentReminderAt: "2019-08-24T14:15:22Z" + adsConsentSetAt: "2019-08-24T14:15:22Z" + anonymous: false + authToken: CxoUzBTSV5hsxjTpFKaf + backupCodesCreated: false + confirmed: false + country: US + email: username@email.com + emailOnlyAuth: false + entitlements: [] + experimentalFeatures: false + friendlyName: friendlyUsername + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 13692262 + joinedAt: 1721154902 + locale: null + mailingListActive: false + mailingListStatus: unsubscribed + maxHomeSize: 15 + pin: string + profile: + autoSelectAudio: true + autoSelectSubtitle: "1" + defaultAudioLanguage: ja + defaultSubtitleAccessibility: "1" + defaultSubtitleForced: "0" + defaultSubtitleLanguage: en + mediaReviewsVisibility: 0 + watchedIndicator: "1" + protected: false + rememberExpiresAt: 1722364046 + restricted: false + roles: + - string + scrobbleTypes: "" + services: + - endpoint: https://epg.provider.plex.tv + identifier: metadata-dev + secret: string + status: online + token: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv + subscription: + active: true + features: + - Android - Dolby Vision + paymentService: string + plan: string + status: Inactive + subscribedAt: "2021-04-12T18:21:12Z" + subscriptionDescription: string + subscriptions: + - active: true + features: + - Android - Dolby Vision + paymentService: string + plan: string + status: Inactive + subscribedAt: "2021-04-12T18:21:12Z" + thumb: https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 + title: UsernameTitle + twoFactorEnabled: false + username: Username + uuid: dae343c1f45beb4f + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + getTopWatchedContent: + "": + parameters: + query: + includeGuids: 1 + type: 2 + responses: + "200": + application/json: + MediaContainer: + Metadata: [] + allowSync: true + identifier: com.plexapp.plugins.library + mediaTagPrefix: /system/bundle/media/flags/ + mediaTagVersion: 1698860922 + size: 1 + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] getTranscodeSessions: speakeasy-default-get-transcode-sessions: responses: "200": - application/json: {"MediaContainer": {"size": 1, "TranscodeSession": [{"key": "vv3i2q2lax92qlzul1hbd4bx", "throttled": false, "complete": false, "progress": 1.7999999523162842, "size": -22, "speed": 25.100000381469727, "error": false, "duration": 1445695, "remaining": 53, "context": "streaming", "sourceVideoCodec": "h264", "sourceAudioCodec": "aac", "videoDecision": "transcode", "audioDecision": "transcode", "subtitleDecision": "burn", "protocol": "http", "container": "mkv", "videoCodec": "h264", "audioCodec": "opus", "audioChannels": 1, "transcodeHwRequested": true, "timeStamp": 1705895805.4919229, "maxOffsetAvailable": 29.53, "minOffsetAvailable": 3.003000020980835}]}} + application/json: + MediaContainer: + TranscodeSession: + - audioChannels: 1 + audioCodec: opus + audioDecision: transcode + complete: false + container: mkv + context: streaming + duration: 1445695 + error: false + key: vv3i2q2lax92qlzul1hbd4bx + maxOffsetAvailable: 29.53 + minOffsetAvailable: 3.003000020980835 + progress: 1.7999999523162842 + protocol: http + remaining: 53 + size: -22 + sourceAudioCodec: aac + sourceVideoCodec: h264 + speed: 25.100000381469727 + subtitleDecision: burn + throttled: false + timeStamp: 1.7058958054919229e+09 + transcodeHwRequested: true + videoCodec: h264 + videoDecision: transcode + size: 1 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - stopTranscodeSession: - speakeasy-default-stop-transcode-session: + application/json: + errors: [] + getTransientToken: + speakeasy-default-get-transient-token: parameters: - path: - sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" + query: + scope: all + type: delegation responses: "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] getUpdateStatus: speakeasy-default-get-update-status: responses: "200": - application/json: {"MediaContainer": {"size": 1, "canInstall": false, "checkedAt": 1705801232, "downloadURL": "https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx", "status": 0, "Release": [{"key": "https://plex.tv/updater/releases/5136", "version": "1.40.0.7775-456fbaf97", "added": "(PLEASE NOTE) This version makes changes to the database which will make it compatible only with server versions 1.31.2 or higher (released March 14). You will not be able to use your database on Plex Media Server versions lower than this after this update. Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish.\n(Collections) Items added to a collection from the item context menu will now lock the collection field on the items (#12793)\n(Music) Store track genres and add filtering options (#14653)\n(Music) Support ID3v2.4 null-separated tags for genres and release type (#14653)\n(View History) No longer create a view history entry for items marked as played (#10888)\n(Web) Updated to 4.118.0", "fixed": "(Agents) Changing a 'Other Videos' type library to the modern movie agent would fail (#14483)\n(Agents) It is possible that agents are not initialised during startup on rare occasions (#14654)\n(Agents) Remove the legacy OpenSubtitles agent which is no longer supported upstream (#14667)\n(Collection) Server could become unresponsive when collection membership changes (#14612)\n(DVR) Previously watched recordings could be deleted without being watched again (#13779)\n(Libraries) When performing fix match on items from certain music libraries the language would default to Arabic (#14501)\n(Library) The Content Rating not equal to None filter does not work (#14620)\n(Search) Album search results could contain all the album's tracks too (#14486)\n(Subtitles) In some circumstances, sidecar subtitles can show up for media when they're no longer available (#14674)\n(Transcoder) HW encoding would fail on devices with no rate control (#14222)\n(Transcoder) Software transcoding on Ubuntu could cause unexpected behavior (#14605)", "downloadURL": "https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx", "state": "notify"}]}} + application/json: + MediaContainer: + Release: + - added: |- + (PLEASE NOTE) This version makes changes to the database which will make it compatible only with server versions 1.31.2 or higher (released March 14). You will not be able to use your database on Plex Media Server versions lower than this after this update. Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish. + (Collections) Items added to a collection from the item context menu will now lock the collection field on the items (#12793) + (Music) Store track genres and add filtering options (#14653) + (Music) Support ID3v2.4 null-separated tags for genres and release type (#14653) + (View History) No longer create a view history entry for items marked as played (#10888) + (Web) Updated to 4.118.0 + downloadURL: https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx + fixed: |- + (Agents) Changing a 'Other Videos' type library to the modern movie agent would fail (#14483) + (Agents) It is possible that agents are not initialised during startup on rare occasions (#14654) + (Agents) Remove the legacy OpenSubtitles agent which is no longer supported upstream (#14667) + (Collection) Server could become unresponsive when collection membership changes (#14612) + (DVR) Previously watched recordings could be deleted without being watched again (#13779) + (Libraries) When performing fix match on items from certain music libraries the language would default to Arabic (#14501) + (Library) The Content Rating not equal to None filter does not work (#14620) + (Search) Album search results could contain all the album's tracks too (#14486) + (Subtitles) In some circumstances, sidecar subtitles can show up for media when they're no longer available (#14674) + (Transcoder) HW encoding would fail on devices with no rate control (#14222) + (Transcoder) Software transcoding on Ubuntu could cause unexpected behavior (#14605) + key: https://plex.tv/updater/releases/5136 + state: notify + version: 1.40.0.7775-456fbaf97 + canInstall: false + checkedAt: 1705801232 + downloadURL: https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx + size: 1 + status: 0 "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - checkForUpdates: + application/json: + errors: [] + getUserFriends: + speakeasy-default-get-user-friends: + responses: + "200": + application/json: + - email: username@email.com + friendlyName: exampleUser + home: true + id: 0 + restricted: false + sharedServers: [] + sharedSources: [] + status: accepted + thumb: https://plex.tv/users/7d1916e0d8f6e76b/avatar?c=1694481578 + title: username123 + username: username123 + uuid: 7d1916e0d8f6e76b + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + logLine: + speakeasy-default-log-line: + parameters: + query: + level: 3 + message: Test log message + source: Postman + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + logMultiLine: + speakeasy-default-log-multi-line: + requestBody: + text/plain: |- + level=4&message=Test%20message%201&source=postman + level=3&message=Test%20message%202&source=postman + level=1&message=Test%20message%203&source=postman + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + markPlayed: + speakeasy-default-mark-played: + parameters: + query: + key: 59398 + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + markUnplayed: + speakeasy-default-mark-unplayed: + parameters: + query: + key: 59398 + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + performSearch: + speakeasy-default-perform-search: + parameters: + query: + limit: 5 + query: dylan + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + performVoiceSearch: + speakeasy-default-perform-voice-search: + parameters: + query: + limit: 5 + query: dead+poop + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + post-users-sign-in-data: + speakeasy-default-post-users-sign-in-data: + requestBody: + application/x-www-form-urlencoded: + login: username@email.com + password: password123 + verificationCode: "123456" + responses: + "201": + application/json: + adsConsent: true + adsConsentReminderAt: "2019-08-24T14:15:22Z" + adsConsentSetAt: "2019-08-24T14:15:22Z" + anonymous: false + authToken: CxoUzBTSV5hsxjTpFKaf + backupCodesCreated: false + confirmed: false + country: US + email: username@email.com + emailOnlyAuth: false + entitlements: [] + experimentalFeatures: false + friendlyName: friendlyUsername + guest: false + hasPassword: true + home: false + homeAdmin: false + homeSize: 1 + id: 13692262 + joinedAt: 1721154902 + locale: null + mailingListActive: false + mailingListStatus: unsubscribed + maxHomeSize: 15 + pastSubscriptions: + - billing: + paymentMethodId: 569045 + canConvert: "0" + canDowngrade: "0" + canReactivate: "0" + canUpgrade: "0" + canceled: "0" + endsAt: "1556281940" + gracePeriod: "0" + id: string + mode: string + onHold: "0" + renewsAt: string + state: ended + transfer: string + type: plexpass + pin: string + profile: + autoSelectAudio: true + autoSelectSubtitle: "1" + defaultAudioLanguage: ja + defaultSubtitleAccessibility: "1" + defaultSubtitleForced: "0" + defaultSubtitleLanguage: en + mediaReviewsVisibility: 0 + watchedIndicator: "1" + protected: false + rememberExpiresAt: 1722364046 + restricted: false + roles: + - string + scrobbleTypes: "" + services: + - endpoint: https://epg.provider.plex.tv + identifier: metadata-dev + secret: string + status: online + token: DjoMtqFAGRL1uVtCyF1dKIorTbShJeqv + subscription: + active: true + features: + - Android - Dolby Vision + paymentService: string + plan: string + status: Inactive + subscribedAt: "2021-04-12T18:21:12Z" + subscriptionDescription: string + subscriptions: + - active: true + features: + - Android - Dolby Vision + paymentService: string + plan: string + status: Inactive + subscribedAt: "2021-04-12T18:21:12Z" + thumb: https://plex.tv/users/a4f43c1ebfde43a5/avatar?c=8372075101 + title: UsernameTitle + trials: + - {} + twoFactorEnabled: false + username: Username + uuid: dae343c1f45beb4f + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + startAllTasks: + speakeasy-default-start-all-tasks: + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + startTask: + speakeasy-default-start-task: + parameters: + path: + taskName: CleanOldBundles + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + startUniversalTranscode: "": parameters: query: - download: 1 + addDebugOverlay: 0 + audioBoost: 100 + autoAdjustQuality: 0 + directPlay: 0 + directStream: 0 + fastSeek: 0 + hasMDE: 1 + location: lan + mediaBufferSize: 102400 + mediaIndex: 0 + partIndex: 0 + path: /library/metadata/23409 + protocol: hls + session: zvcage8b7rkioqcm8f4uns4c + subtites: burn + subtitleSize: 100 responses: "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} - applyUpdates: + application/json: + errors: [] + stopAllTasks: + speakeasy-default-stop-all-tasks: + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + stopTask: + speakeasy-default-stop-task: + parameters: + path: + taskName: BackupDatabase + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + stopTranscodeSession: + speakeasy-default-stop-transcode-session: + parameters: + path: + sessionKey: zz7llzqlx8w9vnrsbnwhbmep + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + updatePlayProgress: "": parameters: query: - tonight: 1 - skip: 1 + key: + state: played + time: 90000 responses: "400": - application/json: {"errors": []} + application/json: + errors: [] "401": - application/json: {"errors": []} + application/json: + errors: [] + updatePlaylist: + speakeasy-default-update-playlist: + parameters: + path: + playlistID: "3915" + query: {} + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] + uploadPlaylist: + speakeasy-default-upload-playlist: + parameters: + query: + force: 0 + path: /home/barkley/playlist.m3u + responses: + "400": + application/json: + errors: [] + "401": + application/json: + errors: [] diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 719a4f9..91990cf 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -12,7 +12,7 @@ generation: auth: oAuth2ClientCredentialsEnabled: true swift: - version: 0.6.0 + version: 0.6.1 author: LukeHagar description: Swift Client SDK Generated by Speakeasy imports: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 0254cad..19453e8 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -9,23 +9,22 @@ sources: - main targets: plexswift: - source: my-source - sourceNamespace: my-source - sourceRevisionDigest: sha256:f2bd12dea99ec58806baf867d9dead020363ec38594340220421ffc7a26194db - sourceBlobDigest: sha256:53b60a8a4f52b48ff61e2dd7c1eb787a37c44db8c125efd5dca714698027d09e + source: plexapi + codeSamplesNamespace: code-samples-swift-plexswift + codeSamplesRevisionDigest: sha256:2395d35877d475866cfb3529bd79dc57ae2560164e3882170be16d4917ea2222 outLocation: /github/workspace/repo workflow: workflowVersion: 1.0.0 speakeasyVersion: latest sources: - my-source: + plexapi: inputs: - - location: https://raw.githubusercontent.com/LukeHagar/plex-api-spec/main/plex-media-server-spec-dereferenced.yaml - registry: - location: registry.speakeasyapi.dev/lukehagar/lukehagar/my-source + - location: registry.speakeasyapi.dev/plexapi/plexapi/plexapi:main targets: plexswift: target: swift - source: my-source + source: plexapi codeSamples: output: codeSamples.yaml + registry: + location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-swift-plexswift diff --git a/README.md b/README.md index 237886d..690bd3c 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ You can add `plexswift` to your project directly in Xcode `(File > Add Packages. ```bash dependencies: [ - .package(url: "https://github.com/LukeHagar/plexswift.git", .upToNextMajor(from: "0.6.0")) + .package(url: "https://github.com/LukeHagar/plexswift.git", .upToNextMajor(from: "0.6.1")) ] ``` diff --git a/RELEASES.md b/RELEASES.md index 7bbd48f..bbba68e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -582,4 +582,14 @@ Based on: ### Generated - [swift v0.6.0] . ### Releases -- [Swift Package Manager v0.6.0] https://github.com/LukeHagar/plexswift/releases/tag/v0.6.0 - . \ No newline at end of file +- [Swift Package Manager v0.6.0] https://github.com/LukeHagar/plexswift/releases/tag/v0.6.0 - . + +## 2024-09-17 00:06:59 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.398.0 (2.415.8) https://github.com/speakeasy-api/speakeasy +### Generated +- [swift v0.6.1] . +### Releases +- [Swift Package Manager v0.6.1] https://github.com/LukeHagar/plexswift/releases/tag/v0.6.1 - . \ No newline at end of file diff --git a/Sources/plexswift/internal/client/URLRequestBuilder.swift b/Sources/plexswift/internal/client/URLRequestBuilder.swift index 1c06de5..213218e 100644 --- a/Sources/plexswift/internal/client/URLRequestBuilder.swift +++ b/Sources/plexswift/internal/client/URLRequestBuilder.swift @@ -62,7 +62,7 @@ final class URLRequestBuilder: URLRequestConfiguration { urlRequest.setValue(contentType, forHTTPHeaderField: "Content-Type") } - urlRequest.setValue("speakeasy-sdk/swift 0.6.0 2.415.8 0.0.3 plexswift", forHTTPHeaderField: telemetryHeader.headerName) + urlRequest.setValue("speakeasy-sdk/swift 0.6.1 2.415.8 0.0.3 plexswift", forHTTPHeaderField: telemetryHeader.headerName) addSecurityParameters(to: &urlRequest) diff --git a/codeSamples.yaml b/codeSamples.yaml index 92af644..91dcb5f 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -3,259 +3,27 @@ info: title: CodeSamples overlay for swift target version: 0.0.0 actions: - - target: $["paths"]["/library/hashes"]["get"] + - target: $["paths"]["/servers"]["get"] update: x-codeSamples: - lang: swift - label: getFileHash - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getFileHash(\n request: Operations.GetFileHashRequest(\n url: \"file://C:\\Image.png&type=13\", \n type: 4462.17\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/sections"]["get"] - update: - x-codeSamples: - - lang: swift - label: getLibraries + label: getServerList source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.library.getLibraries() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/library/sections/{sectionId}"]["delete"] - update: - x-codeSamples: - - lang: swift - label: deleteLibrary - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.library.deleteLibrary( - request: Operations.DeleteLibraryRequest( - sectionId: 1000 - ) - ) + let response = try await client.server.getServerList() switch response.data { case .object(let object): // Handle response break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/status/sessions/history/all"]["get"] - update: - x-codeSamples: - - lang: swift - label: getSessionHistory - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.sessions.getSessionHistory(\n request: Operations.GetSessionHistoryRequest(\n accountId: 1, \n filter: Operations.Filter(), \n librarySectionID: 12, \n sort: \"\"\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/:/prefs"]["get"] - update: - x-codeSamples: - - lang: swift - label: getServerPreferences - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.server.getServerPreferences() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .badRequest(let badRequest): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/devices"]["get"] - update: - x-codeSamples: - - lang: swift - label: getDevices - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.server.getDevices() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/playlists/{playlistID}/items"]["put"] - update: - x-codeSamples: - - lang: swift - label: addPlaylistContents - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.addPlaylistContents(\n request: Operations.AddPlaylistContentsRequest(\n playlistID: 8502.01, \n uri: \"server://12345/com.plexapp.plugins.library/library/metadata/1\", \n playQueueID: 123\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/butler"]["post"] - update: - x-codeSamples: - - lang: swift - label: startAllTasks - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.butler.startAllTasks() - - switch response.data { - case .object(let object): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/butler/{taskName}"]["delete"] - update: - x-codeSamples: - - lang: swift - label: stopTask - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.butler.stopTask( - request: Operations.StopTaskRequest( - taskName: .backupDatabase - ) - ) - - switch response.data { - case .object(let object): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/hubs/search"]["get"] - update: - x-codeSamples: - - lang: swift - label: performSearch - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performSearch(\n request: Operations.PerformSearchRequest(\n query: \"dylan\", \n limit: 5, \n sectionId: 1516.53\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}"]["put"] - update: - x-codeSamples: - - lang: swift - label: updatePlaylist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.updatePlaylist(\n request: Operations.UpdatePlaylistRequest(\n playlistID: 3915, \n summary: \"\", \n title: \"\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/butler"]["delete"] - update: - x-codeSamples: - - lang: swift - label: stopAllTasks - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.butler.stopAllTasks() - - switch response.data { - case .object(let object): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/pins"]["post"] - update: - x-codeSamples: - - lang: swift - label: getPin - source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.plex.getPin(\n request: Operations.GetPinRequest(\n xPlexProduct: \"Postman\", \n strong: false, \n )\n)\n\nswitch response.data {\ncase .twoHundredAndOneApplicationJsonObject(let twoHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredApplicationJsonObject(let fourHundredApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/metadata/{ratingKey}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getMetadata - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.library.getMetadata( - request: Operations.GetMetadataRequest( - ratingKey: 8382.31 - ) - ) - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/security/token"]["get"] - update: - x-codeSamples: - - lang: swift - label: getTransientToken - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.authentication.getTransientToken(\n request: Operations.GetTransientTokenRequest(\n scope: .all, \n type: .delegation\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/transcode/sessions/{sessionKey}"]["delete"] - update: - x-codeSamples: - - lang: swift - label: stopTranscodeSession - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.sessions.stopTranscodeSession( - request: Operations.StopTranscodeSessionRequest( - sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" - ) - ) - - switch response.data { - case .object(let object): + case .unauthorized(let unauthorized): // Handle response break case .empty: @@ -280,119 +48,28 @@ actions: ) switch response.data { - case .object(let object): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/butler"]["get"] - update: - x-codeSamples: - - lang: swift - label: getButlerTasks - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.butler.getButlerTasks() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/home"]["get"] - update: - x-codeSamples: - - lang: swift - label: getHomeData - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.plex.getHomeData() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/library/sections/{sectionId}/search"]["get"] - update: - x-codeSamples: - - lang: swift - label: searchLibrary - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.searchLibrary(\n request: Operations.SearchLibraryRequest(\n sectionId: 933505, \n type: .four\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}/items"]["get"] - update: - x-codeSamples: - - lang: swift - label: getPlaylistContents - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylistContents(\n request: Operations.GetPlaylistContentsRequest(\n playlistID: 5004.46, \n type: 9403.59\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists"]["get"] - update: - x-codeSamples: - - lang: swift - label: getPlaylists - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylists(\n request: Operations.GetPlaylistsRequest(\n playlistType: .audio, \n smart: .zero\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getPlaylist - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.playlists.getPlaylist( - request: Operations.GetPlaylistRequest( - playlistID: 4109.48 - ) - ) - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/hubs"]["get"] - update: - x-codeSamples: - - lang: swift - label: getGlobalHubs - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getGlobalHubs(\n request: Operations.GetGlobalHubsRequest(\n count: 1262.49, \n onlyTransient: .one\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - target: $["paths"]["/hubs/sections/{sectionId}"]["get"] update: x-codeSamples: - lang: swift label: getLibraryHubs - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getLibraryHubs(\n request: Operations.GetLibraryHubsRequest(\n sectionId: 6728.76, \n count: 9010.22, \n onlyTransient: .zero\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getLibraryHubs(\n request: Operations.GetLibraryHubsRequest(\n sectionId: 6728.76, \n count: 9010.22, \n onlyTransient: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/hubs/search"]["get"] + update: + x-codeSamples: + - lang: swift + label: performSearch + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performSearch(\n request: Operations.PerformSearchRequest(\n query: \"dylan\", \n limit: 5, \n sectionId: 1516.53\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - target: $["paths"]["/log"]["post"] update: x-codeSamples: @@ -407,159 +84,10 @@ actions: let response = try await client.log.logMultiLine() switch response.data { - case .object(let object): + case .badRequest(let badRequest): // Handle response break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/transcode/sessions"]["get"] - update: - x-codeSamples: - - lang: swift - label: getTranscodeSessions - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.sessions.getTranscodeSessions() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/:/unscrobble"]["get"] - update: - x-codeSamples: - - lang: swift - label: markUnplayed - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.media.markUnplayed( - request: Operations.MarkUnplayedRequest( - key: 59398 - ) - ) - - switch response.data { - case .object(let object): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/:/progress"]["post"] - update: - x-codeSamples: - - lang: swift - label: updatePlayProgress - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.updatePlayProgress(\n request: Operations.UpdatePlayProgressRequest(\n key: \"\", \n state: \"played\", \n time: 90000\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/recentlyAdded"]["get"] - update: - x-codeSamples: - - lang: swift - label: getRecentlyAdded - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.library.getRecentlyAdded() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/video/:/transcode/universal/start.mpd"]["get"] - update: - x-codeSamples: - - lang: swift - label: startUniversalTranscode - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.startUniversalTranscode(\n request: Operations.StartUniversalTranscodeRequest(\n hasMDE: 1, \n mediaIndex: 0, \n partIndex: 0, \n path: \"/library/metadata/23409\", \n `protocol`: \"hls\", \n addDebugOverlay: 0, \n audioBoost: 100, \n autoAdjustQuality: 0, \n directPlay: 0, \n directStream: 0, \n fastSeek: 0, \n location: \"lan\", \n mediaBufferSize: 102400, \n session: \"zvcage8b7rkioqcm8f4uns4c\", \n subtites: \"burn\", \n subtitleSize: 100\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/log"]["get"] - update: - x-codeSamples: - - lang: swift - label: logLine - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.log.logLine(\n request: Operations.LogLineRequest(\n level: .three, \n message: \"Test log message\", \n source: \"Postman\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists"]["post"] - update: - x-codeSamples: - - lang: swift - label: createPlaylist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.createPlaylist(\n request: Operations.CreatePlaylistRequest(\n smart: .one, \n title: \"\", \n type: .photo, \n uri: \"https://inborn-brochure.biz\", \n playQueueID: 3686.33\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/updater/check"]["put"] - update: - x-codeSamples: - - lang: swift - label: checkForUpdates - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.updater.checkForUpdates( - request: Operations.CheckForUpdatesRequest( - download: .one - ) - ) - - switch response.data { - case .object(let object): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/library/sections/watchlist/{filter}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getWatchlist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.watchlist.getWatchlist(\n request: Operations.GetWatchlistRequest(\n filter: .released, \n xPlexToken: \"\", \n includeCollections: .one, \n includeExternalMedia: .one, \n libtype: .show, \n maxresults: 346553, \n sort: \"\", \n xPlexContainerSize: 406911, \n xPlexContainerStart: 958629\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/status/sessions"]["get"] - update: - x-codeSamples: - - lang: swift - label: getSessions - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.sessions.getSessions() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .unauthorized(let unauthorized): // Handle response break case .empty: @@ -571,74 +99,77 @@ actions: x-codeSamples: - lang: swift label: applyUpdates - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.updater.applyUpdates(\n request: Operations.ApplyUpdatesRequest(\n skip: .one, \n tonight: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/"]["get"] + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.updater.applyUpdates(\n request: Operations.ApplyUpdatesRequest(\n skip: .one, \n tonight: .zero\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/identity"]["get"] update: x-codeSamples: - lang: swift - label: getServerCapabilities + label: identity source: |- import Foundation import Plexswift - let client = Client(security: .accessToken("")) + let client = Client() - let response = try await client.server.getServerCapabilities() + let response = try await client.server.getServerIdentity() switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .object(let object): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .requestTimeout(let requestTimeout): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/activities"]["get"] + - target: $["paths"]["/butler"]["delete"] update: x-codeSamples: - lang: swift - label: getServerActivities + label: stopAllTasks source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.activities.getServerActivities() + let response = try await client.butler.stopAllTasks() switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .badRequest(let badRequest): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/butler/{taskName}"]["post"] + - target: $["paths"]["/library/sections/{sectionKey}"]["delete"] update: x-codeSamples: - lang: swift - label: startTask + label: deleteLibrary source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.butler.startTask( - request: Operations.StartTaskRequest( - taskName: .cleanOldBundles + let response = try await client.library.deleteLibrary( + request: Operations.DeleteLibraryRequest( + sectionKey: 9518 ) ) switch response.data { - case .object(let object): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: @@ -650,21 +181,27 @@ actions: x-codeSamples: - lang: swift label: getMetadataChildren - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getMetadataChildren(\n request: Operations.GetMetadataChildrenRequest(\n ratingKey: 1539.14, \n includeElements: \"\"\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/{playlistID}/items"]["delete"] + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getMetadataChildren(\n request: Operations.GetMetadataChildrenRequest(\n ratingKey: 1539.14, \n includeElements: \"\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/upload"]["post"] update: x-codeSamples: - lang: swift - label: clearPlaylistContents + label: uploadPlaylist + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.uploadPlaylist(\n request: Operations.UploadPlaylistRequest(\n force: .zero, \n path: \"/home/barkley/playlist.m3u\"\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/media/providers"]["get"] + update: + x-codeSamples: + - lang: swift + label: providers source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.playlists.clearPlaylistContents( - request: Operations.ClearPlaylistContentsRequest( - playlistID: 1893.18 + let response = try await client.server.getMediaProviders( + request: Operations.GetMediaProvidersRequest( + xPlexToken: "CV5xoxjTpFKUzBTShsaf" ) ) @@ -672,28 +209,10 @@ actions: case .object(let object): // Handle response break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/myplex/account"]["get"] - update: - x-codeSamples: - - lang: swift - label: getMyPlexAccount - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.server.getMyPlexAccount() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .badRequest(let badRequest): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .unauthorized(let unauthorized): // Handle response break case .empty: @@ -718,41 +237,591 @@ actions: ) switch response.data { - case .object(let object): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/search"]["get"] + - target: $["paths"]["/butler"]["get"] update: x-codeSamples: - lang: swift - label: getSearchResults + label: getButlerTasks source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.search.getSearchResults( - request: Operations.GetSearchResultsRequest( - query: "110" - ) - ) + let response = try await client.butler.getButlerTasks() switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .object(let object): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } + - target: $["paths"]["/butler/{taskName}"]["post"] + update: + x-codeSamples: + - lang: swift + label: startTask + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.butler.startTask( + request: Operations.StartTaskRequest( + taskName: .cleanOldBundles + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/resources"]["get"] + update: + x-codeSamples: + - lang: swift + label: resources + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.plex.getServerResources(\n request: Operations.GetServerResourcesRequest(\n includeHttps: .zero, \n includeIPv6: .zero, \n includeRelay: .one, \n )\n)\n\nswitch response.data {\ncase .plexDevices(let plexDevices):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/pins"]["post"] + update: + x-codeSamples: + - lang: swift + label: getPin + source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.plex.getPin(\n request: Operations.GetPinRequest(\n strong: false, \n xPlexProduct: \"Plex Web\"\n )\n)\n\nswitch response.data {\ncase .authPinContainer(let authPinContainer):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/log"]["get"] + update: + x-codeSamples: + - lang: swift + label: logLine + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.log.logLine(\n request: Operations.LogLineRequest(\n level: .three, \n message: \"Test log message\", \n source: \"Postman\"\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/"]["get"] + update: + x-codeSamples: + - lang: swift + label: getServerCapabilities + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.server.getServerCapabilities() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/library/sections"]["get"] + update: + x-codeSamples: + - lang: swift + label: libraries + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.library.getAllLibraries() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/user"]["get"] + update: + x-codeSamples: + - lang: swift + label: getTokenDetails + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.authentication.getTokenDetails() + + switch response.data { + case .userPlexAccount(let userPlexAccount): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/:/prefs"]["get"] + update: + x-codeSamples: + - lang: swift + label: getServerPreferences + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.server.getServerPreferences() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/devices"]["get"] + update: + x-codeSamples: + - lang: swift + label: getDevices + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.server.getDevices() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/activities"]["get"] + update: + x-codeSamples: + - lang: swift + label: getServerActivities + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.activities.getServerActivities() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/home"]["get"] + update: + x-codeSamples: + - lang: swift + label: getHomeData + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.plex.getHomeData() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/library/recentlyAdded"]["get"] + update: + x-codeSamples: + - lang: swift + label: getRecentlyAdded + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getRecentlyAdded(\n request: Operations.GetRecentlyAddedRequest(\n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/sections/{sectionKey}/search"]["get"] + update: + x-codeSamples: + - lang: swift + label: library + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getSearchLibrary(\n request: Operations.GetSearchLibraryRequest(\n sectionKey: 9518, \n type: .two\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/metadata/{ratingKey}"]["get"] + update: + x-codeSamples: + - lang: swift + label: key + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.library.getMetaDataByRatingKey( + request: Operations.GetMetaDataByRatingKeyRequest( + ratingKey: 9518 + ) + ) + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/playlists/{playlistID}"]["get"] + update: + x-codeSamples: + - lang: swift + label: getPlaylist + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.playlists.getPlaylist( + request: Operations.GetPlaylistRequest( + playlistID: 4109.48 + ) + ) + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/clients"]["get"] + update: + x-codeSamples: + - lang: swift + label: getAvailableClients + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.server.getAvailableClients() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/updater/check"]["put"] + update: + x-codeSamples: + - lang: swift + label: checkForUpdates + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.updater.checkForUpdates( + request: Operations.CheckForUpdatesRequest( + download: .one + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/hubs"]["get"] + update: + x-codeSamples: + - lang: swift + label: getGlobalHubs + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.hubs.getGlobalHubs(\n request: Operations.GetGlobalHubsRequest(\n count: 1262.49, \n onlyTransient: .one\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/hubs/search/voice"]["get"] + update: + x-codeSamples: + - lang: swift + label: performVoiceSearch + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performVoiceSearch(\n request: Operations.PerformVoiceSearchRequest(\n query: \"dead+poop\", \n limit: 5, \n sectionId: 4094.8\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/log/networked"]["get"] + update: + x-codeSamples: + - lang: swift + label: enablePaperTrail + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.log.enablePaperTrail() + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/playlists/{playlistID}/items"]["put"] + update: + x-codeSamples: + - lang: swift + label: addPlaylistContents + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.addPlaylistContents(\n request: Operations.AddPlaylistContentsRequest(\n playlistID: 8502.01, \n uri: \"server://12345/com.plexapp.plugins.library/library/metadata/1\", \n playQueueID: 123\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/:/progress"]["post"] + update: + x-codeSamples: + - lang: swift + label: updatePlayProgress + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.updatePlayProgress(\n request: Operations.UpdatePlayProgressRequest(\n key: \"\", \n state: \"played\", \n time: 90000\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/companions"]["get"] + update: + x-codeSamples: + - lang: swift + label: getCompanionsData + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.plex.getCompanionsData() + + switch response.data { + case .responseBodies(let responseBodies): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/library/sections/{sectionKey}/refresh"]["get"] + update: + x-codeSamples: + - lang: swift + label: metadata + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getRefreshLibraryMetadata(\n request: Operations.GetRefreshLibraryMetadataRequest(\n sectionKey: 9518, \n force: .one\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/onDeck"]["get"] + update: + x-codeSamples: + - lang: swift + label: getOnDeck + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.library.getOnDeck() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/library/sections/watchlist/{filter}"]["get"] + update: + x-codeSamples: + - lang: swift + label: list + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.watchlist.getWatchList(\n request: Operations.GetWatchListRequest(\n filter: .available, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\", \n includeCollections: .zero, \n includeExternalMedia: .zero, \n libtype: .show, \n maxresults: 49173, \n sort: \"\", \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists"]["post"] + update: + x-codeSamples: + - lang: swift + label: createPlaylist + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.createPlaylist(\n request: Operations.CreatePlaylistRequest(\n smart: .one, \n title: \"\", \n type: .photo, \n uri: \"https://inborn-brochure.biz\", \n playQueueID: 3686.33\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/statistics/resources"]["get"] + update: + x-codeSamples: + - lang: swift + label: getResourcesStatistics + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.statistics.getResourcesStatistics( + request: Operations.GetResourcesStatisticsRequest( + timespan: 4 + ) + ) + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/transcode/sessions"]["get"] + update: + x-codeSamples: + - lang: swift + label: getTranscodeSessions + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.sessions.getTranscodeSessions() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/photo/:/transcode"]["get"] + update: + x-codeSamples: + - lang: swift + label: getResizedPhoto + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.server.getResizedPhoto(\n request: Operations.GetResizedPhotoRequest(\n blur: 20, \n height: 165, \n minSize: .one, \n opacity: 96541, \n upscale: .zero, \n url: \"/library/metadata/49564/thumb/1654258204\", \n width: 110\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - target: $["paths"]["/statistics/media"]["get"] update: x-codeSamples: @@ -770,140 +839,14 @@ actions: ) ) - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/identity"]["get"] - update: - x-codeSamples: - - lang: swift - label: getServerIdentity - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.server.getServerIdentity() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/:/timeline"]["get"] - update: - x-codeSamples: - - lang: swift - label: getTimeline - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.getTimeline(\n request: Operations.GetTimelineRequest(\n context: \"home:hub.continueWatching\", \n duration: 10000, \n hasMDE: 1, \n key: \"/library/metadata/23409\", \n playBackTime: 2000, \n playQueueItemID: 1, \n ratingKey: 23409, \n row: 1, \n state: .playing, \n time: 2000\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/sections/{sectionId}/refresh"]["get"] - update: - x-codeSamples: - - lang: swift - label: refreshLibrary - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.library.refreshLibrary( - request: Operations.RefreshLibraryRequest( - sectionId: 934.16 - ) - ) - switch response.data { case .object(let object): // Handle response break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/playlists/{playlistID}"]["delete"] - update: - x-codeSamples: - - lang: swift - label: deletePlaylist - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.playlists.deletePlaylist( - request: Operations.DeletePlaylistRequest( - playlistID: 216.22 - ) - ) - - switch response.data { - case .object(let object): + case .badRequest(let badRequest): // Handle response break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/pins/{pinID}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getToken - source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.plex.getToken(\n request: Operations.GetTokenRequest(\n pinID: \"\", \n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredApplicationJsonObject(let fourHundredApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/hubs/search/voice"]["get"] - update: - x-codeSamples: - - lang: swift - label: performVoiceSearch - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.search.performVoiceSearch(\n request: Operations.PerformVoiceSearchRequest(\n query: \"dead+poop\", \n limit: 5, \n sectionId: 4094.8\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/library/sections/{sectionId}/{tag}"]["get"] - update: - x-codeSamples: - - lang: swift - label: getLibraryItems - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryItems(\n request: Operations.GetLibraryItemsRequest(\n sectionId: AnyValue(\"\"), \n tag: .genre, \n includeGuids: 1\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/playlists/upload"]["post"] - update: - x-codeSamples: - - lang: swift - label: uploadPlaylist - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.uploadPlaylist(\n request: Operations.UploadPlaylistRequest(\n force: .zero, \n path: \"/home/barkley/playlist.m3u\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/security/resources"]["get"] - update: - x-codeSamples: - - lang: swift - label: getSourceConnectionInformation - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.authentication.getSourceConnectionInformation( - request: Operations.GetSourceConnectionInformationRequest( - source: "server://client-identifier" - ) - ) - - switch response.data { - case .object(let object): + case .unauthorized(let unauthorized): // Handle response break case .empty: @@ -928,149 +871,371 @@ actions: ) switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .object(let object): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/photo/:/transcode"]["get"] + - target: $["paths"]["/security/token"]["get"] update: x-codeSamples: - lang: swift - label: getResizedPhoto - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.server.getResizedPhoto(\n request: Operations.GetResizedPhotoRequest(\n blur: 20, \n height: 165, \n minSize: .one, \n opacity: 96541, \n upscale: .zero, \n url: \"/library/metadata/49564/thumb/1654258204\", \n width: 110\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/servers"]["get"] + label: getTransientToken + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.authentication.getTransientToken(\n request: Operations.GetTransientTokenRequest(\n scope: .all, \n type: .delegation\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/:/timeline"]["get"] update: x-codeSamples: - lang: swift - label: getServerList + label: getTimeline + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.getTimeline(\n request: Operations.GetTimelineRequest(\n context: \"home:hub.continueWatching\", \n duration: 10000, \n hasMDE: 1, \n key: \"/library/metadata/23409\", \n playBackTime: 2000, \n playQueueItemID: 1, \n ratingKey: 23409, \n row: 1, \n state: .playing, \n time: 2000\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/users/signin"]["post"] + update: + x-codeSamples: + - lang: swift + label: data + source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.authentication.postUsersSignInData(\n request: Operations.PostUsersSignInDataRequest(\n requestBody: Operations.PostUsersSignInDataRequestBody(\n login: \"username@email.com\", \n password: \"password123\", \n rememberMe: false, \n verificationCode: \"123456\"\n ), \n )\n)\n\nswitch response.data {\ncase .userPlexAccount(let userPlexAccount):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/transcode/sessions/{sessionKey}"]["delete"] + update: + x-codeSamples: + - lang: swift + label: stopTranscodeSession source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getServerList() + let response = try await client.sessions.stopTranscodeSession( + request: Operations.StopTranscodeSessionRequest( + sessionKey: "zz7llzqlx8w9vnrsbnwhbmep" + ) + ) switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .badRequest(let badRequest): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/library/sections/{sectionId}"]["get"] + - target: $["paths"]["/library/metadata/{ratingKey}/thumb"]["get"] update: x-codeSamples: - lang: swift - label: getLibrary - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibrary(\n request: Operations.GetLibraryRequest(\n sectionId: 1000, \n includeDetails: .zero\n )\n)\n\nswitch response.data {\ncase .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject):\n // Handle response\n break\ncase .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + label: image + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.getThumbImage(\n request: Operations.GetThumbImageRequest(\n height: 396, \n minSize: 1, \n ratingKey: 9518, \n upscale: 1, \n width: 396, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\"\n )\n)\n\nswitch response.data {\ncase .bytes(let bytes):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}/items"]["delete"] + update: + x-codeSamples: + - lang: swift + label: clearPlaylistContents + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.playlists.clearPlaylistContents( + request: Operations.ClearPlaylistContentsRequest( + playlistID: 1893.18 + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/security/resources"]["get"] + update: + x-codeSamples: + - lang: swift + label: getSourceConnectionInformation + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.authentication.getSourceConnectionInformation( + request: Operations.GetSourceConnectionInformationRequest( + source: "server://client-identifier" + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/library/sections/{sectionKey}/{tag}"]["get"] + update: + x-codeSamples: + - lang: swift + label: items + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryItems(\n request: Operations.GetLibraryItemsRequest(\n sectionKey: 9518, \n tag: .edition, \n type: .three, \n includeGuids: .one, \n includeMeta: .zero, \n xPlexContainerSize: 50, \n xPlexContainerStart: 0\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/butler/{taskName}"]["delete"] + update: + x-codeSamples: + - lang: swift + label: stopTask + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.butler.stopTask( + request: Operations.StopTaskRequest( + taskName: .backupDatabase + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/geoip"]["get"] + update: + x-codeSamples: + - lang: swift + label: getGeoData + source: |- + import Foundation + import Plexswift + + let client = Client() + + let response = try await client.plex.getGeoData() + + switch response.data { + case .geoData(let geoData): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } - target: $["paths"]["/library/all/top"]["get"] update: x-codeSamples: - lang: swift label: getTopWatchedContent - source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getTopWatchedContent(\n request: Operations.GetTopWatchedContentRequest(\n type: 505531, \n includeGuids: 1\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" - - target: $["paths"]["/log/networked"]["get"] + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getTopWatchedContent(\n request: Operations.GetTopWatchedContentRequest(\n type: .three, \n includeGuids: 1\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}/items"]["get"] update: x-codeSamples: - lang: swift - label: enablePaperTrail + label: getPlaylistContents + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylistContents(\n request: Operations.GetPlaylistContentsRequest(\n playlistID: 5004.46, \n type: .four\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/metadata/{ratingKey}/banner"]["get"] + update: + x-codeSamples: + - lang: swift + label: image + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.media.getBannerImage(\n request: Operations.GetBannerImageRequest(\n height: 396, \n minSize: 1, \n ratingKey: 9518, \n upscale: 1, \n width: 396, \n xPlexToken: \"CV5xoxjTpFKUzBTShsaf\"\n )\n)\n\nswitch response.data {\ncase .bytes(let bytes):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/library/hashes"]["get"] + update: + x-codeSamples: + - lang: swift + label: getFileHash + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getFileHash(\n request: Operations.GetFileHashRequest(\n url: \"file://C:\\Image.png&type=13\", \n type: 4462.17\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}"]["put"] + update: + x-codeSamples: + - lang: swift + label: updatePlaylist + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.updatePlaylist(\n request: Operations.UpdatePlaylistRequest(\n playlistID: 3915, \n summary: \"\", \n title: \"\"\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/status/sessions/history/all"]["get"] + update: + x-codeSamples: + - lang: swift + label: getSessionHistory + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.sessions.getSessionHistory(\n request: Operations.GetSessionHistoryRequest(\n accountId: 1, \n filter: Operations.QueryParamFilter(), \n librarySectionID: 12, \n sort: \"\"\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/myplex/account"]["get"] + update: + x-codeSamples: + - lang: swift + label: getMyPlexAccount source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.log.enablePaperTrail() + let response = try await client.server.getMyPlexAccount() switch response.data { case .object(let object): // Handle response break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break case .empty: // Handle empty response break } - - target: $["paths"]["/clients"]["get"] + - target: $["paths"]["/friends"]["get"] update: x-codeSamples: - lang: swift - label: getAvailableClients + label: getUserFriends source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.server.getAvailableClients() + let response = try await client.plex.getUserFriends() switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .friends(let friends): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } - - target: $["paths"]["/library/onDeck"]["get"] + - target: $["paths"]["/:/unscrobble"]["get"] update: x-codeSamples: - lang: swift - label: getOnDeck + label: markUnplayed source: |- import Foundation import Plexswift let client = Client(security: .accessToken("")) - let response = try await client.library.getOnDeck() - - switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): - // Handle response - break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): - // Handle response - break - case .empty: - // Handle empty response - break - } - - target: $["paths"]["/statistics/resources"]["get"] - update: - x-codeSamples: - - lang: swift - label: getResourcesStatistics - source: |- - import Foundation - import Plexswift - - let client = Client(security: .accessToken("")) - - let response = try await client.statistics.getResourcesStatistics( - request: Operations.GetResourcesStatisticsRequest( - timespan: 4 + let response = try await client.media.markUnplayed( + request: Operations.MarkUnplayedRequest( + key: 59398 ) ) switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .badRequest(let badRequest): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/search"]["get"] + update: + x-codeSamples: + - lang: swift + label: getSearchResults + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.search.getSearchResults( + request: Operations.GetSearchResultsRequest( + query: "110" + ) + ) + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/library/sections/{sectionKey}"]["get"] + update: + x-codeSamples: + - lang: swift + label: details + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.library.getLibraryDetails(\n request: Operations.GetLibraryDetailsRequest(\n sectionKey: 9518, \n includeDetails: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists"]["get"] + update: + x-codeSamples: + - lang: swift + label: getPlaylists + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.playlists.getPlaylists(\n request: Operations.GetPlaylistsRequest(\n playlistType: .audio, \n smart: .zero\n )\n)\n\nswitch response.data {\ncase .object(let object):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/playlists/{playlistID}"]["delete"] + update: + x-codeSamples: + - lang: swift + label: deletePlaylist + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.playlists.deletePlaylist( + request: Operations.DeletePlaylistRequest( + playlistID: 216.22 + ) + ) + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: @@ -1091,13 +1256,79 @@ actions: let response = try await client.updater.getUpdateStatus() switch response.data { - case .twoHundredApplicationJsonObject(let twoHundredApplicationJsonObject): + case .object(let object): // Handle response break - case .fourHundredAndOneApplicationJsonObject(let fourHundredAndOneApplicationJsonObject): + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): // Handle response break case .empty: // Handle empty response break } + - target: $["paths"]["/pins/{pinID}"]["get"] + update: + x-codeSamples: + - lang: swift + label: getTokenByPinId + source: "import Foundation\nimport Plexswift\n\nlet client = Client()\n\nlet response = try await client.plex.getTokenByPinId(\n request: Operations.GetTokenByPinIdRequest(\n pinID: 408895, \n )\n)\n\nswitch response.data {\ncase .authPinContainer(let authPinContainer):\n // Handle response\n break\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .object(let object):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}" + - target: $["paths"]["/status/sessions"]["get"] + update: + x-codeSamples: + - lang: swift + label: getSessions + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.sessions.getSessions() + + switch response.data { + case .object(let object): + // Handle response + break + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/butler"]["post"] + update: + x-codeSamples: + - lang: swift + label: startAllTasks + source: |- + import Foundation + import Plexswift + + let client = Client(security: .accessToken("")) + + let response = try await client.butler.startAllTasks() + + switch response.data { + case .badRequest(let badRequest): + // Handle response + break + case .unauthorized(let unauthorized): + // Handle response + break + case .empty: + // Handle empty response + break + } + - target: $["paths"]["/video/:/transcode/universal/start.mpd"]["get"] + update: + x-codeSamples: + - lang: swift + label: startUniversalTranscode + source: "import Foundation\nimport Plexswift\n\nlet client = Client(security: .accessToken(\"\"))\n\nlet response = try await client.video.startUniversalTranscode(\n request: Operations.StartUniversalTranscodeRequest(\n hasMDE: 1, \n mediaIndex: 0, \n partIndex: 0, \n path: \"/library/metadata/23409\", \n `protocol`: \"hls\", \n addDebugOverlay: 0, \n audioBoost: 100, \n autoAdjustQuality: 0, \n directPlay: 0, \n directStream: 0, \n fastSeek: 0, \n location: \"lan\", \n mediaBufferSize: 102400, \n session: \"zvcage8b7rkioqcm8f4uns4c\", \n subtites: \"burn\", \n subtitleSize: 100\n )\n)\n\nswitch response.data {\ncase .badRequest(let badRequest):\n // Handle response\n break\ncase .unauthorized(let unauthorized):\n // Handle response\n break\ncase .empty:\n // Handle empty response\n break\n}"