mirror of
https://github.com/Lurkki14/tuxclocker.git
synced 2025-02-25 18:55:24 -06:00
daemon: implement returning DynamicReadable in adaptor
This commit is contained in:
parent
2986454f05
commit
4ba9348f7d
@ -1,29 +1,55 @@
|
||||
#pragma once
|
||||
|
||||
#include "Adaptors.hpp"
|
||||
#include <DBusTypes.hpp>
|
||||
#include <Device.hpp>
|
||||
|
||||
#include <patterns.hpp>
|
||||
#include <QDBusAbstractAdaptor>
|
||||
#include <QDBusArgument>
|
||||
#include <QDBusVariant>
|
||||
#include <QDBusMetaType>
|
||||
|
||||
using namespace TuxClocker::Device;
|
||||
using namespace mpark::patterns;
|
||||
|
||||
Q_DECLARE_METATYPE(ReadResult)
|
||||
namespace TCDBus = TuxClocker::DBus;
|
||||
|
||||
Q_DECLARE_METATYPE(TCDBus::ReadResult)
|
||||
|
||||
class DynamicReadableAdaptor : public QDBusAbstractAdaptor {
|
||||
public:
|
||||
explicit DynamicReadableAdaptor(QObject *obj, DynamicReadable dr) : QDBusAbstractAdaptor(obj) {
|
||||
m_dynamicReadable = dr;
|
||||
}
|
||||
explicit DynamicReadableAdaptor(QObject *obj, DynamicReadable dr) : QDBusAbstractAdaptor(obj) {
|
||||
// Ideally this should be moved somewhere else but QMetaType does not handle namespaces well
|
||||
qDBusRegisterMetaType<TCDBus::ReadResult>();
|
||||
m_dynamicReadable = dr;
|
||||
}
|
||||
public Q_SLOTS:
|
||||
QDBusVariant value() {
|
||||
QVariant v;
|
||||
v.setValue(m_dynamicReadable.read());
|
||||
return QDBusVariant(v);
|
||||
}
|
||||
TCDBus::ReadResult value() {
|
||||
QVariant v;
|
||||
TCDBus::ReadResult res{.error = false};
|
||||
/* We have to unwrap the value here, another option would be to convert the std::variant
|
||||
* to char*, but that comes with its own issues */
|
||||
match(m_dynamicReadable.read())
|
||||
(pattern(as<ReadableValue>(arg)) = [&](auto val) {
|
||||
match(val)
|
||||
(pattern(as<uint>(arg)) = [&](auto u) {
|
||||
v.setValue(u);
|
||||
},
|
||||
pattern(as<double>(arg)) = [&](auto d) {
|
||||
v.setValue(d);
|
||||
});
|
||||
},
|
||||
pattern(as<ReadError>(arg)) = [&](auto err) {
|
||||
v.setValue(static_cast<int>(err));
|
||||
res.error = true;
|
||||
});
|
||||
res.value = QDBusVariant(v);
|
||||
return res;
|
||||
}
|
||||
private:
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", "org.tuxclocker.DynamicReadable")
|
||||
|
||||
|
||||
DynamicReadable m_dynamicReadable;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user