diff --git a/CHANGELOG.md b/CHANGELOG.md index b5ff5f568..72e2fbf10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ #### What's Improved - Tags formatted as `artistssort` or `albumartistssort` are now recognized by Auxio +- Reduced visual loading time #### What's Fixed - Disc number is no longer mis-aligned when no subtitle is present diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt index f1da906b7..ab8bb16cb 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt @@ -429,7 +429,6 @@ constructor( // Successfully loaded the library, now save the cache and read playlist information // in parallel. logD("Discovered ${rawSongs.size} songs, starting finalization") - // TODO: Indicate playlist state in loading process? emitLoading(IndexingProgress.Indeterminate) logD("Starting UserLibrary query") if (cache == null || cache.invalidated) { diff --git a/app/src/main/java/org/oxycblt/auxio/music/user/UserLibrary.kt b/app/src/main/java/org/oxycblt/auxio/music/user/UserLibrary.kt index d6265bd00..a66bfd69a 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/user/UserLibrary.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/user/UserLibrary.kt @@ -161,7 +161,6 @@ private class UserLibraryImpl( override fun findPlaylist(name: String) = playlistMap.values.find { it.name.raw == name } override suspend fun createPlaylist(name: String, songs: List) { - // TODO: Use synchronized with value access too val playlistImpl = PlaylistImpl.from(name, songs, musicSettings) synchronized(this) { playlistMap[playlistImpl.uid] = playlistImpl } val rawPlaylist = @@ -181,8 +180,11 @@ private class UserLibraryImpl( override suspend fun renamePlaylist(playlist: Playlist, name: String) { val playlistImpl = - requireNotNull(playlistMap[playlist.uid]) { "Cannot rename invalid playlist" } - synchronized(this) { playlistMap[playlist.uid] = playlistImpl.edit(name, musicSettings) } + synchronized(this) { + requireNotNull(playlistMap[playlist.uid]) { "Cannot rename invalid playlist" }.also { + playlistMap[it.uid] = it.edit(name, musicSettings) + } + } try { playlistDao.replacePlaylistInfo(PlaylistInfo(playlist.uid, name)) logD("Successfully renamed $playlist to $name") @@ -195,9 +197,11 @@ private class UserLibraryImpl( } override suspend fun deletePlaylist(playlist: Playlist) { - val playlistImpl = - requireNotNull(playlistMap[playlist.uid]) { "Cannot remove invalid playlist" } - synchronized(this) { playlistMap.remove(playlistImpl.uid) } + val playlistImpl = synchronized(this) { + requireNotNull(playlistMap[playlist.uid]) { "Cannot remove invalid playlist" }.also { + playlistMap.remove(it.uid) + } + } try { playlistDao.deletePlaylist(playlist.uid) logD("Successfully deleted $playlist") @@ -210,9 +214,12 @@ private class UserLibraryImpl( } override suspend fun addToPlaylist(playlist: Playlist, songs: List) { - val playlistImpl = - requireNotNull(playlistMap[playlist.uid]) { "Cannot add to invalid playlist" } - synchronized(this) { playlistMap[playlist.uid] = playlistImpl.edit { addAll(songs) } } + val playlistImpl = synchronized(this) { + requireNotNull(playlistMap[playlist.uid]) { "Cannot add to invalid playlist" }.also { + playlistMap[it.uid] = it.edit { addAll(songs) } + } + } + try { playlistDao.insertPlaylistSongs(playlist.uid, songs.map { PlaylistSong(it.uid) }) logD("Successfully added ${songs.size} songs to $playlist") @@ -225,9 +232,12 @@ private class UserLibraryImpl( } override suspend fun rewritePlaylist(playlist: Playlist, songs: List) { - val playlistImpl = - requireNotNull(playlistMap[playlist.uid]) { "Cannot rewrite invalid playlist" } - synchronized(this) { playlistMap[playlist.uid] = playlistImpl.edit(songs) } + val playlistImpl = synchronized(this) { + requireNotNull(playlistMap[playlist.uid]) { "Cannot rewrite invalid playlist" }.also { + playlistMap[it.uid] = it.edit(songs) + } + } + try { playlistDao.replacePlaylistSongs(playlist.uid, songs.map { PlaylistSong(it.uid) }) logD("Successfully rewrote $playlist with ${songs.size} songs")