1
0
mirror of https://github.com/clementine-player/Clementine synced 2025-02-03 20:57:35 +01:00

Cache the last emitted state from the engine to fix some invalid values being emitted over DBUS while a last.fm stream is buffering. Fixes issue #374

This commit is contained in:
David Sansome 2010-12-11 13:38:51 +00:00
parent 2b77c894db
commit 01cccc0468
2 changed files with 4 additions and 6 deletions

View File

@ -62,6 +62,7 @@ Player::Player(MainWindow* main_window, PlaylistManager* playlists,
lastfm_(lastfm), lastfm_(lastfm),
engine_(CreateEngine(engine)), engine_(CreateEngine(engine)),
stream_change_type_(Engine::First), stream_change_type_(Engine::First),
last_state_(Engine::Empty),
volume_before_mute_(50) volume_before_mute_(50)
{ {
// Loads album art and saves it to a file in /tmp for MPRIS clients and those // Loads album art and saves it to a file in /tmp for MPRIS clients and those
@ -75,7 +76,6 @@ Player::Player(MainWindow* main_window, PlaylistManager* playlists,
qDBusRegisterMetaType<TrackMetadata>(); qDBusRegisterMetaType<TrackMetadata>();
qDBusRegisterMetaType<TrackIds>(); qDBusRegisterMetaType<TrackIds>();
//MPRIS 1.0 implementation //MPRIS 1.0 implementation
mpris1_ = new mpris::Mpris1(this, art_loader_, this); mpris1_ = new mpris::Mpris1(this, art_loader_, this);
@ -279,6 +279,7 @@ void Player::EngineStateChanged(Engine::State state) {
case Engine::Empty: case Engine::Empty:
case Engine::Idle: emit Stopped(); break; case Engine::Idle: emit Stopped(); break;
} }
last_state_ = state;
} }
void Player::SetVolume(int value) { void Player::SetVolume(int value) {
@ -298,10 +299,6 @@ int Player::GetVolume() const {
return engine_->volume(); return engine_->volume();
} }
Engine::State Player::GetState() const {
return engine_->state();
}
void Player::PlayAt(int index, Engine::TrackChangeType change, bool reshuffle) { void Player::PlayAt(int index, Engine::TrackChangeType change, bool reshuffle) {
if (change == Engine::Manual && engine_->position() != engine_->length()) { if (change == Engine::Manual && engine_->position() != engine_->length()) {
emit TrackSkipped(current_item_); emit TrackSkipped(current_item_);

View File

@ -57,7 +57,7 @@ class Player : public QObject {
void Init(); void Init();
EngineBase* engine() const { return engine_.get(); } EngineBase* engine() const { return engine_.get(); }
Engine::State GetState() const; Engine::State GetState() const { return last_state_; }
int GetVolume() const; int GetVolume() const;
PlaylistItemPtr GetCurrentItem() const { return current_item_; } PlaylistItemPtr GetCurrentItem() const { return current_item_; }
@ -131,6 +131,7 @@ class Player : public QObject {
boost::scoped_ptr<EngineBase> engine_; boost::scoped_ptr<EngineBase> engine_;
Engine::TrackChangeType stream_change_type_; Engine::TrackChangeType stream_change_type_;
Engine::State last_state_;
QUrl loading_async_; QUrl loading_async_;