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 }
|
||||
logD("Creating playlist $name with ${songs.size} 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) {
|
||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||
logD("Renaming $playlist to $name")
|
||||
userLibrary.renamePlaylist(playlist, name)
|
||||
dispatchLibraryChange(device = false, user = true)
|
||||
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||
}
|
||||
|
||||
override suspend fun deletePlaylist(playlist: Playlist) {
|
||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||
logD("Deleting $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) {
|
||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||
logD("Adding ${songs.size} songs to $playlist")
|
||||
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>) {
|
||||
val userLibrary = synchronized(this) { userLibrary ?: return }
|
||||
logD("Rewriting $playlist with ${songs.size} songs")
|
||||
userLibrary.rewritePlaylist(playlist, songs)
|
||||
dispatchLibraryChange(device = false, user = true)
|
||||
withContext(Dispatchers.Main) { dispatchLibraryChange(device = false, user = true) }
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
|
|
|
@ -780,14 +780,9 @@ class PlaybackStateManagerImpl @Inject constructor() : PlaybackStateManager {
|
|||
val oldStateMirror = stateMirror
|
||||
if (oldStateMirror.rawQueue != rawQueue) {
|
||||
logD("Queue changed, must reload player")
|
||||
stateHolder?.playing(false)
|
||||
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?.playing(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue