-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmprisadaptor.cpp
More file actions
72 lines (61 loc) · 2.42 KB
/
Copy pathmprisadaptor.cpp
File metadata and controls
72 lines (61 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "mprisadaptor.h"
#include <QDBusConnection>
#include <QDBusMessage>
#include <QMetaObject>
#include <QDebug>
MprisAdaptor::MprisAdaptor(QObject *parent, const QString &objectPath)
: QDBusAbstractAdaptor(parent)
, m_objectPath(objectPath)
{
//initial to avoid return neither 0 nor 1 to dbus (this can cause crash!)
control.canControl = true;
control.canGoNext = true;
control.canGoPrevious = true;
control.canPause = true;
control.canPlay = true;
// setPlaybackStatus("Paused");
}
void MprisAdaptor::updateMetadata(bool isPlaying,
const QString &title,
const QString &artist,
const QString &trackId)
{
m_metadata.clear();
m_metadata["mpris:trackid"] = trackId;
m_metadata["xesam:title"] = title;
m_metadata["xesam:artist"] = artist;
m_metadata["xesam:album"] = "Album Name"; // Optional, but might help with some clients
m_metadata["xesam:trackNumber"] = 1; // Optional, but sometimes required
emit MetadataChanged();
// Also notify via PropertiesChanged for MPRIS clients
m_changed.clear();
m_changed["Metadata"] = m_metadata;
m_changed["PlaybackStatus"] = (isPlaying? "Playing" : "Paused");
emit PropertiesChanged(m_changed, {});
//force
m_changedProps.clear();
m_changedProps.insert("Metadata", m_metadata);
m_changedProps.insert("PlaybackStatus", (isPlaying? "Playing" : "Paused"));
m_changedProps.insert("CanGoNext", control.canGoNext);
m_changedProps.insert("CanGoPrevious", control.canGoPrevious);
m_changedProps.insert("CanControl", control.canControl);
m_changedProps.insert("CanPlay", control.canPlay);
m_changedProps.insert("CanPause", control.canPause);
m_msg = QDBusMessage::createSignal(
m_objectPath,
"org.freedesktop.DBus.Properties",
"PropertiesChanged"
);
m_msg << "org.mpris.MediaPlayer2.Player" << m_changedProps << QStringList();
if(QDBusConnection::sessionBus().send(m_msg))
qInfo() << "updated mprisMetaData has sent to QDBUS successfully.";
else
qWarning() << "failed to send updated mprisMetaData to QDBUS.";
}
// void MprisAdaptor::setPlaybackStatus(const QString &newPlaybackStatus)
// {
// if (m_playbackStatus == newPlaybackStatus)
// return;
// m_playbackStatus = newPlaybackStatus;
// emit PlaybackStatusChanged();
// }