DtkCore
DTK Core module
载入中...
搜索中...
未找到
ddbussender.h
浏览该文件的文档.
1// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#ifndef DDBUSSENDER_H
6#define DDBUSSENDER_H
7
8#include "dtkcore_global.h"
9
10#include <QObject>
11#include <QDBusConnection>
12#include <QDBusPendingCall>
13#include <QDBusInterface>
14
15#include <memory>
16
17class LIBDTKCORESHARED_EXPORT DDBusData
18{
19public:
20 DDBusData();
21 QDBusPendingCall asyncCallWithArguments(const QString &method, const QVariantList &arguments, const QString &iface = QString());
22
23 QString service;
24 QString path;
25 QString interface;
26 QString queryName;
27 QDBusConnection connection;
28};
29
30class LIBDTKCORESHARED_EXPORT DDBusCaller
31{
32 friend class DDBusSender;
33
34public:
35 QDBusPendingCall call();
36
37 template <typename T>
38 DDBusCaller arg(const T &argument);
39
40private:
41 explicit DDBusCaller(const QString &method, std::shared_ptr<DDBusData> data);
42
43private:
44 std::shared_ptr<DDBusData> m_dbusData;
45 QString m_methodName;
46 QVariantList m_arguments;
47};
48
49template <typename T>
50DDBusCaller DDBusCaller::arg(const T &argument)
51{
52 m_arguments << QVariant::fromValue(argument);
53
54 return *this;
55}
56
57class LIBDTKCORESHARED_EXPORT DDBusProperty
58{
59 friend class DDBusSender;
60
61public:
62 QDBusPendingCall get();
63 template <typename T>
64 QDBusPendingCall set(const T &value);
65
66private:
67 explicit DDBusProperty(const QString &property, std::shared_ptr<DDBusData> data);
68
69private:
70 std::shared_ptr<DDBusData> m_dbusData;
71 QString m_propertyName;
72};
73
74template <typename T>
75QDBusPendingCall DDBusProperty::set(const T &value)
76{
77 QVariantList args{QVariant::fromValue(m_dbusData->interface), QVariant::fromValue(m_propertyName), QVariant::fromValue(QDBusVariant(value))};
78 return m_dbusData->asyncCallWithArguments(QStringLiteral("Set"), args, QStringLiteral("org.freedesktop.DBus.Properties"));
79}
80
81class LIBDTKCORESHARED_EXPORT DDBusSender
82{
83public:
84 explicit DDBusSender();
85
86 DDBusSender service(const QString &service);
87 DDBusSender interface(const QString &interface);
88 DDBusSender path(const QString &path);
89 DDBusCaller method(const QString &method);
90 DDBusProperty property(const QString &property);
91
93private:
94 DDBusSender type(const QDBusConnection::BusType busType);
95
96private:
97 std::shared_ptr<DDBusData> m_dbusData;
98};
99
100#endif // DDBUSSENDER_H
DBus接口调用工具类
Definition ddbussender.h:31
QDBusPendingCall call()
发起实际调用
DDBusCaller arg(const T &argument)
添加调用参数
Definition ddbussender.h:50
DBus数据存储类
Definition ddbussender.h:18
QString service
请求调用服务名
Definition ddbussender.h:23
QString path
请求调用对象路径
Definition ddbussender.h:24
QDBusConnection connection
进行调用的维护的DBus连接
Definition ddbussender.h:27
QString interface
请求调用接口名
Definition ddbussender.h:25
QString queryName
请求调用函数名
Definition ddbussender.h:26
DBus属性操作对象
Definition ddbussender.h:58
QDBusPendingCall get()
获取属性值
QDBusPendingCall set(const T &value)
设置属性值
Definition ddbussender.h:75
DBus请求工具类
Definition ddbussender.h:82
DDBusCaller method(const QString &method)
设置请求方法名并获取请求调用对象
DDBusSender interface(const QString &interface)
设置请求接口名
DDBusProperty property(const QString &property)
设置访问的属性名并获得属性操作对象
DDBusSender service(const QString &service)
设置请求服务名
static DDBusSender system()
获取 systembus 访问的能力
DDBusSender path(const QString &path)
设置请求对象路径