Redesign PlaylistScreen (#172)
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val AlbumResultSaver = ResultSaver.of(AlbumSaver)
|
||||
val AlbumResultSaver = resultSaver(AlbumSaver)
|
||||
|
||||
@@ -3,16 +3,14 @@ package it.vfsfitvnm.vimusic.savers
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
|
||||
interface ResultSaver<Original, Saveable> : Saver<Result<Original>?, Pair<Saveable?, Throwable?>> {
|
||||
companion object {
|
||||
fun <Original, Saveable : Any> of(saver: Saver<Original, Saveable>) =
|
||||
object : Saver<Result<Original>?, Pair<Saveable?, Throwable?>> {
|
||||
override fun restore(value: Pair<Saveable?, Throwable?>) =
|
||||
value.first?.let(saver::restore)?.let(Result.Companion::success)
|
||||
?: value.second?.let(Result.Companion::failure)
|
||||
interface ResultSaver<Original, Saveable> : Saver<Result<Original>?, Pair<Saveable?, Throwable?>>
|
||||
|
||||
override fun SaverScope.save(value: Result<Original>?) =
|
||||
with(saver) { value?.getOrNull()?.let { save(it) } } to value?.exceptionOrNull()
|
||||
}
|
||||
fun <Original, Saveable : Any> resultSaver(saver: Saver<Original, Saveable>) =
|
||||
object : Saver<Result<Original>?, Pair<Saveable?, Throwable?>> {
|
||||
override fun restore(value: Pair<Saveable?, Throwable?>) =
|
||||
value.first?.let(saver::restore)?.let(Result.Companion::success)
|
||||
?: value.second?.let(Result.Companion::failure)
|
||||
|
||||
override fun SaverScope.save(value: Result<Original>?) =
|
||||
with(saver) { value?.getOrNull()?.let { save(it) } } to value?.exceptionOrNull()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.autoSaver
|
||||
|
||||
val StringListResultSaver = ResultSaver.of(autoSaver<List<String>?>())
|
||||
val StringListResultSaver = resultSaver(autoSaver<List<String>?>())
|
||||
|
||||
@@ -2,4 +2,4 @@ package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.autoSaver
|
||||
|
||||
val StringResultSaver = ResultSaver.of(autoSaver<String?>())
|
||||
val StringResultSaver = resultSaver(autoSaver<String?>())
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
|
||||
object YouTubePlaylistOrAlbumSaver : Saver<YouTube.PlaylistOrAlbum, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.PlaylistOrAlbum): List<Any?> = listOf(
|
||||
value.title,
|
||||
value.authors?.let { with(YouTubeBrowseInfoListSaver) { save(it) } } ,
|
||||
value.year,
|
||||
value.thumbnail?.let { with(YouTubeThumbnailSaver) { save(it) } } ,
|
||||
value.songs?.let { with(YouTubeSongListSaver) { save(it) } },
|
||||
value.url
|
||||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun restore(value: List<Any?>) = YouTube.PlaylistOrAlbum(
|
||||
title = value[0] as String?,
|
||||
authors = (value[1] as List<List<Any?>>?)?.let(YouTubeBrowseInfoListSaver::restore),
|
||||
year = value[2] as String?,
|
||||
thumbnail = (value[3] as List<Any?>?)?.let(YouTubeThumbnailSaver::restore),
|
||||
songs = (value[4] as List<List<Any?>>?)?.let(YouTubeSongListSaver::restore),
|
||||
url = value[5] as String?,
|
||||
continuation = null
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user