package com.novasonic.app import android.net.Uri import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata import org.json.JSONArray import org.json.JSONObject data class Track( val id: String, val url: String, val title: String, val artist: String, val album: String?, val artworkUrl: String?, val durationMs: Long ) { fun toMediaItem(): MediaItem { val metadata = MediaMetadata.Builder() .setTitle(title) .setArtist(artist) .setAlbumTitle(album) .apply { if (!artworkUrl.isNullOrEmpty()) setArtworkUri(Uri.parse(artworkUrl)) if (durationMs > 0) setDurationMs(durationMs) } .build() return MediaItem.Builder() .setMediaId(id) .setUri(url) .setMediaMetadata(metadata) .build() } companion object { fun fromJson(obj: JSONObject) = Track( id = obj.optString("id", ""), url = obj.optString("url", ""), title = obj.optString("title", ""), artist = obj.optString("artist", ""), album = obj.optString("album").takeIf { it.isNotEmpty() }, artworkUrl = obj.optString("artworkUrl").takeIf { it.isNotEmpty() }, durationMs = obj.optLong("durationMs", 0) ) } } fun parseTrackList(json: String): List = try { val arr = JSONArray(json) List(arr.length()) { Track.fromJson(arr.getJSONObject(it)) } } catch (_: Exception) { emptyList() }