From fdd9540f75a522de7a5d91ca1b71a73a536e77ee Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 17 Aug 2017 22:06:20 +0200 Subject: [PATCH 1/3] Add star request. Signed-off-by: Yahor Berdnikau --- .../api/subsonic/SubsonicApiStarTest.kt | 61 +++++++++++++++++++ .../api/subsonic/SubsonicAPIDefinition.kt | 5 ++ 2 files changed, 66 insertions(+) create mode 100644 subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt new file mode 100644 index 00000000..5848a954 --- /dev/null +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiStarTest.kt @@ -0,0 +1,61 @@ +package org.moire.ultrasonic.api.subsonic + +import org.amshove.kluent.`should be` +import org.amshove.kluent.`should contain` +import org.junit.Test +import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse + +/** + * Integration test for [SubsonicAPIClient] for star request. + */ +class SubsonicApiStarTest : SubsonicAPIClientTest() { + @Test + fun `Should parse star ok response`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + + val response = client.api.star().execute() + + assertResponseSuccessful(response) + response.body().status `should be` SubsonicResponse.Status.OK + } + + @Test + fun `Should parse star error response`() { + checkErrorCallParsed(mockWebServerRule, { + client.api.star().execute() + }) + } + + @Test + fun `Should pass id param`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + val id = 110L + client.api.star(id = id).execute() + + val request = mockWebServerRule.mockWebServer.takeRequest() + + request.requestLine `should contain` "id=$id" + } + + @Test + fun `Should pass artist id param`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + val artistId = 123L + client.api.star(artistId = artistId).execute() + + val request = mockWebServerRule.mockWebServer.takeRequest() + + request.requestLine `should contain` "artistId=$artistId" + } + + @Test + fun `Should pass albom id param`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + val albumId = 1001L + client.api.star(albumId = albumId).execute() + + val request = mockWebServerRule.mockWebServer.takeRequest() + + request.requestLine `should contain` "albumId=$albumId" + } +} 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 fb6c3789..6e59d62e 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 @@ -34,4 +34,9 @@ interface SubsonicAPIDefinition { @GET("getArtists.view") fun getArtists(@Query("musicFolderId") musicFolderId: Long?): Call + + @GET("star.view") + fun star(@Query("id") id: Long? = null, + @Query("albumId") albumId: Long? = null, + @Query("artistId") artistId: Long? = null): Call } From 864488510c66a4a533f888f87578ed94f9bcf4cd Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 17 Aug 2017 22:38:23 +0200 Subject: [PATCH 2/3] Use new subsonic api star request. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/service/RESTMusicService.java | 49 ++++++------------- .../org/moire/ultrasonic/view/AlbumView.java | 2 +- 2 files changed, 15 insertions(+), 36 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 4d31685d..5dc04473 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -317,42 +317,21 @@ public class RESTMusicService implements MusicService return String.format(Locale.US, "indexes-%d.ser", Math.abs(s.hashCode())); } - @Override - public void star(String id, String albumId, String artistId, Context context, ProgressListener progressListener) throws Exception - { - checkServerVersion(context, "1.8", "Starring not supported."); + @Override + public void star(String id, + String albumId, + String artistId, + Context context, + ProgressListener progressListener) throws Exception { + Long apiId = id == null ? null : Long.valueOf(id); + Long apiAlbumId = albumId == null ? null : Long.valueOf(albumId); + Long apiArtistId = artistId == null ? null : Long.valueOf(artistId); - List parameterNames = new LinkedList(); - List parameterValues = new LinkedList(); - - if (id != null) - { - parameterNames.add("id"); - parameterValues.add(id); - } - - if (albumId != null) - { - parameterNames.add("albumId"); - parameterValues.add(albumId); - } - - if (artistId != null) - { - parameterNames.add("artistId"); - parameterValues.add(artistId); - } - - Reader reader = getReader(context, progressListener, "star", null, parameterNames, parameterValues); - try - { - new ErrorParser(context).parse(reader); - } - finally - { - Util.close(reader); - } - } + updateProgressListener(progressListener, R.string.parser_reading); + Response response = subsonicAPIClient.getApi() + .star(apiId, apiAlbumId, apiArtistId).execute(); + checkResponseSuccessful(response); + } @Override public void unstar(String id, String albumId, String artistId, Context context, ProgressListener progressListener) throws Exception diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/view/AlbumView.java b/ultrasonic/src/main/java/org/moire/ultrasonic/view/AlbumView.java index 2b2a2434..23eb0074 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/view/AlbumView.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/view/AlbumView.java @@ -153,12 +153,12 @@ public class AlbumView extends UpdateView album.setStarred(false); } + final MusicService musicService = MusicServiceFactory.getMusicService(view.getContext()); new Thread(new Runnable() { @Override public void run() { - MusicService musicService = MusicServiceFactory.getMusicService(null); boolean useId3 = Util.getShouldUseId3Tags(getContext()); try From 40e2dd4d8cfc576a251c310a2ab9b5ca8c49617c Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Thu, 17 Aug 2017 22:39:12 +0200 Subject: [PATCH 3/3] Fix missing progress listener for getArtists call. Signed-off-by: Yahor Berdnikau --- .../main/java/org/moire/ultrasonic/service/RESTMusicService.java | 1 + 1 file changed, 1 insertion(+) 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 5dc04473..73dd6cfe 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -294,6 +294,7 @@ public class RESTMusicService implements MusicService return cachedArtists; } + updateProgressListener(progressListener, R.string.parser_reading); Response response = subsonicAPIClient.getApi().getArtists(null).execute(); checkResponseSuccessful(response);