mirror of
https://github.com/LukeHagar/plexgo.git
synced 2025-12-07 20:47:49 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7af7441ac7 | ||
|
|
d1945b544b | ||
|
|
16bb49d558 | ||
|
|
4bea7ae0d8 | ||
|
|
da5491e935 | ||
|
|
aeebf438e1 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
.speakeasy/reports
|
||||
# .gitignore
|
||||
|
||||
1451
.speakeasy/gen.lock
1451
.speakeasy/gen.lock
File diff suppressed because one or more lines are too long
@@ -11,11 +11,13 @@ generation:
|
||||
requestResponseComponentNamesFeb2024: true
|
||||
auth:
|
||||
oAuth2ClientCredentialsEnabled: true
|
||||
oAuth2PasswordEnabled: false
|
||||
go:
|
||||
version: 0.15.0
|
||||
version: 0.17.2
|
||||
additionalDependencies: {}
|
||||
allowUnknownFieldsInWeakUnions: false
|
||||
clientServerStatusCodesAsErrors: true
|
||||
defaultErrorName: SDKError
|
||||
flattenGlobalSecurity: true
|
||||
imports:
|
||||
option: openapi
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
speakeasyVersion: 1.406.0
|
||||
speakeasyVersion: 1.476.0
|
||||
sources:
|
||||
my-source:
|
||||
sourceNamespace: my-source
|
||||
@@ -9,19 +9,19 @@ sources:
|
||||
- main
|
||||
plexapi:
|
||||
sourceNamespace: plexapi
|
||||
sourceRevisionDigest: sha256:c6ab8f13847c7cdc4ab3752f517164d7da08266726255aa0d614b1eaea66fb0e
|
||||
sourceBlobDigest: sha256:64c7694915a0828aeb256d10d2fa0ea477681785b818916b6681be8cc5ffb93b
|
||||
sourceRevisionDigest: sha256:b146684d2d813daa8ba29e432a12334838753d0b20183beca8178a74ec4d895a
|
||||
sourceBlobDigest: sha256:58f51c4319fcda931d63950fd926e8650e20a2e1375e356bf3a930111e246a58
|
||||
tags:
|
||||
- latest
|
||||
- main
|
||||
- speakeasy-sdk-regen-1737763744
|
||||
targets:
|
||||
plexgo:
|
||||
source: plexapi
|
||||
sourceNamespace: plexapi
|
||||
sourceRevisionDigest: sha256:c6ab8f13847c7cdc4ab3752f517164d7da08266726255aa0d614b1eaea66fb0e
|
||||
sourceBlobDigest: sha256:64c7694915a0828aeb256d10d2fa0ea477681785b818916b6681be8cc5ffb93b
|
||||
sourceRevisionDigest: sha256:b146684d2d813daa8ba29e432a12334838753d0b20183beca8178a74ec4d895a
|
||||
sourceBlobDigest: sha256:58f51c4319fcda931d63950fd926e8650e20a2e1375e356bf3a930111e246a58
|
||||
codeSamplesNamespace: code-samples-go-plexgo
|
||||
codeSamplesRevisionDigest: sha256:9ae03dbe12a6438ac7667de48bf864bbeb4b470bd87b38555484879a998889ba
|
||||
codeSamplesRevisionDigest: sha256:a9b4a5597cc8dc7e97e7ce3e68de850538878f6a879c0b400ae0d4757f7f8743
|
||||
workflow:
|
||||
workflowVersion: 1.0.0
|
||||
speakeasyVersion: latest
|
||||
|
||||
154
README.md
154
README.md
@@ -40,16 +40,24 @@ The following SDKs are generated from the OpenAPI Specification. They are automa
|
||||
|
||||
<!-- Start Table of Contents [toc] -->
|
||||
## 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] -->
|
||||
|
||||
<!-- Start SDK Installation [installation] -->
|
||||
@@ -76,16 +84,12 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -250,16 +254,12 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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(
|
||||
retry.Config{
|
||||
Strategy: "backoff",
|
||||
@@ -293,6 +293,8 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
plexgo.WithRetryConfig(
|
||||
retry.Config{
|
||||
@@ -306,14 +308,8 @@ func main() {
|
||||
RetryConnectionErrors: false,
|
||||
}),
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -335,11 +331,11 @@ By Default, an API error will return `sdkerrors.SDKError`. When custom error res
|
||||
|
||||
For example, the `GetServerCapabilities` function may return the following errors:
|
||||
|
||||
| Error Type | Status Code | Content Type |
|
||||
| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
|
||||
| sdkerrors.GetServerCapabilitiesBadRequest | 400 | application/json |
|
||||
| sdkerrors.GetServerCapabilitiesUnauthorized | 401 | application/json |
|
||||
| sdkerrors.SDKError | 4XX, 5XX | \*/\* |
|
||||
| Error Type | Status Code | Content Type |
|
||||
| ------------------------------------------- | ----------- | ---------------- |
|
||||
| sdkerrors.GetServerCapabilitiesBadRequest | 400 | application/json |
|
||||
| sdkerrors.GetServerCapabilitiesUnauthorized | 401 | application/json |
|
||||
| sdkerrors.SDKError | 4XX, 5XX | \*/\* |
|
||||
|
||||
### Example
|
||||
|
||||
@@ -355,16 +351,12 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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)
|
||||
if err != nil {
|
||||
|
||||
@@ -394,58 +386,16 @@ func main() {
|
||||
<!-- Start Server Selection [server] -->
|
||||
## Server Selection
|
||||
|
||||
### Select Server by Index
|
||||
### Server Variables
|
||||
|
||||
You can override the default server globally using the `WithServerIndex` option when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
|
||||
|
||||
| # | Server | Variables |
|
||||
| - | ------ | --------- |
|
||||
| 0 | `{protocol}://{ip}:{port}` | `protocol` (default is `https`), `ip` (default is `10.10.10.47`), `port` (default is `32400`) |
|
||||
|
||||
#### Example
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := plexgo.New(
|
||||
plexgo.WithServerIndex(0),
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if res.Object != nil {
|
||||
// handle response
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
#### Variables
|
||||
|
||||
Some of the server options above contain variables. If you want to set the values of those variables, the following options are provided for doing so:
|
||||
* `WithProtocol plexgo.ServerProtocol`
|
||||
* `WithIP string`
|
||||
* `WithPort string`
|
||||
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
|
||||
|
||||
The default server can also be overridden globally using the `WithServerURL` option when initializing the SDK client instance. For example:
|
||||
The default server can also be overridden globally using the `WithServerURL(serverURL string)` option when initializing the SDK client instance. For example:
|
||||
```go
|
||||
package main
|
||||
|
||||
@@ -456,17 +406,13 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
plexgo.WithServerURL("{protocol}://{ip}:{port}"),
|
||||
plexgo.WithServerURL("https://10.10.10.47:32400"),
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -492,16 +438,12 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -550,9 +492,9 @@ This can be a convenient way to configure timeouts, cookies, proxies, custom hea
|
||||
|
||||
This SDK supports the following security scheme globally:
|
||||
|
||||
| Name | Type | Scheme |
|
||||
| ------------- | ------------- | ------------- |
|
||||
| `AccessToken` | apiKey | API key |
|
||||
| Name | Type | Scheme |
|
||||
| ------------- | ------ | ------- |
|
||||
| `AccessToken` | apiKey | API key |
|
||||
|
||||
You can configure it using the `WithSecurity` option when initializing the SDK client instance. For example:
|
||||
```go
|
||||
@@ -565,16 +507,12 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
62
RELEASES.md
62
RELEASES.md
@@ -942,4 +942,64 @@ Based on:
|
||||
### Generated
|
||||
- [go v0.15.0] .
|
||||
### Releases
|
||||
- [Go v0.15.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.15.0 - .
|
||||
- [Go v0.15.0] https://github.com/LukeHagar/plexgo/releases/tag/v0.15.0 - .
|
||||
|
||||
## 2024-10-04 00:09:04
|
||||
### Changes
|
||||
Based on:
|
||||
- OpenAPI Doc
|
||||
- Speakeasy CLI 1.406.0 (2.429.0) https://github.com/speakeasy-api/speakeasy
|
||||
### Generated
|
||||
- [go v0.15.1] .
|
||||
### Releases
|
||||
- [Go v0.15.1] https://github.com/LukeHagar/plexgo/releases/tag/v0.15.1 - .
|
||||
|
||||
## 2024-11-12 00:08:55
|
||||
### Changes
|
||||
Based on:
|
||||
- OpenAPI Doc
|
||||
- Speakeasy CLI 1.438.1 (2.457.2) https://github.com/speakeasy-api/speakeasy
|
||||
### Generated
|
||||
- [go v0.16.0] .
|
||||
### Releases
|
||||
- [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 - .
|
||||
8
USAGE.md
8
USAGE.md
@@ -9,16 +9,12 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
141
activities.go
141
activities.go
@@ -11,8 +11,6 @@ import (
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
@@ -56,7 +54,12 @@ 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")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -84,21 +87,15 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +104,11 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -120,7 +121,11 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -181,21 +186,11 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -207,17 +202,16 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
|
||||
res.Object = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -230,17 +224,16 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -253,28 +246,29 @@ func (s *Activities) GetServerActivities(ctx context.Context, opts ...operations
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -308,7 +302,12 @@ 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)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -336,21 +335,15 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -359,7 +352,11 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -372,7 +369,11 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -433,22 +434,12 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -461,17 +452,16 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -484,28 +474,29 @@ func (s *Activities) CancelServerActivities(ctx context.Context, activityUUID st
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@ import (
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
@@ -55,7 +53,12 @@ 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")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -87,21 +90,15 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +107,11 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -123,7 +124,11 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -184,22 +189,12 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -212,17 +207,16 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -235,28 +229,29 @@ func (s *Authentication) GetTransientToken(ctx context.Context, type_ operations
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -291,7 +286,12 @@ 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")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -323,21 +323,15 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +340,11 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -359,7 +357,11 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -420,22 +422,12 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -448,17 +440,16 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -471,28 +462,29 @@ func (s *Authentication) GetSourceConnectionInformation(ctx context.Context, sou
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -512,7 +504,6 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
|
||||
o := operations.Options{}
|
||||
supportedOptions := []string{
|
||||
operations.SupportedOptionServerURL,
|
||||
operations.SupportedOptionRetries,
|
||||
operations.SupportedOptionTimeout,
|
||||
}
|
||||
@@ -555,21 +546,15 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -578,7 +563,11 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -591,7 +580,11 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -652,21 +645,11 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -678,17 +661,16 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
|
||||
res.UserPlexAccount = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -701,17 +683,16 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -724,28 +705,29 @@ func (s *Authentication) GetTokenDetails(ctx context.Context, opts ...operations
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -763,17 +745,8 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
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{}
|
||||
supportedOptions := []string{
|
||||
operations.SupportedOptionServerURL,
|
||||
operations.SupportedOptionRetries,
|
||||
operations.SupportedOptionTimeout,
|
||||
}
|
||||
@@ -816,25 +789,21 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
}
|
||||
req.Header.Set("Accept", "application/json")
|
||||
req.Header.Set("User-Agent", s.sdkConfiguration.UserAgent)
|
||||
req.Header.Set("Content-Type", reqContentType)
|
||||
if 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
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -843,7 +812,11 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -856,7 +829,11 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -917,21 +894,11 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 201:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -943,17 +910,16 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
|
||||
res.UserPlexAccount = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -966,17 +932,16 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -989,28 +954,29 @@ func (s *Authentication) PostUsersSignInData(ctx context.Context, request operat
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
|
||||
342
butler.go
342
butler.go
@@ -11,8 +11,6 @@ import (
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
@@ -50,7 +48,12 @@ 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")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -78,21 +81,15 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +98,11 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -114,7 +115,11 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -175,21 +180,11 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -201,17 +196,16 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
|
||||
res.Object = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -224,17 +218,16 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -247,28 +240,29 @@ func (s *Butler) GetButlerTasks(ctx context.Context, opts ...operations.Option)
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -302,7 +296,12 @@ 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")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -330,21 +329,15 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -353,7 +346,11 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -366,7 +363,11 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -427,22 +428,12 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -455,17 +446,16 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -478,28 +468,29 @@ func (s *Butler) StartAllTasks(ctx context.Context, opts ...operations.Option) (
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -529,7 +520,12 @@ 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")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -557,21 +553,15 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -580,7 +570,11 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -593,7 +587,11 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -654,22 +652,12 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -682,17 +670,16 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -705,28 +692,29 @@ func (s *Butler) StopAllTasks(ctx context.Context, opts ...operations.Option) (*
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -764,7 +752,12 @@ 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)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -792,21 +785,15 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -815,7 +802,11 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -828,7 +819,11 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -889,16 +884,6 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
fallthrough
|
||||
@@ -906,7 +891,7 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -919,17 +904,16 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -942,28 +926,29 @@ func (s *Butler) StartTask(ctx context.Context, taskName operations.TaskName, op
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -997,7 +982,12 @@ 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)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -1025,21 +1015,15 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1048,7 +1032,11 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -1061,7 +1049,11 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -1122,22 +1114,12 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1150,17 +1132,16 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1173,30 +1154,31 @@ func (s *Butler) StopTask(ctx context.Context, taskName operations.PathParamTask
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 404:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
|
||||
2339
codeSamples.yaml
2339
codeSamples.yaml
File diff suppressed because it is too large
Load Diff
11
docs/models/operations/enablecreditsmarkergeneration.md
Normal file
11
docs/models/operations/enablecreditsmarkergeneration.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# EnableCreditsMarkerGeneration
|
||||
|
||||
Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------------------------------------------- | --------------------------------------------- |
|
||||
| `EnableCreditsMarkerGenerationLibraryDefault` | -1 |
|
||||
| `EnableCreditsMarkerGenerationDisabled` | 0 |
|
||||
12
docs/models/operations/episodesort.md
Normal file
12
docs/models/operations/episodesort.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# EpisodeSort
|
||||
|
||||
Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------------------------- | --------------------------- |
|
||||
| `EpisodeSortLibraryDefault` | -1 |
|
||||
| `EpisodeSortOldestFirst` | 0 |
|
||||
| `EpisodeSortNewestFirst` | 1 |
|
||||
@@ -1,9 +1,12 @@
|
||||
# FlattenSeasons
|
||||
|
||||
Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------------------- | --------------------- |
|
||||
| `FlattenSeasonsFalse` | 0 |
|
||||
| `FlattenSeasonsTrue` | 1 |
|
||||
| Name | Value |
|
||||
| ------------------------------ | ------------------------------ |
|
||||
| `FlattenSeasonsLibraryDefault` | -1 |
|
||||
| `FlattenSeasonsHide` | 0 |
|
||||
| `FlattenSeasonsShow` | 1 |
|
||||
@@ -0,0 +1,11 @@
|
||||
# GetLibraryItemsEnableCreditsMarkerGeneration
|
||||
|
||||
Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| `GetLibraryItemsEnableCreditsMarkerGenerationLibraryDefault` | -1 |
|
||||
| `GetLibraryItemsEnableCreditsMarkerGenerationDisabled` | 0 |
|
||||
12
docs/models/operations/getlibraryitemsepisodesort.md
Normal file
12
docs/models/operations/getlibraryitemsepisodesort.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# GetLibraryItemsEpisodeSort
|
||||
|
||||
Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------------------------ | ------------------------------------------ |
|
||||
| `GetLibraryItemsEpisodeSortLibraryDefault` | -1 |
|
||||
| `GetLibraryItemsEpisodeSortOldestFirst` | 0 |
|
||||
| `GetLibraryItemsEpisodeSortNewestFirst` | 1 |
|
||||
@@ -1,9 +1,12 @@
|
||||
# GetLibraryItemsFlattenSeasons
|
||||
|
||||
Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------------------ | ------------------------------------ |
|
||||
| `GetLibraryItemsFlattenSeasonsFalse` | 0 |
|
||||
| `GetLibraryItemsFlattenSeasonsTrue` | 1 |
|
||||
| Name | Value |
|
||||
| --------------------------------------------- | --------------------------------------------- |
|
||||
| `GetLibraryItemsFlattenSeasonsLibraryDefault` | -1 |
|
||||
| `GetLibraryItemsFlattenSeasonsHide` | 0 |
|
||||
| `GetLibraryItemsFlattenSeasonsShow` | 1 |
|
||||
@@ -29,5 +29,5 @@ The Meta object is only included in the response if the `includeMeta` parameter
|
||||
| `ViewGroup` | *string* | :heavy_check_mark: | N/A | movie |
|
||||
| `ViewMode` | **int* | :heavy_minus_sign: | N/A | 65592 |
|
||||
| `MixedParents` | **bool* | :heavy_minus_sign: | N/A | true |
|
||||
| `Metadata` | [][operations.GetLibraryItemsMetadata](../../models/operations/getlibraryitemsmetadata.md) | :heavy_check_mark: | N/A | |
|
||||
| `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/> | |
|
||||
@@ -23,8 +23,10 @@
|
||||
| `Year` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
||||
| `SeasonCount` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
||||
| `Tagline` | **string* | :heavy_minus_sign: | N/A | Return to Pandora. |
|
||||
| `FlattenSeasons` | [*operations.GetLibraryItemsFlattenSeasons](../../models/operations/getlibraryitemsflattenseasons.md) | :heavy_minus_sign: | N/A | 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 |
|
||||
| `FlattenSeasons` | [*operations.GetLibraryItemsFlattenSeasons](../../models/operations/getlibraryitemsflattenseasons.md) | :heavy_minus_sign: | Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show). | 1 |
|
||||
| `EpisodeSort` | [*operations.GetLibraryItemsEpisodeSort](../../models/operations/getlibraryitemsepisodesort.md) | :heavy_minus_sign: | Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first). | 0 |
|
||||
| `EnableCreditsMarkerGeneration` | [*operations.GetLibraryItemsEnableCreditsMarkerGeneration](../../models/operations/getlibraryitemsenablecreditsmarkergeneration.md) | :heavy_minus_sign: | Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled). | -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/>tvdbAiring = TheTVDB (Aired),<br/>tvdbDvd = TheTVDB (DVD),<br/>tvdbAbsolute = TheTVDB (Absolute)).<br/> | tvdbDvd |
|
||||
| `Thumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/thumb/1703239236 |
|
||||
| `Art` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/art/1703239236 |
|
||||
| `Banner` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/banner/1703239236 |
|
||||
|
||||
@@ -16,4 +16,7 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
||||
| `GetLibraryItemsQueryParamTypeMovie` | 1 |
|
||||
| `GetLibraryItemsQueryParamTypeTvShow` | 2 |
|
||||
| `GetLibraryItemsQueryParamTypeSeason` | 3 |
|
||||
| `GetLibraryItemsQueryParamTypeEpisode` | 4 |
|
||||
| `GetLibraryItemsQueryParamTypeEpisode` | 4 |
|
||||
| `GetLibraryItemsQueryParamTypeAudio` | 8 |
|
||||
| `GetLibraryItemsQueryParamTypeAlbum` | 9 |
|
||||
| `GetLibraryItemsQueryParamTypeTrack` | 10 |
|
||||
@@ -1,20 +1,20 @@
|
||||
# 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)).
|
||||
Setting that indicates the episode ordering for the show
|
||||
None = Library default,
|
||||
tmdbAiring = The Movie Database (Aired),
|
||||
tvdbAiring = TheTVDB (Aired),
|
||||
tvdbDvd = TheTVDB (DVD),
|
||||
tvdbAbsolute = TheTVDB (Absolute)).
|
||||
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------------------------------------- | --------------------------------------- |
|
||||
| `GetLibraryItemsShowOrderingNone` | None |
|
||||
| `GetLibraryItemsShowOrderingTmdbAiring` | tmdbAiring |
|
||||
| `GetLibraryItemsShowOrderingAired` | aired |
|
||||
| `GetLibraryItemsShowOrderingDvd` | dvd |
|
||||
| `GetLibraryItemsShowOrderingAbsolute` | absolute |
|
||||
| Name | Value |
|
||||
| ----------------------------------------- | ----------------------------------------- |
|
||||
| `GetLibraryItemsShowOrderingNone` | None |
|
||||
| `GetLibraryItemsShowOrderingTmdbAiring` | tmdbAiring |
|
||||
| `GetLibraryItemsShowOrderingTvdbAiring` | tvdbAiring |
|
||||
| `GetLibraryItemsShowOrderingTvdbDvd` | tvdbDvd |
|
||||
| `GetLibraryItemsShowOrderingTvdbAbsolute` | tvdbAbsolute |
|
||||
@@ -14,6 +14,11 @@
|
||||
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | N/A | Movies |
|
||||
| `LibrarySectionID` | **int* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `LibrarySectionKey` | **string* | :heavy_minus_sign: | N/A | /library/sections/1 |
|
||||
| `GrandparentTitle` | **string* | :heavy_minus_sign: | The name of the album artist for the track when audio, and the name of the TV show for the episode when video. | |
|
||||
| `ParentTitle` | **string* | :heavy_minus_sign: | The name of the album for the track when audio, and the name of the season for the episode when TV show. | |
|
||||
| `OriginalTitle` | **string* | :heavy_minus_sign: | The orginal untranslated name of the media item when non-english. | |
|
||||
| `Index` | **int64* | :heavy_minus_sign: | The index starting from 0 of this media item in the MetaData array. | |
|
||||
| `ParentIndex` | **int64* | :heavy_minus_sign: | The parent index starting from 0 of this media item in the parent MetaData array. | |
|
||||
| `ContentRating` | **string* | :heavy_minus_sign: | N/A | PG-13 |
|
||||
| `Summary` | **string* | :heavy_minus_sign: | N/A | Serenity continues the story of the TV series it was based upon ("Firefly"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job. |
|
||||
| `Rating` | **float64* | :heavy_minus_sign: | N/A | 8.2 |
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# GetPinGlobals
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientName` | **string* | :heavy_minus_sign: | The name of the client application. (Plex Web, Plex Media Server, etc.) | Plex for Roku |
|
||||
| `DeviceNickname` | **string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 |
|
||||
| `ClientVersion` | **string* | :heavy_minus_sign: | The version of the client application. | 2.4.1 |
|
||||
| `Platform` | **string* | :heavy_minus_sign: | The platform of the client application. | Roku |
|
||||
@@ -6,7 +6,7 @@
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `Strong` | **bool* | :heavy_minus_sign: | Determines the kind of code returned by the API call<br/>Strong codes are used for Pin authentication flows<br/>Non-Strong codes are used for `Plex.tv/link`<br/> | |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientName` | **string* | :heavy_minus_sign: | The name of the client application. (Plex Web, Plex Media Server, etc.) | Plex for Roku |
|
||||
| `DeviceNickname` | **string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 |
|
||||
| `ClientVersion` | **string* | :heavy_minus_sign: | The version of the client application. | 2.4.1 |
|
||||
|
||||
@@ -16,4 +16,7 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
||||
| `GetPlaylistContentsQueryParamTypeMovie` | 1 |
|
||||
| `GetPlaylistContentsQueryParamTypeTvShow` | 2 |
|
||||
| `GetPlaylistContentsQueryParamTypeSeason` | 3 |
|
||||
| `GetPlaylistContentsQueryParamTypeEpisode` | 4 |
|
||||
| `GetPlaylistContentsQueryParamTypeEpisode` | 4 |
|
||||
| `GetPlaylistContentsQueryParamTypeAudio` | 8 |
|
||||
| `GetPlaylistContentsQueryParamTypeAlbum` | 9 |
|
||||
| `GetPlaylistContentsQueryParamTypeTrack` | 10 |
|
||||
@@ -23,8 +23,10 @@
|
||||
| `Year` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
||||
| `SeasonCount` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
||||
| `Tagline` | **string* | :heavy_minus_sign: | N/A | Return to Pandora. |
|
||||
| `FlattenSeasons` | [*operations.FlattenSeasons](../../models/operations/flattenseasons.md) | :heavy_minus_sign: | N/A | 1 |
|
||||
| `ShowOrdering` | [*operations.ShowOrdering](../../models/operations/showordering.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 |
|
||||
| `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). | 1 |
|
||||
| `EpisodeSort` | [*operations.EpisodeSort](../../models/operations/episodesort.md) | :heavy_minus_sign: | Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first). | 0 |
|
||||
| `EnableCreditsMarkerGeneration` | [*operations.EnableCreditsMarkerGeneration](../../models/operations/enablecreditsmarkergeneration.md) | :heavy_minus_sign: | Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled). | -1 |
|
||||
| `ShowOrdering` | [*operations.ShowOrdering](../../models/operations/showordering.md) | :heavy_minus_sign: | Setting that indicates the episode ordering for the show<br/>None = Library default,<br/>tmdbAiring = The Movie Database (Aired),<br/>tvdbAiring = TheTVDB (Aired),<br/>tvdbDvd = TheTVDB (DVD),<br/>tvdbAbsolute = TheTVDB (Absolute)).<br/> | tvdbDvd |
|
||||
| `Thumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/thumb/1703239236 |
|
||||
| `Art` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/art/1703239236 |
|
||||
| `Banner` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/banner/1703239236 |
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# GetSearchAllLibrariesEnableCreditsMarkerGeneration
|
||||
|
||||
Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ |
|
||||
| `GetSearchAllLibrariesEnableCreditsMarkerGenerationLibraryDefault` | -1 |
|
||||
| `GetSearchAllLibrariesEnableCreditsMarkerGenerationDisabled` | 0 |
|
||||
12
docs/models/operations/getsearchalllibrariesepisodesort.md
Normal file
12
docs/models/operations/getsearchalllibrariesepisodesort.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# GetSearchAllLibrariesEpisodeSort
|
||||
|
||||
Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------------------------------ | ------------------------------------------------ |
|
||||
| `GetSearchAllLibrariesEpisodeSortLibraryDefault` | -1 |
|
||||
| `GetSearchAllLibrariesEpisodeSortOldestFirst` | 0 |
|
||||
| `GetSearchAllLibrariesEpisodeSortNewestFirst` | 1 |
|
||||
@@ -1,9 +1,12 @@
|
||||
# GetSearchAllLibrariesFlattenSeasons
|
||||
|
||||
Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------------------------ | ------------------------------------------ |
|
||||
| `GetSearchAllLibrariesFlattenSeasonsFalse` | 0 |
|
||||
| `GetSearchAllLibrariesFlattenSeasonsTrue` | 1 |
|
||||
| Name | Value |
|
||||
| --------------------------------------------------- | --------------------------------------------------- |
|
||||
| `GetSearchAllLibrariesFlattenSeasonsLibraryDefault` | -1 |
|
||||
| `GetSearchAllLibrariesFlattenSeasonsHide` | 0 |
|
||||
| `GetSearchAllLibrariesFlattenSeasonsShow` | 1 |
|
||||
@@ -1,8 +0,0 @@
|
||||
# GetSearchAllLibrariesGlobals
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
@@ -23,8 +23,10 @@
|
||||
| `Year` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
||||
| `SeasonCount` | **int* | :heavy_minus_sign: | N/A | 2022 |
|
||||
| `Tagline` | **string* | :heavy_minus_sign: | N/A | Return to Pandora. |
|
||||
| `FlattenSeasons` | [*operations.GetSearchAllLibrariesFlattenSeasons](../../models/operations/getsearchalllibrariesflattenseasons.md) | :heavy_minus_sign: | N/A | 1 |
|
||||
| `ShowOrdering` | [*operations.GetSearchAllLibrariesShowOrdering](../../models/operations/getsearchalllibrariesshowordering.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 |
|
||||
| `FlattenSeasons` | [*operations.GetSearchAllLibrariesFlattenSeasons](../../models/operations/getsearchalllibrariesflattenseasons.md) | :heavy_minus_sign: | Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show). | 1 |
|
||||
| `EpisodeSort` | [*operations.GetSearchAllLibrariesEpisodeSort](../../models/operations/getsearchalllibrariesepisodesort.md) | :heavy_minus_sign: | Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first). | 0 |
|
||||
| `EnableCreditsMarkerGeneration` | [*operations.GetSearchAllLibrariesEnableCreditsMarkerGeneration](../../models/operations/getsearchalllibrariesenablecreditsmarkergeneration.md) | :heavy_minus_sign: | Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled). | -1 |
|
||||
| `ShowOrdering` | [*operations.GetSearchAllLibrariesShowOrdering](../../models/operations/getsearchalllibrariesshowordering.md) | :heavy_minus_sign: | Setting that indicates the episode ordering for the show<br/>None = Library default,<br/>tmdbAiring = The Movie Database (Aired),<br/>tvdbAiring = TheTVDB (Aired),<br/>tvdbDvd = TheTVDB (DVD),<br/>tvdbAbsolute = TheTVDB (Absolute)).<br/> | tvdbDvd |
|
||||
| `Thumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/thumb/1703239236 |
|
||||
| `Art` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/art/1703239236 |
|
||||
| `Banner` | **string* | :heavy_minus_sign: | N/A | /library/metadata/58683/banner/1703239236 |
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| `Query` | *string* | :heavy_check_mark: | The search query term. | |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `Limit` | **int64* | :heavy_minus_sign: | Limit the number of results returned. | |
|
||||
| `SearchTypes` | [][operations.SearchTypes](../../models/operations/searchtypes.md) | :heavy_minus_sign: | A comma-separated list of search types to include. Valid values are: movies, music, otherVideos, people, tv.<br/> | movies,music,otherVideos,people,tv |
|
||||
| `IncludeCollections` | [*operations.QueryParamIncludeCollections](../../models/operations/queryparamincludecollections.md) | :heavy_minus_sign: | Whether to include collections in the search results. | 1 |
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
# GetSearchAllLibrariesShowOrdering
|
||||
|
||||
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)).
|
||||
Setting that indicates the episode ordering for the show
|
||||
None = Library default,
|
||||
tmdbAiring = The Movie Database (Aired),
|
||||
tvdbAiring = TheTVDB (Aired),
|
||||
tvdbDvd = TheTVDB (DVD),
|
||||
tvdbAbsolute = TheTVDB (Absolute)).
|
||||
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------------------------------------------- | --------------------------------------------- |
|
||||
| `GetSearchAllLibrariesShowOrderingNone` | None |
|
||||
| `GetSearchAllLibrariesShowOrderingTmdbAiring` | tmdbAiring |
|
||||
| `GetSearchAllLibrariesShowOrderingAired` | aired |
|
||||
| `GetSearchAllLibrariesShowOrderingDvd` | dvd |
|
||||
| `GetSearchAllLibrariesShowOrderingAbsolute` | absolute |
|
||||
| Name | Value |
|
||||
| ----------------------------------------------- | ----------------------------------------------- |
|
||||
| `GetSearchAllLibrariesShowOrderingNone` | None |
|
||||
| `GetSearchAllLibrariesShowOrderingTmdbAiring` | tmdbAiring |
|
||||
| `GetSearchAllLibrariesShowOrderingTvdbAiring` | tvdbAiring |
|
||||
| `GetSearchAllLibrariesShowOrderingTvdbDvd` | tvdbDvd |
|
||||
| `GetSearchAllLibrariesShowOrderingTvdbAbsolute` | tvdbAbsolute |
|
||||
@@ -16,4 +16,7 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
||||
| `GetSearchLibraryQueryParamTypeMovie` | 1 |
|
||||
| `GetSearchLibraryQueryParamTypeTvShow` | 2 |
|
||||
| `GetSearchLibraryQueryParamTypeSeason` | 3 |
|
||||
| `GetSearchLibraryQueryParamTypeEpisode` | 4 |
|
||||
| `GetSearchLibraryQueryParamTypeEpisode` | 4 |
|
||||
| `GetSearchLibraryQueryParamTypeAudio` | 8 |
|
||||
| `GetSearchLibraryQueryParamTypeAlbum` | 9 |
|
||||
| `GetSearchLibraryQueryParamTypeTrack` | 10 |
|
||||
@@ -1,8 +0,0 @@
|
||||
# GetServerResourcesGlobals
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
@@ -8,4 +8,4 @@
|
||||
| `IncludeHTTPS` | [*operations.IncludeHTTPS](../../models/operations/includehttps.md) | :heavy_minus_sign: | Include Https entries in the results | 1 |
|
||||
| `IncludeRelay` | [*operations.IncludeRelay](../../models/operations/includerelay.md) | :heavy_minus_sign: | Include Relay addresses in the results <br/>E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400<br/> | 1 |
|
||||
| `IncludeIPv6` | [*operations.IncludeIPv6](../../models/operations/includeipv6.md) | :heavy_minus_sign: | Include IPv6 entries in the results | 1 |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
@@ -3,42 +3,43 @@
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| `AddedAt` | **int* | :heavy_minus_sign: | N/A | 1705543312 |
|
||||
| `Art` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904/art/1705310687 |
|
||||
| `Duration` | **int* | :heavy_minus_sign: | N/A | 186240 |
|
||||
| `GrandparentArt` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904/art/1705310687 |
|
||||
| `GrandparentGUID` | **string* | :heavy_minus_sign: | N/A | plex://artist/5d07bbfd403c6402904a6480 |
|
||||
| `GrandparentKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904 |
|
||||
| `GrandparentRatingKey` | **string* | :heavy_minus_sign: | N/A | 39904 |
|
||||
| `GrandparentThumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904/thumb/1705310687 |
|
||||
| `GrandparentTitle` | **string* | :heavy_minus_sign: | N/A | Green Day |
|
||||
| `GUID` | **string* | :heavy_minus_sign: | N/A | plex://track/6535834f71f22f36f71a8e8f |
|
||||
| `Index` | **int* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `Key` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67085 |
|
||||
| `LibrarySectionID` | **string* | :heavy_minus_sign: | N/A | 3 |
|
||||
| `LibrarySectionKey` | **string* | :heavy_minus_sign: | N/A | /library/sections/3 |
|
||||
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | N/A | Music |
|
||||
| `MusicAnalysisVersion` | **string* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `ParentGUID` | **string* | :heavy_minus_sign: | N/A | plex://album/65394d6d472b8ab03ef47f12 |
|
||||
| `ParentIndex` | **int* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `ParentKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67084 |
|
||||
| `ParentRatingKey` | **string* | :heavy_minus_sign: | N/A | 67084 |
|
||||
| `ParentStudio` | **string* | :heavy_minus_sign: | N/A | Reprise Records |
|
||||
| `ParentThumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67084/thumb/1705543314 |
|
||||
| `ParentTitle` | **string* | :heavy_minus_sign: | N/A | Saviors |
|
||||
| `ParentYear` | **int* | :heavy_minus_sign: | N/A | 2024 |
|
||||
| `RatingCount` | **int* | :heavy_minus_sign: | N/A | 45885 |
|
||||
| `RatingKey` | **string* | :heavy_minus_sign: | N/A | 67085 |
|
||||
| `SessionKey` | **string* | :heavy_minus_sign: | N/A | 203 |
|
||||
| `Thumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67084/thumb/1705543314 |
|
||||
| `Title` | **string* | :heavy_minus_sign: | N/A | The American Dream Is Killing Me |
|
||||
| `TitleSort` | **string* | :heavy_minus_sign: | N/A | American Dream Is Killing Me |
|
||||
| `Type` | **string* | :heavy_minus_sign: | N/A | track |
|
||||
| `UpdatedAt` | **int* | :heavy_minus_sign: | N/A | 1705543314 |
|
||||
| `ViewOffset` | **int* | :heavy_minus_sign: | N/A | 1000 |
|
||||
| `Media` | [][operations.GetSessionsMedia](../../models/operations/getsessionsmedia.md) | :heavy_minus_sign: | N/A | |
|
||||
| `User` | [*operations.GetSessionsUser](../../models/operations/getsessionsuser.md) | :heavy_minus_sign: | N/A | |
|
||||
| `Player` | [*operations.Player](../../models/operations/player.md) | :heavy_minus_sign: | N/A | |
|
||||
| `Session` | [*operations.Session](../../models/operations/session.md) | :heavy_minus_sign: | N/A | |
|
||||
| Field | Type | Required | Description | Example |
|
||||
| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `AddedAt` | **int* | :heavy_minus_sign: | N/A | 1705543312 |
|
||||
| `Art` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904/art/1705310687 |
|
||||
| `Duration` | **int* | :heavy_minus_sign: | N/A | 186240 |
|
||||
| `GrandparentArt` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904/art/1705310687 |
|
||||
| `GrandparentGUID` | **string* | :heavy_minus_sign: | N/A | plex://artist/5d07bbfd403c6402904a6480 |
|
||||
| `GrandparentKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904 |
|
||||
| `GrandparentRatingKey` | **string* | :heavy_minus_sign: | N/A | 39904 |
|
||||
| `GrandparentThumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/39904/thumb/1705310687 |
|
||||
| `GrandparentTitle` | **string* | :heavy_minus_sign: | N/A | Green Day |
|
||||
| `GUID` | **string* | :heavy_minus_sign: | N/A | plex://track/6535834f71f22f36f71a8e8f |
|
||||
| `Index` | **int* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `Key` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67085 |
|
||||
| `LibrarySectionID` | **string* | :heavy_minus_sign: | N/A | 3 |
|
||||
| `LibrarySectionKey` | **string* | :heavy_minus_sign: | N/A | /library/sections/3 |
|
||||
| `LibrarySectionTitle` | **string* | :heavy_minus_sign: | N/A | Music |
|
||||
| `MusicAnalysisVersion` | **string* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `OriginalTitle` | **string* | :heavy_minus_sign: | The original untranslated name of the media item when non-english, or the track artist if an audio Item has an album artist | The American Dream Is Killing Me |
|
||||
| `ParentGUID` | **string* | :heavy_minus_sign: | N/A | plex://album/65394d6d472b8ab03ef47f12 |
|
||||
| `ParentIndex` | **int* | :heavy_minus_sign: | N/A | 1 |
|
||||
| `ParentKey` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67084 |
|
||||
| `ParentRatingKey` | **string* | :heavy_minus_sign: | N/A | 67084 |
|
||||
| `ParentStudio` | **string* | :heavy_minus_sign: | N/A | Reprise Records |
|
||||
| `ParentThumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67084/thumb/1705543314 |
|
||||
| `ParentTitle` | **string* | :heavy_minus_sign: | N/A | Saviors |
|
||||
| `ParentYear` | **int* | :heavy_minus_sign: | N/A | 2024 |
|
||||
| `RatingCount` | **int* | :heavy_minus_sign: | N/A | 45885 |
|
||||
| `RatingKey` | **string* | :heavy_minus_sign: | N/A | 67085 |
|
||||
| `SessionKey` | **string* | :heavy_minus_sign: | N/A | 203 |
|
||||
| `Thumb` | **string* | :heavy_minus_sign: | N/A | /library/metadata/67084/thumb/1705543314 |
|
||||
| `Title` | **string* | :heavy_minus_sign: | N/A | The American Dream Is Killing Me |
|
||||
| `TitleSort` | **string* | :heavy_minus_sign: | N/A | American Dream Is Killing Me |
|
||||
| `Type` | **string* | :heavy_minus_sign: | N/A | track |
|
||||
| `UpdatedAt` | **int* | :heavy_minus_sign: | N/A | 1705543314 |
|
||||
| `ViewOffset` | **int* | :heavy_minus_sign: | N/A | 1000 |
|
||||
| `Media` | [][operations.GetSessionsMedia](../../models/operations/getsessionsmedia.md) | :heavy_minus_sign: | N/A | |
|
||||
| `User` | [*operations.GetSessionsUser](../../models/operations/getsessionsuser.md) | :heavy_minus_sign: | N/A | |
|
||||
| `Player` | [*operations.Player](../../models/operations/player.md) | :heavy_minus_sign: | N/A | |
|
||||
| `Session` | [*operations.Session](../../models/operations/session.md) | :heavy_minus_sign: | N/A | |
|
||||
@@ -1,12 +0,0 @@
|
||||
# GetTokenByPinIDGlobals
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientName` | **string* | :heavy_minus_sign: | The name of the client application. (Plex Web, Plex Media Server, etc.) | Plex for Roku |
|
||||
| `DeviceNickname` | **string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 |
|
||||
| `ClientVersion` | **string* | :heavy_minus_sign: | The version of the client application. | 2.4.1 |
|
||||
| `Platform` | **string* | :heavy_minus_sign: | The platform of the client application. | Roku |
|
||||
@@ -6,7 +6,7 @@
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
||||
| `PinID` | *int64* | :heavy_check_mark: | The PinID to retrieve an access token for | |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientName` | **string* | :heavy_minus_sign: | The name of the client application. (Plex Web, Plex Media Server, etc.) | Plex for Roku |
|
||||
| `DeviceNickname` | **string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 |
|
||||
| `ClientVersion` | **string* | :heavy_minus_sign: | The version of the client application. | 2.4.1 |
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -8,8 +8,8 @@ Logged in user details
|
||||
| Field | Type | Required | Description | Example |
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `AdsConsent` | *bool* | :heavy_check_mark: | Unknown | |
|
||||
| `AdsConsentReminderAt` | [time.Time](https://pkg.go.dev/time#Time) | :heavy_check_mark: | Unknown | |
|
||||
| `AdsConsentSetAt` | [time.Time](https://pkg.go.dev/time#Time) | :heavy_check_mark: | Unknown | |
|
||||
| `AdsConsentReminderAt` | *int64* | :heavy_check_mark: | N/A | 1556281940 |
|
||||
| `AdsConsentSetAt` | *int64* | :heavy_check_mark: | N/A | 1556281940 |
|
||||
| `Anonymous` | **bool* | :heavy_minus_sign: | Unknown | |
|
||||
| `AuthToken` | *string* | :heavy_check_mark: | The account token | CxoUzBTSV5hsxjTpFKaf |
|
||||
| `BackupCodesCreated` | **bool* | :heavy_minus_sign: | If the two-factor authentication backup codes have been created | |
|
||||
|
||||
@@ -16,4 +16,7 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
||||
| `GetTopWatchedContentQueryParamTypeMovie` | 1 |
|
||||
| `GetTopWatchedContentQueryParamTypeTvShow` | 2 |
|
||||
| `GetTopWatchedContentQueryParamTypeSeason` | 3 |
|
||||
| `GetTopWatchedContentQueryParamTypeEpisode` | 4 |
|
||||
| `GetTopWatchedContentQueryParamTypeEpisode` | 4 |
|
||||
| `GetTopWatchedContentQueryParamTypeAudio` | 8 |
|
||||
| `GetTopWatchedContentQueryParamTypeAlbum` | 9 |
|
||||
| `GetTopWatchedContentQueryParamTypeTrack` | 10 |
|
||||
@@ -1,12 +0,0 @@
|
||||
# PostUsersSignInDataGlobals
|
||||
|
||||
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientName` | **string* | :heavy_minus_sign: | The name of the client application. (Plex Web, Plex Media Server, etc.) | Plex for Roku |
|
||||
| `DeviceNickname` | **string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 |
|
||||
| `ClientVersion` | **string* | :heavy_minus_sign: | The version of the client application. | 2.4.1 |
|
||||
| `Platform` | **string* | :heavy_minus_sign: | The platform of the client application. | Roku |
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||
| `ClientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `ClientName` | **string* | :heavy_minus_sign: | The name of the client application. (Plex Web, Plex Media Server, etc.) | Plex for Roku |
|
||||
| `DeviceNickname` | **string* | :heavy_minus_sign: | A relatively friendly name for the client device | Roku 3 |
|
||||
| `ClientVersion` | **string* | :heavy_minus_sign: | The version of the client application. | 2.4.1 |
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -8,8 +8,8 @@ Returns the user account data with a valid auth token
|
||||
| Field | Type | Required | Description | Example |
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `AdsConsent` | *bool* | :heavy_check_mark: | Unknown | |
|
||||
| `AdsConsentReminderAt` | [time.Time](https://pkg.go.dev/time#Time) | :heavy_check_mark: | Unknown | |
|
||||
| `AdsConsentSetAt` | [time.Time](https://pkg.go.dev/time#Time) | :heavy_check_mark: | Unknown | |
|
||||
| `AdsConsentReminderAt` | *int64* | :heavy_check_mark: | N/A | 1556281940 |
|
||||
| `AdsConsentSetAt` | *int64* | :heavy_check_mark: | N/A | 1556281940 |
|
||||
| `Anonymous` | **bool* | :heavy_minus_sign: | Unknown | |
|
||||
| `AuthToken` | *string* | :heavy_check_mark: | The account token | CxoUzBTSV5hsxjTpFKaf |
|
||||
| `BackupCodesCreated` | **bool* | :heavy_minus_sign: | If the two-factor authentication backup codes have been created | |
|
||||
|
||||
@@ -16,4 +16,7 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
||||
| `QueryParamTypeMovie` | 1 |
|
||||
| `QueryParamTypeTvShow` | 2 |
|
||||
| `QueryParamTypeSeason` | 3 |
|
||||
| `QueryParamTypeEpisode` | 4 |
|
||||
| `QueryParamTypeEpisode` | 4 |
|
||||
| `QueryParamTypeAudio` | 8 |
|
||||
| `QueryParamTypeAlbum` | 9 |
|
||||
| `QueryParamTypeTrack` | 10 |
|
||||
@@ -1,20 +1,20 @@
|
||||
# ShowOrdering
|
||||
|
||||
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)).
|
||||
Setting that indicates the episode ordering for the show
|
||||
None = Library default,
|
||||
tmdbAiring = The Movie Database (Aired),
|
||||
tvdbAiring = TheTVDB (Aired),
|
||||
tvdbDvd = TheTVDB (DVD),
|
||||
tvdbAbsolute = TheTVDB (Absolute)).
|
||||
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| ------------------------ | ------------------------ |
|
||||
| `ShowOrderingNone` | None |
|
||||
| `ShowOrderingTmdbAiring` | tmdbAiring |
|
||||
| `ShowOrderingAired` | aired |
|
||||
| `ShowOrderingDvd` | dvd |
|
||||
| `ShowOrderingAbsolute` | absolute |
|
||||
| Name | Value |
|
||||
| -------------------------- | -------------------------- |
|
||||
| `ShowOrderingNone` | None |
|
||||
| `ShowOrderingTmdbAiring` | tmdbAiring |
|
||||
| `ShowOrderingTvdbAiring` | tvdbAiring |
|
||||
| `ShowOrderingTvdbDvd` | tvdbDvd |
|
||||
| `ShowOrderingTvdbAbsolute` | tvdbAbsolute |
|
||||
@@ -25,4 +25,5 @@ A key representing a specific tag within the section.
|
||||
| `TagRating` | rating |
|
||||
| `TagResolution` | resolution |
|
||||
| `TagFirstCharacter` | firstCharacter |
|
||||
| `TagFolder` | folder |
|
||||
| `TagFolder` | folder |
|
||||
| `TagAlbums` | albums |
|
||||
@@ -16,4 +16,7 @@ E.g. A movie library will not return anything with type 3 as there are no season
|
||||
| `TypeMovie` | 1 |
|
||||
| `TypeTvShow` | 2 |
|
||||
| `TypeSeason` | 3 |
|
||||
| `TypeEpisode` | 4 |
|
||||
| `TypeEpisode` | 4 |
|
||||
| `TypeAudio` | 8 |
|
||||
| `TypeAlbum` | 9 |
|
||||
| `TypeTrack` | 10 |
|
||||
@@ -27,22 +27,18 @@ Get Server Activities
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Activities.GetServerActivities(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -82,22 +78,18 @@ Cancel Server Activities
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Activities.CancelServerActivities(ctx, "25b71ed5-0f9d-461c-baa7-d404e9e10d3e")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -24,23 +24,19 @@ This endpoint provides the caller with a temporary token with the same access le
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Authentication.GetTransientToken(ctx, operations.GetTransientTokenQueryParamTypeDelegation, operations.ScopeAll)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -84,22 +80,18 @@ Note: requires Plex Media Server >= 1.15.4.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Authentication.GetSourceConnectionInformation(ctx, "provider://provider-identifier")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -140,22 +132,18 @@ Get the User data from the provided X-Plex-Token
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Authentication.GetTokenDetails(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -195,26 +183,27 @@ Sign in user with username and password and return user data with Plex authentic
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := plexgo.New(
|
||||
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()
|
||||
|
||||
s := plexgo.New()
|
||||
|
||||
res, err := s.Authentication.PostUsersSignInData(ctx, operations.PostUsersSignInDataRequest{
|
||||
ClientID: "3381b62b-9ab7-4e37-827b-203e9809eb58",
|
||||
ClientName: plexgo.String("Plex for Roku"),
|
||||
DeviceNickname: plexgo.String("Roku 3"),
|
||||
ClientVersion: plexgo.String("2.4.1"),
|
||||
Platform: plexgo.String("Roku"),
|
||||
RequestBody: &operations.PostUsersSignInDataRequestBody{
|
||||
Login: "username@email.com",
|
||||
Password: "password123",
|
||||
RememberMe: plexgo.Bool(false),
|
||||
VerificationCode: plexgo.String("123456"),
|
||||
},
|
||||
})
|
||||
|
||||
@@ -24,22 +24,18 @@ Returns a list of butler tasks
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Butler.GetButlerTasks(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -84,22 +80,18 @@ This endpoint will attempt to start all Butler tasks that are enabled in the set
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Butler.StartAllTasks(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -140,22 +132,18 @@ This endpoint will stop all currently running tasks and remove any scheduled tas
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Butler.StopAllTasks(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -200,23 +188,19 @@ This endpoint will attempt to start a single Butler task that is enabled in the
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Butler.StartTask(ctx, operations.TaskNameCleanOldBundles)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -258,23 +242,19 @@ This endpoint will stop a currently running task by name, or remove it from the
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Butler.StopTask(ctx, operations.PathParamTaskNameBackupDatabase)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -22,22 +22,18 @@ Get Global Hubs filtered by the parameters provided.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Hubs.GetGlobalHubs(ctx, nil, nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -80,23 +76,19 @@ This endpoint will return the recently added content.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Hubs.GetRecentlyAdded(ctx, operations.GetRecentlyAddedRequest{
|
||||
ContentDirectoryID: 470161,
|
||||
SectionID: plexgo.Int64(2),
|
||||
@@ -143,22 +135,18 @@ This endpoint will return a list of library specific hubs
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Hubs.GetLibraryHubs(ctx, 6728.76, nil, nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -32,22 +32,18 @@ This resource returns hash values for local files
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetFileHash(ctx, "file://C:\Image.png&type=13", nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -90,23 +86,19 @@ This endpoint will return the recently added content.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetRecentlyAddedLibrary(ctx, operations.GetRecentlyAddedLibraryRequest{
|
||||
ContentDirectoryID: plexgo.Int64(2),
|
||||
PinnedContentDirectoryID: []int64{
|
||||
@@ -174,22 +166,18 @@ This allows a client to provide a rich interface around the media (e.g. allow so
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetAllLibraries(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -268,23 +256,20 @@ Each type in the library comes with a set of filters and sorts, aiding in buildi
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetLibraryDetails(ctx, 9518, nil)
|
||||
res, err := s.Library.GetLibraryDetails(ctx, 9518, operations.IncludeDetailsZero.ToPointer())
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -325,22 +310,18 @@ Delete a library using a specific section id
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.DeleteLibrary(ctx, 9518)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -393,6 +374,7 @@ Fetches details from a specific section of the library identified by a section k
|
||||
- `resolution`: Items categorized by resolution.
|
||||
- `firstCharacter`: Items categorized by the first letter.
|
||||
- `folder`: Items categorized by folder.
|
||||
- `albums`: Items categorized by album.
|
||||
|
||||
|
||||
### Example Usage
|
||||
@@ -401,23 +383,19 @@ Fetches details from a specific section of the library identified by a section k
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetLibraryItems(ctx, operations.GetLibraryItemsRequest{
|
||||
Tag: operations.TagEdition,
|
||||
IncludeGuids: operations.IncludeGuidsEnable.ToPointer(),
|
||||
@@ -467,23 +445,19 @@ This endpoint Refreshes all the Metadata of the library.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetRefreshLibraryMetadata(ctx, 9518, operations.ForceOne.ToPointer())
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -543,23 +517,19 @@ Each type in the library comes with a set of filters and sorts, aiding in buildi
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetSearchLibrary(ctx, 9518, operations.GetSearchLibraryQueryParamTypeTvShow)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -602,25 +572,22 @@ Search the provided query across all library sections, or a single section, and
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetSearchAllLibraries(ctx, operations.GetSearchAllLibrariesRequest{
|
||||
Query: "<value>",
|
||||
ClientID: "3381b62b-9ab7-4e37-827b-203e9809eb58",
|
||||
SearchTypes: []operations.SearchTypes{
|
||||
operations.SearchTypesPeople,
|
||||
},
|
||||
@@ -667,22 +634,18 @@ This endpoint will return the metadata of a library item specified with the rati
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetMetaDataByRatingKey(ctx, 9518)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -724,22 +687,18 @@ This endpoint will return the children of of a library item specified with the r
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetMetadataChildren(ctx, 1539.14, plexgo.String("Stream"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -782,23 +741,19 @@ This endpoint will return the top watched content from libraries of a certain ty
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetTopWatchedContent(ctx, operations.GetTopWatchedContentQueryParamTypeTvShow, plexgo.Int64(1))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -841,22 +796,18 @@ This endpoint will return the on deck content.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Library.GetOnDeck(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -23,23 +23,19 @@ This endpoint will write a single-line log message, including a level and source
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Log.LogLine(ctx, operations.LevelThree, "Test log message", "Postman")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -103,22 +99,18 @@ Ensure each parameter is properly URL-encoded to avoid interpretation issues.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Log.LogMultiLine(ctx, "level=4&message=Test%20message%201&source=postman\n" +
|
||||
"level=3&message=Test%20message%202&source=postman\n" +
|
||||
"level=1&message=Test%20message%203&source=postman")
|
||||
@@ -162,22 +154,18 @@ This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Log.EnablePaperTrail(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -24,22 +24,18 @@ This will mark the provided media key as Played.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Media.MarkPlayed(ctx, 59398)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -80,22 +76,18 @@ This will mark the provided media key as Unplayed.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Media.MarkUnplayed(ctx, 59398)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -137,22 +129,18 @@ This API command can be used to update the play progress of a media item.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Media.UpdatePlayProgress(ctx, "<key>", 90000, "played")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -195,23 +183,19 @@ Gets the banner image of the media item
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Media.GetBannerImage(ctx, operations.GetBannerImageRequest{
|
||||
RatingKey: 9518,
|
||||
Width: 396,
|
||||
@@ -259,23 +243,19 @@ Gets the thumbnail image of the media item
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Media.GetThumbImage(ctx, operations.GetThumbImageRequest{
|
||||
RatingKey: 9518,
|
||||
Width: 396,
|
||||
|
||||
@@ -34,28 +34,24 @@ Create a new playlist. By default the playlist is blank. To create a playlist al
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.CreatePlaylist(ctx, operations.CreatePlaylistRequest{
|
||||
Title: "<value>",
|
||||
Type: operations.CreatePlaylistQueryParamTypePhoto,
|
||||
Smart: operations.SmartOne,
|
||||
URI: "https://inborn-brochure.biz",
|
||||
URI: "https://hoarse-testing.info/",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -96,22 +92,18 @@ Get All Playlists given the specified filters.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.GetPlaylists(ctx, nil, nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -155,22 +147,18 @@ Smart playlist details contain the `content` attribute. This is the content URI
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.GetPlaylist(ctx, 4109.48)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -212,22 +200,18 @@ This endpoint will delete a playlist
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.DeletePlaylist(ctx, 216.22)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -269,22 +253,18 @@ From PMS version 1.9.1 clients can also edit playlist metadata using this endpoi
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.UpdatePlaylist(ctx, 3915, nil, nil)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -331,23 +311,19 @@ Note that for dumb playlists, items have a `playlistItemID` attribute which is u
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.GetPlaylistContents(ctx, 5004.46, operations.GetPlaylistContentsQueryParamTypeTvShow)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -390,22 +366,18 @@ Clears a playlist, only works with dumb playlists. Returns the playlist.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.ClearPlaylistContents(ctx, 1893.18)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -448,22 +420,18 @@ With a smart playlist, passing a new `uri` parameter replaces the rules for the
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.AddPlaylistContents(ctx, 8502.01, "server://12345/com.plexapp.plugins.library/library/metadata/1", plexgo.Float64(123))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -507,23 +475,19 @@ Imports m3u playlists by passing a path on the server to scan for m3u-formatted
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Playlists.UploadPlaylist(ctx, "/home/barkley/playlist.m3u", operations.QueryParamForceZero, 1)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -26,22 +26,18 @@ Get Companions Data
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -81,22 +77,18 @@ Get friends of provided auth token.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetUserFriends(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -136,21 +128,16 @@ Returns the geolocation and locale data of the caller
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := plexgo.New(
|
||||
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()
|
||||
|
||||
s := plexgo.New()
|
||||
|
||||
res, err := s.Plex.GetGeoData(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -190,22 +177,18 @@ Retrieves the home data for the authenticated user, including details like home
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetHomeData(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -245,24 +228,20 @@ Get Plex server access tokens and server connections
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetServerResources(ctx, operations.IncludeHTTPSEnable.ToPointer(), operations.IncludeRelayEnable.ToPointer(), operations.IncludeIPv6Enable.ToPointer(), plexgo.String("3381b62b-9ab7-4e37-827b-203e9809eb58"))
|
||||
res, err := s.Plex.GetServerResources(ctx, "3381b62b-9ab7-4e37-827b-203e9809eb58", operations.IncludeHTTPSEnable.ToPointer(), operations.IncludeRelayEnable.ToPointer(), operations.IncludeIPv6Enable.ToPointer())
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -277,10 +256,10 @@ func main() {
|
||||
| Parameter | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy_check_mark: | The context to use for the request. | |
|
||||
| `clientID` | *string* | :heavy_check_mark: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `includeHTTPS` | [*operations.IncludeHTTPS](../../models/operations/includehttps.md) | :heavy_minus_sign: | Include Https entries in the results | 1 |
|
||||
| `includeRelay` | [*operations.IncludeRelay](../../models/operations/includerelay.md) | :heavy_minus_sign: | Include Relay addresses in the results <br/>E.g: https://10-0-0-25.bbf8e10c7fa20447cacee74cd9914cde.plex.direct:32400<br/> | 1 |
|
||||
| `includeIPv6` | [*operations.IncludeIPv6](../../models/operations/includeipv6.md) | :heavy_minus_sign: | Include IPv6 entries in the results | 1 |
|
||||
| `clientID` | **string* | :heavy_minus_sign: | An opaque identifier unique to the client (UUID, serial number, or other unique device ID) | 3381b62b-9ab7-4e37-827b-203e9809eb58 |
|
||||
| `opts` | [][operations.Option](../../models/operations/option.md) | :heavy_minus_sign: | The options for this request. | |
|
||||
|
||||
### Response
|
||||
@@ -305,23 +284,25 @@ Retrieve a Pin ID from Plex.tv to use for authentication flows
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := plexgo.New(
|
||||
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.GetPin(ctx, operations.GetPinRequest{})
|
||||
|
||||
s := plexgo.New()
|
||||
|
||||
res, err := s.Plex.GetPin(ctx, operations.GetPinRequest{
|
||||
Strong: plexgo.Bool(false),
|
||||
ClientID: "3381b62b-9ab7-4e37-827b-203e9809eb58",
|
||||
ClientName: plexgo.String("Plex for Roku"),
|
||||
DeviceNickname: plexgo.String("Roku 3"),
|
||||
ClientVersion: plexgo.String("2.4.1"),
|
||||
Platform: plexgo.String("Roku"),
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -360,24 +341,24 @@ Retrieve an Access Token from Plex.tv after the Pin has been authenticated
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := plexgo.New(
|
||||
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()
|
||||
|
||||
s := plexgo.New()
|
||||
|
||||
res, err := s.Plex.GetTokenByPinID(ctx, operations.GetTokenByPinIDRequest{
|
||||
PinID: 408895,
|
||||
ClientID: "3381b62b-9ab7-4e37-827b-203e9809eb58",
|
||||
ClientName: plexgo.String("Plex for Roku"),
|
||||
DeviceNickname: plexgo.String("Roku 3"),
|
||||
ClientVersion: plexgo.String("2.4.1"),
|
||||
Platform: plexgo.String("Roku"),
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -26,3 +26,6 @@ The following SDKs are generated from the OpenAPI Specification. They are automa
|
||||
| PHP | [GitHub](https://github.com/LukeHagar/plexphp) | [Releases](https://github.com/LukeHagar/plexphp/releases) | - |
|
||||
| Java | [GitHub](https://github.com/LukeHagar/plexjava) | [Releases](https://github.com/LukeHagar/plexjava/releases) | - |
|
||||
| C# | [GitHub](https://github.com/LukeHagar/plexcsharp) | [Releases](https://github.com/LukeHagar/plexcsharp/releases) | -
|
||||
|
||||
|
||||
### Available Operations
|
||||
|
||||
@@ -34,22 +34,18 @@ This request is intended to be very fast, and called as the user types.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Search.PerformSearch(ctx, "dylan", nil, plexgo.Float64(5))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -96,22 +92,18 @@ Results, as well as their containing per-type hubs, contain a `distance` attribu
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Search.PerformVoiceSearch(ctx, "dead+poop", nil, plexgo.Float64(5))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -154,22 +146,18 @@ This will search the database for the string provided.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Search.GetSearchResults(ctx, "110")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -28,22 +28,18 @@ Get Server Capabilities
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -83,22 +79,18 @@ Get Server Preferences
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetServerPreferences(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -138,22 +130,18 @@ Get Available Clients
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetAvailableClients(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -193,22 +181,18 @@ Get Devices
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetDevices(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -248,21 +232,16 @@ This request is useful to determine if the server is online or offline
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := plexgo.New(
|
||||
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()
|
||||
|
||||
s := plexgo.New()
|
||||
|
||||
res, err := s.Server.GetServerIdentity(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -301,22 +280,18 @@ Returns MyPlex Account Information
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetMyPlexAccount(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -357,23 +332,19 @@ Plex's Photo transcoder is used throughout the service to serve images at specif
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetResizedPhoto(ctx, operations.GetResizedPhotoRequest{
|
||||
Width: 110,
|
||||
Height: 165,
|
||||
@@ -422,22 +393,18 @@ Retrieves media providers and their features from the Plex server.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetMediaProviders(ctx, "CV5xoxjTpFKUzBTShsaf")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -478,22 +445,18 @@ Get Server List
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.GetServerList(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -23,22 +23,18 @@ This will retrieve the "Now Playing" Information of the PMS.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Sessions.GetSessions(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -78,23 +74,19 @@ This will Retrieve a listing of all history views.
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Sessions.GetSessionHistory(ctx, plexgo.String("viewedAt:desc"), plexgo.Int64(1), &operations.QueryParamFilter{}, plexgo.Int64(12))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -138,22 +130,18 @@ Get Transcode Sessions
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Sessions.GetTranscodeSessions(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -193,22 +181,18 @@ Stop a Transcode Session
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Sessions.StopTranscodeSession(ctx, "zz7llzqlx8w9vnrsbnwhbmep")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -22,22 +22,18 @@ This will return the media statistics for the server
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Statistics.GetStatistics(ctx, plexgo.Int64(4))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -78,22 +74,18 @@ This will return the resources for the server
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Statistics.GetResourcesStatistics(ctx, plexgo.Int64(4))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -134,22 +126,18 @@ This will return the bandwidth statistics for the server
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Statistics.GetBandwidthStatistics(ctx, plexgo.Int64(4))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -23,22 +23,18 @@ Querying status of updates
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Updater.GetUpdateStatus(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -78,23 +74,19 @@ Checking for updates
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Updater.CheckForUpdates(ctx, operations.DownloadOne.ToPointer())
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -136,23 +128,19 @@ Note that these two parameters are effectively mutually exclusive. The `tonight`
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Updater.ApplyUpdates(ctx, operations.TonightOne.ToPointer(), operations.SkipOne.ToPointer())
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
||||
@@ -21,23 +21,19 @@ Get the timeline for a media item
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Video.GetTimeline(ctx, operations.GetTimelineRequest{
|
||||
RatingKey: 23409,
|
||||
Key: "/library/metadata/23409",
|
||||
@@ -89,23 +85,19 @@ Begin a Universal Transcode Session
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Video.StartUniversalTranscode(ctx, operations.StartUniversalTranscodeRequest{
|
||||
HasMDE: 1,
|
||||
Path: "/library/metadata/23409",
|
||||
|
||||
@@ -20,23 +20,19 @@ Get User Watchlist
|
||||
package main
|
||||
|
||||
import(
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"context"
|
||||
"github.com/LukeHagar/plexgo"
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
s := plexgo.New(
|
||||
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.Watchlist.GetWatchList(ctx, operations.GetWatchListRequest{
|
||||
Filter: operations.FilterAvailable,
|
||||
XPlexContainerStart: plexgo.Int(0),
|
||||
|
||||
5
go.mod
5
go.mod
@@ -2,7 +2,4 @@ module github.com/LukeHagar/plexgo
|
||||
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/cenkalti/backoff/v4 v4.2.0
|
||||
github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05
|
||||
)
|
||||
require github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05
|
||||
|
||||
2
go.sum
2
go.sum
@@ -1,4 +1,2 @@
|
||||
github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
|
||||
github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 h1:S92OBrGuLLZsyM5ybUzgc/mPjIYk2AZqufieooe98uw=
|
||||
github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05/go.mod h1:M9R1FoZ3y//hwwnJtO51ypFGwm8ZfpxPT/ZLtO1mcgQ=
|
||||
|
||||
208
hubs.go
208
hubs.go
@@ -11,8 +11,6 @@ import (
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
@@ -55,7 +53,12 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
}
|
||||
}
|
||||
|
||||
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, "/hubs")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -87,21 +90,15 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +107,11 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -123,7 +124,11 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -184,21 +189,11 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -210,17 +205,16 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
|
||||
res.Object = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -233,17 +227,16 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -256,28 +249,29 @@ func (s *Hubs) GetGlobalHubs(ctx context.Context, count *float64, onlyTransient
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -307,7 +301,12 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
}
|
||||
}
|
||||
|
||||
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, "/hubs/home/recentlyAdded")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -339,21 +338,15 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -362,7 +355,11 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -375,7 +372,11 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -436,21 +437,11 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -462,11 +453,10 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
|
||||
res.Object = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
@@ -474,20 +464,22 @@ func (s *Hubs) GetRecentlyAdded(ctx context.Context, request operations.GetRecen
|
||||
case httpRes.StatusCode == 401:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -523,7 +515,12 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
}
|
||||
}
|
||||
|
||||
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, "/hubs/sections/{sectionId}", request, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -555,21 +552,15 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -578,7 +569,11 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -591,7 +586,11 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -652,21 +651,11 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -678,17 +667,16 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
|
||||
res.Object = &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -701,17 +689,16 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -724,28 +711,29 @@ func (s *Hubs) GetLibraryHubs(ctx context.Context, sectionID float64, count *flo
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
||||
|
||||
package globals
|
||||
|
||||
type Globals struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// The version of the client application.
|
||||
ClientVersion *string `header:"style=simple,explode=false,name=X-Plex-Version"`
|
||||
// The platform of the client application.
|
||||
Platform *string `header:"style=simple,explode=false,name=X-Plex-Platform"`
|
||||
// A relatively friendly name for the client device
|
||||
DeviceNickname *string `header:"style=simple,explode=false,name=X-Plex-Device"`
|
||||
}
|
||||
|
||||
func (o *Globals) GetClientID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
func (o *Globals) GetClientName() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientName
|
||||
}
|
||||
|
||||
func (o *Globals) GetClientVersion() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientVersion
|
||||
}
|
||||
|
||||
func (o *Globals) GetPlatform() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.Platform
|
||||
}
|
||||
|
||||
func (o *Globals) GetDeviceNickname() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.DeviceNickname
|
||||
}
|
||||
16
internal/utils/env.go
Normal file
16
internal/utils/env.go
Normal file
@@ -0,0 +1,16 @@
|
||||
// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
// GetEnv returns the value of the environment variable named by the key or the defaultValue if the environment variable is not set.
|
||||
func GetEnv(name, defaultValue string) string {
|
||||
value := os.Getenv(name)
|
||||
if value == "" {
|
||||
return defaultValue
|
||||
}
|
||||
return value
|
||||
}
|
||||
@@ -214,7 +214,11 @@ func populateDeepObjectParamsStruct(qsValues url.Values, priorScope string, stru
|
||||
continue
|
||||
}
|
||||
|
||||
scope := priorScope + "[" + qpTag.ParamName + "]"
|
||||
scope := priorScope
|
||||
|
||||
if !qpTag.Inline {
|
||||
scope = priorScope + "[" + qpTag.ParamName + "]"
|
||||
}
|
||||
|
||||
switch fieldValue.Kind() {
|
||||
case reflect.Array, reflect.Slice:
|
||||
@@ -252,6 +256,13 @@ type paramTag struct {
|
||||
Explode bool
|
||||
ParamName string
|
||||
Serialization string
|
||||
|
||||
// Inline is a special case for union/oneOf. When a wrapper struct type is
|
||||
// used, each union/oneOf value field should be inlined (e.g. not appended
|
||||
// in deepObject style with the name) as if the value was directly on the
|
||||
// parent struct field. Without this annotation, the value would not be
|
||||
// encoded by downstream logic that requires the struct field tag.
|
||||
Inline bool
|
||||
}
|
||||
|
||||
func parseQueryParamTag(field reflect.StructField) *paramTag {
|
||||
|
||||
@@ -166,7 +166,7 @@ func encodeMultipartFormData(w io.Writer, data interface{}) (string, error) {
|
||||
|
||||
tag := parseMultipartFormTag(field)
|
||||
if tag.File {
|
||||
if err := encodeMultipartFormDataFile(writer, fieldType, valType); err != nil {
|
||||
if err := encodeMultipartFormDataFile(writer, tag.Name, fieldType, valType); err != nil {
|
||||
writer.Close()
|
||||
return "", err
|
||||
}
|
||||
@@ -211,12 +211,11 @@ func encodeMultipartFormData(w io.Writer, data interface{}) (string, error) {
|
||||
return writer.FormDataContentType(), nil
|
||||
}
|
||||
|
||||
func encodeMultipartFormDataFile(w *multipart.Writer, fieldType reflect.Type, valType reflect.Value) error {
|
||||
func encodeMultipartFormDataFile(w *multipart.Writer, fieldName string, fieldType reflect.Type, valType reflect.Value) error {
|
||||
if fieldType.Kind() != reflect.Struct {
|
||||
return fmt.Errorf("invalid type %s for multipart/form-data file", valType.Type())
|
||||
}
|
||||
|
||||
var fieldName string
|
||||
var fileName string
|
||||
var reader io.Reader
|
||||
|
||||
@@ -236,12 +235,11 @@ func encodeMultipartFormDataFile(w *multipart.Writer, fieldType reflect.Type, va
|
||||
reader = val.Interface().(io.Reader)
|
||||
}
|
||||
} else {
|
||||
fieldName = tag.Name
|
||||
fileName = val.String()
|
||||
}
|
||||
}
|
||||
|
||||
if fieldName == "" || fileName == "" || reader == nil {
|
||||
if fileName == "" || reader == nil {
|
||||
return fmt.Errorf("invalid multipart/form-data file")
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"math"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
@@ -15,8 +16,6 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
var errRequestFailed = errors.New("request failed")
|
||||
|
||||
// Deprecated: Use retry.BackoffStrategy instead.
|
||||
type BackoffStrategy = retry.BackoffStrategy
|
||||
|
||||
@@ -28,34 +27,27 @@ type Retries struct {
|
||||
StatusCodes []string
|
||||
}
|
||||
|
||||
func Retry(ctx context.Context, r Retries, action func() (*http.Response, error)) (*http.Response, error) {
|
||||
func Retry(ctx context.Context, r Retries, operation func() (*http.Response, error)) (*http.Response, error) {
|
||||
switch r.Config.Strategy {
|
||||
case "backoff":
|
||||
if r.Config.Backoff == nil {
|
||||
return action()
|
||||
return operation()
|
||||
}
|
||||
|
||||
config := backoff.NewExponentialBackOff()
|
||||
config.InitialInterval = time.Duration(r.Config.Backoff.InitialInterval) * time.Millisecond
|
||||
config.MaxInterval = time.Duration(r.Config.Backoff.MaxInterval) * time.Millisecond
|
||||
config.Multiplier = r.Config.Backoff.Exponent
|
||||
config.MaxElapsedTime = time.Duration(r.Config.Backoff.MaxElapsedTime) * time.Millisecond
|
||||
config.Reset()
|
||||
|
||||
var resp *http.Response
|
||||
|
||||
err := backoff.Retry(func() error {
|
||||
err := retryWithBackoff(ctx, r.Config.Backoff, func() error {
|
||||
if resp != nil {
|
||||
resp.Body.Close()
|
||||
}
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return backoff.Permanent(ctx.Err())
|
||||
return retry.Permanent(ctx.Err())
|
||||
default:
|
||||
}
|
||||
|
||||
res, err := action()
|
||||
res, err := operation()
|
||||
if err != nil {
|
||||
urlError := new(url.Error)
|
||||
if errors.As(err, &urlError) {
|
||||
@@ -64,7 +56,7 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error)
|
||||
}
|
||||
}
|
||||
|
||||
return backoff.Permanent(err)
|
||||
return retry.Permanent(err)
|
||||
}
|
||||
resp = res
|
||||
if res == nil {
|
||||
@@ -81,7 +73,7 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error)
|
||||
s := res.StatusCode / 100
|
||||
|
||||
if s >= codeRange && s < codeRange+1 {
|
||||
return errRequestFailed
|
||||
return retry.TemporaryFromResponse("request failed", res)
|
||||
}
|
||||
} else {
|
||||
parsedCode, err := strconv.Atoi(code)
|
||||
@@ -90,7 +82,7 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error)
|
||||
}
|
||||
|
||||
if res.StatusCode == parsedCode {
|
||||
return errRequestFailed
|
||||
return retry.TemporaryFromResponse("request failed", res)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -98,13 +90,131 @@ func Retry(ctx context.Context, r Retries, action func() (*http.Response, error)
|
||||
resp = res
|
||||
|
||||
return nil
|
||||
}, config)
|
||||
if err != nil && !errors.Is(err, errRequestFailed) {
|
||||
})
|
||||
|
||||
var tempErr *retry.TemporaryError
|
||||
if err != nil && !errors.As(err, &tempErr) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
default:
|
||||
return action()
|
||||
return operation()
|
||||
}
|
||||
}
|
||||
|
||||
func retryWithBackoff(ctx context.Context, s *retry.BackoffStrategy, operation func() error) error {
|
||||
var (
|
||||
err error
|
||||
next time.Duration
|
||||
attempt int
|
||||
start = time.Now()
|
||||
maxElapsedTime = time.Duration(s.MaxElapsedTime) * time.Millisecond
|
||||
)
|
||||
|
||||
timer := &defaultTimer{}
|
||||
defer func() {
|
||||
timer.Stop()
|
||||
}()
|
||||
|
||||
for {
|
||||
err = operation()
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var permanent *retry.PermanentError
|
||||
if errors.As(err, &permanent) {
|
||||
return permanent.Unwrap()
|
||||
}
|
||||
|
||||
if time.Since(start) >= maxElapsedTime {
|
||||
return err
|
||||
}
|
||||
|
||||
var temporary *retry.TemporaryError
|
||||
if errors.As(err, &temporary) {
|
||||
next = temporary.RetryAfter()
|
||||
}
|
||||
|
||||
if next <= 0 {
|
||||
next = nextInterval(s, attempt)
|
||||
}
|
||||
|
||||
timer.Start(next)
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case <-timer.C():
|
||||
}
|
||||
|
||||
attempt += 1
|
||||
}
|
||||
}
|
||||
|
||||
type Timer interface {
|
||||
Start(duration time.Duration)
|
||||
Stop()
|
||||
C() <-chan time.Time
|
||||
}
|
||||
|
||||
// defaultTimer implements Timer interface using time.Timer
|
||||
type defaultTimer struct {
|
||||
timer *time.Timer
|
||||
}
|
||||
|
||||
// C returns the timers channel which receives the current time when the timer fires.
|
||||
func (t *defaultTimer) C() <-chan time.Time {
|
||||
return t.timer.C
|
||||
}
|
||||
|
||||
// Start starts the timer to fire after the given duration
|
||||
func (t *defaultTimer) Start(duration time.Duration) {
|
||||
if t.timer == nil {
|
||||
t.timer = time.NewTimer(duration)
|
||||
return
|
||||
}
|
||||
|
||||
if !t.timer.Stop() {
|
||||
select {
|
||||
case <-t.timer.C:
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
t.timer.Reset(duration)
|
||||
}
|
||||
|
||||
// Stop is called when the timer is not used anymore and resources may be freed.
|
||||
func (t *defaultTimer) Stop() {
|
||||
if t.timer != nil {
|
||||
t.timer.Stop()
|
||||
}
|
||||
}
|
||||
|
||||
func nextInterval(s *retry.BackoffStrategy, attempt int) time.Duration {
|
||||
initialInterval := float64(time.Duration(s.InitialInterval) * time.Millisecond)
|
||||
maxInterval := float64(time.Duration(s.MaxInterval) * time.Millisecond)
|
||||
exponent := s.Exponent
|
||||
jitterFactor := float64(0.25)
|
||||
|
||||
interval := initialInterval * math.Pow(float64(attempt+1), exponent)
|
||||
|
||||
jitter := rand.Float64() * jitterFactor * interval
|
||||
if rand.Float64() < 0.5 {
|
||||
jitter = -1 * jitter
|
||||
}
|
||||
|
||||
interval = interval + jitter
|
||||
|
||||
if interval <= 0 {
|
||||
interval = initialInterval
|
||||
}
|
||||
|
||||
if interval > maxInterval {
|
||||
interval = maxInterval
|
||||
}
|
||||
|
||||
return time.Duration(interval)
|
||||
}
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/big"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
@@ -125,6 +127,7 @@ func parseStructTag(tagKey string, field reflect.StructField) map[string]string
|
||||
|
||||
func parseParamTag(tagKey string, field reflect.StructField, defaultStyle string, defaultExplode bool) *paramTag {
|
||||
// example `{tagKey}:"style=simple,explode=false,name=apiID"`
|
||||
// example `{tagKey}:"inline"`
|
||||
values := parseStructTag(tagKey, field)
|
||||
if values == nil {
|
||||
return nil
|
||||
@@ -138,6 +141,8 @@ func parseParamTag(tagKey string, field reflect.StructField, defaultStyle string
|
||||
|
||||
for k, v := range values {
|
||||
switch k {
|
||||
case "inline":
|
||||
tag.Inline = v == "true"
|
||||
case "style":
|
||||
tag.Style = v
|
||||
case "explode":
|
||||
@@ -228,3 +233,15 @@ func contains(arr []string, str string) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func ConsumeRawBody(res *http.Response) ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
|
||||
res.Body.Close()
|
||||
res.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
932
library.go
932
library.go
File diff suppressed because it is too large
Load Diff
207
log.go
207
log.go
@@ -11,8 +11,6 @@ import (
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
@@ -56,7 +54,12 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
}
|
||||
}
|
||||
|
||||
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, "/log")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -88,21 +91,15 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +108,11 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -124,7 +125,11 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -185,22 +190,12 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -213,17 +208,16 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -236,28 +230,29 @@ func (s *Log) LogLine(ctx context.Context, level operations.Level, message strin
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -307,7 +302,12 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
}
|
||||
}
|
||||
|
||||
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, "/log")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -335,27 +335,23 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
}
|
||||
req.Header.Set("Accept", "application/json")
|
||||
req.Header.Set("User-Agent", s.sdkConfiguration.UserAgent)
|
||||
req.Header.Set("Content-Type", reqContentType)
|
||||
if reqContentType != "" {
|
||||
req.Header.Set("Content-Type", reqContentType)
|
||||
}
|
||||
|
||||
if err := utils.PopulateSecurity(ctx, req, s.sdkConfiguration.Security); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -364,7 +360,11 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -377,7 +377,11 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -438,22 +442,12 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -466,17 +460,16 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -489,28 +482,29 @@ func (s *Log) LogMultiLine(ctx context.Context, request string, opts ...operatio
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -540,7 +534,12 @@ func (s *Log) EnablePaperTrail(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, "/log/networked")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -568,21 +567,15 @@ func (s *Log) EnablePaperTrail(ctx context.Context, opts ...operations.Option) (
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -591,7 +584,11 @@ func (s *Log) EnablePaperTrail(ctx context.Context, opts ...operations.Option) (
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -604,7 +601,11 @@ func (s *Log) EnablePaperTrail(ctx context.Context, opts ...operations.Option) (
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -665,22 +666,12 @@ func (s *Log) EnablePaperTrail(ctx context.Context, opts ...operations.Option) (
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -693,17 +684,16 @@ func (s *Log) EnablePaperTrail(ctx context.Context, opts ...operations.Option) (
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -716,30 +706,31 @@ func (s *Log) EnablePaperTrail(ctx context.Context, opts ...operations.Option) (
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 403:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 400 && httpRes.StatusCode < 500:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
|
||||
343
media.go
343
media.go
@@ -11,8 +11,6 @@ import (
|
||||
"github.com/LukeHagar/plexgo/models/operations"
|
||||
"github.com/LukeHagar/plexgo/models/sdkerrors"
|
||||
"github.com/LukeHagar/plexgo/retry"
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
@@ -54,7 +52,12 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, 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, "/:/scrobble")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -86,21 +89,15 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, opts ...operations.
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +106,11 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, opts ...operations.
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -122,7 +123,11 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, opts ...operations.
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -183,22 +188,12 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, opts ...operations.
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -211,17 +206,16 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, opts ...operations.
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -234,28 +228,29 @@ func (s *Media) MarkPlayed(ctx context.Context, key float64, opts ...operations.
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -289,7 +284,12 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
}
|
||||
}
|
||||
|
||||
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, "/:/unscrobble")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -321,21 +321,15 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,7 +338,11 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -357,7 +355,11 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -418,22 +420,12 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -446,17 +438,16 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -469,28 +460,29 @@ func (s *Media) MarkUnplayed(ctx context.Context, key float64, opts ...operation
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -526,7 +518,12 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
}
|
||||
}
|
||||
|
||||
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, "/:/progress")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -558,21 +555,15 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -581,7 +572,11 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -594,7 +589,11 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -655,22 +654,12 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
case httpRes.StatusCode == 400:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -683,17 +672,16 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -706,28 +694,29 @@ func (s *Media) UpdatePlayProgress(ctx context.Context, key string, time float64
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -757,7 +746,12 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
}
|
||||
}
|
||||
|
||||
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, "/library/metadata/{ratingKey}/banner", request, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -791,21 +785,15 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -814,7 +802,11 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -827,7 +819,11 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -888,16 +884,6 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
res.Headers = httpRes.Header
|
||||
@@ -908,17 +894,16 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
|
||||
return res, nil
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -931,17 +916,16 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -954,28 +938,29 @@ func (s *Media) GetBannerImage(ctx context.Context, request operations.GetBanner
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
@@ -1005,7 +990,12 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
}
|
||||
}
|
||||
|
||||
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, "/library/metadata/{ratingKey}/thumb", request, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error generating URL: %w", err)
|
||||
@@ -1039,21 +1029,15 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for k, v := range o.SetHeaders {
|
||||
req.Header.Set(k, v)
|
||||
}
|
||||
|
||||
globalRetryConfig := s.sdkConfiguration.RetryConfig
|
||||
retryConfig := o.Retries
|
||||
if retryConfig == nil {
|
||||
if globalRetryConfig != nil {
|
||||
retryConfig = globalRetryConfig
|
||||
} else {
|
||||
retryConfig = &retry.Config{
|
||||
Strategy: "backoff", Backoff: &retry.BackoffStrategy{
|
||||
InitialInterval: 500,
|
||||
MaxInterval: 60000,
|
||||
Exponent: 1.5,
|
||||
MaxElapsedTime: 3600000,
|
||||
},
|
||||
RetryConnectionErrors: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1062,7 +1046,11 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
httpRes, err = utils.Retry(ctx, utils.Retries{
|
||||
Config: retryConfig,
|
||||
StatusCodes: []string{
|
||||
"5XX",
|
||||
"429",
|
||||
"500",
|
||||
"502",
|
||||
"503",
|
||||
"504",
|
||||
},
|
||||
}, func() (*http.Response, error) {
|
||||
if req.Body != nil {
|
||||
@@ -1075,7 +1063,11 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
|
||||
req, err = s.sdkConfiguration.Hooks.BeforeRequest(hooks.BeforeRequestContext{HookContext: hookCtx}, req)
|
||||
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)
|
||||
@@ -1136,16 +1128,6 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
RawResponse: httpRes,
|
||||
}
|
||||
|
||||
getRawBody := func() ([]byte, error) {
|
||||
rawBody, err := io.ReadAll(httpRes.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
httpRes.Body.Close()
|
||||
httpRes.Body = io.NopCloser(bytes.NewBuffer(rawBody))
|
||||
return rawBody, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case httpRes.StatusCode == 200:
|
||||
res.Headers = httpRes.Header
|
||||
@@ -1156,17 +1138,16 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
|
||||
return res, nil
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1179,17 +1160,16 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError(fmt.Sprintf("unknown content-type received: %s", httpRes.Header.Get("Content-Type")), httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
case httpRes.StatusCode == 401:
|
||||
switch {
|
||||
case utils.MatchContentType(httpRes.Header.Get("Content-Type"), `application/json`):
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1202,28 +1182,29 @@ func (s *Media) GetThumbImage(ctx context.Context, request operations.GetThumbIm
|
||||
out.RawResponse = httpRes
|
||||
return nil, &out
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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:
|
||||
fallthrough
|
||||
case httpRes.StatusCode >= 500 && httpRes.StatusCode < 600:
|
||||
rawBody, err := getRawBody()
|
||||
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:
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("API error occurred", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
default:
|
||||
rawBody, err := getRawBody()
|
||||
rawBody, err := utils.ConsumeRawBody(httpRes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil, sdkerrors.NewSDKError("unknown status code returned", httpRes.StatusCode, string(rawBody), httpRes)
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ type GetBandwidthStatisticsRequest struct {
|
||||
// The timespan to retrieve statistics for
|
||||
// the exact meaning of this parameter is not known
|
||||
//
|
||||
Timespan *int64 `queryParam:"style=form,explode=true,name=Timespan"`
|
||||
Timespan *int64 `queryParam:"style=form,explode=true,name=timespan"`
|
||||
}
|
||||
|
||||
func (o *GetBandwidthStatisticsRequest) GetTimespan() *int64 {
|
||||
|
||||
@@ -33,6 +33,7 @@ const (
|
||||
TagResolution Tag = "resolution"
|
||||
TagFirstCharacter Tag = "firstCharacter"
|
||||
TagFolder Tag = "folder"
|
||||
TagAlbums Tag = "albums"
|
||||
)
|
||||
|
||||
func (e Tag) ToPointer() *Tag {
|
||||
@@ -81,6 +82,8 @@ func (e *Tag) UnmarshalJSON(data []byte) error {
|
||||
case "firstCharacter":
|
||||
fallthrough
|
||||
case "folder":
|
||||
fallthrough
|
||||
case "albums":
|
||||
*e = Tag(v)
|
||||
return nil
|
||||
default:
|
||||
@@ -128,6 +131,9 @@ const (
|
||||
GetLibraryItemsQueryParamTypeTvShow GetLibraryItemsQueryParamType = 2
|
||||
GetLibraryItemsQueryParamTypeSeason GetLibraryItemsQueryParamType = 3
|
||||
GetLibraryItemsQueryParamTypeEpisode GetLibraryItemsQueryParamType = 4
|
||||
GetLibraryItemsQueryParamTypeAudio GetLibraryItemsQueryParamType = 8
|
||||
GetLibraryItemsQueryParamTypeAlbum GetLibraryItemsQueryParamType = 9
|
||||
GetLibraryItemsQueryParamTypeTrack GetLibraryItemsQueryParamType = 10
|
||||
)
|
||||
|
||||
func (e GetLibraryItemsQueryParamType) ToPointer() *GetLibraryItemsQueryParamType {
|
||||
@@ -146,6 +152,12 @@ func (e *GetLibraryItemsQueryParamType) UnmarshalJSON(data []byte) error {
|
||||
case 3:
|
||||
fallthrough
|
||||
case 4:
|
||||
fallthrough
|
||||
case 8:
|
||||
fallthrough
|
||||
case 9:
|
||||
fallthrough
|
||||
case 10:
|
||||
*e = GetLibraryItemsQueryParamType(v)
|
||||
return nil
|
||||
default:
|
||||
@@ -617,11 +629,13 @@ func (e *GetLibraryItemsLibraryType) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
// GetLibraryItemsFlattenSeasons - Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
type GetLibraryItemsFlattenSeasons string
|
||||
|
||||
const (
|
||||
GetLibraryItemsFlattenSeasonsFalse GetLibraryItemsFlattenSeasons = "0"
|
||||
GetLibraryItemsFlattenSeasonsTrue GetLibraryItemsFlattenSeasons = "1"
|
||||
GetLibraryItemsFlattenSeasonsLibraryDefault GetLibraryItemsFlattenSeasons = "-1"
|
||||
GetLibraryItemsFlattenSeasonsHide GetLibraryItemsFlattenSeasons = "0"
|
||||
GetLibraryItemsFlattenSeasonsShow GetLibraryItemsFlattenSeasons = "1"
|
||||
)
|
||||
|
||||
func (e GetLibraryItemsFlattenSeasons) ToPointer() *GetLibraryItemsFlattenSeasons {
|
||||
@@ -633,6 +647,8 @@ func (e *GetLibraryItemsFlattenSeasons) UnmarshalJSON(data []byte) error {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "1":
|
||||
@@ -643,20 +659,77 @@ func (e *GetLibraryItemsFlattenSeasons) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
// GetLibraryItemsEpisodeSort - Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
type GetLibraryItemsEpisodeSort string
|
||||
|
||||
const (
|
||||
GetLibraryItemsEpisodeSortLibraryDefault GetLibraryItemsEpisodeSort = "-1"
|
||||
GetLibraryItemsEpisodeSortOldestFirst GetLibraryItemsEpisodeSort = "0"
|
||||
GetLibraryItemsEpisodeSortNewestFirst GetLibraryItemsEpisodeSort = "1"
|
||||
)
|
||||
|
||||
func (e GetLibraryItemsEpisodeSort) ToPointer() *GetLibraryItemsEpisodeSort {
|
||||
return &e
|
||||
}
|
||||
func (e *GetLibraryItemsEpisodeSort) UnmarshalJSON(data []byte) error {
|
||||
var v string
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "1":
|
||||
*e = GetLibraryItemsEpisodeSort(v)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid value for GetLibraryItemsEpisodeSort: %v", v)
|
||||
}
|
||||
}
|
||||
|
||||
// GetLibraryItemsEnableCreditsMarkerGeneration - Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
type GetLibraryItemsEnableCreditsMarkerGeneration string
|
||||
|
||||
const (
|
||||
GetLibraryItemsEnableCreditsMarkerGenerationLibraryDefault GetLibraryItemsEnableCreditsMarkerGeneration = "-1"
|
||||
GetLibraryItemsEnableCreditsMarkerGenerationDisabled GetLibraryItemsEnableCreditsMarkerGeneration = "0"
|
||||
)
|
||||
|
||||
func (e GetLibraryItemsEnableCreditsMarkerGeneration) ToPointer() *GetLibraryItemsEnableCreditsMarkerGeneration {
|
||||
return &e
|
||||
}
|
||||
func (e *GetLibraryItemsEnableCreditsMarkerGeneration) UnmarshalJSON(data []byte) error {
|
||||
var v string
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
*e = GetLibraryItemsEnableCreditsMarkerGeneration(v)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid value for GetLibraryItemsEnableCreditsMarkerGeneration: %v", v)
|
||||
}
|
||||
}
|
||||
|
||||
// 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)).
|
||||
// tvdbAiring = TheTVDB (Aired),
|
||||
// tvdbDvd = TheTVDB (DVD),
|
||||
// tvdbAbsolute = TheTVDB (Absolute)).
|
||||
type GetLibraryItemsShowOrdering string
|
||||
|
||||
const (
|
||||
GetLibraryItemsShowOrderingNone GetLibraryItemsShowOrdering = "None"
|
||||
GetLibraryItemsShowOrderingTmdbAiring GetLibraryItemsShowOrdering = "tmdbAiring"
|
||||
GetLibraryItemsShowOrderingAired GetLibraryItemsShowOrdering = "aired"
|
||||
GetLibraryItemsShowOrderingDvd GetLibraryItemsShowOrdering = "dvd"
|
||||
GetLibraryItemsShowOrderingAbsolute GetLibraryItemsShowOrdering = "absolute"
|
||||
GetLibraryItemsShowOrderingNone GetLibraryItemsShowOrdering = "None"
|
||||
GetLibraryItemsShowOrderingTmdbAiring GetLibraryItemsShowOrdering = "tmdbAiring"
|
||||
GetLibraryItemsShowOrderingTvdbAiring GetLibraryItemsShowOrdering = "tvdbAiring"
|
||||
GetLibraryItemsShowOrderingTvdbDvd GetLibraryItemsShowOrdering = "tvdbDvd"
|
||||
GetLibraryItemsShowOrderingTvdbAbsolute GetLibraryItemsShowOrdering = "tvdbAbsolute"
|
||||
)
|
||||
|
||||
func (e GetLibraryItemsShowOrdering) ToPointer() *GetLibraryItemsShowOrdering {
|
||||
@@ -672,11 +745,11 @@ func (e *GetLibraryItemsShowOrdering) UnmarshalJSON(data []byte) error {
|
||||
fallthrough
|
||||
case "tmdbAiring":
|
||||
fallthrough
|
||||
case "aired":
|
||||
case "tvdbAiring":
|
||||
fallthrough
|
||||
case "dvd":
|
||||
case "tvdbDvd":
|
||||
fallthrough
|
||||
case "absolute":
|
||||
case "tvdbAbsolute":
|
||||
*e = GetLibraryItemsShowOrdering(v)
|
||||
return nil
|
||||
default:
|
||||
@@ -1630,23 +1703,28 @@ type GetLibraryItemsMetadata struct {
|
||||
LibrarySectionKey *string `json:"librarySectionKey,omitempty"`
|
||||
// The type of media content
|
||||
//
|
||||
Type GetLibraryItemsLibraryType `json:"type"`
|
||||
Title string `json:"title"`
|
||||
Slug *string `json:"slug,omitempty"`
|
||||
ContentRating *string `json:"contentRating,omitempty"`
|
||||
Summary string `json:"summary"`
|
||||
Rating *float64 `json:"rating,omitempty"`
|
||||
AudienceRating *float64 `json:"audienceRating,omitempty"`
|
||||
Year *int `json:"year,omitempty"`
|
||||
SeasonCount *int `json:"seasonCount,omitempty"`
|
||||
Tagline *string `json:"tagline,omitempty"`
|
||||
FlattenSeasons *GetLibraryItemsFlattenSeasons `default:"0" json:"flattenSeasons"`
|
||||
Type GetLibraryItemsLibraryType `json:"type"`
|
||||
Title string `json:"title"`
|
||||
Slug *string `json:"slug,omitempty"`
|
||||
ContentRating *string `json:"contentRating,omitempty"`
|
||||
Summary string `json:"summary"`
|
||||
Rating *float64 `json:"rating,omitempty"`
|
||||
AudienceRating *float64 `json:"audienceRating,omitempty"`
|
||||
Year *int `json:"year,omitempty"`
|
||||
SeasonCount *int `json:"seasonCount,omitempty"`
|
||||
Tagline *string `json:"tagline,omitempty"`
|
||||
// Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
FlattenSeasons *GetLibraryItemsFlattenSeasons `json:"flattenSeasons,omitempty"`
|
||||
// Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
EpisodeSort *GetLibraryItemsEpisodeSort `json:"episodeSort,omitempty"`
|
||||
// Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
EnableCreditsMarkerGeneration *GetLibraryItemsEnableCreditsMarkerGeneration `json:"enableCreditsMarkerGeneration,omitempty"`
|
||||
// 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)).
|
||||
// tvdbAiring = TheTVDB (Aired),
|
||||
// tvdbDvd = TheTVDB (DVD),
|
||||
// tvdbAbsolute = TheTVDB (Absolute)).
|
||||
//
|
||||
ShowOrdering *GetLibraryItemsShowOrdering `json:"showOrdering,omitempty"`
|
||||
Thumb *string `json:"thumb,omitempty"`
|
||||
@@ -1857,6 +1935,20 @@ func (o *GetLibraryItemsMetadata) GetFlattenSeasons() *GetLibraryItemsFlattenSea
|
||||
return o.FlattenSeasons
|
||||
}
|
||||
|
||||
func (o *GetLibraryItemsMetadata) GetEpisodeSort() *GetLibraryItemsEpisodeSort {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.EpisodeSort
|
||||
}
|
||||
|
||||
func (o *GetLibraryItemsMetadata) GetEnableCreditsMarkerGeneration() *GetLibraryItemsEnableCreditsMarkerGeneration {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.EnableCreditsMarkerGeneration
|
||||
}
|
||||
|
||||
func (o *GetLibraryItemsMetadata) GetShowOrdering() *GetLibraryItemsShowOrdering {
|
||||
if o == nil {
|
||||
return nil
|
||||
@@ -2596,7 +2688,7 @@ type GetLibraryItemsMediaContainer struct {
|
||||
ViewGroup string `json:"viewGroup"`
|
||||
ViewMode *int `json:"viewMode,omitempty"`
|
||||
MixedParents *bool `json:"mixedParents,omitempty"`
|
||||
Metadata []GetLibraryItemsMetadata `json:"Metadata"`
|
||||
Metadata []GetLibraryItemsMetadata `json:"Metadata,omitempty"`
|
||||
// The Meta object is only included in the response if the `includeMeta` parameter is set to `1`.
|
||||
//
|
||||
Meta *GetLibraryItemsMeta `json:"Meta,omitempty"`
|
||||
@@ -2751,7 +2843,7 @@ func (o *GetLibraryItemsMediaContainer) GetMixedParents() *bool {
|
||||
|
||||
func (o *GetLibraryItemsMediaContainer) GetMetadata() []GetLibraryItemsMetadata {
|
||||
if o == nil {
|
||||
return []GetLibraryItemsMetadata{}
|
||||
return nil
|
||||
}
|
||||
return o.Metadata
|
||||
}
|
||||
|
||||
@@ -782,15 +782,25 @@ func (o *Producer) GetThumb() *string {
|
||||
}
|
||||
|
||||
type GetMetaDataByRatingKeyMetadata struct {
|
||||
RatingKey *string `json:"ratingKey,omitempty"`
|
||||
Key *string `json:"key,omitempty"`
|
||||
GUID *string `json:"guid,omitempty"`
|
||||
Studio *string `json:"studio,omitempty"`
|
||||
Type *string `json:"type,omitempty"`
|
||||
Title *string `json:"title,omitempty"`
|
||||
LibrarySectionTitle *string `json:"librarySectionTitle,omitempty"`
|
||||
LibrarySectionID *int `json:"librarySectionID,omitempty"`
|
||||
LibrarySectionKey *string `json:"librarySectionKey,omitempty"`
|
||||
RatingKey *string `json:"ratingKey,omitempty"`
|
||||
Key *string `json:"key,omitempty"`
|
||||
GUID *string `json:"guid,omitempty"`
|
||||
Studio *string `json:"studio,omitempty"`
|
||||
Type *string `json:"type,omitempty"`
|
||||
Title *string `json:"title,omitempty"`
|
||||
LibrarySectionTitle *string `json:"librarySectionTitle,omitempty"`
|
||||
LibrarySectionID *int `json:"librarySectionID,omitempty"`
|
||||
LibrarySectionKey *string `json:"librarySectionKey,omitempty"`
|
||||
// The name of the album artist for the track when audio, and the name of the TV show for the episode when video.
|
||||
GrandparentTitle *string `json:"grandparentTitle,omitempty"`
|
||||
// The name of the album for the track when audio, and the name of the season for the episode when TV show.
|
||||
ParentTitle *string `json:"parentTitle,omitempty"`
|
||||
// The orginal untranslated name of the media item when non-english.
|
||||
OriginalTitle *string `json:"originalTitle,omitempty"`
|
||||
// The index starting from 0 of this media item in the MetaData array.
|
||||
Index *int64 `json:"index,omitempty"`
|
||||
// The parent index starting from 0 of this media item in the parent MetaData array.
|
||||
ParentIndex *int64 `json:"parentIndex,omitempty"`
|
||||
ContentRating *string `json:"contentRating,omitempty"`
|
||||
Summary *string `json:"summary,omitempty"`
|
||||
Rating *float64 `json:"rating,omitempty"`
|
||||
@@ -891,6 +901,41 @@ func (o *GetMetaDataByRatingKeyMetadata) GetLibrarySectionKey() *string {
|
||||
return o.LibrarySectionKey
|
||||
}
|
||||
|
||||
func (o *GetMetaDataByRatingKeyMetadata) GetGrandparentTitle() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.GrandparentTitle
|
||||
}
|
||||
|
||||
func (o *GetMetaDataByRatingKeyMetadata) GetParentTitle() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ParentTitle
|
||||
}
|
||||
|
||||
func (o *GetMetaDataByRatingKeyMetadata) GetOriginalTitle() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.OriginalTitle
|
||||
}
|
||||
|
||||
func (o *GetMetaDataByRatingKeyMetadata) GetIndex() *int64 {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.Index
|
||||
}
|
||||
|
||||
func (o *GetMetaDataByRatingKeyMetadata) GetParentIndex() *int64 {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ParentIndex
|
||||
}
|
||||
|
||||
func (o *GetMetaDataByRatingKeyMetadata) GetContentRating() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
|
||||
@@ -12,54 +12,6 @@ var GetPinServerList = []string{
|
||||
"https://plex.tv/api/v2",
|
||||
}
|
||||
|
||||
type GetPinGlobals struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// A relatively friendly name for the client device
|
||||
DeviceNickname *string `header:"style=simple,explode=false,name=X-Plex-Device"`
|
||||
// The version of the client application.
|
||||
ClientVersion *string `header:"style=simple,explode=false,name=X-Plex-Version"`
|
||||
// The platform of the client application.
|
||||
Platform *string `header:"style=simple,explode=false,name=X-Plex-Platform"`
|
||||
}
|
||||
|
||||
func (o *GetPinGlobals) GetClientID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
func (o *GetPinGlobals) GetClientName() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientName
|
||||
}
|
||||
|
||||
func (o *GetPinGlobals) GetDeviceNickname() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.DeviceNickname
|
||||
}
|
||||
|
||||
func (o *GetPinGlobals) GetClientVersion() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientVersion
|
||||
}
|
||||
|
||||
func (o *GetPinGlobals) GetPlatform() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.Platform
|
||||
}
|
||||
|
||||
type GetPinRequest struct {
|
||||
// Determines the kind of code returned by the API call
|
||||
// Strong codes are used for Pin authentication flows
|
||||
@@ -67,7 +19,7 @@ type GetPinRequest struct {
|
||||
//
|
||||
Strong *bool `default:"false" queryParam:"style=form,explode=true,name=strong"`
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
ClientID string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// A relatively friendly name for the client device
|
||||
@@ -96,9 +48,9 @@ func (o *GetPinRequest) GetStrong() *bool {
|
||||
return o.Strong
|
||||
}
|
||||
|
||||
func (o *GetPinRequest) GetClientID() *string {
|
||||
func (o *GetPinRequest) GetClientID() string {
|
||||
if o == nil {
|
||||
return nil
|
||||
return ""
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ const (
|
||||
GetPlaylistContentsQueryParamTypeTvShow GetPlaylistContentsQueryParamType = 2
|
||||
GetPlaylistContentsQueryParamTypeSeason GetPlaylistContentsQueryParamType = 3
|
||||
GetPlaylistContentsQueryParamTypeEpisode GetPlaylistContentsQueryParamType = 4
|
||||
GetPlaylistContentsQueryParamTypeAudio GetPlaylistContentsQueryParamType = 8
|
||||
GetPlaylistContentsQueryParamTypeAlbum GetPlaylistContentsQueryParamType = 9
|
||||
GetPlaylistContentsQueryParamTypeTrack GetPlaylistContentsQueryParamType = 10
|
||||
)
|
||||
|
||||
func (e GetPlaylistContentsQueryParamType) ToPointer() *GetPlaylistContentsQueryParamType {
|
||||
@@ -41,6 +44,12 @@ func (e *GetPlaylistContentsQueryParamType) UnmarshalJSON(data []byte) error {
|
||||
case 3:
|
||||
fallthrough
|
||||
case 4:
|
||||
fallthrough
|
||||
case 8:
|
||||
fallthrough
|
||||
case 9:
|
||||
fallthrough
|
||||
case 10:
|
||||
*e = GetPlaylistContentsQueryParamType(v)
|
||||
return nil
|
||||
default:
|
||||
|
||||
@@ -23,6 +23,9 @@ const (
|
||||
TypeTvShow Type = 2
|
||||
TypeSeason Type = 3
|
||||
TypeEpisode Type = 4
|
||||
TypeAudio Type = 8
|
||||
TypeAlbum Type = 9
|
||||
TypeTrack Type = 10
|
||||
)
|
||||
|
||||
func (e Type) ToPointer() *Type {
|
||||
@@ -41,6 +44,12 @@ func (e *Type) UnmarshalJSON(data []byte) error {
|
||||
case 3:
|
||||
fallthrough
|
||||
case 4:
|
||||
fallthrough
|
||||
case 8:
|
||||
fallthrough
|
||||
case 9:
|
||||
fallthrough
|
||||
case 10:
|
||||
*e = Type(v)
|
||||
return nil
|
||||
default:
|
||||
@@ -529,11 +538,13 @@ func (e *GetRecentlyAddedHubsType) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
// FlattenSeasons - Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
type FlattenSeasons string
|
||||
|
||||
const (
|
||||
FlattenSeasonsFalse FlattenSeasons = "0"
|
||||
FlattenSeasonsTrue FlattenSeasons = "1"
|
||||
FlattenSeasonsLibraryDefault FlattenSeasons = "-1"
|
||||
FlattenSeasonsHide FlattenSeasons = "0"
|
||||
FlattenSeasonsShow FlattenSeasons = "1"
|
||||
)
|
||||
|
||||
func (e FlattenSeasons) ToPointer() *FlattenSeasons {
|
||||
@@ -545,6 +556,8 @@ func (e *FlattenSeasons) UnmarshalJSON(data []byte) error {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "1":
|
||||
@@ -555,20 +568,77 @@ func (e *FlattenSeasons) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
// EpisodeSort - Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
type EpisodeSort string
|
||||
|
||||
const (
|
||||
EpisodeSortLibraryDefault EpisodeSort = "-1"
|
||||
EpisodeSortOldestFirst EpisodeSort = "0"
|
||||
EpisodeSortNewestFirst EpisodeSort = "1"
|
||||
)
|
||||
|
||||
func (e EpisodeSort) ToPointer() *EpisodeSort {
|
||||
return &e
|
||||
}
|
||||
func (e *EpisodeSort) UnmarshalJSON(data []byte) error {
|
||||
var v string
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "1":
|
||||
*e = EpisodeSort(v)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid value for EpisodeSort: %v", v)
|
||||
}
|
||||
}
|
||||
|
||||
// EnableCreditsMarkerGeneration - Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
type EnableCreditsMarkerGeneration string
|
||||
|
||||
const (
|
||||
EnableCreditsMarkerGenerationLibraryDefault EnableCreditsMarkerGeneration = "-1"
|
||||
EnableCreditsMarkerGenerationDisabled EnableCreditsMarkerGeneration = "0"
|
||||
)
|
||||
|
||||
func (e EnableCreditsMarkerGeneration) ToPointer() *EnableCreditsMarkerGeneration {
|
||||
return &e
|
||||
}
|
||||
func (e *EnableCreditsMarkerGeneration) UnmarshalJSON(data []byte) error {
|
||||
var v string
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
*e = EnableCreditsMarkerGeneration(v)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid value for EnableCreditsMarkerGeneration: %v", v)
|
||||
}
|
||||
}
|
||||
|
||||
// ShowOrdering - 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)).
|
||||
// tvdbAiring = TheTVDB (Aired),
|
||||
// tvdbDvd = TheTVDB (DVD),
|
||||
// tvdbAbsolute = TheTVDB (Absolute)).
|
||||
type ShowOrdering string
|
||||
|
||||
const (
|
||||
ShowOrderingNone ShowOrdering = "None"
|
||||
ShowOrderingTmdbAiring ShowOrdering = "tmdbAiring"
|
||||
ShowOrderingAired ShowOrdering = "aired"
|
||||
ShowOrderingDvd ShowOrdering = "dvd"
|
||||
ShowOrderingAbsolute ShowOrdering = "absolute"
|
||||
ShowOrderingNone ShowOrdering = "None"
|
||||
ShowOrderingTmdbAiring ShowOrdering = "tmdbAiring"
|
||||
ShowOrderingTvdbAiring ShowOrdering = "tvdbAiring"
|
||||
ShowOrderingTvdbDvd ShowOrdering = "tvdbDvd"
|
||||
ShowOrderingTvdbAbsolute ShowOrdering = "tvdbAbsolute"
|
||||
)
|
||||
|
||||
func (e ShowOrdering) ToPointer() *ShowOrdering {
|
||||
@@ -584,11 +654,11 @@ func (e *ShowOrdering) UnmarshalJSON(data []byte) error {
|
||||
fallthrough
|
||||
case "tmdbAiring":
|
||||
fallthrough
|
||||
case "aired":
|
||||
case "tvdbAiring":
|
||||
fallthrough
|
||||
case "dvd":
|
||||
case "tvdbDvd":
|
||||
fallthrough
|
||||
case "absolute":
|
||||
case "tvdbAbsolute":
|
||||
*e = ShowOrdering(v)
|
||||
return nil
|
||||
default:
|
||||
@@ -1552,13 +1622,18 @@ type GetRecentlyAddedMetadata struct {
|
||||
Year *int `json:"year,omitempty"`
|
||||
SeasonCount *int `json:"seasonCount,omitempty"`
|
||||
Tagline *string `json:"tagline,omitempty"`
|
||||
FlattenSeasons *FlattenSeasons `default:"0" json:"flattenSeasons"`
|
||||
// Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
FlattenSeasons *FlattenSeasons `json:"flattenSeasons,omitempty"`
|
||||
// Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
EpisodeSort *EpisodeSort `json:"episodeSort,omitempty"`
|
||||
// Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
EnableCreditsMarkerGeneration *EnableCreditsMarkerGeneration `json:"enableCreditsMarkerGeneration,omitempty"`
|
||||
// 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)).
|
||||
// tvdbAiring = TheTVDB (Aired),
|
||||
// tvdbDvd = TheTVDB (DVD),
|
||||
// tvdbAbsolute = TheTVDB (Absolute)).
|
||||
//
|
||||
ShowOrdering *ShowOrdering `json:"showOrdering,omitempty"`
|
||||
Thumb *string `json:"thumb,omitempty"`
|
||||
@@ -1769,6 +1844,20 @@ func (o *GetRecentlyAddedMetadata) GetFlattenSeasons() *FlattenSeasons {
|
||||
return o.FlattenSeasons
|
||||
}
|
||||
|
||||
func (o *GetRecentlyAddedMetadata) GetEpisodeSort() *EpisodeSort {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.EpisodeSort
|
||||
}
|
||||
|
||||
func (o *GetRecentlyAddedMetadata) GetEnableCreditsMarkerGeneration() *EnableCreditsMarkerGeneration {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.EnableCreditsMarkerGeneration
|
||||
}
|
||||
|
||||
func (o *GetRecentlyAddedMetadata) GetShowOrdering() *ShowOrdering {
|
||||
if o == nil {
|
||||
return nil
|
||||
|
||||
@@ -23,6 +23,9 @@ const (
|
||||
QueryParamTypeTvShow QueryParamType = 2
|
||||
QueryParamTypeSeason QueryParamType = 3
|
||||
QueryParamTypeEpisode QueryParamType = 4
|
||||
QueryParamTypeAudio QueryParamType = 8
|
||||
QueryParamTypeAlbum QueryParamType = 9
|
||||
QueryParamTypeTrack QueryParamType = 10
|
||||
)
|
||||
|
||||
func (e QueryParamType) ToPointer() *QueryParamType {
|
||||
@@ -41,6 +44,12 @@ func (e *QueryParamType) UnmarshalJSON(data []byte) error {
|
||||
case 3:
|
||||
fallthrough
|
||||
case 4:
|
||||
fallthrough
|
||||
case 8:
|
||||
fallthrough
|
||||
case 9:
|
||||
fallthrough
|
||||
case 10:
|
||||
*e = QueryParamType(v)
|
||||
return nil
|
||||
default:
|
||||
|
||||
@@ -10,7 +10,7 @@ type GetResourcesStatisticsRequest struct {
|
||||
// The timespan to retrieve statistics for
|
||||
// the exact meaning of this parameter is not known
|
||||
//
|
||||
Timespan *int64 `queryParam:"style=form,explode=true,name=Timespan"`
|
||||
Timespan *int64 `queryParam:"style=form,explode=true,name=timespan"`
|
||||
}
|
||||
|
||||
func (o *GetResourcesStatisticsRequest) GetTimespan() *int64 {
|
||||
|
||||
@@ -10,18 +10,6 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type GetSearchAllLibrariesGlobals struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
}
|
||||
|
||||
func (o *GetSearchAllLibrariesGlobals) GetClientID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
type SearchTypes string
|
||||
|
||||
const (
|
||||
@@ -115,7 +103,7 @@ type GetSearchAllLibrariesRequest struct {
|
||||
// The search query term.
|
||||
Query string `queryParam:"style=form,explode=true,name=query"`
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
ClientID string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// Limit the number of results returned.
|
||||
Limit *int64 `queryParam:"style=form,explode=true,name=limit"`
|
||||
// A comma-separated list of search types to include. Valid values are: movies, music, otherVideos, people, tv.
|
||||
@@ -145,9 +133,9 @@ func (o *GetSearchAllLibrariesRequest) GetQuery() string {
|
||||
return o.Query
|
||||
}
|
||||
|
||||
func (o *GetSearchAllLibrariesRequest) GetClientID() *string {
|
||||
func (o *GetSearchAllLibrariesRequest) GetClientID() string {
|
||||
if o == nil {
|
||||
return nil
|
||||
return ""
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
@@ -213,11 +201,13 @@ func (e *GetSearchAllLibrariesType) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
// GetSearchAllLibrariesFlattenSeasons - Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
type GetSearchAllLibrariesFlattenSeasons string
|
||||
|
||||
const (
|
||||
GetSearchAllLibrariesFlattenSeasonsFalse GetSearchAllLibrariesFlattenSeasons = "0"
|
||||
GetSearchAllLibrariesFlattenSeasonsTrue GetSearchAllLibrariesFlattenSeasons = "1"
|
||||
GetSearchAllLibrariesFlattenSeasonsLibraryDefault GetSearchAllLibrariesFlattenSeasons = "-1"
|
||||
GetSearchAllLibrariesFlattenSeasonsHide GetSearchAllLibrariesFlattenSeasons = "0"
|
||||
GetSearchAllLibrariesFlattenSeasonsShow GetSearchAllLibrariesFlattenSeasons = "1"
|
||||
)
|
||||
|
||||
func (e GetSearchAllLibrariesFlattenSeasons) ToPointer() *GetSearchAllLibrariesFlattenSeasons {
|
||||
@@ -229,6 +219,8 @@ func (e *GetSearchAllLibrariesFlattenSeasons) UnmarshalJSON(data []byte) error {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "1":
|
||||
@@ -239,20 +231,77 @@ func (e *GetSearchAllLibrariesFlattenSeasons) UnmarshalJSON(data []byte) error {
|
||||
}
|
||||
}
|
||||
|
||||
// GetSearchAllLibrariesEpisodeSort - Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
type GetSearchAllLibrariesEpisodeSort string
|
||||
|
||||
const (
|
||||
GetSearchAllLibrariesEpisodeSortLibraryDefault GetSearchAllLibrariesEpisodeSort = "-1"
|
||||
GetSearchAllLibrariesEpisodeSortOldestFirst GetSearchAllLibrariesEpisodeSort = "0"
|
||||
GetSearchAllLibrariesEpisodeSortNewestFirst GetSearchAllLibrariesEpisodeSort = "1"
|
||||
)
|
||||
|
||||
func (e GetSearchAllLibrariesEpisodeSort) ToPointer() *GetSearchAllLibrariesEpisodeSort {
|
||||
return &e
|
||||
}
|
||||
func (e *GetSearchAllLibrariesEpisodeSort) UnmarshalJSON(data []byte) error {
|
||||
var v string
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "1":
|
||||
*e = GetSearchAllLibrariesEpisodeSort(v)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid value for GetSearchAllLibrariesEpisodeSort: %v", v)
|
||||
}
|
||||
}
|
||||
|
||||
// GetSearchAllLibrariesEnableCreditsMarkerGeneration - Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
type GetSearchAllLibrariesEnableCreditsMarkerGeneration string
|
||||
|
||||
const (
|
||||
GetSearchAllLibrariesEnableCreditsMarkerGenerationLibraryDefault GetSearchAllLibrariesEnableCreditsMarkerGeneration = "-1"
|
||||
GetSearchAllLibrariesEnableCreditsMarkerGenerationDisabled GetSearchAllLibrariesEnableCreditsMarkerGeneration = "0"
|
||||
)
|
||||
|
||||
func (e GetSearchAllLibrariesEnableCreditsMarkerGeneration) ToPointer() *GetSearchAllLibrariesEnableCreditsMarkerGeneration {
|
||||
return &e
|
||||
}
|
||||
func (e *GetSearchAllLibrariesEnableCreditsMarkerGeneration) UnmarshalJSON(data []byte) error {
|
||||
var v string
|
||||
if err := json.Unmarshal(data, &v); err != nil {
|
||||
return err
|
||||
}
|
||||
switch v {
|
||||
case "-1":
|
||||
fallthrough
|
||||
case "0":
|
||||
*e = GetSearchAllLibrariesEnableCreditsMarkerGeneration(v)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid value for GetSearchAllLibrariesEnableCreditsMarkerGeneration: %v", v)
|
||||
}
|
||||
}
|
||||
|
||||
// GetSearchAllLibrariesShowOrdering - 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)).
|
||||
// tvdbAiring = TheTVDB (Aired),
|
||||
// tvdbDvd = TheTVDB (DVD),
|
||||
// tvdbAbsolute = TheTVDB (Absolute)).
|
||||
type GetSearchAllLibrariesShowOrdering string
|
||||
|
||||
const (
|
||||
GetSearchAllLibrariesShowOrderingNone GetSearchAllLibrariesShowOrdering = "None"
|
||||
GetSearchAllLibrariesShowOrderingTmdbAiring GetSearchAllLibrariesShowOrdering = "tmdbAiring"
|
||||
GetSearchAllLibrariesShowOrderingAired GetSearchAllLibrariesShowOrdering = "aired"
|
||||
GetSearchAllLibrariesShowOrderingDvd GetSearchAllLibrariesShowOrdering = "dvd"
|
||||
GetSearchAllLibrariesShowOrderingAbsolute GetSearchAllLibrariesShowOrdering = "absolute"
|
||||
GetSearchAllLibrariesShowOrderingNone GetSearchAllLibrariesShowOrdering = "None"
|
||||
GetSearchAllLibrariesShowOrderingTmdbAiring GetSearchAllLibrariesShowOrdering = "tmdbAiring"
|
||||
GetSearchAllLibrariesShowOrderingTvdbAiring GetSearchAllLibrariesShowOrdering = "tvdbAiring"
|
||||
GetSearchAllLibrariesShowOrderingTvdbDvd GetSearchAllLibrariesShowOrdering = "tvdbDvd"
|
||||
GetSearchAllLibrariesShowOrderingTvdbAbsolute GetSearchAllLibrariesShowOrdering = "tvdbAbsolute"
|
||||
)
|
||||
|
||||
func (e GetSearchAllLibrariesShowOrdering) ToPointer() *GetSearchAllLibrariesShowOrdering {
|
||||
@@ -268,11 +317,11 @@ func (e *GetSearchAllLibrariesShowOrdering) UnmarshalJSON(data []byte) error {
|
||||
fallthrough
|
||||
case "tmdbAiring":
|
||||
fallthrough
|
||||
case "aired":
|
||||
case "tvdbAiring":
|
||||
fallthrough
|
||||
case "dvd":
|
||||
case "tvdbDvd":
|
||||
fallthrough
|
||||
case "absolute":
|
||||
case "tvdbAbsolute":
|
||||
*e = GetSearchAllLibrariesShowOrdering(v)
|
||||
return nil
|
||||
default:
|
||||
@@ -1226,23 +1275,28 @@ type GetSearchAllLibrariesMetadata struct {
|
||||
LibrarySectionKey *string `json:"librarySectionKey,omitempty"`
|
||||
// The type of media content
|
||||
//
|
||||
Type GetSearchAllLibrariesType `json:"type"`
|
||||
Title string `json:"title"`
|
||||
Slug *string `json:"slug,omitempty"`
|
||||
ContentRating *string `json:"contentRating,omitempty"`
|
||||
Summary string `json:"summary"`
|
||||
Rating *float64 `json:"rating,omitempty"`
|
||||
AudienceRating *float64 `json:"audienceRating,omitempty"`
|
||||
Year *int `json:"year,omitempty"`
|
||||
SeasonCount *int `json:"seasonCount,omitempty"`
|
||||
Tagline *string `json:"tagline,omitempty"`
|
||||
FlattenSeasons *GetSearchAllLibrariesFlattenSeasons `default:"0" json:"flattenSeasons"`
|
||||
Type GetSearchAllLibrariesType `json:"type"`
|
||||
Title string `json:"title"`
|
||||
Slug *string `json:"slug,omitempty"`
|
||||
ContentRating *string `json:"contentRating,omitempty"`
|
||||
Summary string `json:"summary"`
|
||||
Rating *float64 `json:"rating,omitempty"`
|
||||
AudienceRating *float64 `json:"audienceRating,omitempty"`
|
||||
Year *int `json:"year,omitempty"`
|
||||
SeasonCount *int `json:"seasonCount,omitempty"`
|
||||
Tagline *string `json:"tagline,omitempty"`
|
||||
// Setting that indicates if seasons are set to hidden for the show. (-1 = Library default, 0 = Hide, 1 = Show).
|
||||
FlattenSeasons *GetSearchAllLibrariesFlattenSeasons `json:"flattenSeasons,omitempty"`
|
||||
// Setting that indicates how episodes are sorted for the show. (-1 = Library default, 0 = Oldest first, 1 = Newest first).
|
||||
EpisodeSort *GetSearchAllLibrariesEpisodeSort `json:"episodeSort,omitempty"`
|
||||
// Setting that indicates if credits markers detection is enabled. (-1 = Library default, 0 = Disabled).
|
||||
EnableCreditsMarkerGeneration *GetSearchAllLibrariesEnableCreditsMarkerGeneration `json:"enableCreditsMarkerGeneration,omitempty"`
|
||||
// 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)).
|
||||
// tvdbAiring = TheTVDB (Aired),
|
||||
// tvdbDvd = TheTVDB (DVD),
|
||||
// tvdbAbsolute = TheTVDB (Absolute)).
|
||||
//
|
||||
ShowOrdering *GetSearchAllLibrariesShowOrdering `json:"showOrdering,omitempty"`
|
||||
Thumb *string `json:"thumb,omitempty"`
|
||||
@@ -1453,6 +1507,20 @@ func (o *GetSearchAllLibrariesMetadata) GetFlattenSeasons() *GetSearchAllLibrari
|
||||
return o.FlattenSeasons
|
||||
}
|
||||
|
||||
func (o *GetSearchAllLibrariesMetadata) GetEpisodeSort() *GetSearchAllLibrariesEpisodeSort {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.EpisodeSort
|
||||
}
|
||||
|
||||
func (o *GetSearchAllLibrariesMetadata) GetEnableCreditsMarkerGeneration() *GetSearchAllLibrariesEnableCreditsMarkerGeneration {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.EnableCreditsMarkerGeneration
|
||||
}
|
||||
|
||||
func (o *GetSearchAllLibrariesMetadata) GetShowOrdering() *GetSearchAllLibrariesShowOrdering {
|
||||
if o == nil {
|
||||
return nil
|
||||
|
||||
@@ -21,6 +21,9 @@ const (
|
||||
GetSearchLibraryQueryParamTypeTvShow GetSearchLibraryQueryParamType = 2
|
||||
GetSearchLibraryQueryParamTypeSeason GetSearchLibraryQueryParamType = 3
|
||||
GetSearchLibraryQueryParamTypeEpisode GetSearchLibraryQueryParamType = 4
|
||||
GetSearchLibraryQueryParamTypeAudio GetSearchLibraryQueryParamType = 8
|
||||
GetSearchLibraryQueryParamTypeAlbum GetSearchLibraryQueryParamType = 9
|
||||
GetSearchLibraryQueryParamTypeTrack GetSearchLibraryQueryParamType = 10
|
||||
)
|
||||
|
||||
func (e GetSearchLibraryQueryParamType) ToPointer() *GetSearchLibraryQueryParamType {
|
||||
@@ -39,6 +42,12 @@ func (e *GetSearchLibraryQueryParamType) UnmarshalJSON(data []byte) error {
|
||||
case 3:
|
||||
fallthrough
|
||||
case 4:
|
||||
fallthrough
|
||||
case 8:
|
||||
fallthrough
|
||||
case 9:
|
||||
fallthrough
|
||||
case 10:
|
||||
*e = GetSearchLibraryQueryParamType(v)
|
||||
return nil
|
||||
default:
|
||||
|
||||
@@ -14,18 +14,6 @@ var GetServerResourcesServerList = []string{
|
||||
"https://plex.tv/api/v2",
|
||||
}
|
||||
|
||||
type GetServerResourcesGlobals struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
}
|
||||
|
||||
func (o *GetServerResourcesGlobals) GetClientID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
// IncludeHTTPS - Include Https entries in the results
|
||||
type IncludeHTTPS int
|
||||
|
||||
@@ -118,7 +106,7 @@ type GetServerResourcesRequest struct {
|
||||
// Include IPv6 entries in the results
|
||||
IncludeIPv6 *IncludeIPv6 `default:"0" queryParam:"style=form,explode=true,name=includeIPv6"`
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
ClientID string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
}
|
||||
|
||||
func (g GetServerResourcesRequest) MarshalJSON() ([]byte, error) {
|
||||
@@ -153,9 +141,9 @@ func (o *GetServerResourcesRequest) GetIncludeIPv6() *IncludeIPv6 {
|
||||
return o.IncludeIPv6
|
||||
}
|
||||
|
||||
func (o *GetServerResourcesRequest) GetClientID() *string {
|
||||
func (o *GetServerResourcesRequest) GetClientID() string {
|
||||
if o == nil {
|
||||
return nil
|
||||
return ""
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
@@ -497,43 +497,45 @@ func (o *Session) GetLocation() *string {
|
||||
}
|
||||
|
||||
type GetSessionsMetadata struct {
|
||||
AddedAt *int `json:"addedAt,omitempty"`
|
||||
Art *string `json:"art,omitempty"`
|
||||
Duration *int `json:"duration,omitempty"`
|
||||
GrandparentArt *string `json:"grandparentArt,omitempty"`
|
||||
GrandparentGUID *string `json:"grandparentGuid,omitempty"`
|
||||
GrandparentKey *string `json:"grandparentKey,omitempty"`
|
||||
GrandparentRatingKey *string `json:"grandparentRatingKey,omitempty"`
|
||||
GrandparentThumb *string `json:"grandparentThumb,omitempty"`
|
||||
GrandparentTitle *string `json:"grandparentTitle,omitempty"`
|
||||
GUID *string `json:"guid,omitempty"`
|
||||
Index *int `json:"index,omitempty"`
|
||||
Key *string `json:"key,omitempty"`
|
||||
LibrarySectionID *string `json:"librarySectionID,omitempty"`
|
||||
LibrarySectionKey *string `json:"librarySectionKey,omitempty"`
|
||||
LibrarySectionTitle *string `json:"librarySectionTitle,omitempty"`
|
||||
MusicAnalysisVersion *string `json:"musicAnalysisVersion,omitempty"`
|
||||
ParentGUID *string `json:"parentGuid,omitempty"`
|
||||
ParentIndex *int `json:"parentIndex,omitempty"`
|
||||
ParentKey *string `json:"parentKey,omitempty"`
|
||||
ParentRatingKey *string `json:"parentRatingKey,omitempty"`
|
||||
ParentStudio *string `json:"parentStudio,omitempty"`
|
||||
ParentThumb *string `json:"parentThumb,omitempty"`
|
||||
ParentTitle *string `json:"parentTitle,omitempty"`
|
||||
ParentYear *int `json:"parentYear,omitempty"`
|
||||
RatingCount *int `json:"ratingCount,omitempty"`
|
||||
RatingKey *string `json:"ratingKey,omitempty"`
|
||||
SessionKey *string `json:"sessionKey,omitempty"`
|
||||
Thumb *string `json:"thumb,omitempty"`
|
||||
Title *string `json:"title,omitempty"`
|
||||
TitleSort *string `json:"titleSort,omitempty"`
|
||||
Type *string `json:"type,omitempty"`
|
||||
UpdatedAt *int `json:"updatedAt,omitempty"`
|
||||
ViewOffset *int `json:"viewOffset,omitempty"`
|
||||
Media []GetSessionsMedia `json:"Media,omitempty"`
|
||||
User *GetSessionsUser `json:"User,omitempty"`
|
||||
Player *Player `json:"Player,omitempty"`
|
||||
Session *Session `json:"Session,omitempty"`
|
||||
AddedAt *int `json:"addedAt,omitempty"`
|
||||
Art *string `json:"art,omitempty"`
|
||||
Duration *int `json:"duration,omitempty"`
|
||||
GrandparentArt *string `json:"grandparentArt,omitempty"`
|
||||
GrandparentGUID *string `json:"grandparentGuid,omitempty"`
|
||||
GrandparentKey *string `json:"grandparentKey,omitempty"`
|
||||
GrandparentRatingKey *string `json:"grandparentRatingKey,omitempty"`
|
||||
GrandparentThumb *string `json:"grandparentThumb,omitempty"`
|
||||
GrandparentTitle *string `json:"grandparentTitle,omitempty"`
|
||||
GUID *string `json:"guid,omitempty"`
|
||||
Index *int `json:"index,omitempty"`
|
||||
Key *string `json:"key,omitempty"`
|
||||
LibrarySectionID *string `json:"librarySectionID,omitempty"`
|
||||
LibrarySectionKey *string `json:"librarySectionKey,omitempty"`
|
||||
LibrarySectionTitle *string `json:"librarySectionTitle,omitempty"`
|
||||
MusicAnalysisVersion *string `json:"musicAnalysisVersion,omitempty"`
|
||||
// The original untranslated name of the media item when non-english, or the track artist if an audio Item has an album artist
|
||||
OriginalTitle *string `json:"originalTitle,omitempty"`
|
||||
ParentGUID *string `json:"parentGuid,omitempty"`
|
||||
ParentIndex *int `json:"parentIndex,omitempty"`
|
||||
ParentKey *string `json:"parentKey,omitempty"`
|
||||
ParentRatingKey *string `json:"parentRatingKey,omitempty"`
|
||||
ParentStudio *string `json:"parentStudio,omitempty"`
|
||||
ParentThumb *string `json:"parentThumb,omitempty"`
|
||||
ParentTitle *string `json:"parentTitle,omitempty"`
|
||||
ParentYear *int `json:"parentYear,omitempty"`
|
||||
RatingCount *int `json:"ratingCount,omitempty"`
|
||||
RatingKey *string `json:"ratingKey,omitempty"`
|
||||
SessionKey *string `json:"sessionKey,omitempty"`
|
||||
Thumb *string `json:"thumb,omitempty"`
|
||||
Title *string `json:"title,omitempty"`
|
||||
TitleSort *string `json:"titleSort,omitempty"`
|
||||
Type *string `json:"type,omitempty"`
|
||||
UpdatedAt *int `json:"updatedAt,omitempty"`
|
||||
ViewOffset *int `json:"viewOffset,omitempty"`
|
||||
Media []GetSessionsMedia `json:"Media,omitempty"`
|
||||
User *GetSessionsUser `json:"User,omitempty"`
|
||||
Player *Player `json:"Player,omitempty"`
|
||||
Session *Session `json:"Session,omitempty"`
|
||||
}
|
||||
|
||||
func (o *GetSessionsMetadata) GetAddedAt() *int {
|
||||
@@ -648,6 +650,13 @@ func (o *GetSessionsMetadata) GetMusicAnalysisVersion() *string {
|
||||
return o.MusicAnalysisVersion
|
||||
}
|
||||
|
||||
func (o *GetSessionsMetadata) GetOriginalTitle() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.OriginalTitle
|
||||
}
|
||||
|
||||
func (o *GetSessionsMetadata) GetParentGUID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
|
||||
@@ -10,7 +10,7 @@ type GetStatisticsRequest struct {
|
||||
// The timespan to retrieve statistics for
|
||||
// the exact meaning of this parameter is not known
|
||||
//
|
||||
Timespan *int64 `queryParam:"style=form,explode=true,name=Timespan"`
|
||||
Timespan *int64 `queryParam:"style=form,explode=true,name=timespan"`
|
||||
}
|
||||
|
||||
func (o *GetStatisticsRequest) GetTimespan() *int64 {
|
||||
|
||||
@@ -12,59 +12,11 @@ var GetTokenByPinIDServerList = []string{
|
||||
"https://plex.tv/api/v2",
|
||||
}
|
||||
|
||||
type GetTokenByPinIDGlobals struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// A relatively friendly name for the client device
|
||||
DeviceNickname *string `header:"style=simple,explode=false,name=X-Plex-Device"`
|
||||
// The version of the client application.
|
||||
ClientVersion *string `header:"style=simple,explode=false,name=X-Plex-Version"`
|
||||
// The platform of the client application.
|
||||
Platform *string `header:"style=simple,explode=false,name=X-Plex-Platform"`
|
||||
}
|
||||
|
||||
func (o *GetTokenByPinIDGlobals) GetClientID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
func (o *GetTokenByPinIDGlobals) GetClientName() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientName
|
||||
}
|
||||
|
||||
func (o *GetTokenByPinIDGlobals) GetDeviceNickname() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.DeviceNickname
|
||||
}
|
||||
|
||||
func (o *GetTokenByPinIDGlobals) GetClientVersion() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientVersion
|
||||
}
|
||||
|
||||
func (o *GetTokenByPinIDGlobals) GetPlatform() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.Platform
|
||||
}
|
||||
|
||||
type GetTokenByPinIDRequest struct {
|
||||
// The PinID to retrieve an access token for
|
||||
PinID int64 `pathParam:"style=simple,explode=false,name=pinID"`
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
ClientID string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// A relatively friendly name for the client device
|
||||
@@ -82,9 +34,9 @@ func (o *GetTokenByPinIDRequest) GetPinID() int64 {
|
||||
return o.PinID
|
||||
}
|
||||
|
||||
func (o *GetTokenByPinIDRequest) GetClientID() *string {
|
||||
func (o *GetTokenByPinIDRequest) GetClientID() string {
|
||||
if o == nil {
|
||||
return nil
|
||||
return ""
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"fmt"
|
||||
"github.com/LukeHagar/plexgo/internal/utils"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
var GetTokenDetailsServerList = []string{
|
||||
@@ -498,11 +497,9 @@ func (o *GetTokenDetailsSubscription) GetPlan() *string {
|
||||
// GetTokenDetailsUserPlexAccount - Logged in user details
|
||||
type GetTokenDetailsUserPlexAccount struct {
|
||||
// Unknown
|
||||
AdsConsent *bool `json:"adsConsent"`
|
||||
// Unknown
|
||||
AdsConsentReminderAt *time.Time `json:"adsConsentReminderAt"`
|
||||
// Unknown
|
||||
AdsConsentSetAt *time.Time `json:"adsConsentSetAt"`
|
||||
AdsConsent *bool `json:"adsConsent"`
|
||||
AdsConsentReminderAt *int64 `json:"adsConsentReminderAt"`
|
||||
AdsConsentSetAt *int64 `json:"adsConsentSetAt"`
|
||||
// Unknown
|
||||
Anonymous *bool `default:"false" json:"anonymous"`
|
||||
// The account token
|
||||
@@ -547,7 +544,7 @@ type GetTokenDetailsUserPlexAccount struct {
|
||||
MaxHomeSize int `json:"maxHomeSize"`
|
||||
// [Might be removed] The hashed Plex Home PIN
|
||||
//
|
||||
// Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
|
||||
// Deprecated: This will be removed in a future release, please migrate away from it as soon as possible.
|
||||
Pin *string `json:"pin,omitempty"`
|
||||
Profile UserProfile `json:"profile"`
|
||||
// If the account has a Plex Home PIN enabled
|
||||
@@ -597,14 +594,14 @@ func (o *GetTokenDetailsUserPlexAccount) GetAdsConsent() *bool {
|
||||
return o.AdsConsent
|
||||
}
|
||||
|
||||
func (o *GetTokenDetailsUserPlexAccount) GetAdsConsentReminderAt() *time.Time {
|
||||
func (o *GetTokenDetailsUserPlexAccount) GetAdsConsentReminderAt() *int64 {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.AdsConsentReminderAt
|
||||
}
|
||||
|
||||
func (o *GetTokenDetailsUserPlexAccount) GetAdsConsentSetAt() *time.Time {
|
||||
func (o *GetTokenDetailsUserPlexAccount) GetAdsConsentSetAt() *int64 {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ const (
|
||||
GetTopWatchedContentQueryParamTypeTvShow GetTopWatchedContentQueryParamType = 2
|
||||
GetTopWatchedContentQueryParamTypeSeason GetTopWatchedContentQueryParamType = 3
|
||||
GetTopWatchedContentQueryParamTypeEpisode GetTopWatchedContentQueryParamType = 4
|
||||
GetTopWatchedContentQueryParamTypeAudio GetTopWatchedContentQueryParamType = 8
|
||||
GetTopWatchedContentQueryParamTypeAlbum GetTopWatchedContentQueryParamType = 9
|
||||
GetTopWatchedContentQueryParamTypeTrack GetTopWatchedContentQueryParamType = 10
|
||||
)
|
||||
|
||||
func (e GetTopWatchedContentQueryParamType) ToPointer() *GetTopWatchedContentQueryParamType {
|
||||
@@ -41,6 +44,12 @@ func (e *GetTopWatchedContentQueryParamType) UnmarshalJSON(data []byte) error {
|
||||
case 3:
|
||||
fallthrough
|
||||
case 4:
|
||||
fallthrough
|
||||
case 8:
|
||||
fallthrough
|
||||
case 9:
|
||||
fallthrough
|
||||
case 10:
|
||||
*e = GetTopWatchedContentQueryParamType(v)
|
||||
return nil
|
||||
default:
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
var ErrUnsupportedOption = errors.New("unsupported option")
|
||||
|
||||
const (
|
||||
SupportedOptionServerURL = "serverURL"
|
||||
SupportedOptionRetries = "retries"
|
||||
SupportedOptionTimeout = "timeout"
|
||||
SupportedOptionAcceptHeaderOverride = "acceptHeaderOverride"
|
||||
@@ -36,6 +35,7 @@ type Options struct {
|
||||
Timeout *time.Duration
|
||||
AcceptHeaderOverride *AcceptHeaderEnum
|
||||
URLOverride *string
|
||||
SetHeaders map[string]string
|
||||
}
|
||||
|
||||
type Option func(*Options, ...string) error
|
||||
@@ -43,10 +43,6 @@ type Option func(*Options, ...string) error
|
||||
// WithServerURL allows providing an alternative server URL.
|
||||
func WithServerURL(serverURL string) Option {
|
||||
return func(opts *Options, supportedOptions ...string) error {
|
||||
if !utils.Contains(supportedOptions, SupportedOptionServerURL) {
|
||||
return ErrUnsupportedOption
|
||||
}
|
||||
|
||||
opts.ServerURL = &serverURL
|
||||
return nil
|
||||
}
|
||||
@@ -55,10 +51,6 @@ func WithServerURL(serverURL string) Option {
|
||||
// WithTemplatedServerURL allows providing an alternative server URL with templated parameters.
|
||||
func WithTemplatedServerURL(serverURL string, params map[string]string) Option {
|
||||
return func(opts *Options, supportedOptions ...string) error {
|
||||
if !utils.Contains(supportedOptions, SupportedOptionServerURL) {
|
||||
return ErrUnsupportedOption
|
||||
}
|
||||
|
||||
if params != nil {
|
||||
serverURL = utils.ReplaceParameters(serverURL, params)
|
||||
}
|
||||
@@ -114,3 +106,12 @@ func WithURLOverride(urlOverride string) Option {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithSetHeaders takes a map of headers that will applied to a request. If the
|
||||
// request contains headers that are in the map then they will be overwritten.
|
||||
func WithSetHeaders(hdrs map[string]string) Option {
|
||||
return func(opts *Options, supportedOptions ...string) error {
|
||||
opts.SetHeaders = hdrs
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,61 +7,12 @@ import (
|
||||
"fmt"
|
||||
"github.com/LukeHagar/plexgo/internal/utils"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
var PostUsersSignInDataServerList = []string{
|
||||
"https://plex.tv/api/v2",
|
||||
}
|
||||
|
||||
type PostUsersSignInDataGlobals struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// A relatively friendly name for the client device
|
||||
DeviceNickname *string `header:"style=simple,explode=false,name=X-Plex-Device"`
|
||||
// The version of the client application.
|
||||
ClientVersion *string `header:"style=simple,explode=false,name=X-Plex-Version"`
|
||||
// The platform of the client application.
|
||||
Platform *string `header:"style=simple,explode=false,name=X-Plex-Platform"`
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataGlobals) GetClientID() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataGlobals) GetClientName() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientName
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataGlobals) GetDeviceNickname() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.DeviceNickname
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataGlobals) GetClientVersion() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.ClientVersion
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataGlobals) GetPlatform() *string {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.Platform
|
||||
}
|
||||
|
||||
// PostUsersSignInDataRequestBody - Login credentials
|
||||
type PostUsersSignInDataRequestBody struct {
|
||||
Login string `form:"name=login"`
|
||||
@@ -111,7 +62,7 @@ func (o *PostUsersSignInDataRequestBody) GetVerificationCode() *string {
|
||||
|
||||
type PostUsersSignInDataRequest struct {
|
||||
// An opaque identifier unique to the client (UUID, serial number, or other unique device ID)
|
||||
ClientID *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
ClientID string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
|
||||
// The name of the client application. (Plex Web, Plex Media Server, etc.)
|
||||
ClientName *string `header:"style=simple,explode=false,name=X-Plex-Product"`
|
||||
// A relatively friendly name for the client device
|
||||
@@ -124,9 +75,9 @@ type PostUsersSignInDataRequest struct {
|
||||
RequestBody *PostUsersSignInDataRequestBody `request:"mediaType=application/x-www-form-urlencoded"`
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataRequest) GetClientID() *string {
|
||||
func (o *PostUsersSignInDataRequest) GetClientID() string {
|
||||
if o == nil {
|
||||
return nil
|
||||
return ""
|
||||
}
|
||||
return o.ClientID
|
||||
}
|
||||
@@ -832,11 +783,9 @@ type Trials struct {
|
||||
// PostUsersSignInDataUserPlexAccount - Returns the user account data with a valid auth token
|
||||
type PostUsersSignInDataUserPlexAccount struct {
|
||||
// Unknown
|
||||
AdsConsent *bool `json:"adsConsent"`
|
||||
// Unknown
|
||||
AdsConsentReminderAt *time.Time `json:"adsConsentReminderAt"`
|
||||
// Unknown
|
||||
AdsConsentSetAt *time.Time `json:"adsConsentSetAt"`
|
||||
AdsConsent *bool `json:"adsConsent"`
|
||||
AdsConsentReminderAt *int64 `json:"adsConsentReminderAt"`
|
||||
AdsConsentSetAt *int64 `json:"adsConsentSetAt"`
|
||||
// Unknown
|
||||
Anonymous *bool `default:"false" json:"anonymous"`
|
||||
// The account token
|
||||
@@ -881,7 +830,7 @@ type PostUsersSignInDataUserPlexAccount struct {
|
||||
MaxHomeSize int `json:"maxHomeSize"`
|
||||
// [Might be removed] The hashed Plex Home PIN
|
||||
//
|
||||
// Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
|
||||
// Deprecated: This will be removed in a future release, please migrate away from it as soon as possible.
|
||||
Pin *string `json:"pin,omitempty"`
|
||||
Profile PostUsersSignInDataUserProfile `json:"profile"`
|
||||
// If the account has a Plex Home PIN enabled
|
||||
@@ -933,14 +882,14 @@ func (o *PostUsersSignInDataUserPlexAccount) GetAdsConsent() *bool {
|
||||
return o.AdsConsent
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataUserPlexAccount) GetAdsConsentReminderAt() *time.Time {
|
||||
func (o *PostUsersSignInDataUserPlexAccount) GetAdsConsentReminderAt() *int64 {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
return o.AdsConsentReminderAt
|
||||
}
|
||||
|
||||
func (o *PostUsersSignInDataUserPlexAccount) GetAdsConsentSetAt() *time.Time {
|
||||
func (o *PostUsersSignInDataUserPlexAccount) GetAdsConsentSetAt() *int64 {
|
||||
if o == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
630
playlists.go
630
playlists.go
File diff suppressed because it is too large
Load Diff
44
plexapi.go
44
plexapi.go
@@ -6,7 +6,6 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/LukeHagar/plexgo/internal/globals"
|
||||
"github.com/LukeHagar/plexgo/internal/hooks"
|
||||
"github.com/LukeHagar/plexgo/internal/utils"
|
||||
"github.com/LukeHagar/plexgo/models/components"
|
||||
@@ -58,7 +57,6 @@ type sdkConfiguration struct {
|
||||
SDKVersion string
|
||||
GenVersion string
|
||||
UserAgent string
|
||||
Globals globals.Globals
|
||||
RetryConfig *retry.Config
|
||||
Hooks *hooks.Hooks
|
||||
Timeout *time.Duration
|
||||
@@ -281,41 +279,6 @@ func WithSecuritySource(security func(context.Context) (components.Security, err
|
||||
}
|
||||
}
|
||||
|
||||
// WithClientID allows setting the ClientID parameter for all supported operations
|
||||
func WithClientID(clientID string) SDKOption {
|
||||
return func(sdk *PlexAPI) {
|
||||
sdk.sdkConfiguration.Globals.ClientID = &clientID
|
||||
}
|
||||
}
|
||||
|
||||
// WithClientName allows setting the ClientName parameter for all supported operations
|
||||
func WithClientName(clientName string) SDKOption {
|
||||
return func(sdk *PlexAPI) {
|
||||
sdk.sdkConfiguration.Globals.ClientName = &clientName
|
||||
}
|
||||
}
|
||||
|
||||
// WithClientVersion allows setting the ClientVersion parameter for all supported operations
|
||||
func WithClientVersion(clientVersion string) SDKOption {
|
||||
return func(sdk *PlexAPI) {
|
||||
sdk.sdkConfiguration.Globals.ClientVersion = &clientVersion
|
||||
}
|
||||
}
|
||||
|
||||
// WithPlatform allows setting the Platform parameter for all supported operations
|
||||
func WithPlatform(platform string) SDKOption {
|
||||
return func(sdk *PlexAPI) {
|
||||
sdk.sdkConfiguration.Globals.Platform = &platform
|
||||
}
|
||||
}
|
||||
|
||||
// WithDeviceNickname allows setting the DeviceNickname parameter for all supported operations
|
||||
func WithDeviceNickname(deviceNickname string) SDKOption {
|
||||
return func(sdk *PlexAPI) {
|
||||
sdk.sdkConfiguration.Globals.DeviceNickname = &deviceNickname
|
||||
}
|
||||
}
|
||||
|
||||
func WithRetryConfig(retryConfig retry.Config) SDKOption {
|
||||
return func(sdk *PlexAPI) {
|
||||
sdk.sdkConfiguration.RetryConfig = &retryConfig
|
||||
@@ -335,10 +298,9 @@ func New(opts ...SDKOption) *PlexAPI {
|
||||
sdkConfiguration: sdkConfiguration{
|
||||
Language: "go",
|
||||
OpenAPIDocVersion: "0.0.3",
|
||||
SDKVersion: "0.15.0",
|
||||
GenVersion: "2.429.0",
|
||||
UserAgent: "speakeasy-sdk/go 0.15.0 2.429.0 0.0.3 github.com/LukeHagar/plexgo",
|
||||
Globals: globals.Globals{},
|
||||
SDKVersion: "0.17.2",
|
||||
GenVersion: "2.496.0",
|
||||
UserAgent: "speakeasy-sdk/go 0.17.2 2.496.0 0.0.3 github.com/LukeHagar/plexgo",
|
||||
ServerDefaults: []map[string]string{
|
||||
{
|
||||
"protocol": "https",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user