mirror of
https://github.com/LukeHagar/plexjava.git
synced 2025-12-07 04:20:49 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b28ca3416 | ||
|
|
dd781d1e27 |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -9,4 +9,3 @@
|
||||
|
||||
# This allows generated code to be indexed correctly
|
||||
*.java linguist-generated=false
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -15,7 +15,7 @@ generation:
|
||||
oAuth2ClientCredentialsEnabled: true
|
||||
oAuth2PasswordEnabled: false
|
||||
java:
|
||||
version: 0.14.1
|
||||
version: 0.15.0
|
||||
additionalDependencies: []
|
||||
additionalPlugins: []
|
||||
artifactID: plexapi
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
speakeasyVersion: 1.528.1
|
||||
speakeasyVersion: 1.531.4
|
||||
sources:
|
||||
my-source:
|
||||
sourceNamespace: my-source
|
||||
@@ -8,19 +8,19 @@ sources:
|
||||
- latest
|
||||
plexapi:
|
||||
sourceNamespace: plexapi
|
||||
sourceRevisionDigest: sha256:b5580df6ec4a386e12249ff13f35b916fe5559e101de4a816b53e47d6947f1a5
|
||||
sourceBlobDigest: sha256:6108b6c35fbe7e9163ffe0c804170f5e3a6edb63b8e745454ea8ee249bd790c3
|
||||
sourceRevisionDigest: sha256:db75a06885b897418dcb580679b5f744348573ad317155172346d32442420e5e
|
||||
sourceBlobDigest: sha256:ac0a3c3a6df002378b3522325c2330ba4309fbbbfa503a04b8267398f20033f5
|
||||
tags:
|
||||
- latest
|
||||
- speakeasy-sdk-regen-1743640078
|
||||
- speakeasy-sdk-regen-1744590653
|
||||
targets:
|
||||
plexjava:
|
||||
source: plexapi
|
||||
sourceNamespace: plexapi
|
||||
sourceRevisionDigest: sha256:b5580df6ec4a386e12249ff13f35b916fe5559e101de4a816b53e47d6947f1a5
|
||||
sourceBlobDigest: sha256:6108b6c35fbe7e9163ffe0c804170f5e3a6edb63b8e745454ea8ee249bd790c3
|
||||
sourceRevisionDigest: sha256:db75a06885b897418dcb580679b5f744348573ad317155172346d32442420e5e
|
||||
sourceBlobDigest: sha256:ac0a3c3a6df002378b3522325c2330ba4309fbbbfa503a04b8267398f20033f5
|
||||
codeSamplesNamespace: code-samples-java-plexjava
|
||||
codeSamplesRevisionDigest: sha256:5ac1b6e0506bbf85ab353ce21dbf6646b6590efa4ba68ab778ba9836b378e0f6
|
||||
codeSamplesRevisionDigest: sha256:da1aba30a925f7fffb273f3f1f7d25920debd20e62c974ad4a6904a98697c8db
|
||||
workflow:
|
||||
workflowVersion: 1.0.0
|
||||
speakeasyVersion: latest
|
||||
|
||||
27
README.md
27
README.md
@@ -69,7 +69,7 @@ The samples below show how a published SDK artifact is used:
|
||||
|
||||
Gradle:
|
||||
```groovy
|
||||
implementation 'dev.plexapi:plexapi:0.14.1'
|
||||
implementation 'dev.plexapi:plexapi:0.15.0'
|
||||
```
|
||||
|
||||
Maven:
|
||||
@@ -77,7 +77,7 @@ Maven:
|
||||
<dependency>
|
||||
<groupId>dev.plexapi</groupId>
|
||||
<artifactId>plexapi</artifactId>
|
||||
<version>0.14.1</version>
|
||||
<version>0.15.0</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
@@ -94,6 +94,29 @@ On Windows:
|
||||
```bash
|
||||
gradlew.bat publishToMavenLocal -Pskip.signing
|
||||
```
|
||||
|
||||
### Logging
|
||||
A logging framework/facade has not yet been adopted but is under consideration.
|
||||
|
||||
For request and response logging (especially json bodies) use:
|
||||
```java
|
||||
SpeakeasyHTTPClient.setDebugLogging(true); // experimental API only (may change without warning)
|
||||
```
|
||||
Example output:
|
||||
```
|
||||
Sending request: http://localhost:35123/bearer#global GET
|
||||
Request headers: {Accept=[application/json], Authorization=[******], Client-Level-Header=[added by client], Idempotency-Key=[some-key], x-speakeasy-user-agent=[speakeasy-sdk/java 0.0.1 internal 0.1.0 org.openapis.openapi]}
|
||||
Received response: (GET http://localhost:35123/bearer#global) 200
|
||||
Response headers: {access-control-allow-credentials=[true], access-control-allow-origin=[*], connection=[keep-alive], content-length=[50], content-type=[application/json], date=[Wed, 09 Apr 2025 01:43:29 GMT], server=[gunicorn/19.9.0]}
|
||||
Response body:
|
||||
{
|
||||
"authenticated": true,
|
||||
"token": "global"
|
||||
}
|
||||
```
|
||||
WARNING: This should only used for temporary debugging purposes. Leaving this option on in a production system could expose credentials/secrets in logs. <i>Authorization</i> headers are redacted by default and there is the ability to specify redacted header names via `SpeakeasyHTTPClient.setRedactedHeaders`.
|
||||
|
||||
Another option is to set the System property `-Djdk.httpclient.HttpClient.log=all`. However, this second option does not log bodies.
|
||||
<!-- End SDK Installation [installation] -->
|
||||
|
||||
<!-- Start SDK Example Usage [usage] -->
|
||||
|
||||
20
RELEASES.md
20
RELEASES.md
@@ -299,3 +299,23 @@ Based on:
|
||||
- [java v0.14.1] .
|
||||
### Releases
|
||||
- [Maven Central v0.14.1] https://central.sonatype.com/artifact/dev.plexapi/plexapi/0.14.1 - .
|
||||
|
||||
## 2025-04-06 00:30:19
|
||||
### Changes
|
||||
Based on:
|
||||
- OpenAPI Doc
|
||||
- Speakeasy CLI 1.529.1 (2.566.5) https://github.com/speakeasy-api/speakeasy
|
||||
### Generated
|
||||
- [java v0.14.2] .
|
||||
### Releases
|
||||
- [Maven Central v0.14.2] https://central.sonatype.com/artifact/dev.plexapi/plexapi/0.14.2 - .
|
||||
|
||||
## 2025-04-14 00:30:37
|
||||
### Changes
|
||||
Based on:
|
||||
- OpenAPI Doc
|
||||
- Speakeasy CLI 1.531.4 (2.570.4) https://github.com/speakeasy-api/speakeasy
|
||||
### Generated
|
||||
- [java v0.15.0] .
|
||||
### Releases
|
||||
- [Maven Central v0.15.0] https://central.sonatype.com/artifact/dev.plexapi/plexapi/0.15.0 - .
|
||||
@@ -103,7 +103,7 @@ publishing {
|
||||
// https://github.com/gradle/gradle/issues/18619
|
||||
groupId = "dev.plexapi"
|
||||
artifactId = "plexapi"
|
||||
version = "0.14.1"
|
||||
version = "0.15.0"
|
||||
|
||||
from components.java
|
||||
|
||||
|
||||
712
codeSamples.yaml
712
codeSamples.yaml
File diff suppressed because it is too large
Load Diff
@@ -4,25 +4,25 @@
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
|
||||
| `allowSync` | *boolean* | :heavy_check_mark: | N/A | true |
|
||||
| `art` | *String* | :heavy_check_mark: | N/A | /:/resources/movie-fanart.jpg |
|
||||
| `composite` | *String* | :heavy_check_mark: | N/A | /library/sections/1/composite/1705615584 |
|
||||
| `filters` | *boolean* | :heavy_check_mark: | N/A | true |
|
||||
| `refreshing` | *boolean* | :heavy_check_mark: | N/A | false |
|
||||
| `thumb` | *String* | :heavy_check_mark: | N/A | /:/resources/movie.png |
|
||||
| `key` | *String* | :heavy_check_mark: | N/A | 1 |
|
||||
| `type` | *String* | :heavy_check_mark: | N/A | movie |
|
||||
| `title` | *String* | :heavy_check_mark: | N/A | Movies |
|
||||
| `agent` | *String* | :heavy_check_mark: | N/A | tv.plex.agents.movie |
|
||||
| `scanner` | *String* | :heavy_check_mark: | N/A | Plex Movie |
|
||||
| `language` | *String* | :heavy_check_mark: | N/A | en-US |
|
||||
| `uuid` | *String* | :heavy_check_mark: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `allowSync` | *boolean* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||
| `art` | *String* | :heavy_check_mark: | URL for the background artwork of the media container. | /:/resources/show-fanart.jpg |
|
||||
| `composite` | *String* | :heavy_check_mark: | The relative path to the composite media item. | /library/sections/1/composite/1743824484 |
|
||||
| `filters` | *boolean* | :heavy_check_mark: | UNKNOWN | true |
|
||||
| `refreshing` | *boolean* | :heavy_check_mark: | Indicates whether the library is currently being refreshed or updated | true |
|
||||
| `thumb` | *String* | :heavy_check_mark: | URL for the thumbnail image of the media container. | /:/resources/show.png |
|
||||
| `key` | *String* | :heavy_check_mark: | The library key representing the unique identifier | 1 |
|
||||
| `type` | [GetAllLibrariesType](../../models/operations/GetAllLibrariesType.md) | :heavy_check_mark: | N/A | movie |
|
||||
| `title` | *String* | :heavy_check_mark: | The title of the library | Movies |
|
||||
| `agent` | *String* | :heavy_check_mark: | The Plex agent used to match and retrieve media metadata. | tv.plex.agents.movie |
|
||||
| `scanner` | *String* | :heavy_check_mark: | UNKNOWN | Plex Movie |
|
||||
| `language` | *String* | :heavy_check_mark: | The Plex library language that has been set | en-US |
|
||||
| `uuid` | *String* | :heavy_check_mark: | The universally unique identifier for the library. | e69655a2-ef48-4aba-bb19-01e7d3cc34d6 |
|
||||
| `updatedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
||||
| `createdAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
||||
| `createdAt` | *Optional\<Long>* | :heavy_minus_sign: | N/A | 1556281940 |
|
||||
| `scannedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
||||
| `content` | *boolean* | :heavy_check_mark: | N/A | true |
|
||||
| `directory` | *boolean* | :heavy_check_mark: | N/A | true |
|
||||
| `contentChangedAt` | *long* | :heavy_check_mark: | Unix epoch datetime in seconds | 1556281940 |
|
||||
| `hidden` | *int* | :heavy_check_mark: | N/A | 0 |
|
||||
| `content` | *boolean* | :heavy_check_mark: | UNKNOWN | true |
|
||||
| `directory` | *boolean* | :heavy_check_mark: | UNKNOWN | true |
|
||||
| `contentChangedAt` | *long* | :heavy_check_mark: | Timestamp (in seconds) representing the last time the content was modified.<br/>NOTE: Some Plex server have some absurd values for this field, like 8457612157633039800 so it should be int64<br/> | 9173960 |
|
||||
| `hidden` | [Optional\<Hidden>](../../models/operations/Hidden.md) | :heavy_minus_sign: | N/A | 1 |
|
||||
| `location` | List\<[GetAllLibrariesLocation](../../models/operations/GetAllLibrariesLocation.md)> | :heavy_check_mark: | N/A | |
|
||||
@@ -4,6 +4,6 @@
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
|
||||
| `id` | *int* | :heavy_check_mark: | N/A | 1 |
|
||||
| `path` | *String* | :heavy_check_mark: | N/A | /movies |
|
||||
| --------------------------- | --------------------------- | --------------------------- | --------------------------- | --------------------------- |
|
||||
| `id` | *int* | :heavy_check_mark: | The ID of the location. | 1 |
|
||||
| `path` | *String* | :heavy_check_mark: | The path to the media item. | /Movies |
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
| Field | Type | Required | Description | Example |
|
||||
| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||
| `size` | *int* | :heavy_check_mark: | N/A | 5 |
|
||||
| `allowSync` | *boolean* | :heavy_check_mark: | N/A | false |
|
||||
| `title1` | *String* | :heavy_check_mark: | N/A | Plex Library |
|
||||
| `directory` | List\<[GetAllLibrariesDirectory](../../models/operations/GetAllLibrariesDirectory.md)> | :heavy_check_mark: | N/A | |
|
||||
| `size` | *int* | :heavy_check_mark: | Number of media items returned in this response. | 50 |
|
||||
| `allowSync` | *boolean* | :heavy_check_mark: | Indicates whether syncing is allowed. | false |
|
||||
| `title1` | *String* | :heavy_check_mark: | The primary title of the media container. | TV Series |
|
||||
| `directory` | List\<[GetAllLibrariesDirectory](../../models/operations/GetAllLibrariesDirectory.md)> | :heavy_minus_sign: | N/A | |
|
||||
@@ -6,5 +6,5 @@ The libraries available on the Server
|
||||
## Fields
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| `mediaContainer` | [GetAllLibrariesMediaContainer](../../models/operations/GetAllLibrariesMediaContainer.md) | :heavy_check_mark: | N/A |
|
||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| `mediaContainer` | [Optional\<GetAllLibrariesMediaContainer>](../../models/operations/GetAllLibrariesMediaContainer.md) | :heavy_minus_sign: | N/A |
|
||||
15
docs/models/operations/GetAllLibrariesType.md
Normal file
15
docs/models/operations/GetAllLibrariesType.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# GetAllLibrariesType
|
||||
|
||||
The library type
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------- | --------- |
|
||||
| `Movie` | movie |
|
||||
| `TvShow` | show |
|
||||
| `Season` | season |
|
||||
| `Episode` | episode |
|
||||
| `Artist` | artist |
|
||||
| `Album` | album |
|
||||
11
docs/models/operations/Hidden.md
Normal file
11
docs/models/operations/Hidden.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Hidden
|
||||
|
||||
UNKNOWN
|
||||
|
||||
|
||||
## Values
|
||||
|
||||
| Name | Value |
|
||||
| --------- | --------- |
|
||||
| `Disable` | 0 |
|
||||
| `Enable` | 1 |
|
||||
@@ -25,7 +25,6 @@ import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.errors.GetGlobalHubsBadRequest;
|
||||
import dev.plexapi.sdk.models.errors.GetGlobalHubsUnauthorized;
|
||||
import dev.plexapi.sdk.models.operations.GetGlobalHubsResponse;
|
||||
import dev.plexapi.sdk.models.operations.OnlyTransient;
|
||||
import java.lang.Exception;
|
||||
|
||||
public class Application {
|
||||
@@ -37,8 +36,6 @@ public class Application {
|
||||
.build();
|
||||
|
||||
GetGlobalHubsResponse res = sdk.hubs().getGlobalHubs()
|
||||
.count(1262.49)
|
||||
.onlyTransient(OnlyTransient.ONE)
|
||||
.call();
|
||||
|
||||
if (res.object().isPresent()) {
|
||||
@@ -136,7 +133,6 @@ import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.errors.GetLibraryHubsBadRequest;
|
||||
import dev.plexapi.sdk.models.errors.GetLibraryHubsUnauthorized;
|
||||
import dev.plexapi.sdk.models.operations.GetLibraryHubsResponse;
|
||||
import dev.plexapi.sdk.models.operations.QueryParamOnlyTransient;
|
||||
import java.lang.Exception;
|
||||
|
||||
public class Application {
|
||||
@@ -149,8 +145,6 @@ public class Application {
|
||||
|
||||
GetLibraryHubsResponse res = sdk.hubs().getLibraryHubs()
|
||||
.sectionId(6728.76)
|
||||
.count(6728.76)
|
||||
.onlyTransient(QueryParamOnlyTransient.ZERO)
|
||||
.call();
|
||||
|
||||
if (res.object().isPresent()) {
|
||||
|
||||
@@ -54,7 +54,6 @@ public class Application {
|
||||
|
||||
GetFileHashResponse res = sdk.library().getFileHash()
|
||||
.url("file://C:\Image.png&type=13")
|
||||
.type(4462.17)
|
||||
.call();
|
||||
|
||||
// handle response
|
||||
@@ -257,7 +256,6 @@ import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.errors.GetLibraryDetailsBadRequest;
|
||||
import dev.plexapi.sdk.models.errors.GetLibraryDetailsUnauthorized;
|
||||
import dev.plexapi.sdk.models.operations.GetLibraryDetailsResponse;
|
||||
import dev.plexapi.sdk.models.operations.IncludeDetails;
|
||||
import java.lang.Exception;
|
||||
|
||||
public class Application {
|
||||
@@ -269,7 +267,6 @@ public class Application {
|
||||
.build();
|
||||
|
||||
GetLibraryDetailsResponse res = sdk.library().getLibraryDetails()
|
||||
.includeDetails(IncludeDetails.ZERO)
|
||||
.sectionKey(9518)
|
||||
.call();
|
||||
|
||||
@@ -973,7 +970,6 @@ package hello.world;
|
||||
import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.operations.PostMediaArtsResponse;
|
||||
import java.lang.Exception;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class Application {
|
||||
|
||||
@@ -986,7 +982,6 @@ public class Application {
|
||||
PostMediaArtsResponse res = sdk.library().postMediaArts()
|
||||
.ratingKey(2268L)
|
||||
.url("https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b")
|
||||
.requestBody("0xee51EFC6De".getBytes(StandardCharsets.UTF_8))
|
||||
.call();
|
||||
|
||||
// handle response
|
||||
@@ -1072,7 +1067,6 @@ package hello.world;
|
||||
import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.operations.PostMediaPosterResponse;
|
||||
import java.lang.Exception;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class Application {
|
||||
|
||||
@@ -1085,7 +1079,6 @@ public class Application {
|
||||
PostMediaPosterResponse res = sdk.library().postMediaPoster()
|
||||
.ratingKey(2268L)
|
||||
.url("https://api.mediux.pro/assets/fcfdc487-dd07-4993-a0c1-0a3015362e5b")
|
||||
.requestBody("0x7C3d45ad4B".getBytes(StandardCharsets.UTF_8))
|
||||
.call();
|
||||
|
||||
// handle response
|
||||
|
||||
@@ -95,7 +95,7 @@ package hello.world;
|
||||
import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.errors.GetPlaylistsBadRequest;
|
||||
import dev.plexapi.sdk.models.errors.GetPlaylistsUnauthorized;
|
||||
import dev.plexapi.sdk.models.operations.*;
|
||||
import dev.plexapi.sdk.models.operations.GetPlaylistsResponse;
|
||||
import java.lang.Exception;
|
||||
|
||||
public class Application {
|
||||
@@ -107,8 +107,6 @@ public class Application {
|
||||
.build();
|
||||
|
||||
GetPlaylistsResponse res = sdk.playlists().getPlaylists()
|
||||
.playlistType(PlaylistType.AUDIO)
|
||||
.smart(QueryParamSmart.ZERO)
|
||||
.call();
|
||||
|
||||
if (res.object().isPresent()) {
|
||||
@@ -268,8 +266,6 @@ public class Application {
|
||||
|
||||
UpdatePlaylistResponse res = sdk.playlists().updatePlaylist()
|
||||
.playlistID(3915)
|
||||
.title("<value>")
|
||||
.summary("<value>")
|
||||
.call();
|
||||
|
||||
// handle response
|
||||
|
||||
@@ -225,7 +225,7 @@ package hello.world;
|
||||
import dev.plexapi.sdk.PlexAPI;
|
||||
import dev.plexapi.sdk.models.errors.GetServerResourcesBadRequest;
|
||||
import dev.plexapi.sdk.models.errors.GetServerResourcesUnauthorized;
|
||||
import dev.plexapi.sdk.models.operations.*;
|
||||
import dev.plexapi.sdk.models.operations.GetServerResourcesResponse;
|
||||
import java.lang.Exception;
|
||||
|
||||
public class Application {
|
||||
@@ -237,9 +237,6 @@ public class Application {
|
||||
.build();
|
||||
|
||||
GetServerResourcesResponse res = sdk.plex().getServerResources()
|
||||
.includeHttps(IncludeHttps.Enable)
|
||||
.includeRelay(IncludeRelay.Enable)
|
||||
.includeIPv6(IncludeIPv6.Enable)
|
||||
.clientID("3381b62b-9ab7-4e37-827b-203e9809eb58")
|
||||
.call();
|
||||
|
||||
|
||||
@@ -49,8 +49,6 @@ public class Application {
|
||||
|
||||
PerformSearchResponse res = sdk.search().performSearch()
|
||||
.query("dylan")
|
||||
.sectionId(9487.88)
|
||||
.limit(5)
|
||||
.call();
|
||||
|
||||
// handle response
|
||||
@@ -107,8 +105,6 @@ public class Application {
|
||||
|
||||
PerformVoiceSearchResponse res = sdk.search().performVoiceSearch()
|
||||
.query("dead+poop")
|
||||
.sectionId(4094.8)
|
||||
.limit(5)
|
||||
.call();
|
||||
|
||||
// handle response
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
groupId=dev.plexapi
|
||||
artifactId=plexapi
|
||||
version=0.14.1
|
||||
version=0.15.0
|
||||
@@ -508,4 +508,5 @@ public class PlexAPI {
|
||||
this.updater = new Updater(sdkConfiguration);
|
||||
this.users = new Users(sdkConfiguration);
|
||||
this.sdkConfiguration.initialize();
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,8 +42,8 @@ class SDKConfiguration {
|
||||
} };
|
||||
private static final String LANGUAGE = "java";
|
||||
public static final String OPENAPI_DOC_VERSION = "0.0.3";
|
||||
public static final String SDK_VERSION = "0.14.1";
|
||||
public static final String GEN_VERSION = "2.565.1";
|
||||
public static final String SDK_VERSION = "0.15.0";
|
||||
public static final String GEN_VERSION = "2.570.4";
|
||||
private static final String BASE_PACKAGE = "dev.plexapi.sdk";
|
||||
public static final String USER_AGENT =
|
||||
String.format("speakeasy-sdk/%s %s %s %s %s",
|
||||
|
||||
@@ -5,54 +5,95 @@ package dev.plexapi.sdk.models.operations;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import dev.plexapi.sdk.utils.LazySingletonValue;
|
||||
import dev.plexapi.sdk.utils.Utils;
|
||||
import java.lang.Boolean;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Long;
|
||||
import java.lang.Override;
|
||||
import java.lang.String;
|
||||
import java.lang.SuppressWarnings;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GetAllLibrariesDirectory {
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
@JsonProperty("allowSync")
|
||||
private boolean allowSync;
|
||||
|
||||
/**
|
||||
* URL for the background artwork of the media container.
|
||||
*/
|
||||
@JsonProperty("art")
|
||||
private String art;
|
||||
|
||||
/**
|
||||
* The relative path to the composite media item.
|
||||
*/
|
||||
@JsonProperty("composite")
|
||||
private String composite;
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonProperty("filters")
|
||||
private boolean filters;
|
||||
|
||||
/**
|
||||
* Indicates whether the library is currently being refreshed or updated
|
||||
*/
|
||||
@JsonProperty("refreshing")
|
||||
private boolean refreshing;
|
||||
|
||||
/**
|
||||
* URL for the thumbnail image of the media container.
|
||||
*/
|
||||
@JsonProperty("thumb")
|
||||
private String thumb;
|
||||
|
||||
/**
|
||||
* The library key representing the unique identifier
|
||||
*/
|
||||
@JsonProperty("key")
|
||||
private String key;
|
||||
|
||||
@JsonProperty("type")
|
||||
private String type;
|
||||
private GetAllLibrariesType type;
|
||||
|
||||
/**
|
||||
* The title of the library
|
||||
*/
|
||||
@JsonProperty("title")
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* The Plex agent used to match and retrieve media metadata.
|
||||
*/
|
||||
@JsonProperty("agent")
|
||||
private String agent;
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonProperty("scanner")
|
||||
private String scanner;
|
||||
|
||||
/**
|
||||
* The Plex library language that has been set
|
||||
*/
|
||||
@JsonProperty("language")
|
||||
private String language;
|
||||
|
||||
/**
|
||||
* The universally unique identifier for the library.
|
||||
*/
|
||||
@JsonProperty("uuid")
|
||||
private String uuid;
|
||||
|
||||
@@ -62,11 +103,9 @@ public class GetAllLibrariesDirectory {
|
||||
@JsonProperty("updatedAt")
|
||||
private long updatedAt;
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
*/
|
||||
@JsonInclude(Include.NON_ABSENT)
|
||||
@JsonProperty("createdAt")
|
||||
private long createdAt;
|
||||
private Optional<Long> createdAt;
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
@@ -74,20 +113,28 @@ public class GetAllLibrariesDirectory {
|
||||
@JsonProperty("scannedAt")
|
||||
private long scannedAt;
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonProperty("content")
|
||||
private boolean content;
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonProperty("directory")
|
||||
private boolean directory;
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
* Timestamp (in seconds) representing the last time the content was modified.
|
||||
* NOTE: Some Plex server have some absurd values for this field, like 8457612157633039800 so it should be int64
|
||||
*/
|
||||
@JsonProperty("contentChangedAt")
|
||||
private long contentChangedAt;
|
||||
|
||||
@JsonInclude(Include.NON_ABSENT)
|
||||
@JsonProperty("hidden")
|
||||
private int hidden;
|
||||
private Optional<? extends Hidden> hidden;
|
||||
|
||||
@JsonProperty("Location")
|
||||
private List<GetAllLibrariesLocation> location;
|
||||
@@ -101,19 +148,19 @@ public class GetAllLibrariesDirectory {
|
||||
@JsonProperty("refreshing") boolean refreshing,
|
||||
@JsonProperty("thumb") String thumb,
|
||||
@JsonProperty("key") String key,
|
||||
@JsonProperty("type") String type,
|
||||
@JsonProperty("type") GetAllLibrariesType type,
|
||||
@JsonProperty("title") String title,
|
||||
@JsonProperty("agent") String agent,
|
||||
@JsonProperty("scanner") String scanner,
|
||||
@JsonProperty("language") String language,
|
||||
@JsonProperty("uuid") String uuid,
|
||||
@JsonProperty("updatedAt") long updatedAt,
|
||||
@JsonProperty("createdAt") long createdAt,
|
||||
@JsonProperty("createdAt") Optional<Long> createdAt,
|
||||
@JsonProperty("scannedAt") long scannedAt,
|
||||
@JsonProperty("content") boolean content,
|
||||
@JsonProperty("directory") boolean directory,
|
||||
@JsonProperty("contentChangedAt") long contentChangedAt,
|
||||
@JsonProperty("hidden") int hidden,
|
||||
@JsonProperty("hidden") Optional<? extends Hidden> hidden,
|
||||
@JsonProperty("Location") List<GetAllLibrariesLocation> location) {
|
||||
Utils.checkNotNull(allowSync, "allowSync");
|
||||
Utils.checkNotNull(art, "art");
|
||||
@@ -159,66 +206,125 @@ public class GetAllLibrariesDirectory {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public GetAllLibrariesDirectory(
|
||||
boolean allowSync,
|
||||
String art,
|
||||
String composite,
|
||||
boolean filters,
|
||||
boolean refreshing,
|
||||
String thumb,
|
||||
String key,
|
||||
GetAllLibrariesType type,
|
||||
String title,
|
||||
String agent,
|
||||
String scanner,
|
||||
String language,
|
||||
String uuid,
|
||||
long updatedAt,
|
||||
long scannedAt,
|
||||
boolean content,
|
||||
boolean directory,
|
||||
long contentChangedAt,
|
||||
List<GetAllLibrariesLocation> location) {
|
||||
this(allowSync, art, composite, filters, refreshing, thumb, key, type, title, agent, scanner, language, uuid, updatedAt, Optional.empty(), scannedAt, content, directory, contentChangedAt, Optional.empty(), location);
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public boolean allowSync() {
|
||||
return allowSync;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the background artwork of the media container.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String art() {
|
||||
return art;
|
||||
}
|
||||
|
||||
/**
|
||||
* The relative path to the composite media item.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String composite() {
|
||||
return composite;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonIgnore
|
||||
public boolean filters() {
|
||||
return filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the library is currently being refreshed or updated
|
||||
*/
|
||||
@JsonIgnore
|
||||
public boolean refreshing() {
|
||||
return refreshing;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the thumbnail image of the media container.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String thumb() {
|
||||
return thumb;
|
||||
}
|
||||
|
||||
/**
|
||||
* The library key representing the unique identifier
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String key() {
|
||||
return key;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public String type() {
|
||||
public GetAllLibrariesType type() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* The title of the library
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String title() {
|
||||
return title;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Plex agent used to match and retrieve media metadata.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String agent() {
|
||||
return agent;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String scanner() {
|
||||
return scanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Plex library language that has been set
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String language() {
|
||||
return language;
|
||||
}
|
||||
|
||||
/**
|
||||
* The universally unique identifier for the library.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String uuid() {
|
||||
return uuid;
|
||||
@@ -232,11 +338,8 @@ public class GetAllLibrariesDirectory {
|
||||
return updatedAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
*/
|
||||
@JsonIgnore
|
||||
public long createdAt() {
|
||||
public Optional<Long> createdAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
@@ -248,27 +351,35 @@ public class GetAllLibrariesDirectory {
|
||||
return scannedAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonIgnore
|
||||
public boolean content() {
|
||||
return content;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
@JsonIgnore
|
||||
public boolean directory() {
|
||||
return directory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
* Timestamp (in seconds) representing the last time the content was modified.
|
||||
* NOTE: Some Plex server have some absurd values for this field, like 8457612157633039800 so it should be int64
|
||||
*/
|
||||
@JsonIgnore
|
||||
public long contentChangedAt() {
|
||||
return contentChangedAt;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@JsonIgnore
|
||||
public int hidden() {
|
||||
return hidden;
|
||||
public Optional<Hidden> hidden() {
|
||||
return (Optional<Hidden>) hidden;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
@@ -280,78 +391,114 @@ public class GetAllLibrariesDirectory {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
public GetAllLibrariesDirectory withAllowSync(boolean allowSync) {
|
||||
Utils.checkNotNull(allowSync, "allowSync");
|
||||
this.allowSync = allowSync;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the background artwork of the media container.
|
||||
*/
|
||||
public GetAllLibrariesDirectory withArt(String art) {
|
||||
Utils.checkNotNull(art, "art");
|
||||
this.art = art;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The relative path to the composite media item.
|
||||
*/
|
||||
public GetAllLibrariesDirectory withComposite(String composite) {
|
||||
Utils.checkNotNull(composite, "composite");
|
||||
this.composite = composite;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public GetAllLibrariesDirectory withFilters(boolean filters) {
|
||||
Utils.checkNotNull(filters, "filters");
|
||||
this.filters = filters;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the library is currently being refreshed or updated
|
||||
*/
|
||||
public GetAllLibrariesDirectory withRefreshing(boolean refreshing) {
|
||||
Utils.checkNotNull(refreshing, "refreshing");
|
||||
this.refreshing = refreshing;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the thumbnail image of the media container.
|
||||
*/
|
||||
public GetAllLibrariesDirectory withThumb(String thumb) {
|
||||
Utils.checkNotNull(thumb, "thumb");
|
||||
this.thumb = thumb;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The library key representing the unique identifier
|
||||
*/
|
||||
public GetAllLibrariesDirectory withKey(String key) {
|
||||
Utils.checkNotNull(key, "key");
|
||||
this.key = key;
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetAllLibrariesDirectory withType(String type) {
|
||||
public GetAllLibrariesDirectory withType(GetAllLibrariesType type) {
|
||||
Utils.checkNotNull(type, "type");
|
||||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The title of the library
|
||||
*/
|
||||
public GetAllLibrariesDirectory withTitle(String title) {
|
||||
Utils.checkNotNull(title, "title");
|
||||
this.title = title;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Plex agent used to match and retrieve media metadata.
|
||||
*/
|
||||
public GetAllLibrariesDirectory withAgent(String agent) {
|
||||
Utils.checkNotNull(agent, "agent");
|
||||
this.agent = agent;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public GetAllLibrariesDirectory withScanner(String scanner) {
|
||||
Utils.checkNotNull(scanner, "scanner");
|
||||
this.scanner = scanner;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Plex library language that has been set
|
||||
*/
|
||||
public GetAllLibrariesDirectory withLanguage(String language) {
|
||||
Utils.checkNotNull(language, "language");
|
||||
this.language = language;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The universally unique identifier for the library.
|
||||
*/
|
||||
public GetAllLibrariesDirectory withUuid(String uuid) {
|
||||
Utils.checkNotNull(uuid, "uuid");
|
||||
this.uuid = uuid;
|
||||
@@ -367,10 +514,13 @@ public class GetAllLibrariesDirectory {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
*/
|
||||
public GetAllLibrariesDirectory withCreatedAt(long createdAt) {
|
||||
Utils.checkNotNull(createdAt, "createdAt");
|
||||
this.createdAt = Optional.ofNullable(createdAt);
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetAllLibrariesDirectory withCreatedAt(Optional<Long> createdAt) {
|
||||
Utils.checkNotNull(createdAt, "createdAt");
|
||||
this.createdAt = createdAt;
|
||||
return this;
|
||||
@@ -385,12 +535,18 @@ public class GetAllLibrariesDirectory {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public GetAllLibrariesDirectory withContent(boolean content) {
|
||||
Utils.checkNotNull(content, "content");
|
||||
this.content = content;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public GetAllLibrariesDirectory withDirectory(boolean directory) {
|
||||
Utils.checkNotNull(directory, "directory");
|
||||
this.directory = directory;
|
||||
@@ -398,7 +554,8 @@ public class GetAllLibrariesDirectory {
|
||||
}
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
* Timestamp (in seconds) representing the last time the content was modified.
|
||||
* NOTE: Some Plex server have some absurd values for this field, like 8457612157633039800 so it should be int64
|
||||
*/
|
||||
public GetAllLibrariesDirectory withContentChangedAt(long contentChangedAt) {
|
||||
Utils.checkNotNull(contentChangedAt, "contentChangedAt");
|
||||
@@ -406,7 +563,13 @@ public class GetAllLibrariesDirectory {
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetAllLibrariesDirectory withHidden(int hidden) {
|
||||
public GetAllLibrariesDirectory withHidden(Hidden hidden) {
|
||||
Utils.checkNotNull(hidden, "hidden");
|
||||
this.hidden = Optional.ofNullable(hidden);
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetAllLibrariesDirectory withHidden(Optional<? extends Hidden> hidden) {
|
||||
Utils.checkNotNull(hidden, "hidden");
|
||||
this.hidden = hidden;
|
||||
return this;
|
||||
@@ -520,7 +683,7 @@ public class GetAllLibrariesDirectory {
|
||||
|
||||
private String key;
|
||||
|
||||
private String type;
|
||||
private GetAllLibrariesType type;
|
||||
|
||||
private String title;
|
||||
|
||||
@@ -534,7 +697,7 @@ public class GetAllLibrariesDirectory {
|
||||
|
||||
private Long updatedAt;
|
||||
|
||||
private Long createdAt;
|
||||
private Optional<Long> createdAt = Optional.empty();
|
||||
|
||||
private Long scannedAt;
|
||||
|
||||
@@ -544,7 +707,7 @@ public class GetAllLibrariesDirectory {
|
||||
|
||||
private Long contentChangedAt;
|
||||
|
||||
private Integer hidden;
|
||||
private Optional<? extends Hidden> hidden;
|
||||
|
||||
private List<GetAllLibrariesLocation> location;
|
||||
|
||||
@@ -552,78 +715,114 @@ public class GetAllLibrariesDirectory {
|
||||
// force use of static builder() method
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
public Builder allowSync(boolean allowSync) {
|
||||
Utils.checkNotNull(allowSync, "allowSync");
|
||||
this.allowSync = allowSync;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the background artwork of the media container.
|
||||
*/
|
||||
public Builder art(String art) {
|
||||
Utils.checkNotNull(art, "art");
|
||||
this.art = art;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The relative path to the composite media item.
|
||||
*/
|
||||
public Builder composite(String composite) {
|
||||
Utils.checkNotNull(composite, "composite");
|
||||
this.composite = composite;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public Builder filters(boolean filters) {
|
||||
Utils.checkNotNull(filters, "filters");
|
||||
this.filters = filters;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the library is currently being refreshed or updated
|
||||
*/
|
||||
public Builder refreshing(boolean refreshing) {
|
||||
Utils.checkNotNull(refreshing, "refreshing");
|
||||
this.refreshing = refreshing;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for the thumbnail image of the media container.
|
||||
*/
|
||||
public Builder thumb(String thumb) {
|
||||
Utils.checkNotNull(thumb, "thumb");
|
||||
this.thumb = thumb;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The library key representing the unique identifier
|
||||
*/
|
||||
public Builder key(String key) {
|
||||
Utils.checkNotNull(key, "key");
|
||||
this.key = key;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder type(String type) {
|
||||
public Builder type(GetAllLibrariesType type) {
|
||||
Utils.checkNotNull(type, "type");
|
||||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The title of the library
|
||||
*/
|
||||
public Builder title(String title) {
|
||||
Utils.checkNotNull(title, "title");
|
||||
this.title = title;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Plex agent used to match and retrieve media metadata.
|
||||
*/
|
||||
public Builder agent(String agent) {
|
||||
Utils.checkNotNull(agent, "agent");
|
||||
this.agent = agent;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public Builder scanner(String scanner) {
|
||||
Utils.checkNotNull(scanner, "scanner");
|
||||
this.scanner = scanner;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Plex library language that has been set
|
||||
*/
|
||||
public Builder language(String language) {
|
||||
Utils.checkNotNull(language, "language");
|
||||
this.language = language;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The universally unique identifier for the library.
|
||||
*/
|
||||
public Builder uuid(String uuid) {
|
||||
Utils.checkNotNull(uuid, "uuid");
|
||||
this.uuid = uuid;
|
||||
@@ -639,10 +838,13 @@ public class GetAllLibrariesDirectory {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
*/
|
||||
public Builder createdAt(long createdAt) {
|
||||
Utils.checkNotNull(createdAt, "createdAt");
|
||||
this.createdAt = Optional.ofNullable(createdAt);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder createdAt(Optional<Long> createdAt) {
|
||||
Utils.checkNotNull(createdAt, "createdAt");
|
||||
this.createdAt = createdAt;
|
||||
return this;
|
||||
@@ -657,12 +859,18 @@ public class GetAllLibrariesDirectory {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public Builder content(boolean content) {
|
||||
Utils.checkNotNull(content, "content");
|
||||
this.content = content;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* UNKNOWN
|
||||
*/
|
||||
public Builder directory(boolean directory) {
|
||||
Utils.checkNotNull(directory, "directory");
|
||||
this.directory = directory;
|
||||
@@ -670,7 +878,8 @@ public class GetAllLibrariesDirectory {
|
||||
}
|
||||
|
||||
/**
|
||||
* Unix epoch datetime in seconds
|
||||
* Timestamp (in seconds) representing the last time the content was modified.
|
||||
* NOTE: Some Plex server have some absurd values for this field, like 8457612157633039800 so it should be int64
|
||||
*/
|
||||
public Builder contentChangedAt(long contentChangedAt) {
|
||||
Utils.checkNotNull(contentChangedAt, "contentChangedAt");
|
||||
@@ -678,7 +887,13 @@ public class GetAllLibrariesDirectory {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder hidden(int hidden) {
|
||||
public Builder hidden(Hidden hidden) {
|
||||
Utils.checkNotNull(hidden, "hidden");
|
||||
this.hidden = Optional.ofNullable(hidden);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder hidden(Optional<? extends Hidden> hidden) {
|
||||
Utils.checkNotNull(hidden, "hidden");
|
||||
this.hidden = hidden;
|
||||
return this;
|
||||
@@ -691,6 +906,9 @@ public class GetAllLibrariesDirectory {
|
||||
}
|
||||
|
||||
public GetAllLibrariesDirectory build() {
|
||||
if (hidden == null) {
|
||||
hidden = _SINGLETON_VALUE_Hidden.value();
|
||||
}
|
||||
return new GetAllLibrariesDirectory(
|
||||
allowSync,
|
||||
art,
|
||||
@@ -714,5 +932,11 @@ public class GetAllLibrariesDirectory {
|
||||
hidden,
|
||||
location);
|
||||
}
|
||||
|
||||
private static final LazySingletonValue<Optional<? extends Hidden>> _SINGLETON_VALUE_Hidden =
|
||||
new LazySingletonValue<>(
|
||||
"hidden",
|
||||
"0",
|
||||
new TypeReference<Optional<? extends Hidden>>() {});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,15 @@ import java.util.Objects;
|
||||
|
||||
public class GetAllLibrariesLocation {
|
||||
|
||||
/**
|
||||
* The ID of the location.
|
||||
*/
|
||||
@JsonProperty("id")
|
||||
private int id;
|
||||
|
||||
/**
|
||||
* The path to the media item.
|
||||
*/
|
||||
@JsonProperty("path")
|
||||
private String path;
|
||||
|
||||
@@ -30,11 +36,17 @@ public class GetAllLibrariesLocation {
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
/**
|
||||
* The ID of the location.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public int id() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* The path to the media item.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String path() {
|
||||
return path;
|
||||
@@ -44,12 +56,18 @@ public class GetAllLibrariesLocation {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
/**
|
||||
* The ID of the location.
|
||||
*/
|
||||
public GetAllLibrariesLocation withId(int id) {
|
||||
Utils.checkNotNull(id, "id");
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The path to the media item.
|
||||
*/
|
||||
public GetAllLibrariesLocation withPath(String path) {
|
||||
Utils.checkNotNull(path, "path");
|
||||
this.path = path;
|
||||
@@ -95,12 +113,18 @@ public class GetAllLibrariesLocation {
|
||||
// force use of static builder() method
|
||||
}
|
||||
|
||||
/**
|
||||
* The ID of the location.
|
||||
*/
|
||||
public Builder id(int id) {
|
||||
Utils.checkNotNull(id, "id");
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The path to the media item.
|
||||
*/
|
||||
public Builder path(String path) {
|
||||
Utils.checkNotNull(path, "path");
|
||||
this.path = path;
|
||||
|
||||
@@ -5,35 +5,49 @@ package dev.plexapi.sdk.models.operations;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import dev.plexapi.sdk.utils.Utils;
|
||||
import java.lang.Boolean;
|
||||
import java.lang.Integer;
|
||||
import java.lang.Override;
|
||||
import java.lang.String;
|
||||
import java.lang.SuppressWarnings;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
public class GetAllLibrariesMediaContainer {
|
||||
|
||||
/**
|
||||
* Number of media items returned in this response.
|
||||
*/
|
||||
@JsonProperty("size")
|
||||
private int size;
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
@JsonProperty("allowSync")
|
||||
private boolean allowSync;
|
||||
|
||||
/**
|
||||
* The primary title of the media container.
|
||||
*/
|
||||
@JsonProperty("title1")
|
||||
private String title1;
|
||||
|
||||
@JsonInclude(Include.NON_ABSENT)
|
||||
@JsonProperty("Directory")
|
||||
private List<GetAllLibrariesDirectory> directory;
|
||||
private Optional<? extends List<GetAllLibrariesDirectory>> directory;
|
||||
|
||||
@JsonCreator
|
||||
public GetAllLibrariesMediaContainer(
|
||||
@JsonProperty("size") int size,
|
||||
@JsonProperty("allowSync") boolean allowSync,
|
||||
@JsonProperty("title1") String title1,
|
||||
@JsonProperty("Directory") List<GetAllLibrariesDirectory> directory) {
|
||||
@JsonProperty("Directory") Optional<? extends List<GetAllLibrariesDirectory>> directory) {
|
||||
Utils.checkNotNull(size, "size");
|
||||
Utils.checkNotNull(allowSync, "allowSync");
|
||||
Utils.checkNotNull(title1, "title1");
|
||||
@@ -44,42 +58,68 @@ public class GetAllLibrariesMediaContainer {
|
||||
this.directory = directory;
|
||||
}
|
||||
|
||||
public GetAllLibrariesMediaContainer(
|
||||
int size,
|
||||
boolean allowSync,
|
||||
String title1) {
|
||||
this(size, allowSync, title1, Optional.empty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of media items returned in this response.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public int size() {
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public boolean allowSync() {
|
||||
return allowSync;
|
||||
}
|
||||
|
||||
/**
|
||||
* The primary title of the media container.
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String title1() {
|
||||
return title1;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@JsonIgnore
|
||||
public List<GetAllLibrariesDirectory> directory() {
|
||||
return directory;
|
||||
public Optional<List<GetAllLibrariesDirectory>> directory() {
|
||||
return (Optional<List<GetAllLibrariesDirectory>>) directory;
|
||||
}
|
||||
|
||||
public final static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of media items returned in this response.
|
||||
*/
|
||||
public GetAllLibrariesMediaContainer withSize(int size) {
|
||||
Utils.checkNotNull(size, "size");
|
||||
this.size = size;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
public GetAllLibrariesMediaContainer withAllowSync(boolean allowSync) {
|
||||
Utils.checkNotNull(allowSync, "allowSync");
|
||||
this.allowSync = allowSync;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The primary title of the media container.
|
||||
*/
|
||||
public GetAllLibrariesMediaContainer withTitle1(String title1) {
|
||||
Utils.checkNotNull(title1, "title1");
|
||||
this.title1 = title1;
|
||||
@@ -87,6 +127,12 @@ public class GetAllLibrariesMediaContainer {
|
||||
}
|
||||
|
||||
public GetAllLibrariesMediaContainer withDirectory(List<GetAllLibrariesDirectory> directory) {
|
||||
Utils.checkNotNull(directory, "directory");
|
||||
this.directory = Optional.ofNullable(directory);
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetAllLibrariesMediaContainer withDirectory(Optional<? extends List<GetAllLibrariesDirectory>> directory) {
|
||||
Utils.checkNotNull(directory, "directory");
|
||||
this.directory = directory;
|
||||
return this;
|
||||
@@ -135,24 +181,33 @@ public class GetAllLibrariesMediaContainer {
|
||||
|
||||
private String title1;
|
||||
|
||||
private List<GetAllLibrariesDirectory> directory;
|
||||
private Optional<? extends List<GetAllLibrariesDirectory>> directory = Optional.empty();
|
||||
|
||||
private Builder() {
|
||||
// force use of static builder() method
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of media items returned in this response.
|
||||
*/
|
||||
public Builder size(int size) {
|
||||
Utils.checkNotNull(size, "size");
|
||||
this.size = size;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether syncing is allowed.
|
||||
*/
|
||||
public Builder allowSync(boolean allowSync) {
|
||||
Utils.checkNotNull(allowSync, "allowSync");
|
||||
this.allowSync = allowSync;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The primary title of the media container.
|
||||
*/
|
||||
public Builder title1(String title1) {
|
||||
Utils.checkNotNull(title1, "title1");
|
||||
this.title1 = title1;
|
||||
@@ -160,6 +215,12 @@ public class GetAllLibrariesMediaContainer {
|
||||
}
|
||||
|
||||
public Builder directory(List<GetAllLibrariesDirectory> directory) {
|
||||
Utils.checkNotNull(directory, "directory");
|
||||
this.directory = Optional.ofNullable(directory);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder directory(Optional<? extends List<GetAllLibrariesDirectory>> directory) {
|
||||
Utils.checkNotNull(directory, "directory");
|
||||
this.directory = directory;
|
||||
return this;
|
||||
|
||||
@@ -5,11 +5,15 @@ package dev.plexapi.sdk.models.operations;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import dev.plexapi.sdk.utils.Utils;
|
||||
import java.lang.Override;
|
||||
import java.lang.String;
|
||||
import java.lang.SuppressWarnings;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* GetAllLibrariesResponseBody
|
||||
@@ -18,19 +22,25 @@ import java.util.Objects;
|
||||
*/
|
||||
public class GetAllLibrariesResponseBody {
|
||||
|
||||
@JsonInclude(Include.NON_ABSENT)
|
||||
@JsonProperty("MediaContainer")
|
||||
private GetAllLibrariesMediaContainer mediaContainer;
|
||||
private Optional<? extends GetAllLibrariesMediaContainer> mediaContainer;
|
||||
|
||||
@JsonCreator
|
||||
public GetAllLibrariesResponseBody(
|
||||
@JsonProperty("MediaContainer") GetAllLibrariesMediaContainer mediaContainer) {
|
||||
@JsonProperty("MediaContainer") Optional<? extends GetAllLibrariesMediaContainer> mediaContainer) {
|
||||
Utils.checkNotNull(mediaContainer, "mediaContainer");
|
||||
this.mediaContainer = mediaContainer;
|
||||
}
|
||||
|
||||
public GetAllLibrariesResponseBody() {
|
||||
this(Optional.empty());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@JsonIgnore
|
||||
public GetAllLibrariesMediaContainer mediaContainer() {
|
||||
return mediaContainer;
|
||||
public Optional<GetAllLibrariesMediaContainer> mediaContainer() {
|
||||
return (Optional<GetAllLibrariesMediaContainer>) mediaContainer;
|
||||
}
|
||||
|
||||
public final static Builder builder() {
|
||||
@@ -38,6 +48,12 @@ public class GetAllLibrariesResponseBody {
|
||||
}
|
||||
|
||||
public GetAllLibrariesResponseBody withMediaContainer(GetAllLibrariesMediaContainer mediaContainer) {
|
||||
Utils.checkNotNull(mediaContainer, "mediaContainer");
|
||||
this.mediaContainer = Optional.ofNullable(mediaContainer);
|
||||
return this;
|
||||
}
|
||||
|
||||
public GetAllLibrariesResponseBody withMediaContainer(Optional<? extends GetAllLibrariesMediaContainer> mediaContainer) {
|
||||
Utils.checkNotNull(mediaContainer, "mediaContainer");
|
||||
this.mediaContainer = mediaContainer;
|
||||
return this;
|
||||
@@ -71,13 +87,19 @@ public class GetAllLibrariesResponseBody {
|
||||
|
||||
public final static class Builder {
|
||||
|
||||
private GetAllLibrariesMediaContainer mediaContainer;
|
||||
private Optional<? extends GetAllLibrariesMediaContainer> mediaContainer = Optional.empty();
|
||||
|
||||
private Builder() {
|
||||
// force use of static builder() method
|
||||
}
|
||||
|
||||
public Builder mediaContainer(GetAllLibrariesMediaContainer mediaContainer) {
|
||||
Utils.checkNotNull(mediaContainer, "mediaContainer");
|
||||
this.mediaContainer = Optional.ofNullable(mediaContainer);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder mediaContainer(Optional<? extends GetAllLibrariesMediaContainer> mediaContainer) {
|
||||
Utils.checkNotNull(mediaContainer, "mediaContainer");
|
||||
this.mediaContainer = mediaContainer;
|
||||
return this;
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
||||
*/
|
||||
package dev.plexapi.sdk.models.operations;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
import java.lang.String;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* GetAllLibrariesType
|
||||
*
|
||||
* <p>The library type
|
||||
*/
|
||||
public enum GetAllLibrariesType {
|
||||
Movie("movie"),
|
||||
TvShow("show"),
|
||||
Season("season"),
|
||||
Episode("episode"),
|
||||
Artist("artist"),
|
||||
Album("album");
|
||||
|
||||
@JsonValue
|
||||
private final String value;
|
||||
|
||||
private GetAllLibrariesType(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static Optional<GetAllLibrariesType> fromValue(String value) {
|
||||
for (GetAllLibrariesType o: GetAllLibrariesType.values()) {
|
||||
if (Objects.deepEquals(o.value, value)) {
|
||||
return Optional.of(o);
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
39
src/main/java/dev/plexapi/sdk/models/operations/Hidden.java
Normal file
39
src/main/java/dev/plexapi/sdk/models/operations/Hidden.java
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
||||
*/
|
||||
package dev.plexapi.sdk.models.operations;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Hidden
|
||||
*
|
||||
* <p>UNKNOWN
|
||||
*/
|
||||
public enum Hidden {
|
||||
Disable(0),
|
||||
Enable(1);
|
||||
|
||||
@JsonValue
|
||||
private final int value;
|
||||
|
||||
private Hidden(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static Optional<Hidden> fromValue(int value) {
|
||||
for (Hidden o: Hidden.values()) {
|
||||
if (Objects.deepEquals(o.value, value)) {
|
||||
return Optional.of(o);
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,8 +158,8 @@ public final class SessionManager<T extends SessionManager.HasSessionKey> {
|
||||
if (!t.tokenType.orElse("").equals("Bearer")) {
|
||||
throw new AuthException("Expected 'Bearer' token type but was '" + t.tokenType.orElse("") + "'");
|
||||
}
|
||||
final Optional<OffsetDateTime> expiresAt = t.expiresInMs
|
||||
.map(x -> OffsetDateTime.now().plus(x, ChronoUnit.MILLIS));
|
||||
final Optional<OffsetDateTime> expiresAt = t.expiresInSeconds
|
||||
.map(x -> OffsetDateTime.now().plus(x, ChronoUnit.SECONDS));
|
||||
return new Session<T>(credentials, t.accessToken, scopes, expiresAt);
|
||||
} catch (IOException | IllegalArgumentException | IllegalAccessException | InterruptedException | URISyntaxException e) {
|
||||
throw new RuntimeException(e);
|
||||
@@ -175,7 +175,7 @@ public final class SessionManager<T extends SessionManager.HasSessionKey> {
|
||||
Optional<String> tokenType;
|
||||
|
||||
@JsonProperty("expires_in")
|
||||
Optional<Long> expiresInMs;
|
||||
Optional<Long> expiresInSeconds;;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -4,18 +4,139 @@
|
||||
package dev.plexapi.sdk.utils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpHeaders;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpRequest.BodyPublishers;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collection;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SpeakeasyHTTPClient implements HTTPClient {
|
||||
|
||||
private static boolean debugEnabled = false;
|
||||
|
||||
// uppercase
|
||||
private static Set<String> redactedHeaders = Set.of("AUTHORIZATION", "X-API-KEY");
|
||||
|
||||
private static Consumer<? super String> logger = System.out::println;
|
||||
|
||||
/**
|
||||
* Experimental, may be changed anytime. Sets debug logging on or off for
|
||||
* requests and responses including bodies for JSON content. WARNING: this
|
||||
* setting may expose sensitive information in logs (like <i>Authorization</i>
|
||||
* headers), and should only be enabled temporarily for local debugging
|
||||
* purposes. By default, <i>Authorization</i> headers are redacted in the logs
|
||||
* ( printed with a value of {@code [*******]}). Header suppression is controlled
|
||||
* with the {@link #setRedactedHeaders(Collection)} method.
|
||||
*
|
||||
* @param enabled true to enable debug logging, false to disable it
|
||||
*/
|
||||
public static void setDebugLogging(boolean enabled) {
|
||||
debugEnabled = enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Experimental, may be changed anytime. When debug logging is enabled this
|
||||
* method controls the suppression of header values in the logs. By default,
|
||||
* <i>Authorization</i> headers are redacted in the logs (printed with a value
|
||||
* of {@code [*******]}). Header suppression is controlled with the
|
||||
* {@link #setRedactedHeaders(Collection)} method.
|
||||
*
|
||||
* @param headerNames the names (case-insensitive) of the headers whose values
|
||||
* will be redacted in the logs
|
||||
*/
|
||||
public static void setRedactedHeaders(Collection<String> headerNames) {
|
||||
redactedHeaders = headerNames.stream() //
|
||||
.map(x -> x.toUpperCase(Locale.ENGLISH)) //
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public static void setLogger(Consumer<? super String> logger) {
|
||||
SpeakeasyHTTPClient.logger = logger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResponse<InputStream> send(HttpRequest request)
|
||||
throws IOException, InterruptedException, URISyntaxException {
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
return client.send(request, HttpResponse.BodyHandlers.ofInputStream());
|
||||
if (debugEnabled) {
|
||||
request = logRequest(request);
|
||||
}
|
||||
var response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
|
||||
if (debugEnabled) {
|
||||
response = logResponse(response);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
private HttpRequest logRequest(HttpRequest request) {
|
||||
log("Sending request: " + request);
|
||||
log("Request headers: " + redactHeaders(request.headers()));
|
||||
// only log the body if it is present and the content type is JSON
|
||||
if (request.bodyPublisher().isPresent() && request.headers() //
|
||||
.firstValue("Content-Type") //
|
||||
.filter(x -> x.equals("application/json") || x.equals("text/plain")).isPresent()) {
|
||||
// we read the body and ensure that the BodyPublisher is rebuilt to pass to the
|
||||
// http client
|
||||
byte[] body = Helpers.bodyBytes(request);
|
||||
request = Helpers //
|
||||
.copy(request) //
|
||||
.method(request.method(), BodyPublishers.ofByteArray(body)) //
|
||||
.build();
|
||||
// note that in the case of text/plain a different encoding from UTF-8
|
||||
// may be in use but we just log the bytes as UTF-8. Unexpected encodings
|
||||
// do not throw (substitution happens).
|
||||
log("Request body:\n" + new String(body, StandardCharsets.UTF_8));
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
private static HttpResponse<InputStream> logResponse(HttpResponse<InputStream> response) throws IOException {
|
||||
// make the response re-readable by loading the response body into a byte array
|
||||
// and allowing the InputStream to be read many times
|
||||
response = Utils.cache(response);
|
||||
log("Received response: " + response);
|
||||
log("Response headers: " + redactHeaders(response.headers()));
|
||||
// only log the response body if it is present and the content type is JSON or plain text
|
||||
if (response.headers() //
|
||||
.firstValue("Content-Type") //
|
||||
.filter(x -> x.equals("application/json") || x.equals("text/plain")) //
|
||||
.isPresent()) {
|
||||
// the response is re-readable so we can read and close it without
|
||||
// affecting later processing of the response.
|
||||
|
||||
// note that in the case of text/plain a different encoding from UTF-8
|
||||
// may be in use but we just log the bytes as UTF-8. Unexpected encodings
|
||||
// do not throw (substitution happens).
|
||||
log("Response body:\n" + Utils.toUtf8AndClose(response.body()));
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
private static String redactHeaders(HttpHeaders headers) {
|
||||
return "{" + headers.map() //
|
||||
.entrySet() //
|
||||
.stream() //
|
||||
.map(entry -> {
|
||||
final String value;
|
||||
if (redactedHeaders.contains(entry.getKey().toUpperCase(Locale.ENGLISH))) {
|
||||
value = "[******]";
|
||||
} else {
|
||||
value = String.valueOf(entry.getValue());
|
||||
}
|
||||
return entry.getKey() + "=" + value;
|
||||
}) //
|
||||
.collect(Collectors.joining(", ")) + "}";
|
||||
}
|
||||
|
||||
private static void log(String message) {
|
||||
logger.accept(message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1369,19 +1369,31 @@ public final class Utils {
|
||||
return list;
|
||||
}
|
||||
|
||||
public static <T> T valueOrNull(T value) {
|
||||
return value;
|
||||
public static <T> T valueOrElse(T value, T valueIfNotPresent) {
|
||||
return value != null ? value : valueIfNotPresent;
|
||||
}
|
||||
|
||||
public static <T> T valueOrNull(Optional<T> value) {
|
||||
return value.orElse(null);
|
||||
public static <T> T valueOrElse(Optional<T> value, T valueIfNotPresent) {
|
||||
return value.orElse(valueIfNotPresent);
|
||||
}
|
||||
|
||||
public static <T> T valueOrNull(JsonNullable<T> value) {
|
||||
public static <T> T valueOrElse(JsonNullable<T> value, T valueIfNotPresent) {
|
||||
if (value.isPresent()) {
|
||||
return value.get();
|
||||
} else {
|
||||
return null;
|
||||
return valueIfNotPresent;
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> T valueOrNull(T value) {
|
||||
return valueOrElse(value, null);
|
||||
}
|
||||
|
||||
public static <T> T valueOrNull(Optional<T> value) {
|
||||
return valueOrElse(value, null);
|
||||
}
|
||||
|
||||
public static <T> T valueOrNull(JsonNullable<T> value) {
|
||||
return valueOrElse(value, null);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user