Final(?) step of cleaning up MPRIS2 implementation

This commit is contained in:
Bart De Vries 2021-04-13 16:22:37 +02:00
parent 3e79321c90
commit 2afc8803f8
2 changed files with 33 additions and 57 deletions

View File

@ -25,10 +25,11 @@ MediaPlayer2Player::MediaPlayer2Player(AudioManager *audioPlayer, bool showProgr
QStringLiteral("Update"))), QStringLiteral("Update"))),
mShowProgressOnTaskBar(showProgressOnTaskBar) mShowProgressOnTaskBar(showProgressOnTaskBar)
{ {
// Signals from AudioManager which are directly forwarded // This will signal when the track is changed
connect(m_audioPlayer, &AudioManager::sourceChanged, connect(m_audioPlayer, &AudioManager::entryChanged,
this, &MediaPlayer2Player::playerSourceChanged, Qt::QueuedConnection); this, &MediaPlayer2Player::setEntry);
// Signals from AudioManager which are directly forwarded
connect(m_audioPlayer, &AudioManager::playbackRateChanged, connect(m_audioPlayer, &AudioManager::playbackRateChanged,
this, &MediaPlayer2Player::rateChanged); this, &MediaPlayer2Player::rateChanged);
// TODO: implement this in AudioManager, such that it can be forwarded // 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, connect(m_audioPlayer, &AudioManager::volumeChanged,
this, &MediaPlayer2Player::playerVolumeChanged); this, &MediaPlayer2Player::playerVolumeChanged);
connect(m_audioPlayer, &AudioManager::positionChanged, connect(m_audioPlayer, &AudioManager::positionChanged,
this, &MediaPlayer2Player::audioPositionChanged); // for progress indicator on taskbar this, &MediaPlayer2Player::playerSeeked); // Implement Seeked signal
connect(m_audioPlayer, &AudioManager::positionChanged,
this, &MediaPlayer2Player::playerSeeked); // Seeked signal
// Custom signals not directly connected to AudioManager // signals needed for progress indicator on taskbar
connect(m_audioPlayer, &AudioManager::durationChanged, 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) { if (m_audioPlayer) {
m_volume = m_audioPlayer->volume() / 100; m_volume = m_audioPlayer->volume() / 100;
signalPropertiesChange(QStringLiteral("Volume"), Volume()); signalPropertiesChange(QStringLiteral("Volume"), Volume());
if (m_audioPlayer->entry()) { 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); 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() void MediaPlayer2Player::playerPlaybackStateChanged()
{ {
signalPropertiesChange(QStringLiteral("PlaybackStatus"), PlaybackStatus()); signalPropertiesChange(QStringLiteral("PlaybackStatus"), PlaybackStatus());
@ -289,9 +279,6 @@ void MediaPlayer2Player::audioPositionChanged()
void MediaPlayer2Player::audioDurationChanged() void MediaPlayer2Player::audioDurationChanged()
{ {
if (m_audioPlayer) { if (m_audioPlayer) {
m_metadata = getMetadataOfCurrentTrack();
signalPropertiesChange(QStringLiteral("Metadata"), Metadata());
setPropertyPosition(static_cast<int>(m_audioPlayer->position())); setPropertyPosition(static_cast<int>(m_audioPlayer->position()));
} }
} }
@ -302,30 +289,18 @@ void MediaPlayer2Player::playerVolumeChanged()
setVolume(m_audioPlayer->volume() / 100.0); setVolume(m_audioPlayer->volume() / 100.0);
} }
int MediaPlayer2Player::currentTrack() const void MediaPlayer2Player::setEntry(Entry* entry)
{ {
if (m_audioPlayer) { if (m_audioPlayer) {
if (m_audioPlayer->entry()) { if (m_audioPlayer->entry()) {
return DataManager::instance().getQueue().indexOf(m_audioPlayer->entry()->id()); if (m_audioPlayer->entry() == entry) {
} else { int queuenr = DataManager::instance().getQueue().indexOf(m_audioPlayer->entry()->id());
return -1; qDebug() << "MPRIS2: Setting entry" << entry->title();
} m_currentTrackId = QDBusObjectPath(QLatin1String("/org/kde/alligator/playlist/") + QString::number(queuenr)).path();
} else {
return -1;
}
}
void MediaPlayer2Player::setCurrentTrack(int newTrackPosition) m_metadata = getMetadataOfCurrentTrack();
{ signalPropertiesChange(QStringLiteral("Metadata"), Metadata());
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());
} }
} }
} }

View File

@ -13,6 +13,7 @@
#include <QDBusMessage> #include <QDBusMessage>
class AudioManager; class AudioManager;
class Entry;
class MediaPlayer2Player : public QDBusAbstractAdaptor class MediaPlayer2Player : public QDBusAbstractAdaptor
{ {
@ -33,8 +34,6 @@ class MediaPlayer2Player : public QDBusAbstractAdaptor
Q_PROPERTY(bool CanControl READ CanControl NOTIFY canControlChanged) Q_PROPERTY(bool CanControl READ CanControl NOTIFY canControlChanged)
Q_PROPERTY(bool CanSeek READ CanSeek NOTIFY canSeekChanged) Q_PROPERTY(bool CanSeek READ CanSeek NOTIFY canSeekChanged)
Q_PROPERTY(int currentTrack READ currentTrack WRITE setCurrentTrack NOTIFY currentTrackChanged)
public: public:
explicit MediaPlayer2Player(AudioManager *audioPlayer, explicit MediaPlayer2Player(AudioManager *audioPlayer,
bool showProgressOnTaskBar, bool showProgressOnTaskBar,
@ -54,7 +53,6 @@ public:
bool CanPause() const; bool CanPause() const;
bool CanSeek() const; bool CanSeek() const;
bool CanControl() const; bool CanControl() const;
int currentTrack() const;
bool showProgressOnTaskBar() const; bool showProgressOnTaskBar() const;
void setShowProgressOnTaskBar(bool value); void setShowProgressOnTaskBar(bool value);
@ -70,7 +68,6 @@ Q_SIGNALS:
void canPauseChanged(); void canPauseChanged();
void canControlChanged(); void canControlChanged();
void canSeekChanged(); void canSeekChanged();
void currentTrackChanged();
void next(); void next();
void previous(); void previous();
void playPause(); void playPause();
@ -78,6 +75,8 @@ Q_SIGNALS:
public Q_SLOTS: public Q_SLOTS:
void setRate(double newRate);
void setVolume(double volume);
void Next(); void Next();
void Previous(); void Previous();
void Pause(); void Pause();
@ -90,30 +89,32 @@ public Q_SLOTS:
private Q_SLOTS: private Q_SLOTS:
void playerSourceChanged();
void playerPlaybackStateChanged(); void playerPlaybackStateChanged();
void audioPositionChanged();
void playerSeeked(qint64 position); void playerSeeked(qint64 position);
void audioDurationChanged();
void playerVolumeChanged(); void playerVolumeChanged();
// progress on taskbar
void audioPositionChanged();
void audioDurationChanged();
private: private:
void signalPropertiesChange(const QString &property, const QVariant &value); void signalPropertiesChange(const QString &property, const QVariant &value);
void setRate(double newRate); void setEntry(Entry* entry);
void setVolume(double volume);
void setPropertyPosition(int newPositionInMs);
void setCurrentTrack(int newTrackPosition);
QVariantMap getMetadataOfCurrentTrack(); QVariantMap getMetadataOfCurrentTrack();
AudioManager *m_audioPlayer = nullptr;
QVariantMap m_metadata; QVariantMap m_metadata;
QString m_currentTrack;
QString m_currentTrackId; QString m_currentTrackId;
double m_volume = 0.0; double m_volume = 0.0;
qlonglong m_position = 0;
AudioManager *m_audioPlayer = nullptr;
// progress on taskbar
void setPropertyPosition(int newPositionInMs);
mutable QDBusMessage mProgressIndicatorSignal; mutable QDBusMessage mProgressIndicatorSignal;
int mPreviousProgressPosition = 0; int mPreviousProgressPosition = 0;
bool mShowProgressOnTaskBar = true; bool mShowProgressOnTaskBar = true;
qlonglong m_position = 0;
}; };