Use getMusicFolders() method from SubsonicAPI kotlin implementation.

Signed-off-by: Yahor Berdnikau <egorr.berd@gmail.com>
This commit is contained in:
Yahor Berdnikau 2017-07-26 22:04:13 +02:00
parent 9ed0921218
commit 4fd5493d15
4 changed files with 79 additions and 37 deletions

View File

@ -19,6 +19,7 @@ android {
} }
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/kotlin'
test.java.srcDirs += 'src/test/kotlin' test.java.srcDirs += 'src/test/kotlin'
} }

View File

@ -56,7 +56,9 @@ import org.apache.http.protocol.HttpContext;
import org.moire.ultrasonic.R; import org.moire.ultrasonic.R;
import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient; import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient;
import org.moire.ultrasonic.api.subsonic.response.LicenseResponse; 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.api.subsonic.response.SubsonicResponse;
import org.moire.ultrasonic.data.APIConverter;
import org.moire.ultrasonic.domain.Bookmark; import org.moire.ultrasonic.domain.Bookmark;
import org.moire.ultrasonic.domain.ChatMessage; import org.moire.ultrasonic.domain.ChatMessage;
import org.moire.ultrasonic.domain.Genre; 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.JukeboxStatusParser;
import org.moire.ultrasonic.service.parser.LyricsParser; import org.moire.ultrasonic.service.parser.LyricsParser;
import org.moire.ultrasonic.service.parser.MusicDirectoryParser; 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.PlaylistParser;
import org.moire.ultrasonic.service.parser.PlaylistsParser; import org.moire.ultrasonic.service.parser.PlaylistsParser;
import org.moire.ultrasonic.service.parser.PodcastEpisodeParser; import org.moire.ultrasonic.service.parser.PodcastEpisodeParser;
@ -213,27 +214,24 @@ public class RESTMusicService implements MusicService
return response.body().getLicense().getValid(); return response.body().getLicense().getValid();
} }
@Override @Override
public List<MusicFolder> getMusicFolders(boolean refresh, Context context, ProgressListener progressListener) throws Exception public List<MusicFolder> getMusicFolders(boolean refresh,
{ Context context,
List<MusicFolder> cachedMusicFolders = readCachedMusicFolders(context); ProgressListener progressListener) throws Exception {
if (cachedMusicFolders != null && !refresh) List<MusicFolder> cachedMusicFolders = readCachedMusicFolders(context);
{ if (cachedMusicFolders != null && !refresh) {
return cachedMusicFolders; return cachedMusicFolders;
} }
Reader reader = getReader(context, progressListener, "getMusicFolders", null); updateProgressListener(progressListener);
try Response<MusicFoldersResponse> response = subsonicAPIClient.getApi().getMusicFolders().execute();
{ checkResponseSuccessful(response);
List<MusicFolder> musicFolders = new MusicFoldersParser(context).parse(reader, progressListener);
writeCachedMusicFolders(context, musicFolders); List<MusicFolder> musicFolders = APIConverter
return musicFolders; .convertMusicFolderList(response.body().getMusicFolders());
} writeCachedMusicFolders(context, musicFolders);
finally return musicFolders;
{ }
Util.close(reader);
}
}
@Override @Override
public Indexes getIndexes(String musicFolderId, boolean refresh, Context context, ProgressListener progressListener) throws Exception 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())); return String.format("indexes-%d.ser", Math.abs(s.hashCode()));
} }
private static ArrayList<MusicFolder> readCachedMusicFolders(Context context) private static List<MusicFolder> readCachedMusicFolders(Context context) {
{ String filename = getCachedMusicFoldersFilename(context);
String filename = getCachedMusicFoldersFilename(context); return FileUtil.deserialize(context, filename);
return FileUtil.deserialize(context, filename); }
}
private static void writeCachedMusicFolders(Context context, List<MusicFolder> musicFolders) private static void writeCachedMusicFolders(Context context, List<MusicFolder> musicFolders) {
{ String filename = getCachedMusicFoldersFilename(context);
String filename = getCachedMusicFoldersFilename(context); FileUtil.serialize(context, new ArrayList<>(musicFolders), filename);
FileUtil.serialize(context, new ArrayList<MusicFolder>(musicFolders), filename); }
}
private static String getCachedMusicFoldersFilename(Context context) private static String getCachedMusicFoldersFilename(Context context)
{ {

View File

@ -1,5 +1,15 @@
// Converts entities from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient] to app entities.
@file:JvmName("APIConverter")
package org.moire.ultrasonic.data package org.moire.ultrasonic.data
/** import org.moire.ultrasonic.domain.MusicFolder
* Created by egorr on 26.07.17.
*/ 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<APIMusicFolder>): List<MusicFolder> {
return entitiesList.map { convertMusicFolder(it) }
}

View File

@ -1,8 +1,43 @@
@file:Suppress("IllegalIdentifier")
package org.moire.ultrasonic.data 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 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)
}