From 07b17caf8ffed65439c437967fb474c5d8f3e4b5 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 12 Apr 2024 13:58:53 -0600 Subject: [PATCH] music: fix mediaitem library update logic --- .../auxio/music/service/MediaItemBrowser.kt | 20 +++++++++++-------- .../music/service/MediaItemTranslation.kt | 2 ++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt index 93f383917..69ac27d7f 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemBrowser.kt @@ -69,21 +69,25 @@ constructor( override fun onMusicChanges(changes: MusicRepository.Changes) { val deviceLibrary = musicRepository.deviceLibrary var invalidateSearch = false + val invalidate = mutableListOf() if (changes.deviceLibrary && deviceLibrary != null) { - val ids = - MediaSessionUID.Category.IMPORTANT + - deviceLibrary.albums.map { MediaSessionUID.Single(it.uid) } + - deviceLibrary.artists.map { MediaSessionUID.Single(it.uid) } + - deviceLibrary.genres.map { MediaSessionUID.Single(it.uid) } - invalidator?.invalidate(ids.map { it.toString() }) + invalidate.addAll(MediaSessionUID.Category.DEVICE_MUSIC) + deviceLibrary.albums.mapTo(invalidate) { MediaSessionUID.Single(it.uid) } + deviceLibrary.artists.mapTo(invalidate) { MediaSessionUID.Single(it.uid) } + deviceLibrary.genres.mapTo(invalidate) { MediaSessionUID.Single(it.uid) } invalidateSearch = true } val userLibrary = musicRepository.userLibrary if (changes.userLibrary && userLibrary != null) { - val ids = userLibrary.playlists.map { MediaSessionUID.Single(it.uid) } - invalidator?.invalidate(ids.map { it.toString() }) + invalidate.addAll(MediaSessionUID.Category.USER_MUSIC) + userLibrary.playlists.mapTo(invalidate) { MediaSessionUID.Single(it.uid) } invalidateSearch = true } + + if (invalidate.isNotEmpty()) { + invalidator?.invalidate(invalidate.map { it.toString() }) + } + if (invalidateSearch) { for (entry in searchResults.entries) { entry.value.cancel() diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt index 2a6175627..9cadbeda5 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/MediaItemTranslation.kt @@ -217,6 +217,8 @@ sealed interface MediaSessionUID { override fun toString() = "$ID_CATEGORY:$id" 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) } }