Make sure to resume playback from correct playlist
This commit is contained in:
@@ -218,8 +218,6 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
track_slider_timer_(new QTimer(this)),
|
track_slider_timer_(new QTimer(this)),
|
||||||
initialised_(false),
|
initialised_(false),
|
||||||
was_maximized_(true),
|
was_maximized_(true),
|
||||||
saved_playback_position_(0),
|
|
||||||
saved_playback_state_(Engine::Empty),
|
|
||||||
playing_widget_(true),
|
playing_widget_(true),
|
||||||
doubleclick_addmode_(BehaviourSettingsPage::AddBehaviour_Append),
|
doubleclick_addmode_(BehaviourSettingsPage::AddBehaviour_Append),
|
||||||
doubleclick_playmode_(BehaviourSettingsPage::PlayBehaviour_Never),
|
doubleclick_playmode_(BehaviourSettingsPage::PlayBehaviour_Never),
|
||||||
@@ -1034,9 +1032,11 @@ void MainWindow::SavePlaybackStatus() {
|
|||||||
s.beginGroup(Player::kSettingsGroup);
|
s.beginGroup(Player::kSettingsGroup);
|
||||||
s.setValue("playback_state", app_->player()->GetState());
|
s.setValue("playback_state", app_->player()->GetState());
|
||||||
if (app_->player()->GetState() == Engine::Playing || app_->player()->GetState() == Engine::Paused) {
|
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);
|
s.setValue("playback_position", app_->player()->engine()->position_nanosec() / kNsecPerSec);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
s.setValue("playback_playlist", -1);
|
||||||
s.setValue("playback_position", 0);
|
s.setValue("playback_position", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1053,11 +1053,10 @@ void MainWindow::LoadPlaybackStatus() {
|
|||||||
s.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
s.beginGroup(Player::kSettingsGroup);
|
s.beginGroup(Player::kSettingsGroup);
|
||||||
saved_playback_state_ = static_cast<Engine::State> (s.value("playback_state", Engine::Empty).toInt());
|
Engine::State playback_state = static_cast<Engine::State> (s.value("playback_state", Engine::Empty).toInt());
|
||||||
saved_playback_position_ = s.value("playback_position", 0).toDouble();
|
|
||||||
s.endGroup();
|
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()));
|
connect(app_->playlist_manager(), SIGNAL(AllPlaylistsLoaded()), SLOT(ResumePlayback()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1069,12 +1068,29 @@ void MainWindow::ResumePlayback() {
|
|||||||
|
|
||||||
disconnect(app_->playlist_manager(), SIGNAL(AllPlaylistsLoaded()), this, SLOT(ResumePlayback()));
|
disconnect(app_->playlist_manager(), SIGNAL(AllPlaylistsLoaded()), this, SLOT(ResumePlayback()));
|
||||||
|
|
||||||
if (saved_playback_state_ == Engine::Paused) {
|
QSettings s;
|
||||||
NewClosure(app_->player(), SIGNAL(Playing()), app_->player(), SLOT(PlayPause()));
|
s.beginGroup(Player::kSettingsGroup);
|
||||||
|
Engine::State playback_state = static_cast<Engine::State> (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();
|
// Reset saved playback status so we don't resume again from the same position.
|
||||||
app_->player()->SeekTo(saved_playback_position_);
|
s.beginGroup(Player::kSettingsGroup);
|
||||||
|
s.setValue("playback_state", Engine::Empty);
|
||||||
|
s.setValue("playback_playlist", -1);
|
||||||
|
s.setValue("playback_position", 0);
|
||||||
|
s.endGroup();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -345,8 +345,6 @@ signals:
|
|||||||
|
|
||||||
bool initialised_;
|
bool initialised_;
|
||||||
bool was_maximized_;
|
bool was_maximized_;
|
||||||
int saved_playback_position_;
|
|
||||||
Engine::State saved_playback_state_;
|
|
||||||
bool playing_widget_;
|
bool playing_widget_;
|
||||||
BehaviourSettingsPage::AddBehaviour doubleclick_addmode_;
|
BehaviourSettingsPage::AddBehaviour doubleclick_addmode_;
|
||||||
BehaviourSettingsPage::PlayBehaviour doubleclick_playmode_;
|
BehaviourSettingsPage::PlayBehaviour doubleclick_playmode_;
|
||||||
|
|||||||
@@ -376,6 +376,7 @@ void PlaylistManager::SetActivePlaylist(int id) {
|
|||||||
if (active_ != -1 && active_ != id) active()->set_current_row(-1);
|
if (active_ != -1 && active_ != id) active()->set_current_row(-1);
|
||||||
|
|
||||||
active_ = id;
|
active_ = id;
|
||||||
|
|
||||||
emit ActiveChanged(active());
|
emit ActiveChanged(active());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user