Drop ViewModel
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val AlbumListSaver = ListSaver.of(AlbumSaver)
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val AlbumResultSaver = ResultSaver.of(AlbumSaver)
|
||||
@@ -0,0 +1,29 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.Album
|
||||
|
||||
object AlbumSaver : Saver<Album, List<Any?>> {
|
||||
override fun SaverScope.save(value: Album): List<Any?> = listOf(
|
||||
value.id,
|
||||
value.title,
|
||||
value.thumbnailUrl,
|
||||
value.year,
|
||||
value.authorsText,
|
||||
value.shareUrl,
|
||||
value.timestamp,
|
||||
value.bookmarkedAt,
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>): Album = Album(
|
||||
id = value[0] as String,
|
||||
title = value[1] as String,
|
||||
thumbnailUrl = value[2] as String?,
|
||||
year = value[3] as String?,
|
||||
authorsText = value[4] as String?,
|
||||
shareUrl = value[5] as String?,
|
||||
timestamp = value[6] as Long?,
|
||||
bookmarkedAt = value[7] as Long?,
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val ArtistListSaver = ListSaver.of(ArtistSaver)
|
||||
@@ -0,0 +1,34 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.Artist
|
||||
import it.vfsfitvnm.vimusic.models.Playlist
|
||||
|
||||
object ArtistSaver : Saver<Artist, List<Any?>> {
|
||||
override fun SaverScope.save(value: Artist): List<Any?> = listOf(
|
||||
value.id,
|
||||
value.name,
|
||||
value.thumbnailUrl,
|
||||
value.info,
|
||||
value.shuffleVideoId,
|
||||
value.shufflePlaylistId,
|
||||
value.radioVideoId,
|
||||
value.radioPlaylistId,
|
||||
value.timestamp,
|
||||
value.bookmarkedAt,
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>): Artist = Artist(
|
||||
id = value[0] as String,
|
||||
name = value[1] as String,
|
||||
thumbnailUrl = value[2] as String?,
|
||||
info = value[3] as String?,
|
||||
shuffleVideoId = value[4] as String?,
|
||||
shufflePlaylistId = value[5] as String?,
|
||||
radioVideoId = value[6] as String?,
|
||||
radioPlaylistId = value[7] as String?,
|
||||
timestamp = value[8] as Long?,
|
||||
bookmarkedAt = value[9] as Long?,
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val DetailedSongListSaver = ListSaver.of(DetailedSongSaver)
|
||||
@@ -0,0 +1,33 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
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?> =
|
||||
listOf(
|
||||
value.id,
|
||||
value.title,
|
||||
value.artistsText,
|
||||
value.durationText,
|
||||
value.thumbnailUrl,
|
||||
value.totalPlayTimeMs,
|
||||
value.albumId,
|
||||
value.artists?.let { with(InfoListSaver) { save(it) } }
|
||||
)
|
||||
|
||||
@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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val InfoListSaver = ListSaver.of(InfoSaver)
|
||||
16
app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/InfoSaver.kt
Normal file
16
app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/InfoSaver.kt
Normal file
@@ -0,0 +1,16 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.Info
|
||||
|
||||
object InfoSaver : Saver<Info, List<String>> {
|
||||
override fun SaverScope.save(value: Info): List<String> = listOf(value.id, value.name)
|
||||
|
||||
override fun restore(value: List<String>): Info? {
|
||||
return if (value.size == 2) Info(
|
||||
id = value[0],
|
||||
name = value[1],
|
||||
) else null
|
||||
}
|
||||
}
|
||||
20
app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/ListSaver.kt
Normal file
20
app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/ListSaver.kt
Normal file
@@ -0,0 +1,20 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
|
||||
interface ListSaver<Original, Saveable : Any> : Saver<List<Original>, List<Saveable>> {
|
||||
companion object {
|
||||
fun <Original, Saveable : Any> of(saver: Saver<Original, Saveable>): ListSaver<Original, Saveable> {
|
||||
return object : ListSaver<Original, Saveable> {
|
||||
override fun restore(value: List<Saveable>): List<Original> {
|
||||
return value.mapNotNull(saver::restore)
|
||||
}
|
||||
|
||||
override fun SaverScope.save(value: List<Original>): List<Saveable> {
|
||||
return with(saver) { value.mapNotNull { save(it) } }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val PlaylistPreviewListSaver = ListSaver.of(PlaylistPreviewSaver)
|
||||
@@ -0,0 +1,21 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.PlaylistPreview
|
||||
|
||||
object PlaylistPreviewSaver : Saver<PlaylistPreview, List<Any?>> {
|
||||
override fun SaverScope.save(value: PlaylistPreview): List<Any> {
|
||||
return listOf(
|
||||
with(PlaylistSaver) { save(value.playlist) },
|
||||
value.songCount,
|
||||
)
|
||||
}
|
||||
|
||||
override fun restore(value: List<Any?>): PlaylistPreview? {
|
||||
return if (value.size == 2) PlaylistPreview(
|
||||
playlist = PlaylistSaver.restore(value[0] as List<Any?>),
|
||||
songCount = value[1] as Int,
|
||||
) else null
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.Playlist
|
||||
|
||||
object PlaylistSaver : Saver<Playlist, List<Any?>> {
|
||||
override fun SaverScope.save(value: Playlist): List<Any?> = listOf(
|
||||
value.id,
|
||||
value.name,
|
||||
value.browseId,
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>): Playlist = Playlist(
|
||||
id = value[0] as Long,
|
||||
name = value[1] as String,
|
||||
browseId = value[2] as String?,
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
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)
|
||||
|
||||
override fun SaverScope.save(value: Result<Original>?) =
|
||||
with(saver) { value?.getOrNull()?.let { save(it) } } to value?.exceptionOrNull()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val SearchQueryListSaver = ListSaver.of(SearchQuerySaver)
|
||||
@@ -0,0 +1,17 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.vimusic.models.SearchQuery
|
||||
|
||||
object SearchQuerySaver : Saver<SearchQuery, List<Any?>> {
|
||||
override fun SaverScope.save(value: SearchQuery): List<Any?> = listOf(
|
||||
value.id,
|
||||
value.query,
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = SearchQuery(
|
||||
id = value[0] as Long,
|
||||
query = value[1] as String
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.autoSaver
|
||||
|
||||
val StringListResultSaver = ResultSaver.of(autoSaver<List<String>?>())
|
||||
@@ -0,0 +1,5 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.autoSaver
|
||||
|
||||
val StringResultSaver = ResultSaver.of(autoSaver<String?>())
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val YouTubeAlbumListSaver = ListSaver.of(YouTubeAlbumSaver)
|
||||
@@ -0,0 +1,22 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
|
||||
object YouTubeAlbumSaver : Saver<YouTube.Item.Album, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Item.Album): List<Any?> = listOf(
|
||||
with(YouTubeBrowseInfoSaver) { save(value.info) },
|
||||
with(YouTubeBrowseInfoListSaver) { value.authors?.let { save(it) } },
|
||||
value.year,
|
||||
with(YouTubeThumbnailSaver) { value.thumbnail?.let { save(it) } }
|
||||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun restore(value: List<Any?>) = YouTube.Item.Album(
|
||||
info = YouTubeBrowseInfoSaver.restore(value[0] as List<Any?>),
|
||||
authors = (value[1] as List<List<Any?>>?)?.let(YouTubeBrowseInfoListSaver::restore),
|
||||
year = value[2] as String?,
|
||||
thumbnail = (value[3] as List<Any?>?)?.let(YouTubeThumbnailSaver::restore)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val YouTubeArtistListSaver = ListSaver.of(YouTubeArtistSaver)
|
||||
@@ -0,0 +1,19 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
|
||||
object YouTubeArtistSaver : Saver<YouTube.Item.Artist, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Item.Artist): List<Any?> = listOf(
|
||||
with(YouTubeBrowseInfoSaver) { save(value.info) },
|
||||
value.subscribersCountText,
|
||||
with(YouTubeThumbnailSaver) { value.thumbnail?.let { save(it) } }
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = YouTube.Item.Artist(
|
||||
info = YouTubeBrowseInfoSaver.restore(value[0] as List<Any?>),
|
||||
subscribersCountText = value[1] as String?,
|
||||
thumbnail = (value[2] as List<Any?>?)?.let(YouTubeThumbnailSaver::restore)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.models.NavigationEndpoint
|
||||
|
||||
object YouTubeBrowseEndpointSaver : Saver<NavigationEndpoint.Endpoint.Browse, List<Any?>> {
|
||||
override fun SaverScope.save(value: NavigationEndpoint.Endpoint.Browse) = listOf(
|
||||
value.browseId,
|
||||
value.params
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = NavigationEndpoint.Endpoint.Browse(
|
||||
browseId = value[0] as String,
|
||||
params = value[1] as String?,
|
||||
browseEndpointContextSupportedConfigs = null
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val YouTubeBrowseInfoListSaver = ListSaver.of(YouTubeBrowseInfoSaver)
|
||||
@@ -0,0 +1,18 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
import it.vfsfitvnm.youtubemusic.models.NavigationEndpoint
|
||||
|
||||
object YouTubeBrowseInfoSaver : Saver<YouTube.Info<NavigationEndpoint.Endpoint.Browse>, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Info<NavigationEndpoint.Endpoint.Browse>) = listOf(
|
||||
value.name,
|
||||
with(YouTubeBrowseEndpointSaver) { value.endpoint?.let { save(it) } }
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = YouTube.Info(
|
||||
name = value[0] as String,
|
||||
endpoint = (value[1] as List<Any?>?)?.let(YouTubeBrowseEndpointSaver::restore)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val YouTubePlaylistListSaver = ListSaver.of(YouTubePlaylistSaver)
|
||||
@@ -0,0 +1,21 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
|
||||
object YouTubePlaylistSaver : Saver<YouTube.Item.Playlist, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Item.Playlist): List<Any?> = listOf(
|
||||
with(YouTubeBrowseInfoSaver) { save(value.info) },
|
||||
with(YouTubeBrowseInfoSaver) { value.channel?.let { save(it) } },
|
||||
value.songCount,
|
||||
with(YouTubeThumbnailSaver) { value.thumbnail?.let { save(it) } }
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = YouTube.Item.Playlist(
|
||||
info = YouTubeBrowseInfoSaver.restore(value[0] as List<Any?>),
|
||||
channel = (value[1] as List<Any?>?)?.let(YouTubeBrowseInfoSaver::restore),
|
||||
songCount = value[2] as Int?,
|
||||
thumbnail = (value[3] as List<Any?>?)?.let(YouTubeThumbnailSaver::restore)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val YouTubeSongListSaver = ListSaver.of(YouTubeSongSaver)
|
||||
@@ -0,0 +1,24 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
|
||||
object YouTubeSongSaver : Saver<YouTube.Item.Song, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Item.Song): List<Any?> = listOf(
|
||||
with(YouTubeWatchInfoSaver) { save(value.info) },
|
||||
with(YouTubeBrowseInfoListSaver) { value.authors?.let { save(it) } },
|
||||
with(YouTubeBrowseInfoSaver) { value.album?.let { save(it) } },
|
||||
value.durationText,
|
||||
with(YouTubeThumbnailSaver) { value.thumbnail?.let { save(it) } }
|
||||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun restore(value: List<Any?>) = YouTube.Item.Song(
|
||||
info = YouTubeWatchInfoSaver.restore(value[0] as List<Any?>),
|
||||
authors = YouTubeBrowseInfoListSaver.restore(value[1] as List<List<Any?>>),
|
||||
album = (value[2] as List<Any?>?)?.let(YouTubeBrowseInfoSaver::restore),
|
||||
durationText = value[3] as String?,
|
||||
thumbnail = (value[4] as List<Any?>?)?.let(YouTubeThumbnailSaver::restore)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.models.ThumbnailRenderer
|
||||
|
||||
object YouTubeThumbnailSaver : Saver<ThumbnailRenderer.MusicThumbnailRenderer.Thumbnail.Thumbnail, List<Any?>> {
|
||||
override fun SaverScope.save(value: ThumbnailRenderer.MusicThumbnailRenderer.Thumbnail.Thumbnail) = listOf(
|
||||
value.url,
|
||||
value.width,
|
||||
value.height
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = ThumbnailRenderer.MusicThumbnailRenderer.Thumbnail.Thumbnail(
|
||||
url = value[0] as String,
|
||||
width = value[1] as Int,
|
||||
height = value[2] as Int?,
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
val YouTubeVideoListSaver = ListSaver.of(YouTubeVideoSaver)
|
||||
@@ -0,0 +1,24 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
|
||||
object YouTubeVideoSaver : Saver<YouTube.Item.Video, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Item.Video): List<Any?> = listOf(
|
||||
with(YouTubeWatchInfoSaver) { save(value.info) },
|
||||
with(YouTubeBrowseInfoListSaver) { value.authors?.let { save(it) } },
|
||||
value.viewsText,
|
||||
value.durationText,
|
||||
with(YouTubeThumbnailSaver) { value.thumbnail?.let { save(it) } }
|
||||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun restore(value: List<Any?>) = YouTube.Item.Video(
|
||||
info = YouTubeWatchInfoSaver.restore(value[0] as List<Any?>),
|
||||
authors = YouTubeBrowseInfoListSaver.restore(value[1] as List<List<Any?>>),
|
||||
viewsText = value[2] as String?,
|
||||
durationText = value[3] as String?,
|
||||
thumbnail = (value[4] as List<Any?>?)?.let(YouTubeThumbnailSaver::restore)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.models.NavigationEndpoint
|
||||
|
||||
object YouTubeWatchEndpointSaver : Saver<NavigationEndpoint.Endpoint.Watch, List<Any?>> {
|
||||
override fun SaverScope.save(value: NavigationEndpoint.Endpoint.Watch) = listOf(
|
||||
value.params,
|
||||
value.playlistId,
|
||||
value.videoId,
|
||||
value.index,
|
||||
value.playlistSetVideoId,
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = NavigationEndpoint.Endpoint.Watch(
|
||||
params = value[0] as String?,
|
||||
playlistId = value[1] as String?,
|
||||
videoId = value[2] as String?,
|
||||
index = value[3] as Int?,
|
||||
playlistSetVideoId = value[4] as String?,
|
||||
watchEndpointMusicSupportedConfigs = null
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package it.vfsfitvnm.vimusic.savers
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import androidx.compose.runtime.saveable.SaverScope
|
||||
import it.vfsfitvnm.youtubemusic.YouTube
|
||||
import it.vfsfitvnm.youtubemusic.models.NavigationEndpoint
|
||||
|
||||
object YouTubeWatchInfoSaver : Saver<YouTube.Info<NavigationEndpoint.Endpoint.Watch>, List<Any?>> {
|
||||
override fun SaverScope.save(value: YouTube.Info<NavigationEndpoint.Endpoint.Watch>) = listOf(
|
||||
value.name,
|
||||
with(YouTubeWatchEndpointSaver) { value.endpoint?.let { save(it) } }
|
||||
)
|
||||
|
||||
override fun restore(value: List<Any?>) = YouTube.Info(
|
||||
name = value[0] as String,
|
||||
endpoint = (value[1] as List<Any?>?)?.let(YouTubeWatchEndpointSaver::restore)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user