From ca2ffc7279e99e5d62427d33bdd11682c91b000e Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sat, 18 Nov 2017 22:14:48 +0100 Subject: [PATCH 1/2] Add deleteBookmark() call. Signed-off-by: Yahor Berdnikau --- .../subsonic/SubsonicApiDeleteBookmarkTest.kt | 33 +++++++++++++++++++ .../api/subsonic/SubsonicAPIDefinition.kt | 3 ++ 2 files changed, 36 insertions(+) create mode 100644 subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt new file mode 100644 index 00000000..c38a0e02 --- /dev/null +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiDeleteBookmarkTest.kt @@ -0,0 +1,33 @@ +package org.moire.ultrasonic.api.subsonic + +import org.junit.Test + +/** + * Integration test for [SubsonicAPIDefinition.deleteBookmark] call. + */ +class SubsonicApiDeleteBookmarkTest : SubsonicAPIClientTest() { + @Test + fun `Should handle error response`() { + checkErrorCallParsed(mockWebServerRule) { + client.api.deleteBookmark(1).execute() + } + } + + @Test + fun `Should handle ok response`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + + val response = client.api.deleteBookmark(1).execute() + + assertResponseSuccessful(response) + } + + @Test + fun `Should pass id in request params`() { + val id = 233 + + mockWebServerRule.assertRequestParam(expectedParam = "id=$id") { + client.api.deleteBookmark(id).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 5158a7a4..de921ba9 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 @@ -230,4 +230,7 @@ interface SubsonicAPIDefinition { @Query("id") id: Int, @Query("position") position: Long, @Query("comment") comment: String? = null): Call + + @GET("deleteBookmark.view") + fun deleteBookmark(@Query("id") id: Int): Call } From a9516ecab6552914a4b141ed0ff7d9fc073ae6b6 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Sat, 18 Nov 2017 22:19:00 +0100 Subject: [PATCH 2/2] Use new api deleteBookmark() call. Signed-off-by: Yahor Berdnikau --- .../ultrasonic/service/RESTMusicService.java | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 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 fecd8404..ac80e738 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -1299,31 +1299,20 @@ public class RESTMusicService implements MusicService checkResponseSuccessful(response); } - @Override - public void deleteBookmark(String id, Context context, ProgressListener progressListener) throws Exception - { - checkServerVersion(context, "1.9", "Bookmarks not supported."); + @Override + public void deleteBookmark(String id, + Context context, + ProgressListener progressListener) throws Exception { + if (id == null) { + throw new IllegalArgumentException("Id is null"); + } + Integer itemId = Integer.parseInt(id); - HttpParams params = new BasicHttpParams(); - HttpConnectionParams.setSoTimeout(params, SOCKET_READ_TIMEOUT_GET_RANDOM_SONGS); - - List parameterNames = new ArrayList(); - List parameterValues = new ArrayList(); - - parameterNames.add("id"); - parameterValues.add(id); - - Reader reader = getReader(context, progressListener, "deleteBookmark", params, parameterNames, parameterValues); - - try - { - new ErrorParser(context).parse(reader); - } - finally - { - Util.close(reader); - } - } + updateProgressListener(progressListener, R.string.parser_reading); + Response response = subsonicAPIClient.getApi() + .deleteBookmark(itemId).execute(); + checkResponseSuccessful(response); + } @Override public MusicDirectory getVideos(boolean refresh, Context context, ProgressListener progressListener) throws Exception