diff --git a/CHANGELOG.md b/CHANGELOG.md index c8b0431e..f14a1613 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ * Watchlist endpoints require pagination: deprecate the variants that don't accept page and limit parameters. * Add warnings to `watchedAt()` setters, update existing warnings that [Trakt already only stores and returns minute-precision timestamps](https://github.com/trakt/trakt-api/discussions/694). +* The 3D `Metadata` property of movies in a collection is now a number, so added `boolean is3D()` and deprecated + `Boolean is3d`. ## 6.17.0 - 2026-02-05 diff --git a/src/main/java/com/uwetrottmann/trakt5/entities/BaseEpisode.java b/src/main/java/com/uwetrottmann/trakt5/entities/BaseEpisode.java index c7b2eb7e..3eae1d93 100644 --- a/src/main/java/com/uwetrottmann/trakt5/entities/BaseEpisode.java +++ b/src/main/java/com/uwetrottmann/trakt5/entities/BaseEpisode.java @@ -34,5 +34,8 @@ public class BaseEpisode { /** progress */ public Boolean completed; + /** + * Only returned by collection endpoints. + */ public Metadata metadata; } diff --git a/src/main/java/com/uwetrottmann/trakt5/entities/BaseMovie.java b/src/main/java/com/uwetrottmann/trakt5/entities/BaseMovie.java index 121c74be..9e6325e7 100644 --- a/src/main/java/com/uwetrottmann/trakt5/entities/BaseMovie.java +++ b/src/main/java/com/uwetrottmann/trakt5/entities/BaseMovie.java @@ -32,6 +32,9 @@ public class BaseMovie { public OffsetDateTime listed_at; public int plays; + /** + * Only returned by collection endpoints. + */ public Metadata metadata; } diff --git a/src/main/java/com/uwetrottmann/trakt5/entities/Metadata.java b/src/main/java/com/uwetrottmann/trakt5/entities/Metadata.java index 6cc2f446..f07a3562 100644 --- a/src/main/java/com/uwetrottmann/trakt5/entities/Metadata.java +++ b/src/main/java/com/uwetrottmann/trakt5/entities/Metadata.java @@ -23,6 +23,11 @@ import com.uwetrottmann.trakt5.enums.MediaType; import com.uwetrottmann.trakt5.enums.Resolution; +/** + * Metadata of a collection item. + *
+ * All but {@link #media_type} and {@link #resolution} are optional values. + */ public class Metadata { public MediaType media_type; @@ -30,7 +35,36 @@ public class Metadata { public Hdr hdr; public Audio audio; public AudioChannels audio_channels; - @SerializedName("3d") + + /** + * Since 2026-03 the 3d property appears to be a number for movies. + *
+ * This field is kept to avoid a breaking change, but its value will always be {@code null} for movies.
+ *
+ * @deprecated Use {@link #is3D()} instead.
+ */
+ @Deprecated
public Boolean is3d;
+ /**
+ * Since 2026-03 appears to be 1 or null for movies. Or true and false for episodes.
+ *
+ * @see #is3D()
+ */
+ @SerializedName("3d")
+ public Object _is3D;
+
+ public boolean is3D() {
+ if (_is3D != null) {
+ if (_is3D instanceof Boolean) {
+ return (Boolean) _is3D;
+ }
+ // Numbers are deserialized by default to Double
+ if (_is3D instanceof Double) {
+ return (Double) _is3D == 1.0;
+ }
+ }
+ return false;
+ }
+
}
diff --git a/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java b/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java
index bd86f2eb..6859aef8 100644
--- a/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java
+++ b/src/test/java/com/uwetrottmann/trakt5/services/SyncTest.java
@@ -45,6 +45,7 @@
import com.uwetrottmann.trakt5.entities.SyncShow;
import com.uwetrottmann.trakt5.entities.WatchlistedEpisode;
import com.uwetrottmann.trakt5.entities.WatchlistedSeason;
+import com.uwetrottmann.trakt5.enums.Extended;
import com.uwetrottmann.trakt5.enums.HistoryType;
import com.uwetrottmann.trakt5.enums.Rating;
import com.uwetrottmann.trakt5.enums.RatingsFilter;
@@ -186,13 +187,17 @@ private void assertLastActivityUpdated(LastActivityUpdated activity) {
@Test
public void test_collectionMovies() throws IOException {
- List