From cd9d659672143bc62ce97838dfc57c44e21b021f Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 2 May 2019 12:17:47 +0200 Subject: [PATCH] Make sure to resume playback from correct playlist --- src/core/mainwindow.cpp | 34 +++++++++++++++++++++++--------- src/core/mainwindow.h | 2 -- src/playlist/playlistmanager.cpp | 1 + 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index a1166616f..db8f1544f 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -218,8 +218,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co track_slider_timer_(new QTimer(this)), initialised_(false), was_maximized_(true), - saved_playback_position_(0), - saved_playback_state_(Engine::Empty), playing_widget_(true), doubleclick_addmode_(BehaviourSettingsPage::AddBehaviour_Append), doubleclick_playmode_(BehaviourSettingsPage::PlayBehaviour_Never), @@ -1034,9 +1032,11 @@ void MainWindow::SavePlaybackStatus() { s.beginGroup(Player::kSettingsGroup); s.setValue("playback_state", app_->player()->GetState()); if (app_->player()->GetState() == Engine::Playing || app_->player()->GetState() == Engine::Paused) { + s.setValue("playback_playlist", app_->playlist_manager()->active()->id()); s.setValue("playback_position", app_->player()->engine()->position_nanosec() / kNsecPerSec); } else { + s.setValue("playback_playlist", -1); s.setValue("playback_position", 0); } @@ -1053,11 +1053,10 @@ void MainWindow::LoadPlaybackStatus() { s.endGroup(); s.beginGroup(Player::kSettingsGroup); - saved_playback_state_ = static_cast (s.value("playback_state", Engine::Empty).toInt()); - saved_playback_position_ = s.value("playback_position", 0).toDouble(); + Engine::State playback_state = static_cast (s.value("playback_state", Engine::Empty).toInt()); s.endGroup(); - if (resume_playback && saved_playback_state_ != Engine::Empty && saved_playback_state_ != Engine::Idle) { + if (resume_playback && playback_state != Engine::Empty && playback_state != Engine::Idle) { connect(app_->playlist_manager(), SIGNAL(AllPlaylistsLoaded()), SLOT(ResumePlayback())); } @@ -1069,12 +1068,29 @@ void MainWindow::ResumePlayback() { disconnect(app_->playlist_manager(), SIGNAL(AllPlaylistsLoaded()), this, SLOT(ResumePlayback())); - if (saved_playback_state_ == Engine::Paused) { - NewClosure(app_->player(), SIGNAL(Playing()), app_->player(), SLOT(PlayPause())); + QSettings s; + s.beginGroup(Player::kSettingsGroup); + Engine::State playback_state = static_cast (s.value("playback_state", Engine::Empty).toInt()); + int playback_playlist = s.value("playback_playlist", -1).toInt(); + int playback_position = s.value("playback_position", 0).toInt(); + s.endGroup(); + + if (playback_playlist == app_->playlist_manager()->current()->id()) { + // Set active to current to resume playback on correct playlist. + app_->playlist_manager()->SetActiveToCurrent(); + if (playback_state == Engine::Paused) { + NewClosure(app_->player(), SIGNAL(Playing()), app_->player(), SLOT(PlayPause())); + } + app_->player()->Play(); + app_->player()->SeekTo(playback_position); } - app_->player()->Play(); - app_->player()->SeekTo(saved_playback_position_); + // Reset saved playback status so we don't resume again from the same position. + s.beginGroup(Player::kSettingsGroup); + s.setValue("playback_state", Engine::Empty); + s.setValue("playback_playlist", -1); + s.setValue("playback_position", 0); + s.endGroup(); } diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 109998dab..2b2aceb3e 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -345,8 +345,6 @@ signals: bool initialised_; bool was_maximized_; - int saved_playback_position_; - Engine::State saved_playback_state_; bool playing_widget_; BehaviourSettingsPage::AddBehaviour doubleclick_addmode_; BehaviourSettingsPage::PlayBehaviour doubleclick_playmode_; diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 140a9bba2..266324e73 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -376,6 +376,7 @@ void PlaylistManager::SetActivePlaylist(int id) { if (active_ != -1 && active_ != id) active()->set_current_row(-1); active_ = id; + emit ActiveChanged(active()); }