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 8ddb5b77e..41cc1075c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -116,6 +116,10 @@ class DetailViewModel(application: Application) : currentGenre.value?.let(::refreshGenreData) } + init { + musicStore.addCallback(this) + } + fun setSongUid(uid: Music.UID) { if (_currentSong.value?.run { song.uid } == uid) return val library = unlikelyToBeNull(musicStore.library) @@ -153,10 +157,6 @@ class DetailViewModel(application: Application) : refreshGenreData(genre) } - init { - musicStore.addCallback(this) - } - private fun generateDetailSong(song: Song) { currentSongJob?.cancel() _currentSong.value = DetailSong(song, null) 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 1b8cbfd3b..e4a0b320a 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -107,9 +107,6 @@ class MusicStore private constructor() { /** Sanitize an old item to find the corresponding item in a new library. */ fun sanitize(song: Song) = find(song.uid) - /** Sanitize an old item to find the corresponding item in a new library. */ - fun sanitize(songs: List) = songs.mapNotNull { sanitize(it) } - /** Sanitize an old item to find the corresponding item in a new library. */ fun sanitize(album: Album) = find(album.uid) diff --git a/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistPickerDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistPickerDialog.kt index 48b8da362..f1a2eae24 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistPickerDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistPickerDialog.kt @@ -44,7 +44,7 @@ abstract class ArtistPickerDialog : override fun onBindingCreated(binding: DialogMusicPickerBinding, savedInstanceState: Bundle?) { binding.pickerRecycler.adapter = artistAdapter collectImmediately(pickerModel.currentArtists) { artists -> - if (artists != null) { + if (!artists.isNullOrEmpty()) { artistAdapter.submitList(artists) } else { findNavController().navigateUp() diff --git a/app/src/main/java/org/oxycblt/auxio/music/picker/MusicPickerViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/picker/MusicPickerViewModel.kt index 186dacb6e..c60f83573 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/picker/MusicPickerViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/picker/MusicPickerViewModel.kt @@ -9,7 +9,7 @@ import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.util.unlikelyToBeNull -class MusicPickerViewModel : ViewModel() { +class MusicPickerViewModel : ViewModel(), MusicStore.Callback { private val musicStore = MusicStore.getInstance() private val _currentSong = MutableStateFlow(null) @@ -28,4 +28,17 @@ class MusicPickerViewModel : ViewModel() { val library = unlikelyToBeNull(musicStore.library) _currentArtists.value = uids.mapNotNull { library.find(it) }.ifEmpty { null } } + + override fun onLibraryChanged(library: MusicStore.Library?) { + if (library != null) { + val song = _currentSong.value + val artists = _currentArtists.value + if (song != null) { + _currentSong.value = library.sanitize(song) + _currentArtists.value = _currentSong.value?.artists + } else if (artists != null){ + _currentArtists.value = artists.mapNotNull { library.sanitize(it) } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 0f71d700f..619bb66d4 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -456,7 +456,7 @@ class PlaybackStateManager private constructor() { } } - _queue = newLibrary.sanitize(_queue).toMutableList() + _queue = _queue.mapNotNullTo(mutableListOf()) { newLibrary.sanitize(it) } while (song?.uid != oldSongUid && index > -1) { index--