Fix resume playback on startup

This commit is contained in:
Jonas Kvinge
2019-05-02 11:31:31 +02:00
parent 8fe0229a2c
commit ca140388d9
7 changed files with 43 additions and 28 deletions

View File

@@ -794,7 +794,9 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
CommandlineOptionsReceived(options);
if (!options.contains_play_options()) LoadPlaybackStatus();
if (!options.contains_play_options()) {
LoadPlaybackStatus();
}
RefreshStyleSheet();
@@ -1027,49 +1029,45 @@ void MainWindow::SaveGeometry() {
void MainWindow::SavePlaybackStatus() {
QSettings settings;
QSettings s;
settings.beginGroup("Player");
settings.setValue("playback_state", app_->player()->GetState());
s.beginGroup(Player::kSettingsGroup);
s.setValue("playback_state", app_->player()->GetState());
if (app_->player()->GetState() == Engine::Playing || app_->player()->GetState() == Engine::Paused) {
settings.setValue("playback_position", app_->player()->engine()->position_nanosec() / kNsecPerSec);
s.setValue("playback_position", app_->player()->engine()->position_nanosec() / kNsecPerSec);
}
else {
settings.setValue("playback_position", 0);
s.setValue("playback_position", 0);
}
settings.endGroup();
s.endGroup();
}
void MainWindow::LoadPlaybackStatus() {
QSettings settings;
QSettings s;
settings.beginGroup(BehaviourSettingsPage::kSettingsGroup);
bool resume_playback = settings.value("resumeplayback", false).toBool();
settings.endGroup();
s.beginGroup(BehaviourSettingsPage::kSettingsGroup);
bool resume_playback = s.value("resumeplayback", false).toBool();
s.endGroup();
if (!resume_playback) return;
s.beginGroup(Player::kSettingsGroup);
saved_playback_state_ = static_cast<Engine::State> (s.value("playback_state", Engine::Empty).toInt());
saved_playback_position_ = s.value("playback_position", 0).toDouble();
s.endGroup();
settings.beginGroup("Player");
saved_playback_state_ = static_cast<Engine::State> (settings.value("playback_state", Engine::Empty).toInt());
saved_playback_position_ = settings.value("playback_position", 0).toDouble();
settings.endGroup();
if (saved_playback_state_ == Engine::Empty || saved_playback_state_ == Engine::Idle) {
return;
if (resume_playback && saved_playback_state_ != Engine::Empty && saved_playback_state_ != Engine::Idle) {
connect(app_->playlist_manager(), SIGNAL(AllPlaylistsLoaded()), SLOT(ResumePlayback()));
}
connect(app_->playlist_manager()->active(), SIGNAL(RestoreFinished()), SLOT(ResumePlayback()));
}
void MainWindow::ResumePlayback() {
qLog(Debug) << "Resuming playback";
disconnect(app_->playlist_manager()->active(), SIGNAL(RestoreFinished()), this, SLOT(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()));