From 789bc20106af2716dd72ef3a45fba99bd8231123 Mon Sep 17 00:00:00 2001 From: eric <3024947@stud.hs-mannheim.de> Date: Fri, 8 Aug 2025 01:58:49 +0200 Subject: [PATCH] =?UTF-8?q?playback=20f=C3=A4ngt=20in=20der=20mitte=20an?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Roullette/controller/GameController.java | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/src/main/java/eric/Roullette/controller/GameController.java b/src/main/java/eric/Roullette/controller/GameController.java index 5347025..6a0eafe 100644 --- a/src/main/java/eric/Roullette/controller/GameController.java +++ b/src/main/java/eric/Roullette/controller/GameController.java @@ -129,23 +129,42 @@ public class GameController { } try { - String accessToken = authService.getAccessTokenForUser(username); // Token vom SpotifyAuthService holen + String accessToken = authService.getAccessTokenForUser(username); OkHttpClient client = new OkHttpClient(); - ObjectNode jsonNode = JsonNodeFactory.instance.objectNode(); - jsonNode.putArray("uris").add(trackUri); - String jsonBody = jsonNode.toString(); - Request request = new Request.Builder() - .url("https://api.spotify.com/v1/me/player/play?device_id=" + deviceId) + // 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) - .put(RequestBody.create(jsonBody, MediaType.parse("application/json"))) .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; - try (Response response = client.newCall(request).execute()) { - if (response.isSuccessful()) { - ctx.status(204).result("Track erfolgreich abgespielt"); - } else { - ctx.status(response.code()).result("Fehler: " + response.body().string()); + // 2. Play-Request mit position_ms + ObjectNode jsonNode = JsonNodeFactory.instance.objectNode(); + jsonNode.putArray("uris").add(trackUri); + jsonNode.put("position_ms", startOffset); + String jsonBody = jsonNode.toString(); + + Request playReq = new Request.Builder() + .url("https://api.spotify.com/v1/me/player/play?device_id=" + deviceId) + .addHeader("Authorization", "Bearer " + accessToken) + .put(RequestBody.create(jsonBody, MediaType.parse("application/json"))) + .build(); + + try (Response playResp = client.newCall(playReq).execute()) { + if (playResp.isSuccessful()) { + ctx.status(204).result("Track erfolgreich abgespielt"); + } else { + ctx.status(playResp.code()).result("Fehler: " + playResp.body().string()); + } } } } catch (Exception e) {