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"))),
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<int>(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());
}
}
}
}

View File

@ -13,6 +13,7 @@
#include <QDBusMessage>
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;
};