new display name, url prop support for song item
This commit is contained in:
parent
482f664f7e
commit
036c31e502
@ -16,6 +16,7 @@ import net.blumia.pcmdroid.model.parseFromJsonString
|
||||
import net.blumia.pcmdroid.repository.ServerRepository
|
||||
import net.blumia.pcmdroid.viewmodel.AddServerViewModel
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
||||
@ -63,14 +64,17 @@ class MainViewModel(private val repository: ServerRepository) : ViewModel() {
|
||||
.post(formBody)
|
||||
.build()
|
||||
|
||||
var mediaRoot = srv.mediaBaseUrl
|
||||
if (mediaRoot.startsWith("//")) mediaRoot = request.url.scheme + mediaRoot
|
||||
|
||||
try {
|
||||
httpClient.newCall(request).execute().use { response ->
|
||||
if (!response.isSuccessful) {
|
||||
// TODO: non-200 response will go to here too.
|
||||
return@use
|
||||
}
|
||||
val pair = parseFromJsonString(response.body!!.string())
|
||||
_drawerFolders.postValue(pair.first)
|
||||
val pair = parseFromJsonString(mediaRoot, "", response.body!!.string())
|
||||
_drawerFolders.postValue(pair.first!!)
|
||||
// setCurrentServer(srv)
|
||||
Log.d("vvv", drawerFolders.value.toString())
|
||||
}
|
||||
@ -103,7 +107,7 @@ class MainViewModel(private val repository: ServerRepository) : ViewModel() {
|
||||
// TODO: non-200 response will go to here too.
|
||||
return@use
|
||||
}
|
||||
val pair = parseFromJsonString(response.body!!.string())
|
||||
val pair = parseFromJsonString(srv.mediaBaseUrl, folder.folderPath, response.body!!.string())
|
||||
_folders.postValue(pair.first)
|
||||
_songs.postValue(pair.second)
|
||||
|
||||
|
@ -2,20 +2,24 @@ package net.blumia.pcmdroid.model
|
||||
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import java.net.URLDecoder
|
||||
import kotlin.io.path.Path
|
||||
|
||||
data class Song (
|
||||
val filePath: String, // with file name
|
||||
val displayName: String = "",
|
||||
val modifiedTime: Long = 0,
|
||||
val fileSize: Int = 0,
|
||||
val fileSize: Long = 0,
|
||||
val additionalInfo: Boolean = false, // if sidecar meta-info json file exist.
|
||||
val url: String,
|
||||
) {
|
||||
fun displayName(): String {
|
||||
return Uri.parse(filePath).lastPathSegment ?: "???"
|
||||
return if (displayName.isNotEmpty()) displayName else Uri.parse(filePath).lastPathSegment ?: "???"
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,10 +31,13 @@ data class Folder (
|
||||
}
|
||||
}
|
||||
|
||||
fun parseFromJsonString(jsonString: String): Pair<List<Folder>, List<Song>> {
|
||||
fun parseFromJsonString(mediaRootUrl: String, baseFolder: String, jsonString: String): Pair<List<Folder>, List<Song>> {
|
||||
val folders = mutableListOf<Folder>()
|
||||
val songs = mutableListOf<Song>()
|
||||
|
||||
val mediaRoot = if (mediaRootUrl.endsWith('/')) mediaRootUrl else "$mediaRootUrl/"
|
||||
val filePath = if (baseFolder.endsWith('/') || baseFolder == "") baseFolder else "$baseFolder/"
|
||||
|
||||
try {
|
||||
val jsonObj = JSONObject(jsonString)
|
||||
val result = jsonObj.getJSONObject("result")
|
||||
@ -44,14 +51,25 @@ fun parseFromJsonString(jsonString: String): Pair<List<Folder>, List<Song>> {
|
||||
for (i in 0 until musicList.length()) {
|
||||
val fileObject = musicList.getJSONObject(i)
|
||||
val rawFileName = fileObject.getString("fileName")
|
||||
val displayName = if (fileObject.has("displayName")) fileObject.getString("displayName") else ""
|
||||
val filePathWithName = filePath + rawFileName
|
||||
var fileUrl = if (fileObject.has("url")) fileObject.getString("url") else (mediaRoot + filePathWithName)
|
||||
val fileName = URLDecoder.decode(rawFileName, "UTF-8")
|
||||
val modifiedTime = fileObject.getLong("modifiedTime")
|
||||
val fileSize = fileObject.getLong("fileSize")
|
||||
|
||||
// it's possible that server return a url start without protocol.
|
||||
if (fileUrl.startsWith("//")) {
|
||||
fileUrl = mediaRootUrl.toHttpUrlOrNull()?.scheme + fileUrl
|
||||
}
|
||||
|
||||
songs.add(
|
||||
Song(
|
||||
rawFileName,
|
||||
filePathWithName,
|
||||
displayName = if (displayName.isNotEmpty()) displayName else fileName,
|
||||
modifiedTime = modifiedTime,
|
||||
url = rawFileName
|
||||
url = fileUrl,
|
||||
fileSize = fileSize,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package net.blumia.pcmdroid
|
||||
|
||||
import android.util.Log
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import org.junit.Test
|
||||
|
||||
import org.junit.Assert.*
|
||||
@ -12,6 +15,7 @@ import org.junit.Assert.*
|
||||
class ExampleUnitTest {
|
||||
@Test
|
||||
fun addition_isCorrect() {
|
||||
println("//d.android.com/tools/testing".toHttpUrlOrNull().toString())
|
||||
assertEquals(4, 2 + 2)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user