Skip to content

Commit a111372

Browse files
committed
dbus: merge DBusInterfaceBase and IntegratedDBusInterface; add ability to disable config loading
1 parent 038a419 commit a111372

8 files changed

Lines changed: 78 additions & 139 deletions

File tree

src/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ set(libinputactions_SRCS
3535
libinputactions/conditions/ConditionGroup.cpp
3636
libinputactions/conditions/CustomCondition.cpp
3737
libinputactions/conditions/VariableCondition.cpp
38-
libinputactions/dbus/DBusInterfaceBase.cpp
39-
libinputactions/dbus/IntegratedDBusInterface.cpp
38+
libinputactions/dbus/MainDBusInterface.cpp
4039
libinputactions/handlers/InputTriggerHandler.cpp
4140
libinputactions/handlers/KeyboardTriggerHandler.cpp
4241
libinputactions/handlers/MotionTriggerHandler.cpp

src/libinputactions/InputActionsMain.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "config/ConfigIssueManager.h"
44
#include "config/ConfigLoader.h"
55
#include "config/GlobalConfig.h"
6+
#include "dbus/MainDBusInterface.h"
67
#include "input/StrokeRecorder.h"
78
#include "input/backends/InputBackend.h"
89
#include "interfaces/ConfigProvider.h"
@@ -52,6 +53,7 @@ InputActionsMain::~InputActionsMain()
5253
g_globalConfig.reset();
5354
g_configProvider.reset();
5455
g_inputBackend.reset();
56+
g_mainDbusInterface.reset();
5557
g_scriptingEngine.reset();
5658
g_strokeRecorder.reset();
5759
g_variableRegistry.reset();
@@ -98,6 +100,7 @@ void InputActionsMain::setMissingImplementations()
98100
setMissingImplementation(g_configLoader);
99101
setMissingImplementation(g_globalConfig);
100102
setMissingImplementation(g_inputBackend);
103+
setMissingImplementation(g_mainDbusInterface);
101104
setMissingImplementation(g_strokeRecorder);
102105
setMissingImplementation(g_variableRegistry);
103106

src/libinputactions/InputActionsMain.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
#pragma once
2020

21-
#include "dbus/IntegratedDBusInterface.h"
2221
#include <QObject>
2322

2423
namespace InputActions
@@ -78,8 +77,6 @@ private slots:
7877
member = std::make_unique<T>();
7978
}
8079
}
81-
82-
IntegratedDBusInterface m_dbusInterface;
8380
};
8481

8582
inline InputActionsMain *g_inputActions;

src/libinputactions/dbus/DBusInterfaceBase.cpp

Lines changed: 0 additions & 78 deletions
This file was deleted.

src/libinputactions/dbus/DBusInterfaceBase.h

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/libinputactions/dbus/IntegratedDBusInterface.cpp renamed to src/libinputactions/dbus/MainDBusInterface.cpp

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,45 +16,52 @@
1616
along with this program. If not, see <https://www.gnu.org/licenses/>.
1717
*/
1818

19-
#include "IntegratedDBusInterface.h"
19+
#include "MainDBusInterface.h"
2020
#include <QRegularExpression>
2121
#include <libinputactions/InputActionsMain.h>
2222
#include <libinputactions/config/ConfigIssueManager.h>
2323
#include <libinputactions/config/ConfigLoader.h>
24+
#include <libinputactions/config/GlobalConfig.h>
2425
#include <libinputactions/helpers/QDBusConnection.h>
2526
#include <libinputactions/input/StrokeRecorder.h>
2627
#include <libinputactions/input/backends/InputBackend.h>
28+
#include <libinputactions/input/devices/InputDevice.h>
2729
#include <libinputactions/interfaces/OnScreenMessageManager.h>
2830
#include <libinputactions/triggers/core/StrokeTriggerCore.h>
2931
#include <libinputactions/variables/VariableRegistry.h>
3032

3133
namespace InputActions
3234
{
3335

34-
IntegratedDBusInterface::IntegratedDBusInterface()
36+
MainDBusInterface::MainDBusInterface()
3537
: m_bus(QDBusConnectionHelpers::sessionBus())
3638
{
3739
m_bus.registerService(INPUTACTIONS_DBUS_SERVICE);
3840
m_bus.registerObject(INPUTACTIONS_DBUS_PATH, this, QDBusConnection::ExportAllSlots);
3941
}
4042

41-
IntegratedDBusInterface::~IntegratedDBusInterface()
43+
MainDBusInterface::~MainDBusInterface()
4244
{
4345
m_bus.unregisterService(INPUTACTIONS_DBUS_SERVICE);
4446
m_bus.unregisterObject(INPUTACTIONS_DBUS_PATH);
4547
}
4648

47-
QString IntegratedDBusInterface::deviceList()
49+
QString MainDBusInterface::deviceList()
4850
{
49-
return DBusInterfaceBase::deviceList();
51+
QStringList result;
52+
for (const auto *device : g_inputBackend->devices()) {
53+
result.push_back(device->toString());
54+
}
55+
result.sort();
56+
return result.join("\n\n");
5057
}
5158

52-
QString IntegratedDBusInterface::issues()
59+
QString MainDBusInterface::issues()
5360
{
54-
return DBusInterfaceBase::issues();
61+
return g_configIssueManager->issuesToString();
5562
}
5663

57-
void IntegratedDBusInterface::recordStroke(const QDBusMessage &message)
64+
void MainDBusInterface::recordStroke(const QDBusMessage &message)
5865
{
5966
if (!g_inputBackend->initialized()) {
6067
sendErrorReply(QDBusError::Failed, "Stroke recording requires a valid configuration to be active.");
@@ -74,23 +81,60 @@ void IntegratedDBusInterface::recordStroke(const QDBusMessage &message)
7481
});
7582
}
7683

77-
QString IntegratedDBusInterface::reloadConfig()
84+
QString MainDBusInterface::reloadConfig()
7885
{
86+
if (!m_allowConfigLoading) {
87+
sendErrorReply(QDBusError::Failed, "Loading the configuration is not allowed while the client is inactive.");
88+
return {};
89+
}
90+
7991
g_configLoader->load({
8092
.manual = true,
8193
});
8294
return g_configIssueManager->issuesToString();
8395
}
8496

85-
QString IntegratedDBusInterface::suspend()
97+
QString MainDBusInterface::suspend()
8698
{
99+
if (m_allowConfigLoading) {
100+
sendErrorReply(QDBusError::Failed, "Suspending is not allowed while the client is inactive.");
101+
return {};
102+
}
103+
87104
g_inputActions->suspend();
88105
return "success";
89106
}
90107

91-
QString IntegratedDBusInterface::variables(QString filter)
108+
QString MainDBusInterface::variables(QString filter)
109+
{
110+
if (!g_globalConfig->allowExternalVariableAccess()) {
111+
return "External variable access has been disabled. Set 'external_variable_access' to 'true' to enable.";
112+
}
113+
114+
QStringList result;
115+
const QRegularExpression filterRegex(filter);
116+
for (const auto &[name, variable] : g_variableRegistry->variables()) {
117+
if (variable->hidden() || !filterRegex.match(name).hasMatch()) {
118+
continue;
119+
}
120+
result.push_back(QString("%1: %2").arg(name, variable->operations()->toString()));
121+
}
122+
return result.join('\n');
123+
}
124+
125+
QString MainDBusInterface::strokeToBase64(const Stroke &stroke)
92126
{
93-
return variableList(g_variableRegistry.get(), filter);
127+
QByteArray bytes;
128+
const auto &points = stroke.points();
129+
for (size_t i = 0; i < points.size(); i++) {
130+
// All values range from -1 to 1
131+
bytes.push_back(static_cast<char>(points[i].x * 100));
132+
bytes.push_back(static_cast<char>(points[i].y * 100));
133+
bytes.push_back(static_cast<char>(points[i].t * 100));
134+
bytes.push_back(static_cast<char>(points[i].alpha * 100));
135+
}
136+
137+
return QString("'%1'").arg(bytes.toBase64());
94138
}
95139

96140
}

src/libinputactions/dbus/IntegratedDBusInterface.h renamed to src/libinputactions/dbus/MainDBusInterface.h

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
#pragma once
2020

21-
#include "DBusInterfaceBase.h"
2221
#include <QDBusConnection>
2322
#include <QDBusContext>
2423
#include <QDBusMessage>
@@ -30,8 +29,10 @@ namespace InputActions
3029
static const QString INPUTACTIONS_DBUS_SERVICE = "org.inputactions";
3130
static const QString INPUTACTIONS_DBUS_PATH = "/";
3231

33-
class IntegratedDBusInterface
34-
: public DBusInterfaceBase
32+
class Stroke;
33+
34+
class MainDBusInterface
35+
: public QObject
3536
, protected QDBusContext
3637
{
3738
Q_OBJECT
@@ -41,12 +42,17 @@ class IntegratedDBusInterface
4142
/**
4243
* Registers the interface.
4344
*/
44-
IntegratedDBusInterface();
45+
MainDBusInterface();
4546

4647
/**
4748
* Unregisters the interface.
4849
*/
49-
~IntegratedDBusInterface() override;
50+
~MainDBusInterface() override;
51+
52+
/**
53+
* Sets whether loading the config and suspending InputActions through the DBus interface is allowed. This is only used in the standalone implementation.
54+
*/
55+
void setAllowConfigLoading(bool value) { m_allowConfigLoading = value; }
5056

5157
public slots:
5258
QString deviceList();
@@ -57,8 +63,14 @@ public slots:
5763
QString variables(QString filter = "");
5864

5965
private:
66+
static QString strokeToBase64(const Stroke &stroke);
67+
6068
QDBusConnection m_bus;
6169
QDBusMessage m_reply;
70+
71+
bool m_allowConfigLoading = true;
6272
};
6373

74+
inline std::shared_ptr<MainDBusInterface> g_mainDbusInterface;
75+
6476
}

src/libinputactions/helpers/QDBusConnection.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace InputActions::QDBusConnectionHelpers
2626
/**
2727
* Same as QDBusConnection::sessionBus, but uses QDBusConnection::connectToBus with the address specified in the DBUS_SESSION_BUS_ADDRESS environment variable
2828
* for setgid binaries.
29-
*
29+
*
3030
* Connection is cached.
3131
*/
3232
const QDBusConnection &sessionBus();

0 commit comments

Comments
 (0)