Skip to content

Commit 761d99d

Browse files
committed
service/mpris: reset position timestamps on seek
Moving the onPositionUpdated callback to a bpPosition binding caused it not to fire when Position was changed to the same value, which can happen when quickly changing tracks before the player has sent a new position. This reverts the above change while still updating position on seek.
1 parent fca058e commit 761d99d

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/services/mpris/player.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ void MprisPlayer::setPosition(qreal position) {
237237
this->player->Seek(target - pos);
238238
}
239239

240-
this->bpPosition = target;
240+
this->setPosition(target);
241241
}
242242

243243
void MprisPlayer::onPositionUpdated() {
@@ -248,11 +248,16 @@ void MprisPlayer::onPositionUpdated() {
248248
if (firstChange) emit this->positionSupportedChanged();
249249
}
250250

251+
void MprisPlayer::setPosition(qlonglong position) {
252+
this->bpPosition = position;
253+
this->onPositionUpdated();
254+
}
255+
251256
void MprisPlayer::onExportedPositionChanged() {
252257
if (!this->lengthSupported()) emit this->lengthChanged();
253258
}
254259

255-
void MprisPlayer::onSeek(qlonglong time) { this->bpPosition = time; }
260+
void MprisPlayer::onSeek(qlonglong time) { this->setPosition(time); }
256261

257262
qreal MprisPlayer::length() const {
258263
if (this->bInternalLength == -1) {

src/services/mpris/player.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,8 @@ private slots:
391391
private:
392392
void onMetadataChanged();
393393
void onPositionUpdated();
394+
// call instead of setting bpPosition
395+
void setPosition(qlonglong position);
394396
void requestPositionUpdate() { this->pPosition.requestUpdate(); };
395397

396398
// clang-format off
@@ -457,7 +459,7 @@ private slots:
457459
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanSeek, bpCanSeek, playerProperties, "CanSeek");
458460
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanGoNext, bpCanGoNext, playerProperties, "CanGoNext");
459461
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanGoPrevious, bpCanGoPrevious, playerProperties, "CanGoPrevious");
460-
QS_DBUS_PROPERTY_BINDING(MprisPlayer, qlonglong, pPosition, bpPosition, playerProperties, "Position", false);
462+
QS_DBUS_PROPERTY_BINDING(MprisPlayer, qlonglong, pPosition, bpPosition, onPositionUpdated, playerProperties, "Position", false);
461463
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pVolume, bVolume, playerProperties, "Volume", false);
462464
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMetadata, bpMetadata, playerProperties, "Metadata");
463465
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pPlaybackStatus, bpPlaybackStatus, playerProperties, "PlaybackStatus");
@@ -466,8 +468,6 @@ private slots:
466468
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMinRate, bMinRate, playerProperties, "MinimumRate", false);
467469
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMaxRate, bMaxRate, playerProperties, "MaximumRate", false);
468470
QS_DBUS_PROPERTY_BINDING(MprisPlayer, pShuffle, bShuffle, playerProperties, "Shuffle", false);
469-
470-
QS_BINDING_SUBSCRIBE_METHOD(MprisPlayer, bpPosition, onPositionUpdated, onValueChanged);
471471
// clang-format on
472472

473473
QDateTime lastPositionTimestamp;

0 commit comments

Comments
 (0)