22#include "model/dbus_client.h"
24static GDBusProxy* GetProxy() {
28 GDBusConnection* conn = g_bus_get_sync(G_BUS_TYPE_SESSION, 0, &error);
29 g_assert_no_error(error);
34 GDBusProxy* p = g_dbus_proxy_new_sync(
35 conn, G_DBUS_PROXY_FLAGS_NONE, 0 , kDbusName,
36 kDbusObject, kDbusInterface, 0 , &error);
37 g_assert_no_error(error);
41LocalApiResult DbusLocalClient::SendRaise() {
42 auto proxy = GetProxy();
43 if (!proxy)
return LocalApiResult(
false,
"Cannot create proxy");
45 GVariant* result = g_dbus_proxy_call_sync(
46 proxy,
"Raise", 0 , G_DBUS_CALL_FLAGS_NONE,
48 const std::string message(error ? error->message :
"");
49 bool ok(error == 0 && g_variant_is_container(result) &&
50 g_variant_n_children(result) == 0);
51 if (error) g_clear_error(&error);
52 g_variant_unref(result);
53 g_object_unref(proxy);
54 return LocalApiResult(ok, message);
57LocalApiResult DbusLocalClient::SendQuit() {
58 auto proxy = GetProxy();
59 if (!proxy)
return LocalApiResult(
false,
"Cannot create proxy");
61 GVariant* result = g_dbus_proxy_call_sync(
62 proxy,
"Quit", 0 , G_DBUS_CALL_FLAGS_NONE,
64 const std::string message(error ? error->message :
"");
65 bool ok(error == 0 && g_variant_is_container(result) &&
66 g_variant_n_children(result) == 0);
67 if (error) g_clear_error(&error);
68 g_variant_unref(result);
69 g_object_unref(proxy);
70 return LocalApiResult(ok, message);
73LocalApiResult DbusLocalClient::SendOpen(
const char* path) {
74 auto proxy = GetProxy();
75 if (!proxy)
return LocalApiResult(
false,
"Cannot create proxy");
77 GVariant* result = g_dbus_proxy_call_sync(
78 proxy,
"Open", g_variant_new(
"(s)", path), G_DBUS_CALL_FLAGS_NONE,
80 const std::string message(error ? error->message :
"");
81 bool ok(error == 0 && g_variant_is_container(result) &&
82 g_variant_n_children(result) == 1);
83 gboolean result_code =
false;
85 GVariant* result_value = g_variant_get_child_value(result, 0);
86 result_code = g_variant_get_boolean(result_value);
87 g_variant_unref(result_value);
89 if (error) g_clear_error(&error);
90 g_variant_unref(result);
91 g_object_unref(proxy);
92 if (!ok)
return LocalApiResult(
false,
"Error invoking DBus server command.");
93 if (result_code)
return LocalApiResult(
true, path);
94 return LocalApiResult(
false,
"Error opening file");
97LocalApiResult DbusLocalClient::GetRestEndpoint() {
98 auto proxy = GetProxy();
99 if (!proxy)
return LocalApiResult(
false,
"Cannot create proxy");
101 GVariant* result = g_dbus_proxy_call_sync(
102 proxy,
"GetRestEndpoint", 0 , G_DBUS_CALL_FLAGS_NONE,
104 const std::string message(error ? error->message :
"");
105 bool ok(error == 0 && g_variant_is_container(result) &&
106 g_variant_n_children(result) == 1);
107 std::string result_str;
109 GVariant* result_value = g_variant_get_child_value(result, 0);
111 const gchar* s = g_variant_get_string(result_value, &length);
112 result_str = std::string(s, length);
113 g_variant_unref(result_value);
115 if (error) g_clear_error(&error);
116 g_variant_unref(result);
117 g_object_unref(proxy);
119 return LocalApiResult(
true, result_str.c_str());
121 return LocalApiResult(
false,
"Error invoking DBus server command.");