From d4d3bd5ff4fc1d3c7ac3426644e835428b2da467 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Tue, 3 Jan 2023 13:53:17 -0700 Subject: [PATCH] detail: band-aid crashes when library unavailable Band-aid a crash that would occur when the library is somehow unavailable in the detail view. Now, if it's unavailable, the app simple navigates away. Not sure how this is happening, but I'd imagine it's some caching shenanigans I need to fix by using volatile on any shared field. --- .../java/org/oxycblt/auxio/detail/DetailViewModel.kt | 11 +++++------ .../main/java/org/oxycblt/auxio/music/MusicStore.kt | 2 ++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index 378cfe15f..be5f9e3fb 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -183,7 +183,7 @@ class DetailViewModel(application: Application) : return } logD("Opening Song [uid: $uid]") - _currentSong.value = requireMusic(uid).also(::loadProperties) + _currentSong.value = requireMusic(uid)?.also(::loadProperties) } /** @@ -197,7 +197,7 @@ class DetailViewModel(application: Application) : return } logD("Opening Album [uid: $uid]") - _currentAlbum.value = requireMusic(uid).also(::refreshAlbumList) + _currentAlbum.value = requireMusic(uid)?.also(::refreshAlbumList) } /** @@ -211,7 +211,7 @@ class DetailViewModel(application: Application) : return } logD("Opening Artist [uid: $uid]") - _currentArtist.value = requireMusic(uid).also(::refreshArtistList) + _currentArtist.value = requireMusic(uid)?.also(::refreshArtistList) } /** @@ -225,11 +225,10 @@ class DetailViewModel(application: Application) : return } logD("Opening Genre [uid: $uid]") - _currentGenre.value = requireMusic(uid).also(::refreshGenreList) + _currentGenre.value = requireMusic(uid)?.also(::refreshGenreList) } - private fun requireMusic(uid: Music.UID): T = - requireNotNull(unlikelyToBeNull(musicStore.library).find(uid)) { "Invalid id provided" } + private fun requireMusic(uid: Music.UID) = musicStore.library?.find(uid) /** * Start a new job to load a [DetailSong] based on the properties of the given [Song]'s file. diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt index 8baabb71c..14150fb70 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -30,6 +30,8 @@ import org.oxycblt.auxio.music.filesystem.useQuery * generally recommended to use this over Indexer to keep track of the library state, as the * interface will be less volatile. * + * TODO: Use volatile on individual fields + * * @author Alexander Capehart (OxygenCobalt) */ class MusicStore private constructor() {