music: fix crash on playlist add
Caused by the new state restoration code being bugged and applying on playlist changes, then combined with the playlist code not properly switching to the main context when dispatching a library update.
This commit is contained in:
parent
ddc321893d
commit
44b7a435d1
2 changed files with 6 additions and 11 deletions
|
@ -305,35 +305,35 @@ constructor(
|
||||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||||
logD("Creating playlist $name with ${songs.size} songs")
|
logD("Creating playlist $name with ${songs.size} songs")
|
||||||
userLibrary.createPlaylist(name, songs)
|
userLibrary.createPlaylist(name, songs)
|
||||||
dispatchLibraryChange(device = false, user = true)
|
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun renamePlaylist(playlist: Playlist, name: String) {
|
override suspend fun renamePlaylist(playlist: Playlist, name: String) {
|
||||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||||
logD("Renaming $playlist to $name")
|
logD("Renaming $playlist to $name")
|
||||||
userLibrary.renamePlaylist(playlist, name)
|
userLibrary.renamePlaylist(playlist, name)
|
||||||
dispatchLibraryChange(device = false, user = true)
|
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun deletePlaylist(playlist: Playlist) {
|
override suspend fun deletePlaylist(playlist: Playlist) {
|
||||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||||
logD("Deleting $playlist")
|
logD("Deleting $playlist")
|
||||||
userLibrary.deletePlaylist(playlist)
|
userLibrary.deletePlaylist(playlist)
|
||||||
dispatchLibraryChange(device = false, user = true)
|
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun addToPlaylist(songs: List<Song>, playlist: Playlist) {
|
override suspend fun addToPlaylist(songs: List<Song>, playlist: Playlist) {
|
||||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||||
logD("Adding ${songs.size} songs to $playlist")
|
logD("Adding ${songs.size} songs to $playlist")
|
||||||
userLibrary.addToPlaylist(playlist, songs)
|
userLibrary.addToPlaylist(playlist, songs)
|
||||||
dispatchLibraryChange(device = false, user = true)
|
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun rewritePlaylist(playlist: Playlist, songs: List<Song>) {
|
override suspend fun rewritePlaylist(playlist: Playlist, songs: List<Song>) {
|
||||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||||
logD("Rewriting $playlist with ${songs.size} songs")
|
logD("Rewriting $playlist with ${songs.size} songs")
|
||||||
userLibrary.rewritePlaylist(playlist, songs)
|
userLibrary.rewritePlaylist(playlist, songs)
|
||||||
dispatchLibraryChange(device = false, user = true)
|
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
|
|
@ -780,14 +780,9 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
||||||
val oldStateMirror = stateMirror
|
val oldStateMirror = stateMirror
|
||||||
if (oldStateMirror.rawQueue != rawQueue) {
|
if (oldStateMirror.rawQueue != rawQueue) {
|
||||||
logD("Queue changed, must reload player")
|
logD("Queue changed, must reload player")
|
||||||
|
stateHolder?.playing(false)
|
||||||
stateHolder?.applySavedState(parent, rawQueue, StateAck.NewPlayback)
|
stateHolder?.applySavedState(parent, rawQueue, StateAck.NewPlayback)
|
||||||
stateHolder?.playing(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oldStateMirror.progression.calculateElapsedPositionMs() != savedState.positionMs) {
|
|
||||||
logD("Seeking to saved position ${savedState.positionMs}ms")
|
|
||||||
stateHolder?.seekTo(savedState.positionMs)
|
stateHolder?.seekTo(savedState.positionMs)
|
||||||
stateHolder?.playing(false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue