diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/IntentUriScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/IntentUriScreen.kt index 5af51c7..e498afb 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/IntentUriScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/IntentUriScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha @@ -46,6 +47,44 @@ fun IntentUriScreen(uri: Uri) { val lazyListState = rememberLazyListState() + var itemsResult by remember(uri) { + mutableStateOf>?>(null) + } + + var playlistBrowseId by rememberSaveable { + mutableStateOf(null) + } + + val onLoad = relaunchableEffect(uri) { + withContext(Dispatchers.IO) { + itemsResult = uri.getQueryParameter("list")?.let { playlistId -> + if (playlistId.startsWith("OLAK5uy_")) { + YouTube.queue(playlistId)?.map { songList -> + songList ?: emptyList() + } + } else { + playlistBrowseId = "VL$playlistId" + null + } + } ?: uri.getQueryParameter("v")?.let { videoId -> + YouTube.song(videoId)?.map { song -> + song?.let { listOf(song) } ?: emptyList() + } + } ?: uri.takeIf { + uri.host == "youtu.be" + }?.path?.drop(1)?.let { videoId -> + YouTube.song(videoId)?.map { song -> + song?.let { listOf(song) } ?: emptyList() + } + } ?: Result.failure(Error("Missing URL parameters")) + } + } + + playlistBrowseId?.let { browseId -> + PlaylistScreen(browseId = browseId) + return + } + RouteHandler(listenToGlobalEmitter = true) { albumRoute { browseId -> AlbumScreen( @@ -66,34 +105,11 @@ fun IntentUriScreen(uri: Uri) { val thumbnailSizePx = Dimensions.thumbnails.song.px - var itemsResult by remember(uri) { - mutableStateOf>?>(null) - } - - val onLoad = relaunchableEffect(uri) { - withContext(Dispatchers.IO) { - itemsResult = uri.getQueryParameter("list")?.let { playlistId -> - YouTube.queue(playlistId)?.map { songList -> - songList ?: emptyList() - } - } ?: uri.getQueryParameter("v")?.let { videoId -> - YouTube.song(videoId)?.map { song -> - song?.let { listOf(song) } ?: emptyList() - } - } ?: uri.takeIf { - uri.host == "youtu.be" - }?.path?.drop(1)?.let { videoId -> - YouTube.song(videoId)?.map { song -> - song?.let { listOf(song) } ?: emptyList() - } - } ?: Result.failure(Error("Missing URL parameters")) - } - } - var isImportingAsPlaylist by remember(uri) { mutableStateOf(false) } + if (isImportingAsPlaylist) { TextFieldDialog( hintText = "Enter the playlist name",