From 98928055172b555318cfba40c0615ba18a0a2097 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 4 Sep 2017 21:20:22 +0200 Subject: [PATCH 1/2] Add scrobble call. Signed-off-by: Yahor Berdnikau --- .../api/subsonic/SubsonicApiScrobbleTest.kt | 55 +++++++++++++++++++ .../api/subsonic/SubsonicAPIDefinition.kt | 5 ++ 2 files changed, 60 insertions(+) create mode 100644 subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt new file mode 100644 index 00000000..f14fefc2 --- /dev/null +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiScrobbleTest.kt @@ -0,0 +1,55 @@ +package org.moire.ultrasonic.api.subsonic + +import org.junit.Test +import java.util.Calendar + +/** + * Integration test for [SubsonicAPIClient] for scrobble call. + */ +class SubsonicApiScrobbleTest : SubsonicAPIClientTest() { + @Test + fun `Should handle error response`() { + checkErrorCallParsed(mockWebServerRule) { + client.api.scrobble("id").execute() + } + } + + @Test + fun `Should handle ok response`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + + val response = client.api.scrobble("id").execute() + + assertResponseSuccessful(response) + } + + @Test + fun `Should pass id param in request`() { + val id = "some-id" + + mockWebServerRule.assertRequestParam(responseResourceName = "ping_ok.json", + expectedParam = "id=$id") { + client.api.scrobble(id = id).execute() + } + } + + @Test + fun `Should pass time param in request`() { + val time = Calendar.getInstance().timeInMillis + + mockWebServerRule.assertRequestParam(responseResourceName = "ping_ok.json", + expectedParam = "time=$time") { + client.api.scrobble(id = "some-id", time = time).execute() + } + } + + @Test + fun `Should pass submission param in request`() { + val submission = false + + mockWebServerRule.assertRequestParam(responseResourceName = "ping_ok.json", + expectedParam = "submission=$submission") { + client.api.scrobble(id = "some-id", submission = submission).execute() + } + } +} diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt index 6bc5fdf8..ad396526 100644 --- a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt @@ -118,4 +118,9 @@ interface SubsonicAPIDefinition { @GET("getLyrics.view") fun getLyrics(@Query("artist") artist: String? = null, @Query("title") title: String? = null): Call + + @GET("scrobble.view") + fun scrobble(@Query("id") id: String, + @Query("time") time: Long? = null, + @Query("submission") submission: Boolean? = null): Call } From 71b7948908b13c3ddcc2d736d2941eca8445ba1b Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 4 Sep 2017 21:25:56 +0200 Subject: [PATCH 2/2] Use new subsonic api scrobble call. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/service/RESTMusicService.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java index 3dcda3af..d330e39d 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -638,21 +638,20 @@ public class RESTMusicService implements MusicService return APILyricsConverter.toDomainEntity(response.body().getLyrics()); } - @Override - public void scrobble(String id, boolean submission, Context context, ProgressListener progressListener) throws Exception - { - checkServerVersion(context, "1.5", "Scrobbling not supported."); + @Override + public void scrobble(String id, + boolean submission, + Context context, + ProgressListener progressListener) throws Exception { + if (id == null) { + throw new IllegalArgumentException("Scrobble id is null"); + } - Reader reader = getReader(context, progressListener, "scrobble", null, asList("id", "submission"), Arrays.asList(id, submission)); - try - { - new ErrorParser(context).parse(reader); - } - finally - { - Util.close(reader); - } - } + updateProgressListener(progressListener, R.string.parser_reading); + Response response = subsonicAPIClient.getApi() + .scrobble(id, null, submission).execute(); + checkResponseSuccessful(response); + } @Override public MusicDirectory getAlbumList(String type, int size, int offset, Context context, ProgressListener progressListener) throws Exception