mirror of
https://github.com/LukeHagar/plexgo.git
synced 2025-12-06 12:37:46 +00:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a712f5595 | ||
|
|
484b48c271 | ||
|
|
06ae97fe29 | ||
|
|
5848325f97 | ||
|
|
82e9da0574 | ||
|
|
8c4caee48d | ||
|
|
d9f461ec33 | ||
|
|
9b882120dd | ||
|
|
673a771f04 | ||
|
|
216a94fe7d | ||
|
|
88d690ffc2 | ||
|
|
48a739d923 | ||
|
|
8b50020e1e | ||
|
|
4bcd080211 | ||
|
|
2e0f3b64ea | ||
|
|
9b0ac863a4 | ||
|
|
33fe0755b5 | ||
|
|
1cfc2d604f | ||
|
|
ef0d39928c | ||
|
|
d2a1c188d5 | ||
|
|
6db5d8fb30 | ||
|
|
89fbd6238e | ||
|
|
7af7441ac7 | ||
|
|
d1945b544b | ||
|
|
16bb49d558 | ||
|
|
4bea7ae0d8 |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1 +1,7 @@
|
|||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.DS_Store
|
||||||
|
**/.speakeasy/temp/
|
||||||
|
**/.speakeasy/logs/
|
||||||
|
.speakeasy/reports
|
||||||
# .gitignore
|
# .gitignore
|
||||||
|
|||||||
1995
.speakeasy/gen.lock
1995
.speakeasy/gen.lock
File diff suppressed because one or more lines are too long
@@ -4,18 +4,28 @@ generation:
|
|||||||
maintainOpenAPIOrder: true
|
maintainOpenAPIOrder: true
|
||||||
usageSnippets:
|
usageSnippets:
|
||||||
optionalPropertyRendering: withExample
|
optionalPropertyRendering: withExample
|
||||||
|
sdkInitStyle: constructor
|
||||||
useClassNamesForArrayFields: true
|
useClassNamesForArrayFields: true
|
||||||
fixes:
|
fixes:
|
||||||
nameResolutionDec2023: true
|
nameResolutionDec2023: true
|
||||||
|
nameResolutionFeb2025: false
|
||||||
parameterOrderingFeb2024: true
|
parameterOrderingFeb2024: true
|
||||||
requestResponseComponentNamesFeb2024: true
|
requestResponseComponentNamesFeb2024: true
|
||||||
|
securityFeb2025: false
|
||||||
|
sharedErrorComponentsApr2025: false
|
||||||
auth:
|
auth:
|
||||||
oAuth2ClientCredentialsEnabled: true
|
oAuth2ClientCredentialsEnabled: true
|
||||||
oAuth2PasswordEnabled: false
|
oAuth2PasswordEnabled: false
|
||||||
|
hoistGlobalSecurity: true
|
||||||
|
tests:
|
||||||
|
generateTests: true
|
||||||
|
generateNewTests: false
|
||||||
|
skipResponseBodyAssertions: false
|
||||||
go:
|
go:
|
||||||
version: 0.16.0
|
version: 0.25.0
|
||||||
additionalDependencies: {}
|
additionalDependencies: {}
|
||||||
allowUnknownFieldsInWeakUnions: false
|
allowUnknownFieldsInWeakUnions: false
|
||||||
|
baseErrorName: PlexAPIError
|
||||||
clientServerStatusCodesAsErrors: true
|
clientServerStatusCodesAsErrors: true
|
||||||
defaultErrorName: SDKError
|
defaultErrorName: SDKError
|
||||||
flattenGlobalSecurity: true
|
flattenGlobalSecurity: true
|
||||||
@@ -30,6 +40,10 @@ go:
|
|||||||
inputModelSuffix: input
|
inputModelSuffix: input
|
||||||
maxMethodParams: 4
|
maxMethodParams: 4
|
||||||
methodArguments: require-security-and-request
|
methodArguments: require-security-and-request
|
||||||
|
modulePath: ""
|
||||||
|
nullableOptionalWrapper: false
|
||||||
outputModelSuffix: output
|
outputModelSuffix: output
|
||||||
packageName: github.com/LukeHagar/plexgo
|
packageName: github.com/LukeHagar/plexgo
|
||||||
|
respectRequiredFields: false
|
||||||
responseFormat: envelope
|
responseFormat: envelope
|
||||||
|
sdkPackageName: ""
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
speakeasyVersion: 1.438.1
|
speakeasyVersion: 1.635.1
|
||||||
sources:
|
sources:
|
||||||
my-source:
|
my-source:
|
||||||
sourceNamespace: my-source
|
sourceNamespace: my-source
|
||||||
@@ -9,19 +9,19 @@ sources:
|
|||||||
- main
|
- main
|
||||||
plexapi:
|
plexapi:
|
||||||
sourceNamespace: plexapi
|
sourceNamespace: plexapi
|
||||||
sourceRevisionDigest: sha256:15e040d800921ded49cf84650ef2bc8fb1acf32c885ee193c42e838d754bf345
|
sourceRevisionDigest: sha256:5125adfea1b0daea399c6ecf755e32795de6b4131465ae6a1f32ad73b3bc7787
|
||||||
sourceBlobDigest: sha256:c178be2b4bfefb37d76c0fdaef37c51f9b6ab1410422d3698a41bb6a8d79a79f
|
sourceBlobDigest: sha256:95cea18b6e5f7d76d35db0aba5bcb59e72cf204451a2b09a99be0e3e9ec1f4c0
|
||||||
tags:
|
tags:
|
||||||
- latest
|
- latest
|
||||||
- main
|
- speakeasy-sdk-regen-1759795832
|
||||||
targets:
|
targets:
|
||||||
plexgo:
|
plexgo:
|
||||||
source: plexapi
|
source: plexapi
|
||||||
sourceNamespace: plexapi
|
sourceNamespace: plexapi
|
||||||
sourceRevisionDigest: sha256:15e040d800921ded49cf84650ef2bc8fb1acf32c885ee193c42e838d754bf345
|
sourceRevisionDigest: sha256:5125adfea1b0daea399c6ecf755e32795de6b4131465ae6a1f32ad73b3bc7787
|
||||||
sourceBlobDigest: sha256:c178be2b4bfefb37d76c0fdaef37c51f9b6ab1410422d3698a41bb6a8d79a79f
|
sourceBlobDigest: sha256:95cea18b6e5f7d76d35db0aba5bcb59e72cf204451a2b09a99be0e3e9ec1f4c0
|
||||||
codeSamplesNamespace: code-samples-go-plexgo
|
codeSamplesNamespace: code-samples-go-plexgo
|
||||||
codeSamplesRevisionDigest: sha256:7a02eff4211d44db5a95061e3af9e7151629b6539d0898b2f9aa2f9785268505
|
codeSamplesRevisionDigest: sha256:f5a86774481f3e1235a867167b1ae386f68f21ddfd77c07662ae7f91306f064e
|
||||||
workflow:
|
workflow:
|
||||||
workflowVersion: 1.0.0
|
workflowVersion: 1.0.0
|
||||||
speakeasyVersion: latest
|
speakeasyVersion: latest
|
||||||
@@ -37,3 +37,5 @@ workflow:
|
|||||||
output: codeSamples.yaml
|
output: codeSamples.yaml
|
||||||
registry:
|
registry:
|
||||||
location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-go-plexgo
|
location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-go-plexgo
|
||||||
|
labelOverride:
|
||||||
|
fixedValue: PlexGO
|
||||||
|
|||||||
@@ -12,3 +12,5 @@ targets:
|
|||||||
output: codeSamples.yaml
|
output: codeSamples.yaml
|
||||||
registry:
|
registry:
|
||||||
location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-go-plexgo
|
location: registry.speakeasyapi.dev/plexapi/plexapi/code-samples-go-plexgo
|
||||||
|
labelOverride:
|
||||||
|
fixedValue: PlexGO
|
||||||
|
|||||||
147
README.md
147
README.md
@@ -40,16 +40,24 @@ The following SDKs are generated from the OpenAPI Specification. They are automa
|
|||||||
|
|
||||||
<!-- Start Table of Contents [toc] -->
|
<!-- Start Table of Contents [toc] -->
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
<!-- $toc-max-depth=2 -->
|
||||||
|
* [github.com/LukeHagar/plexgo](#githubcomlukehagarplexgo)
|
||||||
|
* [Plex Media Server OpenAPI Specification](#plex-media-server-openapi-specification)
|
||||||
|
* [Documentation](#documentation)
|
||||||
|
* [SDKs](#sdks)
|
||||||
|
* [SDK Installation](#sdk-installation)
|
||||||
|
* [SDK Example Usage](#sdk-example-usage)
|
||||||
|
* [Available Resources and Operations](#available-resources-and-operations)
|
||||||
|
* [Retries](#retries)
|
||||||
|
* [Error Handling](#error-handling)
|
||||||
|
* [Server Selection](#server-selection)
|
||||||
|
* [Custom HTTP Client](#custom-http-client)
|
||||||
|
* [Authentication](#authentication)
|
||||||
|
* [Special Types](#special-types)
|
||||||
|
* [Development](#development)
|
||||||
|
* [Maturity](#maturity)
|
||||||
|
* [Contributions](#contributions)
|
||||||
|
|
||||||
* [SDK Installation](#sdk-installation)
|
|
||||||
* [SDK Example Usage](#sdk-example-usage)
|
|
||||||
* [Available Resources and Operations](#available-resources-and-operations)
|
|
||||||
* [Retries](#retries)
|
|
||||||
* [Error Handling](#error-handling)
|
|
||||||
* [Server Selection](#server-selection)
|
|
||||||
* [Custom HTTP Client](#custom-http-client)
|
|
||||||
* [Authentication](#authentication)
|
|
||||||
* [Special Types](#special-types)
|
|
||||||
<!-- End Table of Contents [toc] -->
|
<!-- End Table of Contents [toc] -->
|
||||||
|
|
||||||
<!-- Start SDK Installation [installation] -->
|
<!-- Start SDK Installation [installation] -->
|
||||||
@@ -76,16 +84,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx)
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -138,13 +142,20 @@ func main() {
|
|||||||
* [GetLibraryDetails](docs/sdks/library/README.md#getlibrarydetails) - Get Library Details
|
* [GetLibraryDetails](docs/sdks/library/README.md#getlibrarydetails) - Get Library Details
|
||||||
* [DeleteLibrary](docs/sdks/library/README.md#deletelibrary) - Delete Library Section
|
* [DeleteLibrary](docs/sdks/library/README.md#deletelibrary) - Delete Library Section
|
||||||
* [GetLibraryItems](docs/sdks/library/README.md#getlibraryitems) - Get Library Items
|
* [GetLibraryItems](docs/sdks/library/README.md#getlibraryitems) - Get Library Items
|
||||||
|
* [GetLibrarySectionsAll](docs/sdks/library/README.md#getlibrarysectionsall) - Get Library section media by tag ALL
|
||||||
* [GetRefreshLibraryMetadata](docs/sdks/library/README.md#getrefreshlibrarymetadata) - Refresh Metadata Of The Library
|
* [GetRefreshLibraryMetadata](docs/sdks/library/README.md#getrefreshlibrarymetadata) - Refresh Metadata Of The Library
|
||||||
* [GetSearchLibrary](docs/sdks/library/README.md#getsearchlibrary) - Search Library
|
* [GetSearchLibrary](docs/sdks/library/README.md#getsearchlibrary) - Search Library
|
||||||
|
* [GetGenresLibrary](docs/sdks/library/README.md#getgenreslibrary) - Get Genres of library media
|
||||||
|
* [GetCountriesLibrary](docs/sdks/library/README.md#getcountrieslibrary) - Get Countries of library media
|
||||||
|
* [GetActorsLibrary](docs/sdks/library/README.md#getactorslibrary) - Get Actors of library media
|
||||||
* [GetSearchAllLibraries](docs/sdks/library/README.md#getsearchalllibraries) - Search All Libraries
|
* [GetSearchAllLibraries](docs/sdks/library/README.md#getsearchalllibraries) - Search All Libraries
|
||||||
* [GetMetaDataByRatingKey](docs/sdks/library/README.md#getmetadatabyratingkey) - Get Metadata by RatingKey
|
* [GetMediaMetaData](docs/sdks/library/README.md#getmediametadata) - Get Media Metadata
|
||||||
|
* [GetMediaArts](docs/sdks/library/README.md#getmediaarts) - Get Media Background Artwork
|
||||||
|
* [PostMediaArts](docs/sdks/library/README.md#postmediaarts) - Upload Media Background Artwork
|
||||||
|
* [GetMediaPosters](docs/sdks/library/README.md#getmediaposters) - Get Media Posters
|
||||||
|
* [PostMediaPoster](docs/sdks/library/README.md#postmediaposter) - Upload Media Poster
|
||||||
* [GetMetadataChildren](docs/sdks/library/README.md#getmetadatachildren) - Get Items Children
|
* [GetMetadataChildren](docs/sdks/library/README.md#getmetadatachildren) - Get Items Children
|
||||||
* [GetTopWatchedContent](docs/sdks/library/README.md#gettopwatchedcontent) - Get Top Watched Content
|
* [GetTopWatchedContent](docs/sdks/library/README.md#gettopwatchedcontent) - Get Top Watched Content
|
||||||
* [GetOnDeck](docs/sdks/library/README.md#getondeck) - Get On Deck
|
|
||||||
|
|
||||||
### [Log](docs/sdks/log/README.md)
|
### [Log](docs/sdks/log/README.md)
|
||||||
|
|
||||||
@@ -220,6 +231,10 @@ func main() {
|
|||||||
* [CheckForUpdates](docs/sdks/updater/README.md#checkforupdates) - Checking for updates
|
* [CheckForUpdates](docs/sdks/updater/README.md#checkforupdates) - Checking for updates
|
||||||
* [ApplyUpdates](docs/sdks/updater/README.md#applyupdates) - Apply Updates
|
* [ApplyUpdates](docs/sdks/updater/README.md#applyupdates) - Apply Updates
|
||||||
|
|
||||||
|
### [Users](docs/sdks/users/README.md)
|
||||||
|
|
||||||
|
* [GetUsers](docs/sdks/users/README.md#getusers) - Get list of all connected users
|
||||||
|
|
||||||
### [Video](docs/sdks/video/README.md)
|
### [Video](docs/sdks/video/README.md)
|
||||||
|
|
||||||
* [GetTimeline](docs/sdks/video/README.md#gettimeline) - Get the timeline for a media item
|
* [GetTimeline](docs/sdks/video/README.md#gettimeline) - Get the timeline for a media item
|
||||||
@@ -250,16 +265,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx, operations.WithRetries(
|
res, err := s.Server.GetServerCapabilities(ctx, operations.WithRetries(
|
||||||
retry.Config{
|
retry.Config{
|
||||||
Strategy: "backoff",
|
Strategy: "backoff",
|
||||||
@@ -293,6 +304,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithRetryConfig(
|
plexgo.WithRetryConfig(
|
||||||
retry.Config{
|
retry.Config{
|
||||||
@@ -306,14 +319,8 @@ func main() {
|
|||||||
RetryConnectionErrors: false,
|
RetryConnectionErrors: false,
|
||||||
}),
|
}),
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx)
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -355,16 +362,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx)
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
||||||
@@ -397,13 +400,15 @@ func main() {
|
|||||||
### Server Variables
|
### Server Variables
|
||||||
|
|
||||||
The default server `{protocol}://{ip}:{port}` contains variables and is set to `https://10.10.10.47:32400` by default. To override default values, the following options are available when initializing the SDK client instance:
|
The default server `{protocol}://{ip}:{port}` contains variables and is set to `https://10.10.10.47:32400` by default. To override default values, the following options are available when initializing the SDK client instance:
|
||||||
* `WithProtocol(protocol ServerProtocol)`
|
|
||||||
* `WithIP(ip string)`
|
|
||||||
* `WithPort(port string)`
|
|
||||||
|
|
||||||
### Override Server URL Per-Client
|
| Variable | Option | Supported Values | Default | Description |
|
||||||
|
| ---------- | --------------------------------------- | -------------------------- | --------------- | ---------------------------------------------- |
|
||||||
|
| `protocol` | `WithProtocol(protocol ServerProtocol)` | - `"http"`<br/>- `"https"` | `"https"` | The protocol to use for the server connection |
|
||||||
|
| `ip` | `WithIP(ip string)` | string | `"10.10.10.47"` | The IP address or hostname of your Plex Server |
|
||||||
|
| `port` | `WithPort(port string)` | string | `"32400"` | The port of your Plex Server |
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
The default server can also be overridden globally using the `WithServerURL(serverURL string)` option when initializing the SDK client instance. For example:
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
@@ -414,17 +419,46 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
s := plexgo.New(
|
||||||
|
plexgo.WithProtocol("https"),
|
||||||
|
plexgo.WithIP("4982:bc2a:b4f8:efb5:2394:5bc3:ab4f:0e6d"),
|
||||||
|
plexgo.WithPort("44765"),
|
||||||
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
|
)
|
||||||
|
|
||||||
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
if res.Object != nil {
|
||||||
|
// handle response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Override Server URL Per-Client
|
||||||
|
|
||||||
|
The default server can be overridden globally using the `WithServerURL(serverURL string)` option when initializing the SDK client instance. For example:
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/LukeHagar/plexgo"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithServerURL("https://10.10.10.47:32400"),
|
plexgo.WithServerURL("https://10.10.10.47:32400"),
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx)
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -450,16 +484,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Plex.GetCompanionsData(ctx, operations.WithServerURL("https://plex.tv/api/v2"))
|
res, err := s.Plex.GetCompanionsData(ctx, operations.WithServerURL("https://plex.tv/api/v2"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -489,12 +519,13 @@ The built-in `net/http` client satisfies this interface and a default client bas
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
"github.com/myorg/your-go-sdk"
|
|
||||||
|
"github.com/LukeHagar/plexgo"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
httpClient = &http.Client{Timeout: 30 * time.Second}
|
httpClient = &http.Client{Timeout: 30 * time.Second}
|
||||||
sdkClient = sdk.New(sdk.WithClient(httpClient))
|
sdkClient = plexgo.New(plexgo.WithClient(httpClient))
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -523,16 +554,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx)
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
250
RELEASES.md
250
RELEASES.md
@@ -963,3 +963,253 @@ Based on:
|
|||||||
- [go v0.16.0] .
|
- [go v0.16.0] .
|
||||||
### Releases
|
### Releases
|
||||||
- [Go v0.16.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.16.0 - .
|
- [Go v0.16.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.16.0 - .
|
||||||
|
|
||||||
|
## 2024-11-14 00:09:05
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.438.3 (2.457.9) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.16.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.16.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.16.1 - .
|
||||||
|
|
||||||
|
## 2024-12-21 00:09:02
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.459.2 (2.483.1) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.17.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.17.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.17.0 - .
|
||||||
|
|
||||||
|
## 2024-12-23 00:09:31
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.459.2 (2.483.1) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.17.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.17.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.17.1 - .
|
||||||
|
|
||||||
|
## 2025-01-25 00:08:47
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.476.0 (2.496.0) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.17.2] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.17.2] https://github.com/LukeHagar/plexgo/releases/tag/v0.17.2 - .
|
||||||
|
|
||||||
|
## 2025-01-28 00:08:53
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.476.2 (2.495.1) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.17.3] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.17.3] https://github.com/LukeHagar/plexgo/releases/tag/v0.17.3 - .
|
||||||
|
|
||||||
|
## 2025-02-06 00:09:00
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.484.1 (2.503.2) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.17.4] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.17.4] https://github.com/LukeHagar/plexgo/releases/tag/v0.17.4 - .
|
||||||
|
|
||||||
|
## 2025-02-07 00:09:08
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.487.0 (2.506.0) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.18.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.18.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.18.0 - .
|
||||||
|
|
||||||
|
## 2025-02-08 00:08:51
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.487.1 (2.506.0) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.18.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.18.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.18.1 - .
|
||||||
|
|
||||||
|
## 2025-02-11 00:09:00
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.488.0 (2.506.0) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.19.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.19.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.19.0 - .
|
||||||
|
|
||||||
|
## 2025-03-08 00:07:57
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.513.4 (2.545.4) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.19.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.19.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.19.1 - .
|
||||||
|
|
||||||
|
## 2025-03-10 00:08:31
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.513.4 (2.545.4) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.19.2] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.19.2] https://github.com/LukeHagar/plexgo/releases/tag/v0.19.2 - .
|
||||||
|
|
||||||
|
## 2025-03-31 17:29:50
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.526.6 (2.563.1) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.19.3] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.19.3] https://github.com/LukeHagar/plexgo/releases/tag/v0.19.3 - .
|
||||||
|
|
||||||
|
## 2025-04-03 21:55:33
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.528.1 (2.565.1) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.20.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.20.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.20.0 - .
|
||||||
|
|
||||||
|
## 2025-04-07 00:10:20
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.529.1 (2.566.5) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.20.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.20.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.20.1 - .
|
||||||
|
|
||||||
|
## 2025-04-15 00:10:03
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.531.4 (2.570.4) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.20.2] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.20.2] https://github.com/LukeHagar/plexgo/releases/tag/v0.20.2 - .
|
||||||
|
|
||||||
|
## 2025-04-18 22:59:48
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.535.1 (2.585.2) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.20.3] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.20.3] https://github.com/LukeHagar/plexgo/releases/tag/v0.20.3 - .
|
||||||
|
|
||||||
|
## 2025-04-19 17:12:25
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.535.1 (2.585.2) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.21.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.21.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.21.0 - .
|
||||||
|
|
||||||
|
## 2025-05-02 00:10:13
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.542.0 (2.596.2) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.21.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.21.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.21.1 - .
|
||||||
|
|
||||||
|
## 2025-05-06 00:10:17
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.542.3 (2.597.9) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.21.2] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.21.2] https://github.com/LukeHagar/plexgo/releases/tag/v0.21.2 - .
|
||||||
|
|
||||||
|
## 2025-06-05 00:10:42
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.555.3 (2.620.2) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.22.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.22.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.22.0 - .
|
||||||
|
|
||||||
|
## 2025-06-10 00:10:47
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.558.1 (2.623.4) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.23.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.23.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.23.0 - .
|
||||||
|
|
||||||
|
## 2025-08-06 00:11:40
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.598.0 (2.674.1) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.24.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.24.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.24.0 - .
|
||||||
|
|
||||||
|
## 2025-08-07 00:11:47
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.598.3 (2.674.3) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.24.1] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.24.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.24.1 - .
|
||||||
|
|
||||||
|
## 2025-09-16 00:09:55
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.615.2 (2.698.4) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.24.2] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.24.2] https://github.com/LukeHagar/plexgo/releases/tag/v0.24.2 - .
|
||||||
|
|
||||||
|
## 2025-10-07 00:10:14
|
||||||
|
### Changes
|
||||||
|
Based on:
|
||||||
|
- OpenAPI Doc
|
||||||
|
- Speakeasy CLI 1.635.1 (2.722.2) https://github.com/speakeasy-api/speakeasy
|
||||||
|
### Generated
|
||||||
|
- [go v0.25.0] .
|
||||||
|
### Releases
|
||||||
|
- [Go v0.25.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.25.0 - .
|
||||||
8
USAGE.md
8
USAGE.md
@@ -9,16 +9,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
s := plexgo.New(
|
s := plexgo.New(
|
||||||
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
plexgo.WithSecurity("<YOUR_API_KEY_HERE>"),
|
||||||
plexgo.WithClientID("3381b62b-9ab7-4e37-827b-203e9809eb58"),
|
|
||||||
plexgo.WithClientName("Plex for Roku"),
|
|
||||||
plexgo.WithClientVersion("2.4.1"),
|
|
||||||
plexgo.WithPlatform("Roku"),
|
|
||||||
plexgo.WithDeviceNickname("Roku 3"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
res, err := s.Server.GetServerCapabilities(ctx)
|
res, err := s.Server.GetServerCapabilities(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
127
activities.go
127
activities.go
@@ -6,11 +6,12 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/LukeHagar/plexgo/internal/config"
|
||||||
"github.com/LukeHagar/plexgo/internal/hooks"
|
"github.com/LukeHagar/plexgo/internal/hooks"
|
||||||
"github.com/LukeHagar/plexgo/internal/utils"
|
"github.com/LukeHagar/plexgo/internal/utils"
|
||||||
"github.com/LukeHagar/plexgo/models/operations"
|
"github.com/LukeHagar/plexgo/models/operations"
|
||||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||||
"github.com/cenkalti/backoff/v4"
|
"github.com/LukeHagar/plexgo/retry"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
@@ -23,25 +24,22 @@ import (
|
|||||||
// - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.)
|
// - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.)
|
||||||
// - The may contain a `Response` object which attributes which represent the result of the asynchronous operation.
|
// - The may contain a `Response` object which attributes which represent the result of the asynchronous operation.
|
||||||
type Activities struct {
|
type Activities struct {
|
||||||
sdkConfiguration sdkConfiguration
|
rootSDK *PlexAPI
|
||||||
|
sdkConfiguration config.SDKConfiguration
|
||||||
|
hooks *hooks.Hooks
|
||||||
}
|
}
|
||||||
|
|
||||||
func newActivities(sdkConfig sdkConfiguration) *Activities {
|
func newActivities(rootSDK *PlexAPI, sdkConfig config.SDKConfiguration, hooks *hooks.Hooks) *Activities {
|
||||||
return &Activities{
|
return &Activities{
|
||||||
|
rootSDK: rootSDK,
|
||||||
sdkConfiguration: sdkConfig,
|
sdkConfiguration: sdkConfig,
|
||||||
|
hooks: hooks,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetServerActivities - Get Server Activities
|
// GetServerActivities - Get Server Activities
|
||||||
// Get Server Activities
|
// Get Server Activities
|
||||||
func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations.Option) (*operations.GetServerActivitiesResponse, error) {
|
func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations.Option) (*operations.GetServerActivitiesResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "getServerActivities",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
o := operations.Options{}
|
o := operations.Options{}
|
||||||
supportedOptions := []string{
|
supportedOptions := []string{
|
||||||
operations.SupportedOptionRetries,
|
operations.SupportedOptionRetries,
|
||||||
@@ -54,12 +52,27 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := url.JoinPath(baseURL, "/activities")
|
opURL, err := url.JoinPath(baseURL, "/activities")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "getServerActivities",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -82,6 +95,10 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -102,17 +119,23 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -123,7 +146,7 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -131,13 +154,13 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -150,17 +173,17 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -240,7 +263,11 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -262,13 +289,6 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
|||||||
// CancelServerActivities - Cancel Server Activities
|
// CancelServerActivities - Cancel Server Activities
|
||||||
// Cancel Server Activities
|
// Cancel Server Activities
|
||||||
func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID string, opts ...operations.Option) (*operations.CancelServerActivitiesResponse, error) {
|
func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID string, opts ...operations.Option) (*operations.CancelServerActivitiesResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "cancelServerActivities",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
request := operations.CancelServerActivitiesRequest{
|
request := operations.CancelServerActivitiesRequest{
|
||||||
ActivityUUID: activityUUID,
|
ActivityUUID: activityUUID,
|
||||||
}
|
}
|
||||||
@@ -285,12 +305,27 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := utils.GenerateURL(ctx, baseURL, "/activities/{activityUUID}", request, nil)
|
opURL, err := utils.GenerateURL(ctx, baseURL, "/activities/{activityUUID}", request, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "cancelServerActivities",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -313,6 +348,10 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -333,17 +372,23 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -354,7 +399,7 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -362,13 +407,13 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -381,17 +426,17 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -451,7 +496,11 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -6,36 +6,34 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/LukeHagar/plexgo/internal/config"
|
||||||
"github.com/LukeHagar/plexgo/internal/hooks"
|
"github.com/LukeHagar/plexgo/internal/hooks"
|
||||||
"github.com/LukeHagar/plexgo/internal/utils"
|
"github.com/LukeHagar/plexgo/internal/utils"
|
||||||
"github.com/LukeHagar/plexgo/models/operations"
|
"github.com/LukeHagar/plexgo/models/operations"
|
||||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||||
"github.com/cenkalti/backoff/v4"
|
"github.com/LukeHagar/plexgo/retry"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Authentication - API Calls regarding authentication for Plex Media Server
|
// Authentication - API Calls regarding authentication for Plex Media Server
|
||||||
type Authentication struct {
|
type Authentication struct {
|
||||||
sdkConfiguration sdkConfiguration
|
rootSDK *PlexAPI
|
||||||
|
sdkConfiguration config.SDKConfiguration
|
||||||
|
hooks *hooks.Hooks
|
||||||
}
|
}
|
||||||
|
|
||||||
func newAuthentication(sdkConfig sdkConfiguration) *Authentication {
|
func newAuthentication(rootSDK *PlexAPI, sdkConfig config.SDKConfiguration, hooks *hooks.Hooks) *Authentication {
|
||||||
return &Authentication{
|
return &Authentication{
|
||||||
|
rootSDK: rootSDK,
|
||||||
sdkConfiguration: sdkConfig,
|
sdkConfiguration: sdkConfig,
|
||||||
|
hooks: hooks,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTransientToken - Get a Transient Token
|
// GetTransientToken - Get a Transient Token
|
||||||
// This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted.
|
// This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted.
|
||||||
func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations.GetTransientTokenQueryParamType, scope operations.Scope, opts ...operations.Option) (*operations.GetTransientTokenResponse, error) {
|
func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations.GetTransientTokenQueryParamType, scope operations.Scope, opts ...operations.Option) (*operations.GetTransientTokenResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "getTransientToken",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
request := operations.GetTransientTokenRequest{
|
request := operations.GetTransientTokenRequest{
|
||||||
Type: type_,
|
Type: type_,
|
||||||
Scope: scope,
|
Scope: scope,
|
||||||
@@ -53,12 +51,27 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := url.JoinPath(baseURL, "/security/token")
|
opURL, err := url.JoinPath(baseURL, "/security/token")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "getTransientToken",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -85,6 +98,10 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -105,17 +122,23 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -126,7 +149,7 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -134,13 +157,13 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -153,17 +176,17 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -223,7 +246,11 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -246,13 +273,6 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
|||||||
// If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token.
|
// If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token.
|
||||||
// Note: requires Plex Media Server >= 1.15.4.
|
// Note: requires Plex Media Server >= 1.15.4.
|
||||||
func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, source string, opts ...operations.Option) (*operations.GetSourceConnectionInformationResponse, error) {
|
func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, source string, opts ...operations.Option) (*operations.GetSourceConnectionInformationResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "getSourceConnectionInformation",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
request := operations.GetSourceConnectionInformationRequest{
|
request := operations.GetSourceConnectionInformationRequest{
|
||||||
Source: source,
|
Source: source,
|
||||||
}
|
}
|
||||||
@@ -269,12 +289,27 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := url.JoinPath(baseURL, "/security/resources")
|
opURL, err := url.JoinPath(baseURL, "/security/resources")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "getSourceConnectionInformation",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -301,6 +336,10 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -321,17 +360,23 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -342,7 +387,7 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -350,13 +395,13 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -369,17 +414,17 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -439,7 +484,11 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -461,16 +510,8 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
|||||||
// GetTokenDetails - Get Token Details
|
// GetTokenDetails - Get Token Details
|
||||||
// Get the User data from the provided X-Plex-Token
|
// Get the User data from the provided X-Plex-Token
|
||||||
func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations.Option) (*operations.GetTokenDetailsResponse, error) {
|
func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations.Option) (*operations.GetTokenDetailsResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "getTokenDetails",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
o := operations.Options{}
|
o := operations.Options{}
|
||||||
supportedOptions := []string{
|
supportedOptions := []string{
|
||||||
operations.SupportedOptionServerURL,
|
|
||||||
operations.SupportedOptionRetries,
|
operations.SupportedOptionRetries,
|
||||||
operations.SupportedOptionTimeout,
|
operations.SupportedOptionTimeout,
|
||||||
}
|
}
|
||||||
@@ -491,6 +532,16 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "getTokenDetails",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -513,6 +564,10 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -533,17 +588,23 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -554,7 +615,7 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -562,13 +623,13 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -581,17 +642,17 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -671,7 +732,11 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -693,24 +758,8 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
|||||||
// PostUsersSignInData - Get User Sign In Data
|
// PostUsersSignInData - Get User Sign In Data
|
||||||
// Sign in user with username and password and return user data with Plex authentication token
|
// Sign in user with username and password and return user data with Plex authentication token
|
||||||
func (s *Authentication) PostUsersSignInData(ctx context.Context, request operations.PostUsersSignInDataRequest, opts ...operations.Option) (*operations.PostUsersSignInDataResponse, error) {
|
func (s *Authentication) PostUsersSignInData(ctx context.Context, request operations.PostUsersSignInDataRequest, opts ...operations.Option) (*operations.PostUsersSignInDataResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "post-users-sign-in-data",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: nil,
|
|
||||||
}
|
|
||||||
|
|
||||||
globals := operations.PostUsersSignInDataGlobals{
|
|
||||||
ClientID: s.sdkConfiguration.Globals.ClientID,
|
|
||||||
ClientName: s.sdkConfiguration.Globals.ClientName,
|
|
||||||
DeviceNickname: s.sdkConfiguration.Globals.DeviceNickname,
|
|
||||||
ClientVersion: s.sdkConfiguration.Globals.ClientVersion,
|
|
||||||
Platform: s.sdkConfiguration.Globals.Platform,
|
|
||||||
}
|
|
||||||
|
|
||||||
o := operations.Options{}
|
o := operations.Options{}
|
||||||
supportedOptions := []string{
|
supportedOptions := []string{
|
||||||
operations.SupportedOptionServerURL,
|
|
||||||
operations.SupportedOptionRetries,
|
operations.SupportedOptionRetries,
|
||||||
operations.SupportedOptionTimeout,
|
operations.SupportedOptionTimeout,
|
||||||
}
|
}
|
||||||
@@ -731,6 +780,15 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "post-users-sign-in-data",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: nil,
|
||||||
|
}
|
||||||
bodyReader, reqContentType, err := utils.SerializeRequestBody(ctx, request, false, true, "RequestBody", "form", `request:"mediaType=application/x-www-form-urlencoded"`)
|
bodyReader, reqContentType, err := utils.SerializeRequestBody(ctx, request, false, true, "RequestBody", "form", `request:"mediaType=application/x-www-form-urlencoded"`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -753,9 +811,15 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
}
|
}
|
||||||
req.Header.Set("Accept", "application/json")
|
req.Header.Set("Accept", "application/json")
|
||||||
req.Header.Set("User-Agent", s.sdkConfiguration.UserAgent)
|
req.Header.Set("User-Agent", s.sdkConfiguration.UserAgent)
|
||||||
|
if reqContentType != "" {
|
||||||
req.Header.Set("Content-Type", reqContentType)
|
req.Header.Set("Content-Type", reqContentType)
|
||||||
|
}
|
||||||
|
|
||||||
utils.PopulateHeaders(ctx, req, request, globals)
|
utils.PopulateHeaders(ctx, req, request, nil)
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
@@ -777,17 +841,23 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -798,7 +868,7 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -806,13 +876,13 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -825,17 +895,17 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -915,7 +985,11 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
301
butler.go
301
butler.go
@@ -6,36 +6,34 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/LukeHagar/plexgo/internal/config"
|
||||||
"github.com/LukeHagar/plexgo/internal/hooks"
|
"github.com/LukeHagar/plexgo/internal/hooks"
|
||||||
"github.com/LukeHagar/plexgo/internal/utils"
|
"github.com/LukeHagar/plexgo/internal/utils"
|
||||||
"github.com/LukeHagar/plexgo/models/operations"
|
"github.com/LukeHagar/plexgo/models/operations"
|
||||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||||
"github.com/cenkalti/backoff/v4"
|
"github.com/LukeHagar/plexgo/retry"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Butler is the task manager of the Plex Media Server Ecosystem.
|
// Butler is the task manager of the Plex Media Server Ecosystem.
|
||||||
type Butler struct {
|
type Butler struct {
|
||||||
sdkConfiguration sdkConfiguration
|
rootSDK *PlexAPI
|
||||||
|
sdkConfiguration config.SDKConfiguration
|
||||||
|
hooks *hooks.Hooks
|
||||||
}
|
}
|
||||||
|
|
||||||
func newButler(sdkConfig sdkConfiguration) *Butler {
|
func newButler(rootSDK *PlexAPI, sdkConfig config.SDKConfiguration, hooks *hooks.Hooks) *Butler {
|
||||||
return &Butler{
|
return &Butler{
|
||||||
|
rootSDK: rootSDK,
|
||||||
sdkConfiguration: sdkConfig,
|
sdkConfiguration: sdkConfig,
|
||||||
|
hooks: hooks,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetButlerTasks - Get Butler tasks
|
// GetButlerTasks - Get Butler tasks
|
||||||
// Returns a list of butler tasks
|
// Returns a list of butler tasks
|
||||||
func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option) (*operations.GetButlerTasksResponse, error) {
|
func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option) (*operations.GetButlerTasksResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "getButlerTasks",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
o := operations.Options{}
|
o := operations.Options{}
|
||||||
supportedOptions := []string{
|
supportedOptions := []string{
|
||||||
operations.SupportedOptionRetries,
|
operations.SupportedOptionRetries,
|
||||||
@@ -48,12 +46,27 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := url.JoinPath(baseURL, "/butler")
|
opURL, err := url.JoinPath(baseURL, "/butler")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "getButlerTasks",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -76,6 +89,10 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -96,17 +113,23 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -117,7 +140,7 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -125,13 +148,13 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -144,17 +167,17 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -234,7 +257,11 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -260,13 +287,6 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
|||||||
// 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window.
|
// 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window.
|
||||||
// 4. If we are outside the configured window, the task will start immediately.
|
// 4. If we are outside the configured window, the task will start immediately.
|
||||||
func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (*operations.StartAllTasksResponse, error) {
|
func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (*operations.StartAllTasksResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "startAllTasks",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
o := operations.Options{}
|
o := operations.Options{}
|
||||||
supportedOptions := []string{
|
supportedOptions := []string{
|
||||||
operations.SupportedOptionRetries,
|
operations.SupportedOptionRetries,
|
||||||
@@ -279,12 +299,27 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := url.JoinPath(baseURL, "/butler")
|
opURL, err := url.JoinPath(baseURL, "/butler")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "startAllTasks",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -307,6 +342,10 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -327,17 +366,23 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -348,7 +393,7 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -356,13 +401,13 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -375,17 +420,17 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -445,7 +490,11 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -467,13 +516,6 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
|||||||
// StopAllTasks - Stop all Butler tasks
|
// StopAllTasks - Stop all Butler tasks
|
||||||
// This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue.
|
// This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue.
|
||||||
func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*operations.StopAllTasksResponse, error) {
|
func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*operations.StopAllTasksResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "stopAllTasks",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
o := operations.Options{}
|
o := operations.Options{}
|
||||||
supportedOptions := []string{
|
supportedOptions := []string{
|
||||||
operations.SupportedOptionRetries,
|
operations.SupportedOptionRetries,
|
||||||
@@ -486,12 +528,27 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := url.JoinPath(baseURL, "/butler")
|
opURL, err := url.JoinPath(baseURL, "/butler")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "stopAllTasks",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -514,6 +571,10 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -534,17 +595,23 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -555,7 +622,7 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -563,13 +630,13 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -582,17 +649,17 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -652,7 +719,11 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -678,13 +749,6 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
|||||||
// 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window.
|
// 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window.
|
||||||
// 4. If we are outside the configured window, the task will start immediately.
|
// 4. If we are outside the configured window, the task will start immediately.
|
||||||
func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, opts ...operations.Option) (*operations.StartTaskResponse, error) {
|
func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, opts ...operations.Option) (*operations.StartTaskResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "startTask",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
request := operations.StartTaskRequest{
|
request := operations.StartTaskRequest{
|
||||||
TaskName: taskName,
|
TaskName: taskName,
|
||||||
}
|
}
|
||||||
@@ -701,12 +765,27 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := utils.GenerateURL(ctx, baseURL, "/butler/{taskName}", request, nil)
|
opURL, err := utils.GenerateURL(ctx, baseURL, "/butler/{taskName}", request, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "startTask",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -729,6 +808,10 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -749,17 +832,23 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -770,7 +859,7 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -778,13 +867,13 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -797,17 +886,17 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -869,7 +958,11 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
}
|
}
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -891,13 +984,6 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
|||||||
// StopTask - Stop a single Butler task
|
// StopTask - Stop a single Butler task
|
||||||
// This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists. See the section above for a list of task names for this endpoint.
|
// This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists. See the section above for a list of task names for this endpoint.
|
||||||
func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTaskName, opts ...operations.Option) (*operations.StopTaskResponse, error) {
|
func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTaskName, opts ...operations.Option) (*operations.StopTaskResponse, error) {
|
||||||
hookCtx := hooks.HookContext{
|
|
||||||
Context: ctx,
|
|
||||||
OperationID: "stopTask",
|
|
||||||
OAuth2Scopes: []string{},
|
|
||||||
SecuritySource: s.sdkConfiguration.Security,
|
|
||||||
}
|
|
||||||
|
|
||||||
request := operations.StopTaskRequest{
|
request := operations.StopTaskRequest{
|
||||||
TaskName: taskName,
|
TaskName: taskName,
|
||||||
}
|
}
|
||||||
@@ -914,12 +1000,27 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseURL := utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
var baseURL string
|
||||||
|
if o.ServerURL == nil {
|
||||||
|
baseURL = utils.ReplaceParameters(s.sdkConfiguration.GetServerDetails())
|
||||||
|
} else {
|
||||||
|
baseURL = *o.ServerURL
|
||||||
|
}
|
||||||
opURL, err := utils.GenerateURL(ctx, baseURL, "/butler/{taskName}", request, nil)
|
opURL, err := utils.GenerateURL(ctx, baseURL, "/butler/{taskName}", request, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hookCtx := hooks.HookContext{
|
||||||
|
SDK: s.rootSDK,
|
||||||
|
SDKConfiguration: s.sdkConfiguration,
|
||||||
|
BaseURL: baseURL,
|
||||||
|
Context: ctx,
|
||||||
|
OperationID: "stopTask",
|
||||||
|
OAuth2Scopes: []string{},
|
||||||
|
SecuritySource: s.sdkConfiguration.Security,
|
||||||
|
}
|
||||||
|
|
||||||
timeout := o.Timeout
|
timeout := o.Timeout
|
||||||
if timeout == nil {
|
if timeout == nil {
|
||||||
timeout = s.sdkConfiguration.Timeout
|
timeout = s.sdkConfiguration.Timeout
|
||||||
@@ -942,6 +1043,10 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range o.SetHeaders {
|
||||||
|
req.Header.Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||||
retryConfig := o.Retries
|
retryConfig := o.Retries
|
||||||
if retryConfig == nil {
|
if retryConfig == nil {
|
||||||
@@ -962,17 +1067,23 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
"504",
|
"504",
|
||||||
},
|
},
|
||||||
}, func() (*http.Response, error) {
|
}, func() (*http.Response, error) {
|
||||||
if req.Body != nil {
|
if req.Body != nil && req.Body != http.NoBody && req.GetBody != nil {
|
||||||
copyBody, err := req.GetBody()
|
copyBody, err := req.GetBody()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Body = copyBody
|
req.Body = copyBody
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, backoff.Permanent(err)
|
if retry.IsPermanentError(err) || retry.IsTemporaryError(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, retry.Permanent(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
httpRes, err := s.sdkConfiguration.Client.Do(req)
|
||||||
@@ -983,7 +1094,7 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
}
|
}
|
||||||
return httpRes, err
|
return httpRes, err
|
||||||
})
|
})
|
||||||
@@ -991,13 +1102,13 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
req, err = s.hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1010,17 +1121,17 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
err = fmt.Errorf("error sending request: no response")
|
err = fmt.Errorf("error sending request: no response")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
_, err = s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, nil, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if utils.MatchStatusCodes([]string{"400", "401", "404", "4XX", "5XX"}, httpRes.StatusCode) {
|
} else if utils.MatchStatusCodes([]string{"400", "401", "404", "4XX", "5XX"}, httpRes.StatusCode) {
|
||||||
_httpRes, err := s.sdkConfiguration.Hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
_httpRes, err := s.hooks.AfterError(hooks.AfterErrorContext{HookContext: hookCtx}, httpRes, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if _httpRes != nil {
|
} else if _httpRes != nil {
|
||||||
httpRes = _httpRes
|
httpRes = _httpRes
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
httpRes, err = s.sdkConfiguration.Hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
httpRes, err = s.hooks.AfterSuccess(hooks.AfterSuccessContext{HookContext: hookCtx}, httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1082,7 +1193,11 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
|||||||
case httpRes.StatusCode == 404:
|
case httpRes.StatusCode == 404:
|
||||||
fallthrough
|
fallthrough
|
||||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||||
fallthrough
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
1379
codeSamples.yaml
1379
codeSamples.yaml
File diff suppressed because it is too large
Load Diff
11
docs/models/operations/alllibraries.md
Normal file
11
docs/models/operations/alllibraries.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# AllLibraries
|
||||||
|
|
||||||
|
Indicates if the user has access to all libraries.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| --------------------- | --------------------- |
|
||||||
|
| `AllLibrariesDisable` | 0 |
|
||||||
|
| `AllLibrariesEnable` | 1 |
|
||||||
11
docs/models/operations/allowcameraupload.md
Normal file
11
docs/models/operations/allowcameraupload.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# AllowCameraUpload
|
||||||
|
|
||||||
|
Indicates if the user is allowed to upload from a camera.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| -------------------------- | -------------------------- |
|
||||||
|
| `AllowCameraUploadDisable` | 0 |
|
||||||
|
| `AllowCameraUploadEnable` | 1 |
|
||||||
11
docs/models/operations/allowchannels.md
Normal file
11
docs/models/operations/allowchannels.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# AllowChannels
|
||||||
|
|
||||||
|
Indicates if the user has access to channels.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ---------------------- | ---------------------- |
|
||||||
|
| `AllowChannelsDisable` | 0 |
|
||||||
|
| `AllowChannelsEnable` | 1 |
|
||||||
11
docs/models/operations/allowsubtitleadmin.md
Normal file
11
docs/models/operations/allowsubtitleadmin.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# AllowSubtitleAdmin
|
||||||
|
|
||||||
|
Indicates if the user can manage subtitles.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| --------------------------- | --------------------------- |
|
||||||
|
| `AllowSubtitleAdminDisable` | 0 |
|
||||||
|
| `AllowSubtitleAdminEnable` | 1 |
|
||||||
11
docs/models/operations/allowsync.md
Normal file
11
docs/models/operations/allowsync.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# AllowSync
|
||||||
|
|
||||||
|
Indicates if the user is allowed to sync media.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ------------------ | ------------------ |
|
||||||
|
| `AllowSyncDisable` | 0 |
|
||||||
|
| `AllowSyncEnable` | 1 |
|
||||||
11
docs/models/operations/allowtuners.md
Normal file
11
docs/models/operations/allowtuners.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# AllowTuners
|
||||||
|
|
||||||
|
Indicates if the user is allowed to use tuners.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| -------------------- | -------------------- |
|
||||||
|
| `AllowTunersDisable` | 0 |
|
||||||
|
| `AllowTunersEnable` | 1 |
|
||||||
11
docs/models/operations/attributes.md
Normal file
11
docs/models/operations/attributes.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Attributes
|
||||||
|
|
||||||
|
Attributes associated with the marker.
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
|
||||||
|
| `ID` | *int64* | :heavy_check_mark: | The identifier for the attributes. | 306970 |
|
||||||
|
| `Version` | **int64* | :heavy_minus_sign: | The version number of the marker attributes. | 4 |
|
||||||
15
docs/models/operations/chapter.md
Normal file
15
docs/models/operations/chapter.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Chapter
|
||||||
|
|
||||||
|
The thumbnail for the chapter
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
|
||||||
|
| `ID` | *int64* | :heavy_check_mark: | N/A | 4 |
|
||||||
|
| `Filter` | *string* | :heavy_check_mark: | N/A | thumb=4 |
|
||||||
|
| `Index` | *int64* | :heavy_check_mark: | N/A | 1 |
|
||||||
|
| `StartTimeOffset` | *int64* | :heavy_check_mark: | N/A | 0 |
|
||||||
|
| `EndTimeOffset` | *int64* | :heavy_check_mark: | N/A | 100100 |
|
||||||
|
| `Thumb` | *string* | :heavy_check_mark: | N/A | /library/media/46883/chapterImages/1 |
|
||||||
@@ -4,5 +4,5 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | Working NL Subs |
|
| `Tag` | *string* | :heavy_check_mark: | The user-made collection this media item belongs to | My Awesome Collection |
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
# Country
|
# Country
|
||||||
|
|
||||||
|
The filter query string for country media items.
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
|
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | United States of America |
|
| `ID` | *int* | :heavy_check_mark: | The unique identifier for the country.<br/>NOTE: This is different for each Plex server and is not globally unique.<br/> | 259 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America |
|
||||||
|
| `Filter` | *string* | :heavy_check_mark: | N/A | country=19 |
|
||||||
@@ -4,5 +4,9 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | James Cameron |
|
| `ID` | *int* | :heavy_check_mark: | Unique identifier for the director. | 126522 |
|
||||||
|
| `Filter` | *string* | :heavy_check_mark: | The filter string used to query this director. | director=235876 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle |
|
||||||
|
| `TagKey` | *string* | :heavy_check_mark: | A unique 24-character hexadecimal key associated with the director's tag, used for internal identification. | 5d776831151a60001f24d031 |
|
||||||
|
| `Thumb` | **string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the director. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg |
|
||||||
8
docs/models/operations/extras.md
Normal file
8
docs/models/operations/extras.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Extras
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- |
|
||||||
|
| `Size` | **int64* | :heavy_minus_sign: | The size of the extras. | 1 |
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
# FlattenSeasons
|
# FlattenSeasons
|
||||||
|
|
||||||
|
Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Values
|
## Values
|
||||||
|
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| --------------------- | --------------------- |
|
| ------------------------------ | ------------------------------ |
|
||||||
| `FlattenSeasonsFalse` | 0 |
|
| `FlattenSeasonsLibraryDefault` | -1 |
|
||||||
| `FlattenSeasonsTrue` | 1 |
|
| `FlattenSeasonsHide` | 0 |
|
||||||
|
| `FlattenSeasonsShow` | 1 |
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
# Genre
|
# Genre
|
||||||
|
|
||||||
|
The filter query string for similar items.
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | Adventure |
|
| `ID` | *int* | :heavy_check_mark: | The unique identifier for the genre.<br/>NOTE: This is different for each Plex server and is not globally unique.<br/> | 259 |
|
||||||
|
| `Filter` | *string* | :heavy_check_mark: | N/A | genre=19 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item<br/> | Crime |
|
||||||
11
docs/models/operations/getactorslibrarydirectory.md
Normal file
11
docs/models/operations/getactorslibrarydirectory.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# GetActorsLibraryDirectory
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
||||||
|
| `FastKey` | *string* | :heavy_check_mark: | A fast lookup key for the actor relative url. | /library/sections/2/all?actor=134671 |
|
||||||
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the actor. | https://metadata-static.plex.tv/e/people/e2a915b537ef720252b6d408bc1f91b3.jpg |
|
||||||
|
| `Key` | *string* | :heavy_check_mark: | A unique key representing the actor. | 134671 |
|
||||||
|
| `Title` | *string* | :heavy_check_mark: | The name of the actor. | Aaron Paul |
|
||||||
20
docs/models/operations/getactorslibrarymediacontainer.md
Normal file
20
docs/models/operations/getactorslibrarymediacontainer.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# GetActorsLibraryMediaContainer
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||||
|
| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||||
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
|
| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||||
|
| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library |
|
||||||
|
| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ |
|
||||||
|
| `MediaTagVersion` | *int64* | :heavy_check_mark: | The version number for media tags. | 1734362201 |
|
||||||
|
| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true |
|
||||||
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||||
|
| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||||
|
| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor |
|
||||||
|
| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary |
|
||||||
|
| `ViewMode` | **string* | :heavy_minus_sign: | Identifier for the view mode. | 131131 |
|
||||||
|
| `Directory` | [][operations.GetActorsLibraryDirectory](../../models/operations/getactorslibrarydirectory.md) | :heavy_minus_sign: | An array of actor entries for media items. | |
|
||||||
24
docs/models/operations/getactorslibraryqueryparamtype.md
Normal file
24
docs/models/operations/getactorslibraryqueryparamtype.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# GetActorsLibraryQueryParamType
|
||||||
|
|
||||||
|
The type of media to retrieve or filter by.
|
||||||
|
1 = movie
|
||||||
|
2 = show
|
||||||
|
3 = season
|
||||||
|
4 = episode
|
||||||
|
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ------------------------------------------ | ------------------------------------------ |
|
||||||
|
| `GetActorsLibraryQueryParamTypeMovie` | 1 |
|
||||||
|
| `GetActorsLibraryQueryParamTypeTvShow` | 2 |
|
||||||
|
| `GetActorsLibraryQueryParamTypeSeason` | 3 |
|
||||||
|
| `GetActorsLibraryQueryParamTypeEpisode` | 4 |
|
||||||
|
| `GetActorsLibraryQueryParamTypeArtist` | 5 |
|
||||||
|
| `GetActorsLibraryQueryParamTypeAlbum` | 6 |
|
||||||
|
| `GetActorsLibraryQueryParamTypeTrack` | 7 |
|
||||||
|
| `GetActorsLibraryQueryParamTypePhotoAlbum` | 8 |
|
||||||
|
| `GetActorsLibraryQueryParamTypePhoto` | 9 |
|
||||||
9
docs/models/operations/getactorslibraryrequest.md
Normal file
9
docs/models/operations/getactorslibraryrequest.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# GetActorsLibraryRequest
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
||||||
|
| `Type` | [operations.GetActorsLibraryQueryParamType](../../models/operations/getactorslibraryqueryparamtype.md) | :heavy_check_mark: | The type of media to retrieve or filter by.<br/>1 = movie<br/>2 = show<br/>3 = season<br/>4 = episode<br/>E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries<br/> | 2 |
|
||||||
11
docs/models/operations/getactorslibraryresponse.md
Normal file
11
docs/models/operations/getactorslibraryresponse.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# GetActorsLibraryResponse
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description |
|
||||||
|
| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
||||||
|
| `ContentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
|
||||||
|
| `StatusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
|
||||||
|
| `RawResponse` | [*http.Response](https://pkg.go.dev/net/http#Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
|
||||||
|
| `Object` | [*operations.GetActorsLibraryResponseBody](../../models/operations/getactorslibraryresponsebody.md) | :heavy_minus_sign: | Successful response containing media container data. |
|
||||||
10
docs/models/operations/getactorslibraryresponsebody.md
Normal file
10
docs/models/operations/getactorslibraryresponsebody.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GetActorsLibraryResponseBody
|
||||||
|
|
||||||
|
Successful response containing media container data.
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description |
|
||||||
|
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `MediaContainer` | [*operations.GetActorsLibraryMediaContainer](../../models/operations/getactorslibrarymediacontainer.md) | :heavy_minus_sign: | N/A |
|
||||||
@@ -4,25 +4,25 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||||
| `AllowSync` | *bool* | :heavy_check_mark: | N/A | true |
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
| `Art` | *string* | :heavy_check_mark: | N/A | /:/resources/movie-fanart.jpg |
|
| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||||
| `Composite` | *string* | :heavy_check_mark: | N/A | /library/sections/1/composite/1705615584 |
|
| `Composite` | *string* | :heavy_check_mark: | The relative path to the composite media item. | /library/sections/1/composite/1743824484 |
|
||||||
| `Filters` | *bool* | :heavy_check_mark: | N/A | true |
|
| `Filters` | *bool* | :heavy_check_mark: | UNKNOWN | true |
|
||||||
| `Refreshing` | *bool* | :heavy_check_mark: | N/A | false |
|
| `Refreshing` | *bool* | :heavy_check_mark: | Indicates whether the library is currently being refreshed or updated | true |
|
||||||
| `Thumb` | *string* | :heavy_check_mark: | N/A | /:/resources/movie.png |
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||||
| `Key` | *string* | :heavy_check_mark: | N/A | 1 |
|
| `Key` | *string* | :heavy_check_mark: | The library key representing the unique identifier | 1 |
|
||||||
| `Type` | *string* | :heavy_check_mark: | N/A | movie |
|
| `Type` | [operations.GetAllLibrariesType](../../models/operations/getalllibrariestype.md) | :heavy_check_mark: | N/A | movie |
|
||||||
| `Title` | *string* | :heavy_check_mark: | N/A | Movies |
|
| `Title` | *string* | :heavy_check_mark: | The title of the library | Movies |
|
||||||
| `Agent` | *string* | :heavy_check_mark: | N/A | tv.plex.agents.movie |
|
| `Agent` | *string* | :heavy_check_mark: | The Plex agent used to match and retrieve media metadata. | tv.plex.agents.movie |
|
||||||
| `Scanner` | *string* | :heavy_check_mark: | N/A | Plex Movie |
|
| `Scanner` | *string* | :heavy_check_mark: | UNKNOWN | Plex Movie |
|
||||||
| `Language` | *string* | :heavy_check_mark: | N/A | en-US |
|
| `Language` | *string* | :heavy_check_mark: | The Plex library language that has been set | en-US |
|
||||||
| `UUID` | *string* | :heavy_check_mark: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 |
|
| `UUID` | *string* | :heavy_check_mark: | The universally unique identifier for the library. | e69655a2-ef48-4aba-bb19-01e7d3cc34d6 |
|
||||||
| `UpdatedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
| `UpdatedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
||||||
| `CreatedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
| `CreatedAt` | **int64* | :heavy_minus_sign: | N/A | 1556281940 |
|
||||||
| `ScannedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
| `ScannedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
||||||
| `Content` | *bool* | :heavy_check_mark: | N/A | true |
|
| `Content` | *bool* | :heavy_check_mark: | UNKNOWN | true |
|
||||||
| `Directory` | *bool* | :heavy_check_mark: | N/A | true |
|
| `Directory` | *bool* | :heavy_check_mark: | UNKNOWN | true |
|
||||||
| `ContentChangedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
| `ContentChangedAt` | *int64* | :heavy_check_mark: | Timestamp (in seconds) representing the last time the content was modified.<br/>NOTE: Some Plex server have some absurd values for this field, like 8457612157633039800 so it should be int64<br/> | 9173960 |
|
||||||
| `Hidden` | *int* | :heavy_check_mark: | N/A | 0 |
|
| `Hidden` | [*operations.Hidden](../../models/operations/hidden.md) | :heavy_minus_sign: | The Plex library visibility setting | 1 |
|
||||||
| `Location` | [][operations.GetAllLibrariesLocation](../../models/operations/getalllibrarieslocation.md) | :heavy_check_mark: | N/A | |
|
| `Location` | [][operations.GetAllLibrariesLocation](../../models/operations/getalllibrarieslocation.md) | :heavy_check_mark: | N/A | |
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- |
|
||||||
| `ID` | *int* | :heavy_check_mark: | N/A | 1 |
|
| `ID` | *int* | :heavy_check_mark: | The ID of the location. | 1 |
|
||||||
| `Path` | *string* | :heavy_check_mark: | N/A | /movies |
|
| `Path` | *string* | :heavy_check_mark: | The path to the media item. | /Movies |
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
|
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
|
||||||
| `Size` | *int* | :heavy_check_mark: | N/A | 5 |
|
| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||||
| `AllowSync` | *bool* | :heavy_check_mark: | N/A | false |
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
| `Title1` | *string* | :heavy_check_mark: | N/A | Plex Library |
|
| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||||
| `Directory` | [][operations.GetAllLibrariesDirectory](../../models/operations/getalllibrariesdirectory.md) | :heavy_check_mark: | N/A | |
|
| `Directory` | [][operations.GetAllLibrariesDirectory](../../models/operations/getalllibrariesdirectory.md) | :heavy_minus_sign: | N/A | |
|
||||||
@@ -6,5 +6,5 @@ The libraries available on the Server
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
| Field | Type | Required | Description |
|
||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||||
| `MediaContainer` | [operations.GetAllLibrariesMediaContainer](../../models/operations/getalllibrariesmediacontainer.md) | :heavy_check_mark: | N/A |
|
| `MediaContainer` | [*operations.GetAllLibrariesMediaContainer](../../models/operations/getalllibrariesmediacontainer.md) | :heavy_minus_sign: | N/A |
|
||||||
19
docs/models/operations/getalllibrariestype.md
Normal file
19
docs/models/operations/getalllibrariestype.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# GetAllLibrariesType
|
||||||
|
|
||||||
|
The library type
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ------------------------------- | ------------------------------- |
|
||||||
|
| `GetAllLibrariesTypeMovie` | movie |
|
||||||
|
| `GetAllLibrariesTypeTvShow` | show |
|
||||||
|
| `GetAllLibrariesTypeSeason` | season |
|
||||||
|
| `GetAllLibrariesTypeEpisode` | episode |
|
||||||
|
| `GetAllLibrariesTypeArtist` | artist |
|
||||||
|
| `GetAllLibrariesTypeAlbum` | album |
|
||||||
|
| `GetAllLibrariesTypeTrack` | track |
|
||||||
|
| `GetAllLibrariesTypePhotoAlbum` | photoalbum |
|
||||||
|
| `GetAllLibrariesTypePhoto` | photo |
|
||||||
|
| `GetAllLibrariesTypeCollection` | collection |
|
||||||
10
docs/models/operations/getcountrieslibrarydirectory.md
Normal file
10
docs/models/operations/getcountrieslibrarydirectory.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GetCountriesLibraryDirectory
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- |
|
||||||
|
| `FastKey` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?country=15491 |
|
||||||
|
| `Key` | *string* | :heavy_check_mark: | N/A | 15491 |
|
||||||
|
| `Title` | *string* | :heavy_check_mark: | N/A | Japan |
|
||||||
20
docs/models/operations/getcountrieslibrarymediacontainer.md
Normal file
20
docs/models/operations/getcountrieslibrarymediacontainer.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# GetCountriesLibraryMediaContainer
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||||
|
| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||||
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
|
| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||||
|
| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary |
|
||||||
|
| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library |
|
||||||
|
| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ |
|
||||||
|
| `MediaTagVersion` | *int64* | :heavy_check_mark: | The version number for media tags. | 1734362201 |
|
||||||
|
| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true |
|
||||||
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||||
|
| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||||
|
| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor |
|
||||||
|
| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary |
|
||||||
|
| `Directory` | [][operations.GetCountriesLibraryDirectory](../../models/operations/getcountrieslibrarydirectory.md) | :heavy_minus_sign: | N/A | |
|
||||||
24
docs/models/operations/getcountrieslibraryqueryparamtype.md
Normal file
24
docs/models/operations/getcountrieslibraryqueryparamtype.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# GetCountriesLibraryQueryParamType
|
||||||
|
|
||||||
|
The type of media to retrieve or filter by.
|
||||||
|
1 = movie
|
||||||
|
2 = show
|
||||||
|
3 = season
|
||||||
|
4 = episode
|
||||||
|
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| --------------------------------------------- | --------------------------------------------- |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeMovie` | 1 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeTvShow` | 2 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeSeason` | 3 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeEpisode` | 4 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeArtist` | 5 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeAlbum` | 6 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypeTrack` | 7 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypePhotoAlbum` | 8 |
|
||||||
|
| `GetCountriesLibraryQueryParamTypePhoto` | 9 |
|
||||||
9
docs/models/operations/getcountrieslibraryrequest.md
Normal file
9
docs/models/operations/getcountrieslibraryrequest.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# GetCountriesLibraryRequest
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
||||||
|
| `Type` | [operations.GetCountriesLibraryQueryParamType](../../models/operations/getcountrieslibraryqueryparamtype.md) | :heavy_check_mark: | The type of media to retrieve or filter by.<br/>1 = movie<br/>2 = show<br/>3 = season<br/>4 = episode<br/>E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries<br/> | 2 |
|
||||||
11
docs/models/operations/getcountrieslibraryresponse.md
Normal file
11
docs/models/operations/getcountrieslibraryresponse.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# GetCountriesLibraryResponse
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description |
|
||||||
|
| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `ContentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
|
||||||
|
| `StatusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
|
||||||
|
| `RawResponse` | [*http.Response](https://pkg.go.dev/net/http#Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
|
||||||
|
| `Object` | [*operations.GetCountriesLibraryResponseBody](../../models/operations/getcountrieslibraryresponsebody.md) | :heavy_minus_sign: | Successful response containing media container data. |
|
||||||
10
docs/models/operations/getcountrieslibraryresponsebody.md
Normal file
10
docs/models/operations/getcountrieslibraryresponsebody.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GetCountriesLibraryResponseBody
|
||||||
|
|
||||||
|
Successful response containing media container data.
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description |
|
||||||
|
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `MediaContainer` | [*operations.GetCountriesLibraryMediaContainer](../../models/operations/getcountrieslibrarymediacontainer.md) | :heavy_minus_sign: | N/A |
|
||||||
11
docs/models/operations/getgenreslibrarydirectory.md
Normal file
11
docs/models/operations/getgenreslibrarydirectory.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# GetGenresLibraryDirectory
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
|
||||||
|
| `FastKey` | *string* | :heavy_check_mark: | N/A | /library/sections/10/all?genre=89 |
|
||||||
|
| `Key` | *string* | :heavy_check_mark: | N/A | 89 |
|
||||||
|
| `Title` | *string* | :heavy_check_mark: | N/A | Action |
|
||||||
|
| `Type` | *string* | :heavy_check_mark: | N/A | genre |
|
||||||
20
docs/models/operations/getgenreslibrarymediacontainer.md
Normal file
20
docs/models/operations/getgenreslibrarymediacontainer.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# GetGenresLibraryMediaContainer
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||||
|
| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||||
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
|
| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||||
|
| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary |
|
||||||
|
| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library |
|
||||||
|
| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ |
|
||||||
|
| `MediaTagVersion` | *int64* | :heavy_check_mark: | The version number for media tags. | 1734362201 |
|
||||||
|
| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true |
|
||||||
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||||
|
| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||||
|
| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor |
|
||||||
|
| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary |
|
||||||
|
| `Directory` | [][operations.GetGenresLibraryDirectory](../../models/operations/getgenreslibrarydirectory.md) | :heavy_minus_sign: | N/A | |
|
||||||
24
docs/models/operations/getgenreslibraryqueryparamtype.md
Normal file
24
docs/models/operations/getgenreslibraryqueryparamtype.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# GetGenresLibraryQueryParamType
|
||||||
|
|
||||||
|
The type of media to retrieve or filter by.
|
||||||
|
1 = movie
|
||||||
|
2 = show
|
||||||
|
3 = season
|
||||||
|
4 = episode
|
||||||
|
E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ------------------------------------------ | ------------------------------------------ |
|
||||||
|
| `GetGenresLibraryQueryParamTypeMovie` | 1 |
|
||||||
|
| `GetGenresLibraryQueryParamTypeTvShow` | 2 |
|
||||||
|
| `GetGenresLibraryQueryParamTypeSeason` | 3 |
|
||||||
|
| `GetGenresLibraryQueryParamTypeEpisode` | 4 |
|
||||||
|
| `GetGenresLibraryQueryParamTypeArtist` | 5 |
|
||||||
|
| `GetGenresLibraryQueryParamTypeAlbum` | 6 |
|
||||||
|
| `GetGenresLibraryQueryParamTypeTrack` | 7 |
|
||||||
|
| `GetGenresLibraryQueryParamTypePhotoAlbum` | 8 |
|
||||||
|
| `GetGenresLibraryQueryParamTypePhoto` | 9 |
|
||||||
9
docs/models/operations/getgenreslibraryrequest.md
Normal file
9
docs/models/operations/getgenreslibraryrequest.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# GetGenresLibraryRequest
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
||||||
|
| `Type` | [operations.GetGenresLibraryQueryParamType](../../models/operations/getgenreslibraryqueryparamtype.md) | :heavy_check_mark: | The type of media to retrieve or filter by.<br/>1 = movie<br/>2 = show<br/>3 = season<br/>4 = episode<br/>E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries<br/> | 2 |
|
||||||
11
docs/models/operations/getgenreslibraryresponse.md
Normal file
11
docs/models/operations/getgenreslibraryresponse.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# GetGenresLibraryResponse
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description |
|
||||||
|
| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
||||||
|
| `ContentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation |
|
||||||
|
| `StatusCode` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
|
||||||
|
| `RawResponse` | [*http.Response](https://pkg.go.dev/net/http#Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing |
|
||||||
|
| `Object` | [*operations.GetGenresLibraryResponseBody](../../models/operations/getgenreslibraryresponsebody.md) | :heavy_minus_sign: | Successful response containing media container data. |
|
||||||
10
docs/models/operations/getgenreslibraryresponsebody.md
Normal file
10
docs/models/operations/getgenreslibraryresponsebody.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GetGenresLibraryResponseBody
|
||||||
|
|
||||||
|
Successful response containing media container data.
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description |
|
||||||
|
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `MediaContainer` | [*operations.GetGenresLibraryMediaContainer](../../models/operations/getgenreslibrarymediacontainer.md) | :heavy_minus_sign: | N/A |
|
||||||
@@ -4,6 +4,6 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `IncludeDetails` | [*operations.IncludeDetails](../../models/operations/includedetails.md) | :heavy_minus_sign: | Whether or not to include details for a section (types, filters, and sorts). <br/>Only exists for backwards compatibility, media providers other than the server libraries have it on always.<br/> | |
|
| `IncludeDetails` | [*operations.IncludeDetails](../../models/operations/includedetails.md) | :heavy_minus_sign: | Whether or not to include details for a section (types, filters, and sorts).<br/>Only exists for backwards compatibility, media providers other than the server libraries have it on always.<br/> | |
|
||||||
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
||||||
@@ -4,5 +4,5 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | Working NL Subs |
|
| `Tag` | *string* | :heavy_check_mark: | The user-made collection this media item belongs to | My Awesome Collection |
|
||||||
@@ -4,5 +4,6 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ |
|
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | United States of America |
|
| `ID` | *int* | :heavy_check_mark: | The unique identifier for the country.<br/>NOTE: This is different for each Plex server and is not globally unique.<br/> | 259 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America |
|
||||||
@@ -4,5 +4,7 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | James Cameron |
|
| `ID` | *int* | :heavy_check_mark: | Unique identifier for the director. | 126522 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle |
|
||||||
|
| `Thumb` | **string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the director. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg |
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
# GetLibraryItemsFlattenSeasons
|
|
||||||
|
|
||||||
|
|
||||||
## Values
|
|
||||||
|
|
||||||
| Name | Value |
|
|
||||||
| ------------------------------------ | ------------------------------------ |
|
|
||||||
| `GetLibraryItemsFlattenSeasonsFalse` | 0 |
|
|
||||||
| `GetLibraryItemsFlattenSeasonsTrue` | 1 |
|
|
||||||
@@ -4,5 +4,6 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | Adventure |
|
| `ID` | *int* | :heavy_check_mark: | The unique identifier for the genre.<br/>NOTE: This is different for each Plex server and is not globally unique.<br/> | 259 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item<br/> | Crime |
|
||||||
8
docs/models/operations/getlibraryitemsguids.md
Normal file
8
docs/models/operations/getlibraryitemsguids.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# GetLibraryItemsGuids
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `ID` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://<br/> | {<br/>"imdbExample": {<br/>"summary": "IMDB example",<br/>"value": "imdb://tt13015952"<br/>},<br/>"tmdbExample": {<br/>"summary": "TMDB example",<br/>"value": "tmdb://2434012"<br/>},<br/>"tvdbExample": {<br/>"summary": "TVDB example",<br/>"value": "tvdb://7945991"<br/>}<br/>} |
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
# GetLibraryItemsHasThumbnail
|
# GetLibraryItemsHasThumbnail
|
||||||
|
|
||||||
|
Indicates if the part has a thumbnail.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Values
|
## Values
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||||
| `Alt` | *string* | :heavy_check_mark: | N/A | Episode 1 |
|
| `Alt` | *string* | :heavy_check_mark: | N/A | Episode 1 |
|
||||||
| `Type` | [operations.GetLibraryItemsLibraryResponse200Type](../../models/operations/getlibraryitemslibraryresponse200type.md) | :heavy_check_mark: | N/A | background |
|
| `Type` | [operations.GetLibraryItemsLibraryResponseType](../../models/operations/getlibraryitemslibraryresponsetype.md) | :heavy_check_mark: | N/A | background |
|
||||||
| `URL` | *string* | :heavy_check_mark: | N/A | /library/metadata/45521/thumb/1644710589 |
|
| `URL` | *string* | :heavy_check_mark: | N/A | /library/metadata/45521/thumb/1644710589 |
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
# GetLibraryItemsLibraryDefaultDirection
|
|
||||||
|
|
||||||
The direction of the sort. Can be either `asc` or `desc`.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Values
|
|
||||||
|
|
||||||
| Name | Value |
|
|
||||||
| -------------------------------------------------- | -------------------------------------------------- |
|
|
||||||
| `GetLibraryItemsLibraryDefaultDirectionAscending` | asc |
|
|
||||||
| `GetLibraryItemsLibraryDefaultDirectionDescending` | desc |
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# GetLibraryItemsLibraryOptimizedForStreaming
|
||||||
|
|
||||||
|
Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Supported Types
|
||||||
|
|
||||||
|
### GetLibraryItemsOptimizedForStreaming1
|
||||||
|
|
||||||
|
```go
|
||||||
|
getLibraryItemsLibraryOptimizedForStreaming := operations.CreateGetLibraryItemsLibraryOptimizedForStreamingGetLibraryItemsOptimizedForStreaming1(operations.GetLibraryItemsOptimizedForStreaming1{/* values here */})
|
||||||
|
```
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
```go
|
||||||
|
getLibraryItemsLibraryOptimizedForStreaming := operations.CreateGetLibraryItemsLibraryOptimizedForStreamingBoolean(bool{/* values here */})
|
||||||
|
```
|
||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# GetLibraryItemsLibraryResponse200Type
|
|
||||||
|
|
||||||
|
|
||||||
## Values
|
|
||||||
|
|
||||||
| Name | Value |
|
|
||||||
| -------------------------------------------------- | -------------------------------------------------- |
|
|
||||||
| `GetLibraryItemsLibraryResponse200TypeCoverPoster` | coverPoster |
|
|
||||||
| `GetLibraryItemsLibraryResponse200TypeBackground` | background |
|
|
||||||
| `GetLibraryItemsLibraryResponse200TypeSnapshot` | snapshot |
|
|
||||||
| `GetLibraryItemsLibraryResponse200TypeClearLogo` | clearLogo |
|
|
||||||
@@ -1,14 +1,11 @@
|
|||||||
# GetLibraryItemsLibraryResponseType
|
# GetLibraryItemsLibraryResponseType
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Values
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Name | Value |
|
||||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
| ----------------------------------------------- | ----------------------------------------------- |
|
||||||
| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 |
|
| `GetLibraryItemsLibraryResponseTypeCoverPoster` | coverPoster |
|
||||||
| `Type` | *string* | :heavy_check_mark: | N/A | show |
|
| `GetLibraryItemsLibraryResponseTypeBackground` | background |
|
||||||
| `Title` | *string* | :heavy_check_mark: | N/A | TV Shows |
|
| `GetLibraryItemsLibraryResponseTypeSnapshot` | snapshot |
|
||||||
| `Active` | *bool* | :heavy_check_mark: | N/A | false |
|
| `GetLibraryItemsLibraryResponseTypeClearLogo` | clearLogo |
|
||||||
| `Filter` | [][operations.GetLibraryItemsLibraryFilter](../../models/operations/getlibraryitemslibraryfilter.md) | :heavy_minus_sign: | N/A | |
|
|
||||||
| `Sort` | [][operations.GetLibraryItemsLibrarySort](../../models/operations/getlibraryitemslibrarysort.md) | :heavy_minus_sign: | N/A | |
|
|
||||||
| `Field` | [][operations.GetLibraryItemsLibraryField](../../models/operations/getlibraryitemslibraryfield.md) | :heavy_minus_sign: | N/A | |
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
# GetLibraryItemsLibrarySort
|
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
|
||||||
| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| `Default` | **string* | :heavy_minus_sign: | N/A | asc |
|
|
||||||
| `Active` | **bool* | :heavy_minus_sign: | N/A | false |
|
|
||||||
| `ActiveDirection` | [*operations.GetLibraryItemsLibraryActiveDirection](../../models/operations/getlibraryitemslibraryactivedirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.<br/> | asc |
|
|
||||||
| `DefaultDirection` | [*operations.GetLibraryItemsLibraryDefaultDirection](../../models/operations/getlibraryitemslibrarydefaultdirection.md) | :heavy_minus_sign: | The direction of the sort. Can be either `asc` or `desc`.<br/> | asc |
|
|
||||||
| `DescKey` | **string* | :heavy_minus_sign: | N/A | titleSort:desc |
|
|
||||||
| `FirstCharacterKey` | **string* | :heavy_minus_sign: | N/A | /library/sections/2/firstCharacter |
|
|
||||||
| `Key` | *string* | :heavy_check_mark: | N/A | titleSort |
|
|
||||||
| `Title` | *string* | :heavy_check_mark: | N/A | Title |
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
# GetLibraryItemsLibraryType
|
# GetLibraryItemsLibraryType
|
||||||
|
|
||||||
The type of media content
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
## Values
|
| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||||
|
| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 |
|
||||||
| Name | Value |
|
| `Type` | *string* | :heavy_check_mark: | N/A | show |
|
||||||
| ----------------------------------- | ----------------------------------- |
|
| `Title` | *string* | :heavy_check_mark: | N/A | TV Shows |
|
||||||
| `GetLibraryItemsLibraryTypeMovie` | movie |
|
| `Active` | *bool* | :heavy_check_mark: | N/A | false |
|
||||||
| `GetLibraryItemsLibraryTypeTvShow` | show |
|
| `Filter` | [][operations.GetLibraryItemsFilter](../../models/operations/getlibraryitemsfilter.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `GetLibraryItemsLibraryTypeSeason` | season |
|
| `Sort` | [][operations.GetLibraryItemsSort](../../models/operations/getlibraryitemssort.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `GetLibraryItemsLibraryTypeEpisode` | episode |
|
| `Field` | [][operations.GetLibraryItemsField](../../models/operations/getlibraryitemsfield.md) | :heavy_minus_sign: | N/A | |
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
# GetLibraryItemsLocation
|
# GetLibraryItemsLocation
|
||||||
|
|
||||||
|
The folder path for the media item.
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| ------------------------- | ------------------------- | ------------------------- | ------------------------- | ------------------------- |
|
||||||
| `Path` | **string* | :heavy_minus_sign: | N/A | /TV Shows/House |
|
| `Path` | *string* | :heavy_check_mark: | N/A | /TV Shows/Clarkson's Farm |
|
||||||
@@ -4,22 +4,23 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `ID` | *int* | :heavy_check_mark: | N/A | 119534 |
|
| `ID` | *int64* | :heavy_check_mark: | Unique media identifier. | 387322 |
|
||||||
| `Duration` | **int* | :heavy_minus_sign: | N/A | 11558112 |
|
| `Duration` | **int* | :heavy_minus_sign: | Duration of the media in milliseconds. | 9610350 |
|
||||||
| `Bitrate` | **int* | :heavy_minus_sign: | N/A | 25025 |
|
| `Bitrate` | **int* | :heavy_minus_sign: | Bitrate in bits per second. | 25512 |
|
||||||
| `Width` | **int* | :heavy_minus_sign: | N/A | 3840 |
|
| `Width` | **int* | :heavy_minus_sign: | Video width in pixels. | 3840 |
|
||||||
| `Height` | **int* | :heavy_minus_sign: | N/A | 2072 |
|
| `Height` | **int* | :heavy_minus_sign: | Video height in pixels. | 1602 |
|
||||||
| `AspectRatio` | **float64* | :heavy_minus_sign: | N/A | 1.85 |
|
| `AspectRatio` | **float32* | :heavy_minus_sign: | Aspect ratio of the video. | 2.35 |
|
||||||
| `AudioProfile` | **string* | :heavy_minus_sign: | N/A | dts |
|
| `AudioChannels` | **int* | :heavy_minus_sign: | Number of audio channels. | 6 |
|
||||||
| `AudioChannels` | **int* | :heavy_minus_sign: | N/A | 6 |
|
| `DisplayOffset` | **int* | :heavy_minus_sign: | N/A | 50 |
|
||||||
| `AudioCodec` | **string* | :heavy_minus_sign: | N/A | eac3 |
|
| `AudioCodec` | **string* | :heavy_minus_sign: | Audio codec used. | aac |
|
||||||
| `VideoCodec` | **string* | :heavy_minus_sign: | N/A | hevc |
|
| `VideoCodec` | **string* | :heavy_minus_sign: | Video codec used. | hevc |
|
||||||
| `VideoResolution` | **string* | :heavy_minus_sign: | N/A | 4k |
|
| `VideoResolution` | **string* | :heavy_minus_sign: | Video resolution (e.g., 4k). | 4k |
|
||||||
| `Container` | *string* | :heavy_check_mark: | N/A | mkv |
|
| `Container` | **string* | :heavy_minus_sign: | Container format of the media. | mp4 |
|
||||||
| `VideoFrameRate` | **string* | :heavy_minus_sign: | N/A | 24p |
|
| `VideoFrameRate` | **string* | :heavy_minus_sign: | Frame rate of the video. Values found include NTSC, PAL, 24p<br/> | 24p |
|
||||||
| `VideoProfile` | **string* | :heavy_minus_sign: | N/A | main 10 |
|
| `VideoProfile` | **string* | :heavy_minus_sign: | Video profile (e.g., main 10). | main 10 |
|
||||||
| `HasVoiceActivity` | **bool* | :heavy_minus_sign: | N/A | false |
|
| `HasVoiceActivity` | **bool* | :heavy_minus_sign: | Indicates whether voice activity is detected. | false |
|
||||||
| `OptimizedForStreaming` | [*operations.GetLibraryItemsOptimizedForStreaming](../../models/operations/getlibraryitemsoptimizedforstreaming.md) | :heavy_minus_sign: | N/A | 1 |
|
| `AudioProfile` | **string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts |
|
||||||
| `Has64bitOffsets` | **bool* | :heavy_minus_sign: | N/A | false |
|
| `OptimizedForStreaming` | [*operations.GetLibraryItemsOptimizedForStreaming](../../models/operations/getlibraryitemsoptimizedforstreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | |
|
||||||
| `Part` | [][operations.GetLibraryItemsPart](../../models/operations/getlibraryitemspart.md) | :heavy_check_mark: | N/A | |
|
| `Has64bitOffsets` | **bool* | :heavy_minus_sign: | Indicates whether the media has 64-bit offsets.<br/>This is relevant for media files that may require larger offsets than what 32-bit integers can provide.<br/> | false |
|
||||||
|
| `Part` | [][operations.GetLibraryItemsPart](../../models/operations/getlibraryitemspart.md) | :heavy_minus_sign: | N/A | |
|
||||||
@@ -1,33 +1,28 @@
|
|||||||
# GetLibraryItemsMediaContainer
|
# GetLibraryItemsMediaContainer
|
||||||
|
|
||||||
The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
||||||
| `Type` | [][operations.GetLibraryItemsType](../../models/operations/getlibraryitemstype.md) | :heavy_minus_sign: | N/A | |
|
| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||||
| `FieldType` | [][operations.GetLibraryItemsFieldType](../../models/operations/getlibraryitemsfieldtype.md) | :heavy_minus_sign: | N/A | |
|
| `TotalSize` | *int* | :heavy_check_mark: | Total number of media items in the library. | 50 |
|
||||||
| `Size` | *int* | :heavy_check_mark: | N/A | 70 |
|
| `Offset` | *int64* | :heavy_check_mark: | Offset value for pagination. | 0 |
|
||||||
| `TotalSize` | *int* | :heavy_check_mark: | N/A | 170 |
|
| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary |
|
||||||
| `Offset` | *int* | :heavy_check_mark: | N/A | 0 |
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
| `Content` | *string* | :heavy_check_mark: | N/A | secondary |
|
| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true |
|
||||||
| `AllowSync` | *bool* | :heavy_check_mark: | N/A | true |
|
| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||||
| `Nocache` | **bool* | :heavy_minus_sign: | N/A | true |
|
| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library |
|
||||||
| `Art` | *string* | :heavy_check_mark: | N/A | /:/resources/movie-fanart.jpg |
|
| `LibrarySectionID` | **int64* | :heavy_minus_sign: | The unique identifier for the library section. | 2 |
|
||||||
| `Identifier` | *string* | :heavy_check_mark: | N/A | com.plexapp.plugins.library |
|
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | The title of the library section. | TV Series |
|
||||||
| `LibrarySectionID` | *int64* | :heavy_check_mark: | N/A | 1 |
|
| `LibrarySectionUUID` | **string* | :heavy_minus_sign: | The universally unique identifier for the library section. | e69655a2-ef48-4aba-bb19-0cc34d1e7d36 |
|
||||||
| `LibrarySectionTitle` | *string* | :heavy_check_mark: | N/A | Movies |
|
| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ |
|
||||||
| `LibrarySectionUUID` | *string* | :heavy_check_mark: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 |
|
| `MediaTagVersion` | *int64* | :heavy_check_mark: | The version number for media tags. | 1734362201 |
|
||||||
| `MediaTagPrefix` | *string* | :heavy_check_mark: | N/A | /system/bundle/media/flags/ |
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||||
| `MediaTagVersion` | *int* | :heavy_check_mark: | N/A | 1701731894 |
|
| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||||
| `Thumb` | *string* | :heavy_check_mark: | N/A | /:/resources/movie.png |
|
| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor |
|
||||||
| `Title1` | *string* | :heavy_check_mark: | N/A | Movies |
|
| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary |
|
||||||
| `Title2` | *string* | :heavy_check_mark: | N/A | Recently Released |
|
| `ViewMode` | **string* | :heavy_minus_sign: | Identifier for the view mode. | 131131 |
|
||||||
| `ViewGroup` | *string* | :heavy_check_mark: | N/A | movie |
|
| `MixedParents` | **bool* | :heavy_minus_sign: | Indicates if the media container has mixed parents. | true |
|
||||||
| `ViewMode` | **int* | :heavy_minus_sign: | N/A | 65592 |
|
| `Metadata` | [][operations.GetLibraryItemsMetadata](../../models/operations/getlibraryitemsmetadata.md) | :heavy_check_mark: | An array of metadata items. | |
|
||||||
| `MixedParents` | **bool* | :heavy_minus_sign: | N/A | true |
|
|
||||||
| `Metadata` | [][operations.GetLibraryItemsMetadata](../../models/operations/getlibraryitemsmetadata.md) | :heavy_minus_sign: | N/A | |
|
|
||||||
| `Meta` | [*operations.GetLibraryItemsMeta](../../models/operations/getlibraryitemsmeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.<br/> | |
|
| `Meta` | [*operations.GetLibraryItemsMeta](../../models/operations/getlibraryitemsmeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.<br/> | |
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# GetLibraryItemsMediaGUID
|
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
|
||||||
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
||||||
| `ID` | *string* | :heavy_check_mark: | Can be one of the following formats:<br/>imdb://tt13015952, tmdb://2434012, tvdb://7945991<br/> | imdb://tt13015952 |
|
|
||||||
@@ -7,6 +7,6 @@ The Meta object is only included in the response if the `includeMeta` parameter
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description |
|
| Field | Type | Required | Description |
|
||||||
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
|
||||||
| `Type` | [][operations.GetLibraryItemsLibraryResponseType](../../models/operations/getlibraryitemslibraryresponsetype.md) | :heavy_minus_sign: | N/A |
|
| `Type` | [][operations.GetLibraryItemsLibraryType](../../models/operations/getlibraryitemslibrarytype.md) | :heavy_minus_sign: | N/A |
|
||||||
| `FieldType` | [][operations.GetLibraryItemsLibraryFieldType](../../models/operations/getlibraryitemslibraryfieldtype.md) | :heavy_minus_sign: | N/A |
|
| `FieldType` | [][operations.GetLibraryItemsFieldType](../../models/operations/getlibraryitemsfieldtype.md) | :heavy_minus_sign: | N/A |
|
||||||
@@ -1,81 +1,88 @@
|
|||||||
# GetLibraryItemsMetadata
|
# GetLibraryItemsMetadata
|
||||||
|
|
||||||
|
Unknown
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `RatingKey` | *string* | :heavy_check_mark: | The rating key (Media ID) of this media item.<br/>Note: This is always an integer, but is represented as a string in the API.<br/> | 58683 |
|
| `RatingKey` | *string* | :heavy_check_mark: | The rating key (Media ID) of this media item. Note: Although this is always an integer, it is represented as a string in the API. | 58683 |
|
||||||
| `Key` | *string* | :heavy_check_mark: | N/A | /library/metadata/58683 |
|
| `Key` | *string* | :heavy_check_mark: | The unique key for the media item. | /library/metadata/58683 |
|
||||||
| `GUID` | *string* | :heavy_check_mark: | N/A | plex://movie/5d7768ba96b655001fdc0408 |
|
| `GUID` | *string* | :heavy_check_mark: | The globally unique identifier for the media item. | plex://movie/5d7768ba96b655001fdc0408 |
|
||||||
| `Studio` | **string* | :heavy_minus_sign: | N/A | 20th Century Studios |
|
| `Slug` | *string* | :heavy_check_mark: | A URL‐friendly version of the media title. | 4-for-texas |
|
||||||
| `SkipChildren` | **bool* | :heavy_minus_sign: | N/A | false |
|
| `Studio` | **string* | :heavy_minus_sign: | The studio that produced the media item. | 20th Century Studios |
|
||||||
| `LibrarySectionID` | **int64* | :heavy_minus_sign: | N/A | 1 |
|
| `Type` | [operations.GetLibraryItemsType](../../models/operations/getlibraryitemstype.md) | :heavy_check_mark: | N/A | movie |
|
||||||
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | N/A | Movies |
|
| `Title` | *string* | :heavy_check_mark: | The title of the media item. | Avatar: The Way of Water |
|
||||||
| `LibrarySectionKey` | **string* | :heavy_minus_sign: | N/A | /library/sections/1 |
|
| `Banner` | *string* | :heavy_check_mark: | The banner image URL for the media item. | /library/metadata/58683/banner/1703239236 |
|
||||||
| `Type` | [operations.GetLibraryItemsLibraryType](../../models/operations/getlibraryitemslibrarytype.md) | :heavy_check_mark: | The type of media content<br/> | movie |
|
| `TitleSort` | *string* | :heavy_check_mark: | The sort title used for ordering media items. | Whale |
|
||||||
| `Title` | *string* | :heavy_check_mark: | N/A | Avatar: The Way of Water |
|
| `ContentRating` | **string* | :heavy_minus_sign: | The content rating for the media item. | PG-13 |
|
||||||
| `Slug` | **string* | :heavy_minus_sign: | N/A | 4-for-texas |
|
| `Summary` | *string* | :heavy_check_mark: | A synopsis of the media item. | Jake Sully lives with his newfound family formed on the extrasolar moon Pandora.<br/>Once a familiar threat returns to finish what was previously started, Jake must<br/>work with Neytiri and the army of the Na'vi race to protect their home.<br/> |
|
||||||
| `ContentRating` | **string* | :heavy_minus_sign: | N/A | PG-13 |
|
| `Rating` | *float32* | :heavy_check_mark: | The critic rating for the media item. | 7.6 |
|
||||||
| `Summary` | *string* | :heavy_check_mark: | N/A | Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home. |
|
| `AudienceRating` | *float64* | :heavy_check_mark: | The audience rating for the media item. | 9.2 |
|
||||||
| `Rating` | **float64* | :heavy_minus_sign: | N/A | 7.6 |
|
| `Year` | **int* | :heavy_minus_sign: | The release year of the media item. | 2022 |
|
||||||
| `AudienceRating` | **float64* | :heavy_minus_sign: | N/A | 9.2 |
|
| `Tagline` | *string* | :heavy_check_mark: | A brief tagline for the media item. | Return to Pandora. |
|
||||||
| `Year` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
| `Thumb` | *string* | :heavy_check_mark: | The thumbnail image URL for the media item. | /library/metadata/58683/thumb/1703239236 |
|
||||||
| `SeasonCount` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
| `Art` | *string* | :heavy_check_mark: | The art image URL for the media item. | /library/metadata/58683/art/1703239236 |
|
||||||
| `Tagline` | **string* | :heavy_minus_sign: | N/A | Return to Pandora. |
|
| `Theme` | *string* | :heavy_check_mark: | The theme URL for the media item. | /library/metadata/1/theme/1705636920 |
|
||||||
| `FlattenSeasons` | [*operations.GetLibraryItemsFlattenSeasons](../../models/operations/getlibraryitemsflattenseasons.md) | :heavy_minus_sign: | N/A | 1 |
|
| `Index` | *int* | :heavy_check_mark: | The index position of the media item. | 1 |
|
||||||
| `ShowOrdering` | [*operations.GetLibraryItemsShowOrdering](../../models/operations/getlibraryitemsshowordering.md) | :heavy_minus_sign: | Setting that indicates the episode ordering for the show <br/>None = Library default, <br/>tmdbAiring = The Movie Database (Aired), <br/>aired = TheTVDB (Aired), <br/>dvd = TheTVDB (DVD), <br/>absolute = TheTVDB (Absolute)).<br/> | dvd |
|
| `LeafCount` | **int* | :heavy_minus_sign: | The number of leaf items (end nodes) under this media item. | 14 |
|
||||||
| `Thumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/thumb/1703239236 |
|
| `ViewedLeafCount` | **int* | :heavy_minus_sign: | The number of leaf items that have been viewed. | 0 |
|
||||||
| `Art` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/art/1703239236 |
|
| `ChildCount` | *int* | :heavy_check_mark: | The number of child items associated with this media item. | 1 |
|
||||||
| `Banner` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/banner/1703239236 |
|
| `SeasonCount` | *int* | :heavy_check_mark: | The total number of seasons (for TV shows). | 2022 |
|
||||||
| `Duration` | **int* | :heavy_minus_sign: | N/A | 11558112 |
|
| `Duration` | *int* | :heavy_check_mark: | The duration of the media item in milliseconds. | 11558112 |
|
||||||
| `OriginallyAvailableAt` | [*types.Date](../../types/date.md) | :heavy_minus_sign: | N/A | 2022-12-14 00:00:00 +0000 UTC |
|
| `OriginallyAvailableAt` | [*types.Date](../../types/date.md) | :heavy_minus_sign: | The original release date of the media item. | 2022-12-14 |
|
||||||
| `AddedAt` | *int64* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
| `AddedAt` | *int64* | :heavy_check_mark: | N/A | 1556281940 |
|
||||||
| `UpdatedAt` | **int64* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 |
|
| `UpdatedAt` | **int64* | :heavy_minus_sign: | Unix epoch datetime in seconds | 1556281940 |
|
||||||
| `AudienceRatingImage` | **string* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright |
|
| `AudienceRatingImage` | **string* | :heavy_minus_sign: | The URL for the audience rating image. | rottentomatoes://image.rating.upright |
|
||||||
| `ChapterSource` | **string* | :heavy_minus_sign: | N/A | media |
|
| `ChapterSource` | **string* | :heavy_minus_sign: | The source from which chapter data is derived. | media |
|
||||||
| `PrimaryExtraKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58684 |
|
| `PrimaryExtraKey` | **string* | :heavy_minus_sign: | The primary extra key associated with this media item. | /library/metadata/58684 |
|
||||||
| `RatingImage` | **string* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe |
|
| `OriginalTitle` | **string* | :heavy_minus_sign: | The original title of the media item (if different). | 映画 ブラッククローバー 魔法帝の剣 |
|
||||||
| `GrandparentRatingKey` | **string* | :heavy_minus_sign: | N/A | 66 |
|
| `ParentRatingKey` | **string* | :heavy_minus_sign: | The rating key of the parent media item. | 66 |
|
||||||
| `GrandparentGUID` | **string* | :heavy_minus_sign: | N/A | plex://show/5d9c081b170e24001f2a7be4 |
|
| `GrandparentRatingKey` | **string* | :heavy_minus_sign: | The rating key of the grandparent media item. | 66 |
|
||||||
| `GrandparentKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66 |
|
| `ParentGUID` | **string* | :heavy_minus_sign: | The GUID of the parent media item. | plex://show/5d9c081b170e24001f2a7be4 |
|
||||||
| `GrandparentTitle` | **string* | :heavy_minus_sign: | N/A | Caprica |
|
| `GrandparentGUID` | **string* | :heavy_minus_sign: | The GUID of the grandparent media item. | plex://show/5d9c081b170e24001f2a7be4 |
|
||||||
| `GrandparentThumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66/thumb/1705716261 |
|
| `GrandparentSlug` | **string* | :heavy_minus_sign: | The slug for the grandparent media item. | alice-in-borderland-2020 |
|
||||||
| `ParentSlug` | **string* | :heavy_minus_sign: | N/A | alice-in-borderland-2020 |
|
| `GrandparentKey` | **string* | :heavy_minus_sign: | The key of the grandparent media item. | /library/metadata/66 |
|
||||||
| `GrandparentSlug` | **string* | :heavy_minus_sign: | N/A | alice-in-borderland-2020 |
|
| `ParentKey` | **string* | :heavy_minus_sign: | The key of the parent media item. | /library/metadata/66 |
|
||||||
| `GrandparentArt` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66/art/1705716261 |
|
| `GrandparentTitle` | **string* | :heavy_minus_sign: | The title of the grandparent media item. | Caprica |
|
||||||
| `GrandparentTheme` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66/theme/1705716261 |
|
| `GrandparentThumb` | **string* | :heavy_minus_sign: | The thumbnail URL for the grandparent media item. | /library/metadata/66/thumb/1705716261 |
|
||||||
| `Media` | [][operations.GetLibraryItemsMedia](../../models/operations/getlibraryitemsmedia.md) | :heavy_minus_sign: | The Media object is only included when type query is `4` or higher.<br/> | |
|
| `GrandparentTheme` | **string* | :heavy_minus_sign: | The theme URL for the grandparent media item. | /library/metadata/66/theme/1705716261 |
|
||||||
|
| `GrandparentArt` | **string* | :heavy_minus_sign: | The art URL for the grandparent media item. | /library/metadata/66/art/1705716261 |
|
||||||
|
| `ParentTitle` | **string* | :heavy_minus_sign: | The title of the parent media item. | Caprica |
|
||||||
|
| `ParentIndex` | **int* | :heavy_minus_sign: | The index position of the parent media item. | 1 |
|
||||||
|
| `ParentThumb` | **string* | :heavy_minus_sign: | The thumbnail URL for the parent media item. | /library/metadata/66/thumb/1705716261 |
|
||||||
|
| `RatingImage` | **string* | :heavy_minus_sign: | The URL for the rating image. | rottentomatoes://image.rating.ripe |
|
||||||
|
| `ViewCount` | **int* | :heavy_minus_sign: | The number of times this media item has been viewed. | 1 |
|
||||||
|
| `ViewOffset` | **int* | :heavy_minus_sign: | The current playback offset (in milliseconds). | 5222500 |
|
||||||
|
| `SkipCount` | **int* | :heavy_minus_sign: | The number of times this media item has been skipped. | 1 |
|
||||||
|
| `Subtype` | **string* | :heavy_minus_sign: | A classification that further describes the type of media item. For example, 'clip' indicates that the item is a short video clip. | clip |
|
||||||
|
| `LastRatedAt` | **int64* | :heavy_minus_sign: | The Unix timestamp representing the last time the item was rated. | 1721813113 |
|
||||||
|
| `CreatedAtAccuracy` | **string* | :heavy_minus_sign: | The accuracy of the creation timestamp. This value indicates the format(s) provided (for example, 'epoch,local' means both epoch and local time formats are available). | epoch,local |
|
||||||
|
| `CreatedAtTZOffset` | **string* | :heavy_minus_sign: | The time zone offset for the creation timestamp, represented as a string. This offset indicates the difference from UTC. | 0 |
|
||||||
|
| `LastViewedAt` | **int* | :heavy_minus_sign: | Unix timestamp for when the media item was last viewed. | 1682752242 |
|
||||||
|
| `UserRating` | **float32* | :heavy_minus_sign: | The rating provided by a user for the item. This value is expressed as a decimal number. | 10 |
|
||||||
|
| `Image` | [][operations.GetLibraryItemsImage](../../models/operations/getlibraryitemsimage.md) | :heavy_minus_sign: | N/A | |
|
||||||
|
| `UltraBlurColors` | [*operations.GetLibraryItemsUltraBlurColors](../../models/operations/getlibraryitemsultrablurcolors.md) | :heavy_minus_sign: | N/A | |
|
||||||
|
| `Guids` | [][operations.GetLibraryItemsGuids](../../models/operations/getlibraryitemsguids.md) | :heavy_minus_sign: | N/A | |
|
||||||
|
| `LibrarySectionID` | **int64* | :heavy_minus_sign: | The identifier for the library section. | 1 |
|
||||||
|
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | The title of the library section. | Movies |
|
||||||
|
| `LibrarySectionKey` | **string* | :heavy_minus_sign: | The key corresponding to the library section. | /library/sections/1 |
|
||||||
|
| `ShowOrdering` | [*operations.ShowOrdering](../../models/operations/showordering.md) | :heavy_minus_sign: | Setting that indicates the episode ordering for the show.<br/>Options:<br/> - None = Library default<br/> - tmdbAiring = The Movie Database (Aired)<br/> - aired = TheTVDB (Aired)<br/> - dvd = TheTVDB (DVD)<br/> - absolute = TheTVDB (Absolute)<br/> | absolute |
|
||||||
|
| `FlattenSeasons` | [*operations.FlattenSeasons](../../models/operations/flattenseasons.md) | :heavy_minus_sign: | Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).<br/> | 1 |
|
||||||
|
| `SkipChildren` | **bool* | :heavy_minus_sign: | Indicates whether child items should be skipped. | false |
|
||||||
|
| `Media` | [][operations.GetLibraryItemsMedia](../../models/operations/getlibraryitemsmedia.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Genre` | [][operations.GetLibraryItemsGenre](../../models/operations/getlibraryitemsgenre.md) | :heavy_minus_sign: | N/A | |
|
| `Genre` | [][operations.GetLibraryItemsGenre](../../models/operations/getlibraryitemsgenre.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Country` | [][operations.GetLibraryItemsCountry](../../models/operations/getlibraryitemscountry.md) | :heavy_minus_sign: | N/A | |
|
| `Country` | [][operations.GetLibraryItemsCountry](../../models/operations/getlibraryitemscountry.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Director` | [][operations.GetLibraryItemsDirector](../../models/operations/getlibraryitemsdirector.md) | :heavy_minus_sign: | N/A | |
|
| `Director` | [][operations.GetLibraryItemsDirector](../../models/operations/getlibraryitemsdirector.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Writer` | [][operations.GetLibraryItemsWriter](../../models/operations/getlibraryitemswriter.md) | :heavy_minus_sign: | N/A | |
|
| `Writer` | [][operations.GetLibraryItemsWriter](../../models/operations/getlibraryitemswriter.md) | :heavy_minus_sign: | N/A | |
|
||||||
|
| `Producer` | [][operations.GetLibraryItemsProducer](../../models/operations/getlibraryitemsproducer.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Collection` | [][operations.GetLibraryItemsCollection](../../models/operations/getlibraryitemscollection.md) | :heavy_minus_sign: | N/A | |
|
| `Collection` | [][operations.GetLibraryItemsCollection](../../models/operations/getlibraryitemscollection.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Role` | [][operations.GetLibraryItemsRole](../../models/operations/getlibraryitemsrole.md) | :heavy_minus_sign: | N/A | |
|
| `Role` | [][operations.GetLibraryItemsRole](../../models/operations/getlibraryitemsrole.md) | :heavy_minus_sign: | N/A | |
|
||||||
|
| `Ratings` | [][operations.Ratings](../../models/operations/ratings.md) | :heavy_minus_sign: | N/A | |
|
||||||
|
| `Similar` | [][operations.GetLibraryItemsSimilar](../../models/operations/getlibraryitemssimilar.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Location` | [][operations.GetLibraryItemsLocation](../../models/operations/getlibraryitemslocation.md) | :heavy_minus_sign: | N/A | |
|
| `Location` | [][operations.GetLibraryItemsLocation](../../models/operations/getlibraryitemslocation.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `MediaGUID` | [][operations.GetLibraryItemsMediaGUID](../../models/operations/getlibraryitemsmediaguid.md) | :heavy_minus_sign: | The Guid object is only included in the response if the `includeGuids` parameter is set to `1`.<br/> | |
|
| `Chapter` | [][operations.Chapter](../../models/operations/chapter.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `UltraBlurColors` | [*operations.GetLibraryItemsUltraBlurColors](../../models/operations/getlibraryitemsultrablurcolors.md) | :heavy_minus_sign: | N/A | |
|
| `Marker` | [][operations.Marker](../../models/operations/marker.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `MetaDataRating` | [][operations.GetLibraryItemsMetaDataRating](../../models/operations/getlibraryitemsmetadatarating.md) | :heavy_minus_sign: | N/A | |
|
| `Extras` | [*operations.Extras](../../models/operations/extras.md) | :heavy_minus_sign: | N/A | |
|
||||||
| `Image` | [][operations.GetLibraryItemsImage](../../models/operations/getlibraryitemsimage.md) | :heavy_minus_sign: | N/A | |
|
|
||||||
| `TitleSort` | **string* | :heavy_minus_sign: | N/A | Whale |
|
|
||||||
| `ViewCount` | **int* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `LastViewedAt` | **int* | :heavy_minus_sign: | N/A | 1682752242 |
|
|
||||||
| `OriginalTitle` | **string* | :heavy_minus_sign: | N/A | 映画 ブラッククローバー 魔法帝の剣 |
|
|
||||||
| `ViewOffset` | **int* | :heavy_minus_sign: | N/A | 5222500 |
|
|
||||||
| `SkipCount` | **int* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `Index` | **int* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `Theme` | **string* | :heavy_minus_sign: | N/A | /library/metadata/1/theme/1705636920 |
|
|
||||||
| `LeafCount` | **int* | :heavy_minus_sign: | N/A | 14 |
|
|
||||||
| `ViewedLeafCount` | **int* | :heavy_minus_sign: | N/A | 0 |
|
|
||||||
| `ChildCount` | **int* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `HasPremiumExtras` | **string* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `HasPremiumPrimaryExtra` | **string* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `ParentRatingKey` | **string* | :heavy_minus_sign: | The rating key of the parent item.<br/> | 66 |
|
|
||||||
| `ParentGUID` | **string* | :heavy_minus_sign: | N/A | plex://show/5d9c081b170e24001f2a7be4 |
|
|
||||||
| `ParentStudio` | **string* | :heavy_minus_sign: | N/A | UCP |
|
|
||||||
| `ParentKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66 |
|
|
||||||
| `ParentTitle` | **string* | :heavy_minus_sign: | N/A | Caprica |
|
|
||||||
| `ParentIndex` | **int* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `ParentYear` | **int* | :heavy_minus_sign: | N/A | 2010 |
|
|
||||||
| `ParentThumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66/thumb/1705716261 |
|
|
||||||
| `ParentTheme` | **string* | :heavy_minus_sign: | N/A | /library/metadata/66/theme/1705716261 |
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# GetLibraryItemsMetaDataRating
|
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
|
||||||
| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
|
|
||||||
| `Image` | *string* | :heavy_check_mark: | A URI or path to the rating image. | themoviedb://image.rating |
|
|
||||||
| `Value` | *float32* | :heavy_check_mark: | The value of the rating. | 3 |
|
|
||||||
| `Type` | *string* | :heavy_check_mark: | The type of rating (e.g., audience, critic). | audience |
|
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
# GetLibraryItemsOptimizedForStreaming
|
# GetLibraryItemsOptimizedForStreaming
|
||||||
|
|
||||||
|
Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true
|
||||||
|
|
||||||
## Values
|
|
||||||
|
|
||||||
| Name | Value |
|
## Supported Types
|
||||||
| --------------------------------------------- | --------------------------------------------- |
|
|
||||||
| `GetLibraryItemsOptimizedForStreamingDisable` | 0 |
|
### OptimizedForStreaming1
|
||||||
| `GetLibraryItemsOptimizedForStreamingEnable` | 1 |
|
|
||||||
|
```go
|
||||||
|
getLibraryItemsOptimizedForStreaming := operations.CreateGetLibraryItemsOptimizedForStreamingOptimizedForStreaming1(operations.OptimizedForStreaming1{/* values here */})
|
||||||
|
```
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
```go
|
||||||
|
getLibraryItemsOptimizedForStreaming := operations.CreateGetLibraryItemsOptimizedForStreamingBoolean(bool{/* values here */})
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# GetLibraryItemsOptimizedForStreaming1
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ------------------------------------------- | ------------------------------------------- |
|
||||||
|
| `GetLibraryItemsOptimizedForStreaming1Zero` | 0 |
|
||||||
|
| `GetLibraryItemsOptimizedForStreaming1One` | 1 |
|
||||||
@@ -4,17 +4,19 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `ID` | *int* | :heavy_check_mark: | N/A | 119542 |
|
| `Accessible` | **bool* | :heavy_minus_sign: | Indicates if the part is accessible. | true |
|
||||||
| `Key` | *string* | :heavy_check_mark: | N/A | /library/parts/119542/1680457526/file.mkv |
|
| `Exists` | **bool* | :heavy_minus_sign: | Indicates if the part exists. | true |
|
||||||
| `Duration` | **int* | :heavy_minus_sign: | N/A | 11558112 |
|
| `ID` | *int64* | :heavy_check_mark: | Unique part identifier. | 418385 |
|
||||||
| `File` | *string* | :heavy_check_mark: | N/A | /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv |
|
| `Key` | **string* | :heavy_minus_sign: | Key to access this part. | /library/parts/418385/1735864239/file.mkv |
|
||||||
| `Size` | *int64* | :heavy_check_mark: | N/A | 36158371307 |
|
|
||||||
| `Container` | *string* | :heavy_check_mark: | The container format of the media file.<br/> | mkv |
|
|
||||||
| `AudioProfile` | **string* | :heavy_minus_sign: | N/A | dts |
|
|
||||||
| `Has64bitOffsets` | **bool* | :heavy_minus_sign: | N/A | false |
|
|
||||||
| `OptimizedForStreaming` | **bool* | :heavy_minus_sign: | N/A | false |
|
|
||||||
| `VideoProfile` | **string* | :heavy_minus_sign: | N/A | main 10 |
|
|
||||||
| `Indexes` | **string* | :heavy_minus_sign: | N/A | sd |
|
| `Indexes` | **string* | :heavy_minus_sign: | N/A | sd |
|
||||||
|
| `Duration` | **int* | :heavy_minus_sign: | Duration of the part in milliseconds. | 9610350 |
|
||||||
|
| `File` | **string* | :heavy_minus_sign: | File path for the part. | /mnt/Movies_1/W/Wicked (2024).mkv |
|
||||||
|
| `Size` | **int64* | :heavy_minus_sign: | File size in bytes. | 30649952104 |
|
||||||
|
| `PacketLength` | **int* | :heavy_minus_sign: | N/A | 188 |
|
||||||
|
| `Container` | **string* | :heavy_minus_sign: | Container format of the part. | mkv |
|
||||||
|
| `VideoProfile` | **string* | :heavy_minus_sign: | Video profile for the part. | main 10 |
|
||||||
|
| `AudioProfile` | **string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts |
|
||||||
|
| `Has64bitOffsets` | **bool* | :heavy_minus_sign: | N/A | false |
|
||||||
|
| `OptimizedForStreaming` | [*operations.GetLibraryItemsLibraryOptimizedForStreaming](../../models/operations/getlibraryitemslibraryoptimizedforstreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true<br/> | |
|
||||||
| `HasThumbnail` | [*operations.GetLibraryItemsHasThumbnail](../../models/operations/getlibraryitemshasthumbnail.md) | :heavy_minus_sign: | N/A | 1 |
|
| `HasThumbnail` | [*operations.GetLibraryItemsHasThumbnail](../../models/operations/getlibraryitemshasthumbnail.md) | :heavy_minus_sign: | N/A | 1 |
|
||||||
| `Stream` | [][operations.GetLibraryItemsStream](../../models/operations/getlibraryitemsstream.md) | :heavy_minus_sign: | N/A | |
|
|
||||||
13
docs/models/operations/getlibraryitemsproducer.md
Normal file
13
docs/models/operations/getlibraryitemsproducer.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# GetLibraryItemsProducer
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
||||||
|
| `ID` | *int64* | :heavy_check_mark: | The unique role identifier. | 109501 |
|
||||||
|
| `Filter` | *string* | :heavy_check_mark: | The filter string for the role. | actor=109501 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The actor's name. | Bob Odenkirk |
|
||||||
|
| `TagKey` | *string* | :heavy_check_mark: | A key associated with the actor tag. | 5d77683254f42c001f8c3f69 |
|
||||||
|
| `Role` | **string* | :heavy_minus_sign: | The character name or role. | Jimmy McGill |
|
||||||
|
| `Thumb` | **string* | :heavy_minus_sign: | URL for the role thumbnail image. | https://metadata-static.plex.tv/f/people/f2ca7b474cc984efbdd5c503a096285a.jpg |
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# GetLibraryItemsQueryParamType
|
# GetLibraryItemsQueryParamType
|
||||||
|
|
||||||
The type of media to retrieve.
|
The type of media to retrieve or filter by.
|
||||||
1 = movie
|
1 = movie
|
||||||
2 = show
|
2 = show
|
||||||
3 = season
|
3 = season
|
||||||
@@ -12,9 +12,13 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
|||||||
## Values
|
## Values
|
||||||
|
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| -------------------------------------- | -------------------------------------- |
|
| ----------------------------------------- | ----------------------------------------- |
|
||||||
| `GetLibraryItemsQueryParamTypeMovie` | 1 |
|
| `GetLibraryItemsQueryParamTypeMovie` | 1 |
|
||||||
| `GetLibraryItemsQueryParamTypeTvShow` | 2 |
|
| `GetLibraryItemsQueryParamTypeTvShow` | 2 |
|
||||||
| `GetLibraryItemsQueryParamTypeSeason` | 3 |
|
| `GetLibraryItemsQueryParamTypeSeason` | 3 |
|
||||||
| `GetLibraryItemsQueryParamTypeEpisode` | 4 |
|
| `GetLibraryItemsQueryParamTypeEpisode` | 4 |
|
||||||
| `GetLibraryItemsQueryParamTypeAudio` | 8 |
|
| `GetLibraryItemsQueryParamTypeArtist` | 5 |
|
||||||
|
| `GetLibraryItemsQueryParamTypeAlbum` | 6 |
|
||||||
|
| `GetLibraryItemsQueryParamTypeTrack` | 7 |
|
||||||
|
| `GetLibraryItemsQueryParamTypePhotoAlbum` | 8 |
|
||||||
|
| `GetLibraryItemsQueryParamTypePhoto` | 9 |
|
||||||
@@ -4,10 +4,10 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `Tag` | [operations.Tag](../../models/operations/tag.md) | :heavy_check_mark: | A key representing a specific tag within the section. | |
|
| `Tag` | [operations.Tag](../../models/operations/tag.md) | :heavy_check_mark: | A key representing a specific tag within the section. | |
|
||||||
| `IncludeGuids` | [*operations.IncludeGuids](../../models/operations/includeguids.md) | :heavy_minus_sign: | Adds the Guids object to the response<br/> | 1 |
|
| `IncludeGuids` | [*operations.IncludeGuids](../../models/operations/includeguids.md) | :heavy_minus_sign: | Adds the Guids object to the response<br/> | 1 |
|
||||||
| `Type` | [*operations.GetLibraryItemsQueryParamType](../../models/operations/getlibraryitemsqueryparamtype.md) | :heavy_minus_sign: | The type of media to retrieve.<br/>1 = movie<br/>2 = show<br/>3 = season<br/>4 = episode<br/>E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries<br/> | 2 |
|
| `Type` | [operations.GetLibraryItemsQueryParamType](../../models/operations/getlibraryitemsqueryparamtype.md) | :heavy_check_mark: | The type of media to retrieve or filter by.<br/>1 = movie<br/>2 = show<br/>3 = season<br/>4 = episode<br/>E.g. A movie library will not return anything with type 3 as there are no seasons for movie libraries<br/> | 2 |
|
||||||
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
| `SectionKey` | *int* | :heavy_check_mark: | The unique key of the Plex library. <br/>Note: This is unique in the context of the Plex server.<br/> | 9518 |
|
||||||
| `IncludeMeta` | [*operations.GetLibraryItemsQueryParamIncludeMeta](../../models/operations/getlibraryitemsqueryparamincludemeta.md) | :heavy_minus_sign: | Adds the Meta object to the response<br/> | 1 |
|
| `IncludeMeta` | [*operations.GetLibraryItemsQueryParamIncludeMeta](../../models/operations/getlibraryitemsqueryparamincludemeta.md) | :heavy_minus_sign: | Adds the Meta object to the response<br/> | 1 |
|
||||||
| `XPlexContainerStart` | **int* | :heavy_minus_sign: | The index of the first item to return. If not specified, the first item will be returned.<br/>If the number of items exceeds the limit, the response will be paginated.<br/>By default this is 0<br/> | 0 |
|
| `XPlexContainerStart` | **int* | :heavy_minus_sign: | The index of the first item to return. If not specified, the first item will be returned.<br/>If the number of items exceeds the limit, the response will be paginated.<br/>By default this is 0<br/> | 0 |
|
||||||
|
|||||||
@@ -4,10 +4,8 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
||||||
| `ID` | **int64* | :heavy_minus_sign: | The ID of the tag or actor. | 294129 |
|
| `ID` | *int* | :heavy_check_mark: | The unique identifier for the role.<br/>NOTE: This is different for each Plex server and is not globally unique.<br/> | 126522 |
|
||||||
| `Filter` | **string* | :heavy_minus_sign: | The filter used to find the actor or tag. | actor=294129 |
|
| `Tag` | *string* | :heavy_check_mark: | The display tag for the actor (typically the actor's name). | Teller |
|
||||||
| `Thumb` | **string* | :heavy_minus_sign: | The thumbnail of the actor | https://metadata-static.plex.tv/2/people/27b85844536c39f3f9ac943aaad46608.jpg |
|
| `Role` | **string* | :heavy_minus_sign: | The role played by the actor in the media item. | Self - Judge |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | The name of the tag or actor. | Mike Smith |
|
| `Thumb` | **string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the actor. | https://metadata-static.plex.tv/7/people/708568fd018d7aa8b1032dcf867747e8.jpg |
|
||||||
| `TagKey` | **string* | :heavy_minus_sign: | Unique identifier for the tag. | 668e7e7b22bcad9064350c91 |
|
|
||||||
| `Role` | **string* | :heavy_minus_sign: | The role of the actor or tag in the media. | Self |
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# GetLibraryItemsShowOrdering
|
|
||||||
|
|
||||||
Setting that indicates the episode ordering for the show
|
|
||||||
None = Library default,
|
|
||||||
tmdbAiring = The Movie Database (Aired),
|
|
||||||
aired = TheTVDB (Aired),
|
|
||||||
dvd = TheTVDB (DVD),
|
|
||||||
absolute = TheTVDB (Absolute)).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Values
|
|
||||||
|
|
||||||
| Name | Value |
|
|
||||||
| --------------------------------------- | --------------------------------------- |
|
|
||||||
| `GetLibraryItemsShowOrderingNone` | None |
|
|
||||||
| `GetLibraryItemsShowOrderingTmdbAiring` | tmdbAiring |
|
|
||||||
| `GetLibraryItemsShowOrderingAired` | aired |
|
|
||||||
| `GetLibraryItemsShowOrderingDvd` | dvd |
|
|
||||||
| `GetLibraryItemsShowOrderingAbsolute` | absolute |
|
|
||||||
10
docs/models/operations/getlibraryitemssimilar.md
Normal file
10
docs/models/operations/getlibraryitemssimilar.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GetLibraryItemsSimilar
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
|
||||||
|
| `ID` | *int64* | :heavy_check_mark: | The unique similar item identifier. | 26 |
|
||||||
|
| `Filter` | *string* | :heavy_check_mark: | The filter string for similar items. | similar=26 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The tag or title of the similar content. | Breaking Bad |
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
# GetLibraryItemsStream
|
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
|
||||||
| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
|
|
||||||
| `ID` | *int64* | :heavy_check_mark: | N/A | 272796 |
|
|
||||||
| `StreamType` | *int64* | :heavy_check_mark: | Type of stream (1 = video, 2 = audio, 3 = subtitle) | 1 |
|
|
||||||
| `Default` | **bool* | :heavy_minus_sign: | Indicates if this is the default stream | true |
|
|
||||||
| `Selected` | **bool* | :heavy_minus_sign: | Indicates if the stream is selected | true |
|
|
||||||
| `Codec` | *string* | :heavy_check_mark: | Codec used by the stream | h264 |
|
|
||||||
| `Index` | *int64* | :heavy_check_mark: | The index of the stream | 0 |
|
|
||||||
| `Bitrate` | **int64* | :heavy_minus_sign: | The bitrate of the stream in kbps | 6273 |
|
|
||||||
| `ColorPrimaries` | **string* | :heavy_minus_sign: | The color primaries of the video stream | bt709 |
|
|
||||||
| `ColorRange` | **string* | :heavy_minus_sign: | The color range of the video stream | tv |
|
|
||||||
| `ColorSpace` | **string* | :heavy_minus_sign: | The color space of the video stream | bt709 |
|
|
||||||
| `ColorTrc` | **string* | :heavy_minus_sign: | The transfer characteristics (TRC) of the video stream | bt709 |
|
|
||||||
| `BitDepth` | **int64* | :heavy_minus_sign: | The bit depth of the video stream | 8 |
|
|
||||||
| `ChromaLocation` | **string* | :heavy_minus_sign: | The chroma location of the video stream | left |
|
|
||||||
| `StreamIdentifier` | **string* | :heavy_minus_sign: | The identifier of the video stream | 2 |
|
|
||||||
| `ChromaSubsampling` | **string* | :heavy_minus_sign: | The chroma subsampling format | 4:2:0 |
|
|
||||||
| `CodedHeight` | **int64* | :heavy_minus_sign: | The coded height of the video stream | 1088 |
|
|
||||||
| `CodedWidth` | **int64* | :heavy_minus_sign: | The coded width of the video stream | 1920 |
|
|
||||||
| `FrameRate` | **float64* | :heavy_minus_sign: | The frame rate of the video stream | 29.97 |
|
|
||||||
| `HasScalingMatrix` | **bool* | :heavy_minus_sign: | Indicates if the stream has a scaling matrix | false |
|
|
||||||
| `HearingImpaired` | **bool* | :heavy_minus_sign: | N/A | false |
|
|
||||||
| `ClosedCaptions` | **bool* | :heavy_minus_sign: | N/A | false |
|
|
||||||
| `EmbeddedInVideo` | **string* | :heavy_minus_sign: | N/A | 1 |
|
|
||||||
| `Height` | **int64* | :heavy_minus_sign: | The height of the video stream | 1080 |
|
|
||||||
| `Level` | **int64* | :heavy_minus_sign: | The level of the video codec | 40 |
|
|
||||||
| `Profile` | **string* | :heavy_minus_sign: | The profile of the video codec | main |
|
|
||||||
| `RefFrames` | **int64* | :heavy_minus_sign: | Number of reference frames | 4 |
|
|
||||||
| `ScanType` | **string* | :heavy_minus_sign: | The scan type (progressive or interlaced) | progressive |
|
|
||||||
| `Width` | **int64* | :heavy_minus_sign: | The width of the video stream | 1920 |
|
|
||||||
| `DisplayTitle` | **string* | :heavy_minus_sign: | Display title of the stream | 1080p (H.264) |
|
|
||||||
| `ExtendedDisplayTitle` | **string* | :heavy_minus_sign: | Extended display title of the stream | 1080p (H.264) |
|
|
||||||
| `Channels` | **int64* | :heavy_minus_sign: | Number of audio channels (for audio streams) | 2 |
|
|
||||||
| `Language` | **string* | :heavy_minus_sign: | The language of the stream (for audio/subtitle streams) | English |
|
|
||||||
| `LanguageTag` | **string* | :heavy_minus_sign: | Language tag of the stream | en |
|
|
||||||
| `LanguageCode` | **string* | :heavy_minus_sign: | Language code of the stream | eng |
|
|
||||||
| `AudioChannelLayout` | **string* | :heavy_minus_sign: | The audio channel layout | stereo |
|
|
||||||
| `SamplingRate` | **int64* | :heavy_minus_sign: | Sampling rate of the audio stream in Hz | 48000 |
|
|
||||||
| `Title` | **string* | :heavy_minus_sign: | Title of the subtitle track (for subtitle streams) | English |
|
|
||||||
| `CanAutoSync` | **bool* | :heavy_minus_sign: | Indicates if the subtitle stream can auto-sync | false |
|
|
||||||
@@ -1,14 +1,20 @@
|
|||||||
# GetLibraryItemsType
|
# GetLibraryItemsType
|
||||||
|
|
||||||
|
The type of media content in the Plex library. This can represent videos, music, or photos.
|
||||||
|
|
||||||
## Fields
|
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
|
||||||
| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
## Values
|
||||||
| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/all?type=2 |
|
|
||||||
| `Type` | *string* | :heavy_check_mark: | N/A | show |
|
| Name | Value |
|
||||||
| `Title` | *string* | :heavy_check_mark: | N/A | TV Shows |
|
| ------------------------------- | ------------------------------- |
|
||||||
| `Active` | *bool* | :heavy_check_mark: | N/A | false |
|
| `GetLibraryItemsTypeMovie` | movie |
|
||||||
| `Filter` | [][operations.GetLibraryItemsFilter](../../models/operations/getlibraryitemsfilter.md) | :heavy_minus_sign: | N/A | |
|
| `GetLibraryItemsTypeTvShow` | show |
|
||||||
| `Sort` | [][operations.GetLibraryItemsSort](../../models/operations/getlibraryitemssort.md) | :heavy_minus_sign: | N/A | |
|
| `GetLibraryItemsTypeSeason` | season |
|
||||||
| `Field` | [][operations.GetLibraryItemsField](../../models/operations/getlibraryitemsfield.md) | :heavy_minus_sign: | N/A | |
|
| `GetLibraryItemsTypeEpisode` | episode |
|
||||||
|
| `GetLibraryItemsTypeArtist` | artist |
|
||||||
|
| `GetLibraryItemsTypeAlbum` | album |
|
||||||
|
| `GetLibraryItemsTypeTrack` | track |
|
||||||
|
| `GetLibraryItemsTypePhotoAlbum` | photoalbum |
|
||||||
|
| `GetLibraryItemsTypePhoto` | photo |
|
||||||
|
| `GetLibraryItemsTypeCollection` | collection |
|
||||||
@@ -4,5 +4,7 @@
|
|||||||
## Fields
|
## Fields
|
||||||
|
|
||||||
| Field | Type | Required | Description | Example |
|
| Field | Type | Required | Description | Example |
|
||||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
||||||
| `Tag` | **string* | :heavy_minus_sign: | N/A | James Cameron |
|
| `ID` | *int* | :heavy_check_mark: | Unique identifier for the writer. | 126522 |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The role of Writer | Jamie P. Hanson |
|
||||||
|
| `Thumb` | **string* | :heavy_minus_sign: | The absolute URL of the thumbnail image for the writer. | https://metadata-static.plex.tv/8/people/8d65fa96804802e08f2de09fe014408e.jpg |
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# GetLibrarySectionsAllActiveDirection
|
||||||
|
|
||||||
|
The direction of the sort. Can be either `asc` or `desc`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ------------------------------------------------ | ------------------------------------------------ |
|
||||||
|
| `GetLibrarySectionsAllActiveDirectionAscending` | asc |
|
||||||
|
| `GetLibrarySectionsAllActiveDirectionDescending` | desc |
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# GetLibrarySectionsAllCollection
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The user-made collection this media item belongs to | My Awesome Collection |
|
||||||
8
docs/models/operations/getlibrarysectionsallcountry.md
Normal file
8
docs/models/operations/getlibrarysectionsallcountry.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# GetLibrarySectionsAllCountry
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The country of origin of this media item | United States of America |
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# GetLibraryItemsLibraryActiveDirection
|
# GetLibrarySectionsAllDefaultDirection
|
||||||
|
|
||||||
The direction of the sort. Can be either `asc` or `desc`.
|
The direction of the sort. Can be either `asc` or `desc`.
|
||||||
|
|
||||||
@@ -8,5 +8,5 @@ The direction of the sort. Can be either `asc` or `desc`.
|
|||||||
|
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| ------------------------------------------------- | ------------------------------------------------- |
|
| ------------------------------------------------- | ------------------------------------------------- |
|
||||||
| `GetLibraryItemsLibraryActiveDirectionAscending` | asc |
|
| `GetLibrarySectionsAllDefaultDirectionAscending` | asc |
|
||||||
| `GetLibraryItemsLibraryActiveDirectionDescending` | desc |
|
| `GetLibrarySectionsAllDefaultDirectionDescending` | desc |
|
||||||
8
docs/models/operations/getlibrarysectionsalldirector.md
Normal file
8
docs/models/operations/getlibrarysectionsalldirector.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# GetLibrarySectionsAllDirector
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------- | -------------------- | -------------------- | -------------------- | -------------------- |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The role of Director | Danny Boyle |
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# GetLibraryItemsLibraryField
|
# GetLibrarySectionsAllField
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
9
docs/models/operations/getlibrarysectionsallfieldtype.md
Normal file
9
docs/models/operations/getlibrarysectionsallfieldtype.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# GetLibrarySectionsAllFieldType
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
|
||||||
|
| `Type` | *string* | :heavy_check_mark: | N/A | tag |
|
||||||
|
| `Operator` | [][operations.GetLibrarySectionsAllOperator](../../models/operations/getlibrarysectionsalloperator.md) | :heavy_check_mark: | N/A | |
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# GetLibraryItemsLibraryFilter
|
# GetLibrarySectionsAllFilter
|
||||||
|
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
@@ -10,3 +10,4 @@
|
|||||||
| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/genre?type=2 |
|
| `Key` | *string* | :heavy_check_mark: | N/A | /library/sections/2/genre?type=2 |
|
||||||
| `Title` | *string* | :heavy_check_mark: | N/A | Genre |
|
| `Title` | *string* | :heavy_check_mark: | N/A | Genre |
|
||||||
| `Type` | *string* | :heavy_check_mark: | N/A | filter |
|
| `Type` | *string* | :heavy_check_mark: | N/A | filter |
|
||||||
|
| `Advanced` | **bool* | :heavy_minus_sign: | N/A | true |
|
||||||
8
docs/models/operations/getlibrarysectionsallgenre.md
Normal file
8
docs/models/operations/getlibrarysectionsallgenre.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# GetLibrarySectionsAllGenre
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- |
|
||||||
|
| `Tag` | *string* | :heavy_check_mark: | The genre name of this media-item<br/> | Crime |
|
||||||
8
docs/models/operations/getlibrarysectionsallguids.md
Normal file
8
docs/models/operations/getlibrarysectionsallguids.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# GetLibrarySectionsAllGuids
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `ID` | *string* | :heavy_check_mark: | The unique identifier for the Guid. Can be prefixed with imdb://, tmdb://, tvdb://<br/> | {<br/>"imdbExample": {<br/>"summary": "IMDB example",<br/>"value": "imdb://tt13015952"<br/>},<br/>"tmdbExample": {<br/>"summary": "TMDB example",<br/>"value": "tmdb://2434012"<br/>},<br/>"tvdbExample": {<br/>"summary": "TVDB example",<br/>"value": "tvdb://7945991"<br/>}<br/>} |
|
||||||
11
docs/models/operations/getlibrarysectionsallhasthumbnail.md
Normal file
11
docs/models/operations/getlibrarysectionsallhasthumbnail.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# GetLibrarySectionsAllHasThumbnail
|
||||||
|
|
||||||
|
Indicates if the part has a thumbnail.
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ---------------------------------------- | ---------------------------------------- |
|
||||||
|
| `GetLibrarySectionsAllHasThumbnailFalse` | 0 |
|
||||||
|
| `GetLibrarySectionsAllHasThumbnailTrue` | 1 |
|
||||||
10
docs/models/operations/getlibrarysectionsallimage.md
Normal file
10
docs/models/operations/getlibrarysectionsallimage.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GetLibrarySectionsAllImage
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `Alt` | *string* | :heavy_check_mark: | N/A | Episode 1 |
|
||||||
|
| `Type` | [operations.GetLibrarySectionsAllLibraryResponseType](../../models/operations/getlibrarysectionsalllibraryresponsetype.md) | :heavy_check_mark: | N/A | background |
|
||||||
|
| `URL` | *string* | :heavy_check_mark: | N/A | /library/metadata/45521/thumb/1644710589 |
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# GetLibrarySectionsAllLibraryOptimizedForStreaming
|
||||||
|
|
||||||
|
Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true
|
||||||
|
|
||||||
|
|
||||||
|
## Supported Types
|
||||||
|
|
||||||
|
### GetLibrarySectionsAllOptimizedForStreamingLibrary1
|
||||||
|
|
||||||
|
```go
|
||||||
|
getLibrarySectionsAllLibraryOptimizedForStreaming := operations.CreateGetLibrarySectionsAllLibraryOptimizedForStreamingGetLibrarySectionsAllOptimizedForStreamingLibrary1(operations.GetLibrarySectionsAllOptimizedForStreamingLibrary1{/* values here */})
|
||||||
|
```
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
```go
|
||||||
|
getLibrarySectionsAllLibraryOptimizedForStreaming := operations.CreateGetLibrarySectionsAllLibraryOptimizedForStreamingBoolean(bool{/* values here */})
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# GetLibrarySectionsAllLibraryResponseType
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| ----------------------------------------------------- | ----------------------------------------------------- |
|
||||||
|
| `GetLibrarySectionsAllLibraryResponseTypeCoverPoster` | coverPoster |
|
||||||
|
| `GetLibrarySectionsAllLibraryResponseTypeBackground` | background |
|
||||||
|
| `GetLibrarySectionsAllLibraryResponseTypeSnapshot` | snapshot |
|
||||||
|
| `GetLibrarySectionsAllLibraryResponseTypeClearLogo` | clearLogo |
|
||||||
20
docs/models/operations/getlibrarysectionsalllibrarytype.md
Normal file
20
docs/models/operations/getlibrarysectionsalllibrarytype.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# GetLibrarySectionsAllLibraryType
|
||||||
|
|
||||||
|
The type of media content in the Plex library. This can represent videos, music, or photos.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Name | Value |
|
||||||
|
| -------------------------------------------- | -------------------------------------------- |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeMovie` | movie |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeTvShow` | show |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeSeason` | season |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeEpisode` | episode |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeArtist` | artist |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeAlbum` | album |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeTrack` | track |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypePhotoAlbum` | photoalbum |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypePhoto` | photo |
|
||||||
|
| `GetLibrarySectionsAllLibraryTypeCollection` | collection |
|
||||||
26
docs/models/operations/getlibrarysectionsallmedia.md
Normal file
26
docs/models/operations/getlibrarysectionsallmedia.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# GetLibrarySectionsAllMedia
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `ID` | *int64* | :heavy_check_mark: | Unique media identifier. | 387322 |
|
||||||
|
| `Duration` | **int* | :heavy_minus_sign: | Duration of the media in milliseconds. | 9610350 |
|
||||||
|
| `Bitrate` | **int* | :heavy_minus_sign: | Bitrate in bits per second. | 25512 |
|
||||||
|
| `Width` | **int* | :heavy_minus_sign: | Video width in pixels. | 3840 |
|
||||||
|
| `Height` | **int* | :heavy_minus_sign: | Video height in pixels. | 1602 |
|
||||||
|
| `AspectRatio` | **float32* | :heavy_minus_sign: | Aspect ratio of the video. | 2.35 |
|
||||||
|
| `AudioChannels` | **int* | :heavy_minus_sign: | Number of audio channels. | 6 |
|
||||||
|
| `DisplayOffset` | **int* | :heavy_minus_sign: | N/A | 50 |
|
||||||
|
| `AudioCodec` | **string* | :heavy_minus_sign: | Audio codec used. | eac3 |
|
||||||
|
| `VideoCodec` | **string* | :heavy_minus_sign: | Video codec used. | hevc |
|
||||||
|
| `VideoResolution` | **string* | :heavy_minus_sign: | Video resolution (e.g., 4k). | 4k |
|
||||||
|
| `Container` | **string* | :heavy_minus_sign: | File container type. | mkv |
|
||||||
|
| `VideoFrameRate` | **string* | :heavy_minus_sign: | Frame rate of the video. Values found include NTSC, PAL, 24p<br/> | 24p |
|
||||||
|
| `VideoProfile` | **string* | :heavy_minus_sign: | Video profile (e.g., main 10). | main 10 |
|
||||||
|
| `HasVoiceActivity` | **bool* | :heavy_minus_sign: | Indicates whether voice activity is detected. | false |
|
||||||
|
| `AudioProfile` | **string* | :heavy_minus_sign: | The audio profile used for the media (e.g., DTS, Dolby Digital, etc.). | dts |
|
||||||
|
| `OptimizedForStreaming` | [*operations.GetLibrarySectionsAllOptimizedForStreaming](../../models/operations/getlibrarysectionsalloptimizedforstreaming.md) | :heavy_minus_sign: | Has this media been optimized for streaming. NOTE: This can be 0, 1, false or true | |
|
||||||
|
| `Has64bitOffsets` | **bool* | :heavy_minus_sign: | N/A | false |
|
||||||
|
| `Part` | [][operations.GetLibrarySectionsAllPart](../../models/operations/getlibrarysectionsallpart.md) | :heavy_minus_sign: | An array of parts for this media item. | |
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# GetLibrarySectionsAllMediaContainer
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
| Field | Type | Required | Description | Example |
|
||||||
|
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
|
||||||
|
| `Size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||||
|
| `TotalSize` | *int* | :heavy_check_mark: | Total number of media items in the library. | 50 |
|
||||||
|
| `Offset` | *int64* | :heavy_check_mark: | Offset value for pagination. | 0 |
|
||||||
|
| `AllowSync` | *bool* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||||
|
| `Art` | *string* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||||
|
| `Content` | *string* | :heavy_check_mark: | The content type or mode. | secondary |
|
||||||
|
| `Identifier` | *string* | :heavy_check_mark: | An plugin identifier for the media container. | com.plexapp.plugins.library |
|
||||||
|
| `LibrarySectionID` | **int64* | :heavy_minus_sign: | The unique identifier for the library section. | 2 |
|
||||||
|
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | The title of the library section. | TV Series |
|
||||||
|
| `LibrarySectionUUID` | **string* | :heavy_minus_sign: | The universally unique identifier for the library section. | e69655a2-ef48-4aba-bb19-0cc34d1e7d36 |
|
||||||
|
| `MediaTagPrefix` | *string* | :heavy_check_mark: | The prefix used for media tag resource paths. | /system/bundle/media/flags/ |
|
||||||
|
| `MediaTagVersion` | *int64* | :heavy_check_mark: | The version number for media tags. | 1734362201 |
|
||||||
|
| `Thumb` | *string* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||||
|
| `Nocache` | *bool* | :heavy_check_mark: | Specifies whether caching is disabled. | true |
|
||||||
|
| `Title1` | *string* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||||
|
| `Title2` | *string* | :heavy_check_mark: | The secondary title of the media container. | By Starring Actor |
|
||||||
|
| `ViewGroup` | *string* | :heavy_check_mark: | Identifier for the view group layout. | secondary |
|
||||||
|
| `Meta` | [*operations.GetLibrarySectionsAllMeta](../../models/operations/getlibrarysectionsallmeta.md) | :heavy_minus_sign: | The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.<br/> | |
|
||||||
|
| `Metadata` | [][operations.GetLibrarySectionsAllMetadata](../../models/operations/getlibrarysectionsallmetadata.md) | :heavy_minus_sign: | An array of metadata items. | |
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user