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 {
main.java.srcDirs += 'src/main/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.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<MusicFolder> getMusicFolders(boolean refresh, Context context, ProgressListener progressListener) throws Exception
{
List<MusicFolder> cachedMusicFolders = readCachedMusicFolders(context);
if (cachedMusicFolders != null && !refresh)
{
return cachedMusicFolders;
}
@Override
public List<MusicFolder> getMusicFolders(boolean refresh,
Context context,
ProgressListener progressListener) throws Exception {
List<MusicFolder> cachedMusicFolders = readCachedMusicFolders(context);
if (cachedMusicFolders != null && !refresh) {
return cachedMusicFolders;
}
Reader reader = getReader(context, progressListener, "getMusicFolders", null);
try
{
List<MusicFolder> musicFolders = new MusicFoldersParser(context).parse(reader, progressListener);
writeCachedMusicFolders(context, musicFolders);
return musicFolders;
}
finally
{
Util.close(reader);
}
}
updateProgressListener(progressListener);
Response<MusicFoldersResponse> response = subsonicAPIClient.getApi().getMusicFolders().execute();
checkResponseSuccessful(response);
List<MusicFolder> 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<MusicFolder> readCachedMusicFolders(Context context)
{
String filename = getCachedMusicFoldersFilename(context);
return FileUtil.deserialize(context, filename);
}
private static List<MusicFolder> readCachedMusicFolders(Context context) {
String filename = getCachedMusicFoldersFilename(context);
return FileUtil.deserialize(context, filename);
}
private static void writeCachedMusicFolders(Context context, List<MusicFolder> musicFolders)
{
String filename = getCachedMusicFoldersFilename(context);
FileUtil.serialize(context, new ArrayList<MusicFolder>(musicFolders), filename);
}
private static void writeCachedMusicFolders(Context context, List<MusicFolder> musicFolders) {
String filename = getCachedMusicFoldersFilename(context);
FileUtil.serialize(context, new ArrayList<>(musicFolders), filename);
}
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
/**
* 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<APIMusicFolder>): List<MusicFolder> {
return entitiesList.map { convertMusicFolder(it) }
}

View File

@ -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
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)
}