diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/AlbumScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/AlbumScreen.kt index 0379f47..f5d4536 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/AlbumScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/AlbumScreen.kt @@ -80,7 +80,6 @@ import java.util.Date import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map -import kotlinx.coroutines.runBlocking @ExperimentalAnimationApi @Composable @@ -92,7 +91,34 @@ fun AlbumScreen(browseId: String) { album ?.takeIf { album.timestamp != null } ?.let(Result.Companion::success) - ?: fetchAlbum(browseId) + ?: YouTube.album(browseId)?.map { youtubeAlbum -> + Database.upsert( + Album( + id = browseId, + title = youtubeAlbum.title, + thumbnailUrl = youtubeAlbum.thumbnail?.url, + year = youtubeAlbum.year, + authorsText = youtubeAlbum.authors?.joinToString("") { it.name }, + shareUrl = youtubeAlbum.url, + timestamp = System.currentTimeMillis() + ) + ) + + youtubeAlbum.items?.forEachIndexed { position, albumItem -> + albumItem.toMediaItem(browseId, youtubeAlbum)?.let { mediaItem -> + Database.insert(mediaItem) + Database.upsert( + SongAlbumMap( + songId = mediaItem.mediaId, + albumId = browseId, + position = position + ) + ) + } + } + + null + } }.distinctUntilChanged() }.collectAsState(initial = null, context = Dispatchers.IO) @@ -112,7 +138,8 @@ fun AlbumScreen(browseId: String) { LazyColumn( state = lazyListState, - contentPadding = WindowInsets.systemBars.asPaddingValues().add(bottom = Dimensions.collapsedPlayer), + contentPadding = WindowInsets.systemBars.asPaddingValues() + .add(bottom = Dimensions.collapsedPlayer), modifier = Modifier .background(colorPalette.background0) .fillMaxSize() @@ -307,9 +334,6 @@ fun AlbumScreen(browseId: String) { albumResult ?.getOrNull() ?.let(Database::delete) - runBlocking(Dispatchers.IO) { - fetchAlbum(browseId) - } } } ) @@ -402,35 +426,3 @@ private fun LoadingOrError( } } } - -private suspend fun fetchAlbum(browseId: String): Result? { - return YouTube.album(browseId) - ?.map { youtubeAlbum -> - val album = Album( - id = browseId, - title = youtubeAlbum.title, - thumbnailUrl = youtubeAlbum.thumbnail?.url, - year = youtubeAlbum.year, - authorsText = youtubeAlbum.authors?.joinToString("") { it.name }, - shareUrl = youtubeAlbum.url, - timestamp = System.currentTimeMillis() - ) - - Database.upsert(album) - - youtubeAlbum.items?.forEachIndexed { position, albumItem -> - albumItem.toMediaItem(browseId, youtubeAlbum)?.let { mediaItem -> - Database.insert(mediaItem) - Database.upsert( - SongAlbumMap( - songId = mediaItem.mediaId, - albumId = browseId, - position = position - ) - ) - } - } - - album - } -}