diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle index e35367f2..258d5052 100644 --- a/ultrasonic/build.gradle +++ b/ultrasonic/build.gradle @@ -19,6 +19,7 @@ android { } sourceSets { + main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' } 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 e69330b7..9ed1f279 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -56,7 +56,9 @@ import org.apache.http.protocol.HttpContext; import org.moire.ultrasonic.R; import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient; import org.moire.ultrasonic.api.subsonic.response.LicenseResponse; +import org.moire.ultrasonic.api.subsonic.response.MusicFoldersResponse; import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse; +import org.moire.ultrasonic.data.APIConverter; import org.moire.ultrasonic.domain.Bookmark; import org.moire.ultrasonic.domain.ChatMessage; import org.moire.ultrasonic.domain.Genre; @@ -81,7 +83,6 @@ import org.moire.ultrasonic.service.parser.IndexesParser; import org.moire.ultrasonic.service.parser.JukeboxStatusParser; import org.moire.ultrasonic.service.parser.LyricsParser; import org.moire.ultrasonic.service.parser.MusicDirectoryParser; -import org.moire.ultrasonic.service.parser.MusicFoldersParser; import org.moire.ultrasonic.service.parser.PlaylistParser; import org.moire.ultrasonic.service.parser.PlaylistsParser; import org.moire.ultrasonic.service.parser.PodcastEpisodeParser; @@ -213,27 +214,24 @@ public class RESTMusicService implements MusicService return response.body().getLicense().getValid(); } - @Override - public List getMusicFolders(boolean refresh, Context context, ProgressListener progressListener) throws Exception - { - List cachedMusicFolders = readCachedMusicFolders(context); - if (cachedMusicFolders != null && !refresh) - { - return cachedMusicFolders; - } + @Override + public List getMusicFolders(boolean refresh, + Context context, + ProgressListener progressListener) throws Exception { + List cachedMusicFolders = readCachedMusicFolders(context); + if (cachedMusicFolders != null && !refresh) { + return cachedMusicFolders; + } - Reader reader = getReader(context, progressListener, "getMusicFolders", null); - try - { - List musicFolders = new MusicFoldersParser(context).parse(reader, progressListener); - writeCachedMusicFolders(context, musicFolders); - return musicFolders; - } - finally - { - Util.close(reader); - } - } + updateProgressListener(progressListener); + Response response = subsonicAPIClient.getApi().getMusicFolders().execute(); + checkResponseSuccessful(response); + + List musicFolders = APIConverter + .convertMusicFolderList(response.body().getMusicFolders()); + writeCachedMusicFolders(context, musicFolders); + return musicFolders; + } @Override public Indexes getIndexes(String musicFolderId, boolean refresh, Context context, ProgressListener progressListener) throws Exception @@ -337,17 +335,15 @@ public class RESTMusicService implements MusicService return String.format("indexes-%d.ser", Math.abs(s.hashCode())); } - private static ArrayList readCachedMusicFolders(Context context) - { - String filename = getCachedMusicFoldersFilename(context); - return FileUtil.deserialize(context, filename); - } + private static List readCachedMusicFolders(Context context) { + String filename = getCachedMusicFoldersFilename(context); + return FileUtil.deserialize(context, filename); + } - private static void writeCachedMusicFolders(Context context, List musicFolders) - { - String filename = getCachedMusicFoldersFilename(context); - FileUtil.serialize(context, new ArrayList(musicFolders), filename); - } + private static void writeCachedMusicFolders(Context context, List musicFolders) { + String filename = getCachedMusicFoldersFilename(context); + FileUtil.serialize(context, new ArrayList<>(musicFolders), filename); + } private static String getCachedMusicFoldersFilename(Context context) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt index c3bcb28d..93a2935e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/SubsonicAPIConverter.kt @@ -1,5 +1,15 @@ +// Converts entities from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] to app entities. +@file:JvmName("APIConverter") package org.moire.ultrasonic.data -/** - * Created by egorr on 26.07.17. - */ +import org.moire.ultrasonic.domain.MusicFolder + +typealias APIMusicFolder = org.moire.ultrasonic.api.subsonic.models.MusicFolder + +fun convertMusicFolder(entity: APIMusicFolder): MusicFolder { + return MusicFolder(entity.id.toString(), entity.name) +} + +fun convertMusicFolderList(entitiesList: List): List { + return entitiesList.map { convertMusicFolder(it) } +} \ No newline at end of file diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt index 3b556b48..63b49026 100644 --- a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/data/APIConverterTest.kt @@ -1,8 +1,43 @@ +@file:Suppress("IllegalIdentifier") + package org.moire.ultrasonic.data -import org.junit.Assert.* +import org.amshove.kluent.`should equal to` +import org.junit.Test +import org.moire.ultrasonic.api.subsonic.models.MusicFolder /** - * Created by egorr on 26.07.17. + * Unit test for functions in SubsonicAPIConverter file. + * + * @author Yahor Berdnikau */ -class APIConverterTest \ No newline at end of file +class APIConverterTest { + @Test + fun `Should convert MusicFolder entity`() { + val entity = createMusicFolder(10, "some-name") + + val convertedEntity = convertMusicFolder(entity) + + convertedEntity.name `should equal to` "some-name" + convertedEntity.id `should equal to` 10.toString() + } + + @Test + fun `Should convert list of MusicFolder entities`() { + val entityList = listOf( + createMusicFolder(3, "some-name-3"), + createMusicFolder(4, "some-name-4") + ) + + val convertedList = convertMusicFolderList(entityList) + + convertedList.size `should equal to` 2 + convertedList[0].id `should equal to` 3.toString() + convertedList[0].name `should equal to` "some-name-3" + convertedList[1].id `should equal to` 4.toString() + convertedList[1].name `should equal to` "some-name-4" + } + + private fun createMusicFolder(id: Long = 0, name: String = ""): MusicFolder = + MusicFolder(id, name) +} \ No newline at end of file