Redesign LocalPlaylistScreen (#172)
This commit is contained in:
@@ -5,7 +5,7 @@ import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.DetailedSong
|
||||
|
||||
object DetailedSongSaver : Saver<DetailedSong, List<Any?>> {
|
||||
override fun SaverScope.save(value: DetailedSong): List<Any?> =
|
||||
override fun SaverScope.save(value: DetailedSong) =
|
||||
listOf(
|
||||
value.id,
|
||||
value.title,
|
||||
@@ -18,16 +18,14 @@ object DetailedSongSaver : Saver<DetailedSong, List<Any?>> {
|
||||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun restore(value: List<Any?>): DetailedSong? {
|
||||
return if (value.size == 8) DetailedSong(
|
||||
id = value[0] as String,
|
||||
title = value[1] as String,
|
||||
artistsText = value[2] as String?,
|
||||
durationText = value[3] as String,
|
||||
thumbnailUrl = value[4] as String?,
|
||||
totalPlayTimeMs = value[5] as Long,
|
||||
albumId = value[6] as String?,
|
||||
artists = InfoListSaver.restore(value[7] as List<List<String>>)
|
||||
) else null
|
||||
}
|
||||
override fun restore(value: List<Any?>) = DetailedSong(
|
||||
id = value[0] as String,
|
||||
title = value[1] as String,
|
||||
artistsText = value[2] as String?,
|
||||
durationText = value[3] as String,
|
||||
thumbnailUrl = value[4] as String?,
|
||||
totalPlayTimeMs = value[5] as Long,
|
||||
albumId = value[6] as String?,
|
||||
artists = InfoListSaver.restore(value[7] as List<List<String>>)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,9 @@ import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
|
||||
interface ListSaver<Original, Saveable : Any> : Saver<List<Original>, List<Saveable>> {
|
||||
override fun SaverScope.save(value: List<Original>): List<Saveable>
|
||||
override fun restore(value: List<Saveable>): List<Original>
|
||||
|
||||
companion object {
|
||||
fun <Original, Saveable : Any> of(saver: Saver<Original, Saveable>): ListSaver<Original, Saveable> {
|
||||
return object : ListSaver<Original, Saveable> {
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistWithSongs
|
||||
|
||||
object PlaylistWithSongsSaver : Saver<PlaylistWithSongs?, List<Any>> {
|
||||
override fun SaverScope.save(value: PlaylistWithSongs?) = value?.let {
|
||||
listOf(
|
||||
with(PlaylistSaver) { save(value.playlist) },
|
||||
with(DetailedSongListSaver) { save(value.songs) },
|
||||
)
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun restore(value: List<Any>): PlaylistWithSongs = PlaylistWithSongs(
|
||||
playlist = PlaylistSaver.restore(value[0] as List<Any?>),
|
||||
songs = DetailedSongListSaver.restore(value[1] as List<List<Any?>>)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user