From 2afc8803f8c6c3c23c50b283fe36d4fd46fc0ea9 Mon Sep 17 00:00:00 2001 From: Bart De Vries Date: Tue, 13 Apr 2021 16:22:37 +0200 Subject: [PATCH] Final(?) step of cleaning up MPRIS2 implementation --- src/mpris2/mediaplayer2player.cpp | 61 +++++++++---------------------- src/mpris2/mediaplayer2player.h | 29 ++++++++------- 2 files changed, 33 insertions(+), 57 deletions(-) diff --git a/src/mpris2/mediaplayer2player.cpp b/src/mpris2/mediaplayer2player.cpp index 3b1b0b0e..eab0e993 100644 --- a/src/mpris2/mediaplayer2player.cpp +++ b/src/mpris2/mediaplayer2player.cpp @@ -25,10 +25,11 @@ MediaPlayer2Player::MediaPlayer2Player(AudioManager *audioPlayer, bool showProgr QStringLiteral("Update"))), mShowProgressOnTaskBar(showProgressOnTaskBar) { - // Signals from AudioManager which are directly forwarded - connect(m_audioPlayer, &AudioManager::sourceChanged, - this, &MediaPlayer2Player::playerSourceChanged, Qt::QueuedConnection); + // This will signal when the track is changed + connect(m_audioPlayer, &AudioManager::entryChanged, + this, &MediaPlayer2Player::setEntry); + // Signals from AudioManager which are directly forwarded connect(m_audioPlayer, &AudioManager::playbackRateChanged, this, &MediaPlayer2Player::rateChanged); // TODO: implement this in AudioManager, such that it can be forwarded @@ -53,20 +54,20 @@ MediaPlayer2Player::MediaPlayer2Player(AudioManager *audioPlayer, bool showProgr connect(m_audioPlayer, &AudioManager::volumeChanged, this, &MediaPlayer2Player::playerVolumeChanged); connect(m_audioPlayer, &AudioManager::positionChanged, - this, &MediaPlayer2Player::audioPositionChanged); // for progress indicator on taskbar - connect(m_audioPlayer, &AudioManager::positionChanged, - this, &MediaPlayer2Player::playerSeeked); // Seeked signal + this, &MediaPlayer2Player::playerSeeked); // Implement Seeked signal - // Custom signals not directly connected to AudioManager + // signals needed for progress indicator on taskbar connect(m_audioPlayer, &AudioManager::durationChanged, - this, &MediaPlayer2Player::audioDurationChanged); // for progress indicator on taskbar and to indicate a change of track + this, &MediaPlayer2Player::audioDurationChanged); + connect(m_audioPlayer, &AudioManager::positionChanged, + this, &MediaPlayer2Player::audioPositionChanged); if (m_audioPlayer) { m_volume = m_audioPlayer->volume() / 100; signalPropertiesChange(QStringLiteral("Volume"), Volume()); if (m_audioPlayer->entry()) { - setCurrentTrack(DataManager::instance().getQueue().indexOf(m_audioPlayer->entry()->id())); + setEntry(m_audioPlayer->entry()); } } } @@ -257,17 +258,6 @@ void MediaPlayer2Player::OpenUri(const QString &uri) Q_UNUSED(uri); } -void MediaPlayer2Player::playerSourceChanged() -{ - // TODO: refactor setCurrentTrack; too complicated for this player - if (m_audioPlayer) { - if (m_audioPlayer->entry()) { - setCurrentTrack(DataManager::instance().getQueue().indexOf(m_audioPlayer->entry()->id())); - } - } -} - - void MediaPlayer2Player::playerPlaybackStateChanged() { signalPropertiesChange(QStringLiteral("PlaybackStatus"), PlaybackStatus()); @@ -289,9 +279,6 @@ void MediaPlayer2Player::audioPositionChanged() void MediaPlayer2Player::audioDurationChanged() { if (m_audioPlayer) { - m_metadata = getMetadataOfCurrentTrack(); - signalPropertiesChange(QStringLiteral("Metadata"), Metadata()); - setPropertyPosition(static_cast(m_audioPlayer->position())); } } @@ -302,30 +289,18 @@ void MediaPlayer2Player::playerVolumeChanged() setVolume(m_audioPlayer->volume() / 100.0); } -int MediaPlayer2Player::currentTrack() const +void MediaPlayer2Player::setEntry(Entry* entry) { if (m_audioPlayer) { if (m_audioPlayer->entry()) { - return DataManager::instance().getQueue().indexOf(m_audioPlayer->entry()->id()); - } else { - return -1; - } - } else { - return -1; - } -} + if (m_audioPlayer->entry() == entry) { + int queuenr = DataManager::instance().getQueue().indexOf(m_audioPlayer->entry()->id()); + qDebug() << "MPRIS2: Setting entry" << entry->title(); + m_currentTrackId = QDBusObjectPath(QLatin1String("/org/kde/alligator/playlist/") + QString::number(queuenr)).path(); -void MediaPlayer2Player::setCurrentTrack(int newTrackPosition) -{ - if (m_audioPlayer) { - if (m_audioPlayer->entry()) { - m_currentTrack = m_audioPlayer->entry()->title(); - m_currentTrackId = QDBusObjectPath(QLatin1String("/org/kde/alligator/playlist/") + QString::number(newTrackPosition)).path(); - - emit currentTrackChanged(); - - m_metadata = getMetadataOfCurrentTrack(); - signalPropertiesChange(QStringLiteral("Metadata"), Metadata()); + m_metadata = getMetadataOfCurrentTrack(); + signalPropertiesChange(QStringLiteral("Metadata"), Metadata()); + } } } } diff --git a/src/mpris2/mediaplayer2player.h b/src/mpris2/mediaplayer2player.h index 2b5eee7e..b893a006 100644 --- a/src/mpris2/mediaplayer2player.h +++ b/src/mpris2/mediaplayer2player.h @@ -13,6 +13,7 @@ #include class AudioManager; +class Entry; class MediaPlayer2Player : public QDBusAbstractAdaptor { @@ -33,8 +34,6 @@ class MediaPlayer2Player : public QDBusAbstractAdaptor Q_PROPERTY(bool CanControl READ CanControl NOTIFY canControlChanged) Q_PROPERTY(bool CanSeek READ CanSeek NOTIFY canSeekChanged) - Q_PROPERTY(int currentTrack READ currentTrack WRITE setCurrentTrack NOTIFY currentTrackChanged) - public: explicit MediaPlayer2Player(AudioManager *audioPlayer, bool showProgressOnTaskBar, @@ -54,7 +53,6 @@ public: bool CanPause() const; bool CanSeek() const; bool CanControl() const; - int currentTrack() const; bool showProgressOnTaskBar() const; void setShowProgressOnTaskBar(bool value); @@ -70,7 +68,6 @@ Q_SIGNALS: void canPauseChanged(); void canControlChanged(); void canSeekChanged(); - void currentTrackChanged(); void next(); void previous(); void playPause(); @@ -78,6 +75,8 @@ Q_SIGNALS: public Q_SLOTS: + void setRate(double newRate); + void setVolume(double volume); void Next(); void Previous(); void Pause(); @@ -90,30 +89,32 @@ public Q_SLOTS: private Q_SLOTS: - void playerSourceChanged(); void playerPlaybackStateChanged(); - void audioPositionChanged(); void playerSeeked(qint64 position); - void audioDurationChanged(); void playerVolumeChanged(); + // progress on taskbar + void audioPositionChanged(); + void audioDurationChanged(); + private: void signalPropertiesChange(const QString &property, const QVariant &value); - void setRate(double newRate); - void setVolume(double volume); - void setPropertyPosition(int newPositionInMs); - void setCurrentTrack(int newTrackPosition); + void setEntry(Entry* entry); QVariantMap getMetadataOfCurrentTrack(); + AudioManager *m_audioPlayer = nullptr; QVariantMap m_metadata; - QString m_currentTrack; QString m_currentTrackId; double m_volume = 0.0; - qlonglong m_position = 0; - AudioManager *m_audioPlayer = nullptr; + + + // progress on taskbar + void setPropertyPosition(int newPositionInMs); + mutable QDBusMessage mProgressIndicatorSignal; int mPreviousProgressPosition = 0; bool mShowProgressOnTaskBar = true; + qlonglong m_position = 0; };