DtkCore
DTK Core module
ddbussender.h
1#ifndef DDBUSSENDER_H
2#define DDBUSSENDER_H
3
4#include "dtkcore_global.h"
5
6#include <QObject>
7#include <QDBusConnection>
8#include <QDBusPendingCall>
9#include <QDBusInterface>
10
11#include <memory>
12
13class LIBDTKCORESHARED_EXPORT DDBusData
14{
15public:
16 DDBusData();
17
18 QString service;
19 QString path;
20 QString interface;
21 QString queryName;
22 QDBusConnection connection;
23};
24
25class LIBDTKCORESHARED_EXPORT DDBusCaller
26{
27 friend class DDBusSender;
28
29public:
30 QDBusPendingCall call();
31
32 template <typename T>
33 DDBusCaller arg(const T &argument);
34
35private:
36 explicit DDBusCaller(const QString &method, std::shared_ptr<DDBusData> data);
37
38private:
39 std::shared_ptr<DDBusData> m_dbusData;
40 QString m_methodName;
41 QVariantList m_arguments;
42};
43
44template <typename T>
45DDBusCaller DDBusCaller::arg(const T &argument)
46{
47 m_arguments << QVariant::fromValue(argument);
48
49 return *this;
50}
51
52class LIBDTKCORESHARED_EXPORT DDBusProperty
53{
54 friend class DDBusSender;
55
56public:
57 QDBusPendingCall get();
58 template <typename T>
59 QDBusPendingCall set(const T &value);
60
61private:
62 explicit DDBusProperty(const QString &property, std::shared_ptr<DDBusData> data);
63
64private:
65 std::shared_ptr<DDBusData> m_dbusData;
66 QString m_propertyName;
67};
68
69template <typename T>
70QDBusPendingCall DDBusProperty::set(const T &value)
71{
72 QDBusInterface iface(m_dbusData->service, m_dbusData->path, QStringLiteral("org.freedesktop.DBus.Properties"), m_dbusData->connection);
73
74 const QVariantList args = { QVariant::fromValue(m_dbusData->interface), QVariant::fromValue(m_propertyName), QVariant::fromValue(QDBusVariant(value)) };
75
76 return iface.asyncCallWithArgumentList(QStringLiteral("Set"), args);
77}
78
79class LIBDTKCORESHARED_EXPORT DDBusSender
80{
81public:
82 explicit DDBusSender();
83
84 DDBusSender service(const QString &service);
85 DDBusSender interface(const QString &interface);
86 DDBusSender path(const QString &path);
87 DDBusCaller method(const QString &method);
88 DDBusProperty property(const QString &property);
89
90private:
91 DDBusSender type(const QDBusConnection::BusType busType);
92
93private:
94 std::shared_ptr<DDBusData> m_dbusData;
95};
96
97#endif // DDBUSSENDER_H
Definition: ddbussender.h:26
Definition: ddbussender.h:14
Definition: ddbussender.h:53
Definition: ddbussender.h:80