music: fix mediaitem library update logic

This commit is contained in:
Alexander Capehart 2024-04-12 13:58:53 -06:00
parent 3a4ddb43b9
commit 07b17caf8f
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
2 changed files with 14 additions and 8 deletions

View file

@ -69,21 +69,25 @@ constructor(
override fun onMusicChanges(changes: MusicRepository.Changes) { override fun onMusicChanges(changes: MusicRepository.Changes) {
val deviceLibrary = musicRepository.deviceLibrary val deviceLibrary = musicRepository.deviceLibrary
var invalidateSearch = false var invalidateSearch = false
val invalidate = mutableListOf<MediaSessionUID>()
if (changes.deviceLibrary && deviceLibrary != null) { if (changes.deviceLibrary && deviceLibrary != null) {
val ids = invalidate.addAll(MediaSessionUID.Category.DEVICE_MUSIC)
MediaSessionUID.Category.IMPORTANT + deviceLibrary.albums.mapTo(invalidate) { MediaSessionUID.Single(it.uid) }
deviceLibrary.albums.map { MediaSessionUID.Single(it.uid) } + deviceLibrary.artists.mapTo(invalidate) { MediaSessionUID.Single(it.uid) }
deviceLibrary.artists.map { MediaSessionUID.Single(it.uid) } + deviceLibrary.genres.mapTo(invalidate) { MediaSessionUID.Single(it.uid) }
deviceLibrary.genres.map { MediaSessionUID.Single(it.uid) }
invalidator?.invalidate(ids.map { it.toString() })
invalidateSearch = true invalidateSearch = true
} }
val userLibrary = musicRepository.userLibrary val userLibrary = musicRepository.userLibrary
if (changes.userLibrary && userLibrary != null) { if (changes.userLibrary && userLibrary != null) {
val ids = userLibrary.playlists.map { MediaSessionUID.Single(it.uid) } invalidate.addAll(MediaSessionUID.Category.USER_MUSIC)
invalidator?.invalidate(ids.map { it.toString() }) userLibrary.playlists.mapTo(invalidate) { MediaSessionUID.Single(it.uid) }
invalidateSearch = true invalidateSearch = true
} }
if (invalidate.isNotEmpty()) {
invalidator?.invalidate(invalidate.map { it.toString() })
}
if (invalidateSearch) { if (invalidateSearch) {
for (entry in searchResults.entries) { for (entry in searchResults.entries) {
entry.value.cancel() entry.value.cancel()

View file

@ -217,6 +217,8 @@ sealed interface MediaSessionUID {
override fun toString() = "$ID_CATEGORY:$id" override fun toString() = "$ID_CATEGORY:$id"
companion object { companion object {
val DEVICE_MUSIC = listOf(ROOT, SONGS, ALBUMS, ARTISTS, GENRES)
val USER_MUSIC = listOf(ROOT, PLAYLISTS)
val IMPORTANT = listOf(SONGS, ALBUMS, ARTISTS, GENRES, PLAYLISTS) val IMPORTANT = listOf(SONGS, ALBUMS, ARTISTS, GENRES, PLAYLISTS)
} }
} }