From 0d18e5aee820b9ca75e9a691744ff04a5c8810a2 Mon Sep 17 00:00:00 2001 From: simon816 Date: Wed, 20 Sep 2023 00:28:17 +0100 Subject: [PATCH] Support passing customData to media load request --- .../su/litvak/chromecast/api/v2/Channel.java | 2 +- .../litvak/chromecast/api/v2/ChromeCast.java | 29 ++++++++++++++----- .../chromecast/api/v2/StandardRequest.java | 13 ++------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/java/su/litvak/chromecast/api/v2/Channel.java b/src/main/java/su/litvak/chromecast/api/v2/Channel.java index d9b82951..48b55d37 100644 --- a/src/main/java/su/litvak/chromecast/api/v2/Channel.java +++ b/src/main/java/su/litvak/chromecast/api/v2/Channel.java @@ -490,7 +490,7 @@ private void startSession(String destinationId) throws IOException { } } - public MediaStatus load(String destinationId, String sessionId, Media media, boolean autoplay, double currentTime, Map customData) throws IOException { + public MediaStatus load(String destinationId, String sessionId, Media media, boolean autoplay, double currentTime, Object customData) throws IOException { startSession(destinationId); StandardResponse.MediaStatus status = sendStandard("urn:x-cast:com.google.cast.media", StandardRequest.load(sessionId, media, autoplay, currentTime, customData), destinationId); return status == null || status.statuses.length == 0 ? null : status.statuses[0]; diff --git a/src/main/java/su/litvak/chromecast/api/v2/ChromeCast.java b/src/main/java/su/litvak/chromecast/api/v2/ChromeCast.java index 7ad1873f..12e1cfde 100644 --- a/src/main/java/su/litvak/chromecast/api/v2/ChromeCast.java +++ b/src/main/java/su/litvak/chromecast/api/v2/ChromeCast.java @@ -432,15 +432,10 @@ public final MediaStatus load(String url) throws IOException { * @throws IOException */ public final MediaStatus load(String mediaTitle, String thumb, String url, String contentType) throws IOException { - Status status = getStatus(); - Application runningApp = status.getRunningApp(); - if (runningApp == null) { - throw new ChromeCastException("No application is running in ChromeCast"); - } Map metadata = new HashMap(2); metadata.put("title", mediaTitle); metadata.put("thumb", thumb); - return channel().load(getTransportId(runningApp), runningApp.sessionId, new Media(url, + return load(new Media(url, contentType == null ? getContentType(url) : contentType, null, null, null, metadata, null, null), true, 0d, null); } @@ -457,6 +452,25 @@ public final MediaStatus load(String mediaTitle, String thumb, String url, Strin * @throws IOException */ public final MediaStatus load(final Media media) throws IOException { + return load(media, true, 0d, null); + } + + /** + *

Loads and starts playing specified media

+ * + *

If no application is running at the moment then exception is thrown.

+ * + * @param media The media to load and play. + * See + * https://developers.google.com/cast/docs/reference/messages#Load for more details. + * @param autoplay whether the media should start playing when loaded + * @param currentTime seconds since beginning of content + * @param customData Application-specific data + * @return The new media status that resulted from loading the media. + * @throws IOException + */ + public final MediaStatus load(final Media media, boolean autoplay, double currentTime, + Object customData) throws IOException { Status status = getStatus(); Application runningApp = status.getRunningApp(); if (runningApp == null) { @@ -469,7 +483,8 @@ public final MediaStatus load(final Media media) throws IOException { } else { mediaToPlay = media; } - return channel().load(getTransportId(runningApp), runningApp.sessionId, mediaToPlay, true, 0d, null); + return channel().load(getTransportId(runningApp), runningApp.sessionId, mediaToPlay, autoplay, currentTime, + customData); } /** diff --git a/src/main/java/su/litvak/chromecast/api/v2/StandardRequest.java b/src/main/java/su/litvak/chromecast/api/v2/StandardRequest.java index cb04e477..1faba45a 100644 --- a/src/main/java/su/litvak/chromecast/api/v2/StandardRequest.java +++ b/src/main/java/su/litvak/chromecast/api/v2/StandardRequest.java @@ -17,8 +17,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Map; - /** * Parent class for transport object representing messages sent TO ChromeCast device. */ @@ -91,17 +89,12 @@ static class Load extends StandardRequest { @JsonProperty final Object customData; - Load(String sessionId, Media media, boolean autoplay, double currentTime, - final Map customData) { + Load(String sessionId, Media media, boolean autoplay, double currentTime, Object customData) { this.sessionId = sessionId; this.media = media; this.autoplay = autoplay; this.currentTime = currentTime; - - this.customData = customData == null ? null : new Object() { - @JsonProperty - Map payload = customData; - }; + this.customData = customData; } } @@ -180,7 +173,7 @@ static Stop stop(String sessionId) { } static Load load(String sessionId, Media media, boolean autoplay, double currentTime, - Map customData) { + Object customData) { return new Load(sessionId, media, autoplay, currentTime, customData); }