Merge lp:~kvalo/indicator-network/libconnman-control-technology into lp:~indicator-applet-developers/indicator-network/indicator-network

Proposed by Kalle Valo
Status: Merged
Merged at revision: 152
Proposed branch: lp:~kvalo/indicator-network/libconnman-control-technology
Merge into: lp:~indicator-applet-developers/indicator-network/indicator-network
Diff against target: 534 lines (+361/-8)
5 files modified
src/libconnman/Connman-1.0.vapi (+15/-0)
src/libconnman/connman-manager.c (+236/-8)
src/libconnman/connman-manager.h (+26/-0)
src/libconnman/connman.h (+1/-0)
tests/libconnman-vala/libconnman-vala.vala (+83/-0)
To merge this branch: bzr merge lp:~kvalo/indicator-network/libconnman-control-technology
Reviewer Review Type Date Requested Status
Mikkel Kamstrup Erlandsen (community) Approve
Review via email: mp+50750@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

Looks good

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/libconnman/Connman-1.0.vapi'
--- src/libconnman/Connman-1.0.vapi 2011-02-21 15:25:04 +0000
+++ src/libconnman/Connman-1.0.vapi 2011-02-22 14:03:59 +0000
@@ -26,6 +26,8 @@
26 [CCode (has_construct_function = false)]26 [CCode (has_construct_function = false)]
27 public Manager ();27 public Manager ();
28 public async void connect_service (Connman.ServiceType type, Connman.ServiceMode mode, Connman.ServiceSecurity security, [CCode (array_length = false)] uint8[] ssid, uint ssid_len, GLib.Cancellable? cancellable) throws GLib.Error;28 public async void connect_service (Connman.ServiceType type, Connman.ServiceMode mode, Connman.ServiceSecurity security, [CCode (array_length = false)] uint8[] ssid, uint ssid_len, GLib.Cancellable? cancellable) throws GLib.Error;
29 public async void disable_technology (Connman.TechnologyType type, GLib.Cancellable? cancellable) throws GLib.Error;
30 public async void enable_technology (Connman.TechnologyType type, GLib.Cancellable? cancellable) throws GLib.Error;
29 public Connman.Service get_default_service ();31 public Connman.Service get_default_service ();
30 [CCode (array_length = false, array_null_terminated = true)]32 [CCode (array_length = false, array_null_terminated = true)]
31 public unowned Connman.Service[] get_services ();33 public unowned Connman.Service[] get_services ();
@@ -34,8 +36,11 @@
34 public Connman.TechnologyState get_cellular_state ();36 public Connman.TechnologyState get_cellular_state ();
35 public Connman.TechnologyState get_ethernet_state ();37 public Connman.TechnologyState get_ethernet_state ();
36 public Connman.TechnologyState get_wifi_state ();38 public Connman.TechnologyState get_wifi_state ();
39 public bool get_offline_mode ();
40 public void set_offline_mode (bool mode);
37 public bool get_connected ();41 public bool get_connected ();
38 public bool connected { get; }42 public bool connected { get; }
43 public bool offline_mode { get; set; }
39 public Connman.Service default_service { get; }44 public Connman.Service default_service { get; }
40 public signal void service_added (Connman.Service object);45 public signal void service_added (Connman.Service object);
41 public signal void service_removed (string object);46 public signal void service_removed (string object);
@@ -166,6 +171,14 @@
166 ENABLED,171 ENABLED,
167 CONNECTED172 CONNECTED
168 }173 }
174 [CCode (cprefix = "CONNMAN_TECHNOLOGY_TYPE_", cheader_filename = "connman-manager.h")]
175 public enum TechnologyType {
176 UNKNOWN,
177 ETHERNET,
178 WIFI,
179 BLUETOOTH,
180 CELLULAR
181 }
169 [CCode (cheader_filename = "connman-service.h")]182 [CCode (cheader_filename = "connman-service.h")]
170 public const string MANAGER_PATH;183 public const string MANAGER_PATH;
171 [CCode (cheader_filename = "connman-service.h")]184 [CCode (cheader_filename = "connman-service.h")]
@@ -179,6 +192,8 @@
179 [CCode (cheader_filename = "connman-service.h")]192 [CCode (cheader_filename = "connman-service.h")]
180 public const string PROPERTY_NAME;193 public const string PROPERTY_NAME;
181 [CCode (cheader_filename = "connman-service.h")]194 [CCode (cheader_filename = "connman-service.h")]
195 public const string PROPERTY_OFFLINE_MODE;
196 [CCode (cheader_filename = "connman-service.h")]
182 public const string PROPERTY_PASSPHRASE;197 public const string PROPERTY_PASSPHRASE;
183 [CCode (cheader_filename = "connman-service.h")]198 [CCode (cheader_filename = "connman-service.h")]
184 public const string PROPERTY_SECURITY;199 public const string PROPERTY_SECURITY;
185200
=== modified file 'src/libconnman/connman-manager.c'
--- src/libconnman/connman-manager.c 2011-02-21 16:00:36 +0000
+++ src/libconnman/connman-manager.c 2011-02-22 14:03:59 +0000
@@ -67,16 +67,10 @@
67 ConnmanTechnologyState ethernet_state;67 ConnmanTechnologyState ethernet_state;
68 ConnmanTechnologyState cellular_state;68 ConnmanTechnologyState cellular_state;
69 ConnmanTechnologyState bluetooth_state;69 ConnmanTechnologyState bluetooth_state;
70
71 gboolean offline_mode;
70};72};
7173
72typedef enum {
73 CONNMAN_TECHNOLOGY_TYPE_UNKNOWN,
74 CONNMAN_TECHNOLOGY_TYPE_ETHERNET,
75 CONNMAN_TECHNOLOGY_TYPE_WIFI,
76 CONNMAN_TECHNOLOGY_TYPE_BLUETOOTH,
77 CONNMAN_TECHNOLOGY_TYPE_CELLULAR,
78} ConnmanTechnologyType;
79
80struct technology_type_string74struct technology_type_string
81{75{
82 const gchar *str;76 const gchar *str;
@@ -128,8 +122,145 @@
128 PROP_ETHERNET_STATE,122 PROP_ETHERNET_STATE,
129 PROP_CELLULAR_STATE,123 PROP_CELLULAR_STATE,
130 PROP_BLUETOOTH_STATE,124 PROP_BLUETOOTH_STATE,
125 PROP_OFFLINE_MODE,
131};126};
132127
128static const gchar *technology_type2str(ConnmanTechnologyType type)
129{
130 const struct technology_type_string *s;
131 guint i;
132
133 for (i = 0; i < G_N_ELEMENTS(technology_type_map); i++) {
134 s = &technology_type_map[i];
135 if (s->type == type)
136 return s->str;
137 }
138
139 g_warning("%s(): unknown technology type %d", __func__, type);
140
141 return "unknown";
142}
143
144static void enable_technology_cb(GObject *object, GAsyncResult *res,
145 gpointer user_data)
146{
147 GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(user_data);
148 GDBusProxy *proxy = G_DBUS_PROXY(object);
149 GError *error = NULL;
150
151 g_dbus_proxy_call_finish(proxy, res, &error);
152
153 if (error != NULL) {
154 g_simple_async_result_set_from_error(simple, error);
155 g_error_free(error);
156 goto out;
157 }
158
159 out:
160 g_simple_async_result_complete(simple);
161 g_object_unref(simple);
162}
163
164void connman_manager_enable_technology(ConnmanManager *self,
165 ConnmanTechnologyType type,
166 GCancellable *cancellable,
167 GAsyncReadyCallback callback,
168 gpointer user_data)
169{
170 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
171 GSimpleAsyncResult *simple;
172 GVariant *parameters;
173 const gchar *s;
174
175 g_return_if_fail(CONNMAN_IS_MANAGER(self));
176 g_return_if_fail(priv != NULL);
177
178 simple = g_simple_async_result_new(G_OBJECT(self), callback,
179 user_data,
180 connman_manager_enable_technology);
181
182 s = technology_type2str(type);
183 parameters = g_variant_new("(s)", s);
184
185 /* FIXME: cancel the call on dispose */
186 g_dbus_proxy_call(priv->proxy, "EnableTechnology", parameters,
187 G_DBUS_CALL_FLAGS_NONE, CONNECT_TIMEOUT, cancellable,
188 enable_technology_cb, simple);
189}
190
191void connman_manager_enable_technology_finish(ConnmanManager *self,
192 GAsyncResult *res,
193 GError **error)
194{
195 GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res);
196
197 g_return_if_fail(CONNMAN_IS_MANAGER(self));
198 g_return_if_fail(g_simple_async_result_get_source_tag(simple) ==
199 connman_manager_enable_technology);
200
201 g_simple_async_result_propagate_error(simple, error);
202}
203
204static void disable_technology_cb(GObject *object, GAsyncResult *res,
205 gpointer user_data)
206{
207 GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(user_data);
208 GDBusProxy *proxy = G_DBUS_PROXY(object);
209 GError *error = NULL;
210
211 g_dbus_proxy_call_finish(proxy, res, &error);
212
213 if (error != NULL) {
214 g_simple_async_result_set_from_error(simple, error);
215 g_error_free(error);
216 goto out;
217 }
218
219 out:
220 g_simple_async_result_complete(simple);
221 g_object_unref(simple);
222}
223
224void connman_manager_disable_technology(ConnmanManager *self,
225 ConnmanTechnologyType type,
226 GCancellable *cancellable,
227 GAsyncReadyCallback callback,
228 gpointer user_data)
229{
230 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
231 GSimpleAsyncResult *simple;
232 GVariant *parameters;
233 const gchar *s;
234
235 g_return_if_fail(CONNMAN_IS_MANAGER(self));
236 g_return_if_fail(priv != NULL);
237
238 simple = g_simple_async_result_new(G_OBJECT(self), callback,
239 user_data,
240 connman_manager_disable_technology);
241
242 s = technology_type2str(type);
243 parameters = g_variant_new("(s)", s);
244
245 /* FIXME: cancel the call on dispose */
246 g_dbus_proxy_call(priv->proxy, "DisableTechnology", parameters,
247 G_DBUS_CALL_FLAGS_NONE, CONNECT_TIMEOUT, cancellable,
248 disable_technology_cb, simple);
249}
250
251void connman_manager_disable_technology_finish(ConnmanManager *self,
252 GAsyncResult *res,
253 GError **error)
254{
255 GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res);
256
257 g_return_if_fail(CONNMAN_IS_MANAGER(self));
258 g_return_if_fail(g_simple_async_result_get_source_tag(simple) ==
259 connman_manager_disable_technology);
260
261 g_simple_async_result_propagate_error(simple, error);
262}
263
133static void connect_service_cb(GObject *object, GAsyncResult *res,264static void connect_service_cb(GObject *object, GAsyncResult *res,
134 gpointer user_data)265 gpointer user_data)
135{266{
@@ -370,6 +501,26 @@
370 return priv->bluetooth_state;501 return priv->bluetooth_state;
371}502}
372503
504gboolean connman_manager_get_offline_mode(ConnmanManager *self)
505{
506 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
507
508 g_return_val_if_fail(CONNMAN_IS_MANAGER(self), FALSE);
509 g_return_val_if_fail(priv != NULL, FALSE);
510
511 return priv->offline_mode;
512}
513
514void connman_manager_set_offline_mode(ConnmanManager *self, gboolean mode)
515{
516 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
517
518 g_return_if_fail(CONNMAN_IS_MANAGER(self));
519 g_return_if_fail(priv != NULL);
520
521 g_object_set(self, "offline-mode", mode, NULL);
522}
523
373static void update_default_service(ConnmanManager *self)524static void update_default_service(ConnmanManager *self)
374{525{
375 ConnmanManagerPrivate *priv = GET_PRIVATE(self);526 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
@@ -987,6 +1138,22 @@
987 g_variant_unref(variant);1138 g_variant_unref(variant);
988}1139}
9891140
1141static void offline_mode_updated(ConnmanManager *self, GVariant *value)
1142{
1143 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
1144 gboolean mode;
1145
1146 mode = g_variant_get_boolean(value);
1147
1148 if (priv->offline_mode == mode)
1149 return;
1150
1151 priv->offline_mode = mode;
1152 g_object_notify(G_OBJECT(self), "offline-mode");
1153
1154 g_variant_unref(value);
1155}
1156
990static void update_property(ConnmanManager *self, const gchar *property,1157static void update_property(ConnmanManager *self, const gchar *property,
991 GVariant *variant)1158 GVariant *variant)
992{1159{
@@ -994,6 +1161,8 @@
994 update_services(self, variant);1161 update_services(self, variant);
995 } else if (g_strcmp0(property, CONNMAN_PROPERTY_TECHNOLOGIES) == 0) {1162 } else if (g_strcmp0(property, CONNMAN_PROPERTY_TECHNOLOGIES) == 0) {
996 technologies_updated(self, variant);1163 technologies_updated(self, variant);
1164 } else if (g_strcmp0(property, CONNMAN_PROPERTY_OFFLINE_MODE) == 0) {
1165 offline_mode_updated(self, variant);
997 } else {1166 } else {
998 /* unknown property */1167 /* unknown property */
999 g_variant_unref(variant);1168 g_variant_unref(variant);
@@ -1177,6 +1346,52 @@
1177 NULL);1346 NULL);
1178}1347}
11791348
1349static void set_dbus_property_cb(GObject *object,
1350 GAsyncResult *res,
1351 gpointer user_data)
1352{
1353 ConnmanManager *self = CONNMAN_MANAGER(user_data);
1354 GDBusProxy *proxy = G_DBUS_PROXY(object);
1355 GError *error = NULL;
1356
1357 g_dbus_proxy_call_finish(proxy, res, &error);
1358
1359 if (error != NULL) {
1360 g_warning("ConnmanManager SetProperty() failed: %s", error->message);
1361 g_error_free(error);
1362 }
1363
1364 /* trick to avoid destroying self during async call */
1365 g_object_unref(self);
1366}
1367
1368static void set_dbus_property(ConnmanManager *self,
1369 const gchar *property,
1370 GVariant *value)
1371{
1372 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
1373 GVariant *parameters;
1374
1375 g_return_if_fail(CONNMAN_IS_MANAGER(self));
1376 g_return_if_fail(priv != NULL);
1377
1378 parameters = g_variant_new("(sv)", property, value);
1379
1380 g_dbus_proxy_call(priv->proxy, "SetProperty", parameters,
1381 G_DBUS_CALL_FLAGS_NONE, -1, NULL,
1382 set_dbus_property_cb, g_object_ref(self));
1383}
1384
1385static void update_offline_mode(ConnmanManager *self)
1386{
1387 ConnmanManagerPrivate *priv = GET_PRIVATE(self);
1388 GVariant *value;
1389
1390 value = g_variant_new("b", priv->offline_mode);
1391
1392 set_dbus_property(self, "OfflineMode", value);
1393}
1394
1180static void set_property(GObject *object, guint property_id,1395static void set_property(GObject *object, guint property_id,
1181 const GValue *value, GParamSpec *pspec)1396 const GValue *value, GParamSpec *pspec)
1182{1397{
@@ -1204,6 +1419,10 @@
1204 case PROP_BLUETOOTH_STATE:1419 case PROP_BLUETOOTH_STATE:
1205 priv->bluetooth_state = g_value_get_uint(value);1420 priv->bluetooth_state = g_value_get_uint(value);
1206 break;1421 break;
1422 case PROP_OFFLINE_MODE:
1423 priv->offline_mode = g_value_get_boolean(value);
1424 update_offline_mode(self);
1425 break;
1207 default:1426 default:
1208 /* We don't have any other property... */1427 /* We don't have any other property... */
1209 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);1428 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
@@ -1236,6 +1455,9 @@
1236 case PROP_BLUETOOTH_STATE:1455 case PROP_BLUETOOTH_STATE:
1237 g_value_set_uint(value, priv->bluetooth_state);1456 g_value_set_uint(value, priv->bluetooth_state);
1238 break;1457 break;
1458 case PROP_OFFLINE_MODE:
1459 g_value_set_boolean(value, priv->offline_mode);
1460 break;
1239 default:1461 default:
1240 /* We don't have any other property... */1462 /* We don't have any other property... */
1241 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);1463 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
@@ -1366,6 +1588,12 @@
1366 CONNMAN_TECHNOLOGY_STATE_UNKNOWN,1588 CONNMAN_TECHNOLOGY_STATE_UNKNOWN,
1367 G_PARAM_READABLE);1589 G_PARAM_READABLE);
1368 g_object_class_install_property(gobject_class, PROP_BLUETOOTH_STATE, pspec);1590 g_object_class_install_property(gobject_class, PROP_BLUETOOTH_STATE, pspec);
1591
1592 pspec = g_param_spec_boolean("offline-mode",
1593 "ConnmanManager's offline mode property",
1594 "Set offline mode", FALSE,
1595 G_PARAM_READWRITE);
1596 g_object_class_install_property(gobject_class, PROP_OFFLINE_MODE, pspec);
1369}1597}
13701598
1371static void connman_manager_init(ConnmanManager *self)1599static void connman_manager_init(ConnmanManager *self)
13721600
=== modified file 'src/libconnman/connman-manager.h'
--- src/libconnman/connman-manager.h 2011-02-21 15:25:04 +0000
+++ src/libconnman/connman-manager.h 2011-02-22 14:03:59 +0000
@@ -54,6 +54,14 @@
54} ConnmanManagerClass;54} ConnmanManagerClass;
5555
56typedef enum {56typedef enum {
57 CONNMAN_TECHNOLOGY_TYPE_UNKNOWN,
58 CONNMAN_TECHNOLOGY_TYPE_ETHERNET,
59 CONNMAN_TECHNOLOGY_TYPE_WIFI,
60 CONNMAN_TECHNOLOGY_TYPE_BLUETOOTH,
61 CONNMAN_TECHNOLOGY_TYPE_CELLULAR,
62} ConnmanTechnologyType;
63
64typedef enum {
57 CONNMAN_TECHNOLOGY_STATE_UNKNOWN,65 CONNMAN_TECHNOLOGY_STATE_UNKNOWN,
58 CONNMAN_TECHNOLOGY_STATE_UNAVAILABLE,66 CONNMAN_TECHNOLOGY_STATE_UNAVAILABLE,
59 CONNMAN_TECHNOLOGY_STATE_AVAILABLE,67 CONNMAN_TECHNOLOGY_STATE_AVAILABLE,
@@ -64,6 +72,22 @@
6472
65GType connman_manager_get_type(void);73GType connman_manager_get_type(void);
6674
75void connman_manager_enable_technology(ConnmanManager *self,
76 ConnmanTechnologyType type,
77 GCancellable *cancellable,
78 GAsyncReadyCallback callback,
79 gpointer user_data);
80void connman_manager_enable_technology_finish(ConnmanManager *self,
81 GAsyncResult *res,
82 GError **error);
83void connman_manager_disable_technology(ConnmanManager *self,
84 ConnmanTechnologyType type,
85 GCancellable *cancellable,
86 GAsyncReadyCallback callback,
87 gpointer user_data);
88void connman_manager_disable_technology_finish(ConnmanManager *self,
89 GAsyncResult *res,
90 GError **error);
67void connman_manager_connect_service(ConnmanManager *self,91void connman_manager_connect_service(ConnmanManager *self,
68 ConnmanServiceType type,92 ConnmanServiceType type,
69 ConnmanServiceMode mode,93 ConnmanServiceMode mode,
@@ -85,6 +109,8 @@
85ConnmanTechnologyState connman_manager_get_ethernet_state(ConnmanManager *self);109ConnmanTechnologyState connman_manager_get_ethernet_state(ConnmanManager *self);
86ConnmanTechnologyState connman_manager_get_cellular_state(ConnmanManager *self);110ConnmanTechnologyState connman_manager_get_cellular_state(ConnmanManager *self);
87ConnmanTechnologyState connman_manager_get_bluetooth_state(ConnmanManager *self);111ConnmanTechnologyState connman_manager_get_bluetooth_state(ConnmanManager *self);
112gboolean connman_manager_get_offline_mode(ConnmanManager *self);
113void connman_manager_set_offline_mode(ConnmanManager *self, gboolean mode);
88ConnmanManager *connman_manager_new(void);114ConnmanManager *connman_manager_new(void);
89115
90#endif116#endif
91117
=== modified file 'src/libconnman/connman.h'
--- src/libconnman/connman.h 2011-02-21 15:25:04 +0000
+++ src/libconnman/connman.h 2011-02-22 14:03:59 +0000
@@ -75,6 +75,7 @@
75#define CONNMAN_PROPERTY_IPV4 "IPv4"75#define CONNMAN_PROPERTY_IPV4 "IPv4"
76#define CONNMAN_PROPERTY_IPV4_CONFIGURATION "IPv4.Configuration"76#define CONNMAN_PROPERTY_IPV4_CONFIGURATION "IPv4.Configuration"
77#define CONNMAN_PROPERTY_TECHNOLOGIES "Technologies"77#define CONNMAN_PROPERTY_TECHNOLOGIES "Technologies"
78#define CONNMAN_PROPERTY_OFFLINE_MODE "OfflineMode"
7879
79#define CONNMAN_TECHNOLOGY_PROPERTY_STATE "State"80#define CONNMAN_TECHNOLOGY_PROPERTY_STATE "State"
80#define CONNMAN_TECHNOLOGY_PROPERTY_TYPE "Type"81#define CONNMAN_TECHNOLOGY_PROPERTY_TYPE "Type"
8182
=== modified file 'tests/libconnman-vala/libconnman-vala.vala'
--- tests/libconnman-vala/libconnman-vala.vala 2011-02-21 16:01:54 +0000
+++ tests/libconnman-vala/libconnman-vala.vala 2011-02-22 14:03:59 +0000
@@ -260,6 +260,75 @@
260 stdout.printf(" bluetooth %d\n", manager.get_bluetooth_state());260 stdout.printf(" bluetooth %d\n", manager.get_bluetooth_state());
261}261}
262262
263static Connman.TechnologyType str2tech(string s)
264{
265 switch (s) {
266 case "wifi":
267 return Connman.TechnologyType.WIFI;
268 case "ethernet":
269 return Connman.TechnologyType.ETHERNET;
270 case "cellular":
271 return Connman.TechnologyType.CELLULAR;
272 case "bluetooth":
273 return Connman.TechnologyType.BLUETOOTH;
274 default:
275 stdout.printf("Unknown tech: %s\n", s);
276 return Connman.TechnologyType.UNKNOWN;
277 }
278}
279
280static void enable(string[] args) {
281
282 if (args.length != 1) {
283 stdout.printf("Invalid number of arguments for enable: %d\n",
284 args.length);
285 return;
286 }
287
288 var tech = str2tech(args[0]);
289
290 manager.enable_technology(tech, null);
291}
292
293static void disable(string[] args) {
294
295 if (args.length != 1) {
296 stdout.printf("Invalid number of arguments for enable: %d\n",
297 args.length);
298 return;
299 }
300
301 var tech = str2tech(args[0]);
302
303 manager.disable_technology(tech, null);
304}
305
306static void offline(string[] args) {
307
308 if (args.length != 1) {
309 stdout.printf("Invalid number of arguments for offline: %d\n",
310 args.length);
311 return;
312 }
313
314 var mode = args[0];
315 bool value;
316
317 switch (mode) {
318 case "on":
319 value = true;
320 break;
321 case "off":
322 value = false;
323 break;
324 default:
325 stdout.printf("Unknown mode for offline: %s\n", mode);
326 return;
327 }
328
329 manager.offline_mode = value;
330}
331
263static bool cmd_handler() {332static bool cmd_handler() {
264 var line = cmd_queue.pop();333 var line = cmd_queue.pop();
265 var tokens = line.split(" ");334 var tokens = line.split(" ");
@@ -296,6 +365,15 @@
296 case "tech":365 case "tech":
297 tech(args);366 tech(args);
298 break;367 break;
368 case "enable":
369 enable(args);
370 break;
371 case "disable":
372 disable(args);
373 break;
374 case "offline":
375 offline(args);
376 break;
299 default:377 default:
300 stdout.printf("Unknown command: %s\n", cmd);378 stdout.printf("Unknown command: %s\n", cmd);
301 break;379 break;
@@ -363,6 +441,11 @@
363 manager.get_bluetooth_state());441 manager.get_bluetooth_state());
364 });442 });
365443
444 manager.notify["offline-mode"].connect((s, p) => {
445 stdout.printf("offline-mode %s\n",
446 manager.offline_mode ? "on" : "off");
447 });
448
366 loop.run();449 loop.run();
367450
368 return 0;451 return 0;

Subscribers

People subscribed via source and target branches