forked from quickshell/quickshell
		
	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.
This commit is contained in:
		
							parent
							
								
									fca058e66c
								
							
						
					
					
						commit
						761d99d644
					
				
					 2 changed files with 10 additions and 5 deletions
				
			
		| 
						 | 
					@ -237,7 +237,7 @@ void MprisPlayer::setPosition(qreal position) {
 | 
				
			||||||
		this->player->Seek(target - pos);
 | 
							this->player->Seek(target - pos);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this->bpPosition = target;
 | 
						this->setPosition(target);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MprisPlayer::onPositionUpdated() {
 | 
					void MprisPlayer::onPositionUpdated() {
 | 
				
			||||||
| 
						 | 
					@ -248,11 +248,16 @@ void MprisPlayer::onPositionUpdated() {
 | 
				
			||||||
	if (firstChange) emit this->positionSupportedChanged();
 | 
						if (firstChange) emit this->positionSupportedChanged();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void MprisPlayer::setPosition(qlonglong position) {
 | 
				
			||||||
 | 
						this->bpPosition = position;
 | 
				
			||||||
 | 
						this->onPositionUpdated();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MprisPlayer::onExportedPositionChanged() {
 | 
					void MprisPlayer::onExportedPositionChanged() {
 | 
				
			||||||
	if (!this->lengthSupported()) emit this->lengthChanged();
 | 
						if (!this->lengthSupported()) emit this->lengthChanged();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void MprisPlayer::onSeek(qlonglong time) { this->bpPosition = time; }
 | 
					void MprisPlayer::onSeek(qlonglong time) { this->setPosition(time); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qreal MprisPlayer::length() const {
 | 
					qreal MprisPlayer::length() const {
 | 
				
			||||||
	if (this->bInternalLength == -1) {
 | 
						if (this->bInternalLength == -1) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -391,6 +391,8 @@ private slots:
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	void onMetadataChanged();
 | 
						void onMetadataChanged();
 | 
				
			||||||
	void onPositionUpdated();
 | 
						void onPositionUpdated();
 | 
				
			||||||
 | 
						// call instead of setting bpPosition
 | 
				
			||||||
 | 
						void setPosition(qlonglong position);
 | 
				
			||||||
	void requestPositionUpdate() { this->pPosition.requestUpdate(); };
 | 
						void requestPositionUpdate() { this->pPosition.requestUpdate(); };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// clang-format off
 | 
						// clang-format off
 | 
				
			||||||
| 
						 | 
					@ -457,7 +459,7 @@ private:
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanSeek, bpCanSeek, playerProperties, "CanSeek");
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanSeek, bpCanSeek, playerProperties, "CanSeek");
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanGoNext, bpCanGoNext, playerProperties, "CanGoNext");
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanGoNext, bpCanGoNext, playerProperties, "CanGoNext");
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanGoPrevious, bpCanGoPrevious, playerProperties, "CanGoPrevious");
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pCanGoPrevious, bpCanGoPrevious, playerProperties, "CanGoPrevious");
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, qlonglong, pPosition, bpPosition, playerProperties, "Position", false);
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, qlonglong, pPosition, bpPosition, onPositionUpdated, playerProperties, "Position", false);
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pVolume, bVolume, playerProperties, "Volume", false);
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pVolume, bVolume, playerProperties, "Volume", false);
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMetadata, bpMetadata, playerProperties, "Metadata");
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMetadata, bpMetadata, playerProperties, "Metadata");
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pPlaybackStatus, bpPlaybackStatus, playerProperties, "PlaybackStatus");
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pPlaybackStatus, bpPlaybackStatus, playerProperties, "PlaybackStatus");
 | 
				
			||||||
| 
						 | 
					@ -466,8 +468,6 @@ private:
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMinRate, bMinRate, playerProperties, "MinimumRate", false);
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMinRate, bMinRate, playerProperties, "MinimumRate", false);
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMaxRate, bMaxRate, playerProperties, "MaximumRate", false);
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pMaxRate, bMaxRate, playerProperties, "MaximumRate", false);
 | 
				
			||||||
	QS_DBUS_PROPERTY_BINDING(MprisPlayer, pShuffle, bShuffle, playerProperties, "Shuffle", false);
 | 
						QS_DBUS_PROPERTY_BINDING(MprisPlayer, pShuffle, bShuffle, playerProperties, "Shuffle", false);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	QS_BINDING_SUBSCRIBE_METHOD(MprisPlayer, bpPosition, onPositionUpdated, onValueChanged);
 | 
					 | 
				
			||||||
	// clang-format on
 | 
						// clang-format on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	QDateTime lastPositionTimestamp;
 | 
						QDateTime lastPositionTimestamp;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue