playback fängt in der mitte an

pull/24/head
eric 2025-08-08 01:58:49 +02:00
parent 24eef746d7
commit 789bc20106
1 changed files with 31 additions and 12 deletions

View File

@ -129,23 +129,42 @@ public class GameController {
} }
try { try {
String accessToken = authService.getAccessTokenForUser(username); // Token vom SpotifyAuthService holen String accessToken = authService.getAccessTokenForUser(username);
OkHttpClient client = new OkHttpClient(); OkHttpClient client = new OkHttpClient();
// 1. Track-Details holen
String trackId = trackUri.split(":")[2];
Request getTrack = new Request.Builder()
.url("https://api.spotify.com/v1/tracks/" + trackId)
.addHeader("Authorization", "Bearer " + accessToken)
.build();
try (Response trackResp = client.newCall(getTrack).execute()) {
if (!trackResp.isSuccessful()) {
ctx.status(500).result("Fehler beim Laden der Track-Details");
return;
}
var node = new com.fasterxml.jackson.databind.ObjectMapper().readTree(trackResp.body().string());
long durationMs = node.get("duration_ms").asLong();
long startOffset = durationMs / 2;
// 2. Play-Request mit position_ms
ObjectNode jsonNode = JsonNodeFactory.instance.objectNode(); ObjectNode jsonNode = JsonNodeFactory.instance.objectNode();
jsonNode.putArray("uris").add(trackUri); jsonNode.putArray("uris").add(trackUri);
jsonNode.put("position_ms", startOffset);
String jsonBody = jsonNode.toString(); String jsonBody = jsonNode.toString();
Request request = new Request.Builder() Request playReq = new Request.Builder()
.url("https://api.spotify.com/v1/me/player/play?device_id=" + deviceId) .url("https://api.spotify.com/v1/me/player/play?device_id=" + deviceId)
.addHeader("Authorization", "Bearer " + accessToken) .addHeader("Authorization", "Bearer " + accessToken)
.put(RequestBody.create(jsonBody, MediaType.parse("application/json"))) .put(RequestBody.create(jsonBody, MediaType.parse("application/json")))
.build(); .build();
try (Response response = client.newCall(request).execute()) { try (Response playResp = client.newCall(playReq).execute()) {
if (response.isSuccessful()) { if (playResp.isSuccessful()) {
ctx.status(204).result("Track erfolgreich abgespielt"); ctx.status(204).result("Track erfolgreich abgespielt");
} else { } else {
ctx.status(response.code()).result("Fehler: " + response.body().string()); ctx.status(playResp.code()).result("Fehler: " + playResp.body().string());
}
} }
} }
} catch (Exception e) { } catch (Exception e) {