Branch data Line data Source code
1 : : /* vi: set et sw=4 ts=4 cino=t0,(0: */
2 : : /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 : : /*
4 : : * This file is part of libaccounts-glib
5 : : *
6 : : * Copyright (C) 2009-2010 Nokia Corporation.
7 : : * Copyright (C) 2012 Canonical Ltd.
8 : : *
9 : : * Contact: Alberto Mardegan <alberto.mardegan@canonical.com>
10 : : *
11 : : * This library is free software; you can redistribute it and/or
12 : : * modify it under the terms of the GNU Lesser General Public License
13 : : * version 2.1 as published by the Free Software Foundation.
14 : : *
15 : : * This library is distributed in the hope that it will be useful, but
16 : : * WITHOUT ANY WARRANTY; without even the implied warranty of
17 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 : : * Lesser General Public License for more details.
19 : : *
20 : : * You should have received a copy of the GNU Lesser General Public
21 : : * License along with this library; if not, write to the Free Software
22 : : * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
23 : : * 02110-1301 USA
24 : : */
25 : :
26 : : #define AG_DISABLE_DEPRECATION_WARNINGS
27 : :
28 : : #include <libaccounts-glib.h>
29 : : #include <stdio.h>
30 : : #include <stdlib.h>
31 : : #include <string.h>
32 : :
33 : : static gchar *gl_app_name = NULL;
34 : :
35 : : enum
36 : : {
37 : : ERROR_GENERIC,
38 : : INVALID_ACC_ID,
39 : : INVALID_SERVICE_NAME,
40 : : INVALID_INPUT
41 : : };
42 : :
43 : : static void
44 : 0 : show_error (gint err)
45 : : {
46 : :
47 : 0 : switch (err)
48 : : {
49 : : case ERROR_GENERIC:
50 : 0 : printf ("\nUnable to process the request\n\n");
51 : 0 : break;
52 : : case INVALID_ACC_ID:
53 : 0 : printf ("\nAccount does not exist. Check account ID entered\n\n");
54 : 0 : break;
55 : : case INVALID_SERVICE_NAME:
56 : 0 : printf ("\nService does not exist. Enter valid service name\n\n");
57 : 0 : break;
58 : : case INVALID_INPUT:
59 : 0 : printf ("\nRequest is not processed. Check the command parameters\n\n");
60 : 0 : break;
61 : : default:
62 : 0 : printf ("\nUnknown problem in processing the request\n\n");
63 : 0 : break;
64 : : }
65 : 0 : }
66 : :
67 : : static void
68 : 0 : show_help ()
69 : : {
70 : :
71 : 0 : printf ("\nOptions:\n"
72 : : " * Creates an account\n"
73 : : " %1$s create-account <provider name> [<display name>] [<enable|disable>] \n\n"
74 : : " * Updates/Adds key to account and sets a value to key\n"
75 : : " %1$s update-account <account id> (int|uint|bool|string):<key>=<value> \n\n"
76 : : " * Updates/Adds key to service of an account and sets a value to the key\n"
77 : : " %1$s update-service <account id> <service name>\n"
78 : : " (int|uint|bool|string):<key>=<value> \n\n"
79 : : " * Enables an account\n"
80 : : " %1$s enable-account <account id>\n\n"
81 : : " * Enables service of the account\n"
82 : : " %1$s enable-service <account id> <service name>\n\n"
83 : : " * Disables an account\n"
84 : : " %1$s disable-account <account id>\n\n"
85 : : " * Disables service of an account\n"
86 : : " %1$s disable-service <account id> <service name>\n\n"
87 : : " * Gets the value of a key of an account\n"
88 : : " %1$s get-account <account id> <(int|uint|bool|string):key>\n\n"
89 : : " * Gets the value of a key of a service\n"
90 : : " %1$s get-service <account id> <service name>\n\t\t <(int|uint|bool|string):<key>=<value>\n\n"
91 : : " * Deletes all accounts is <all> keyword is used or deletes specified account\n"
92 : : " %1$s delete-account <account id>/<all>\n\n"
93 : : " * Lists all providers\n"
94 : : " %1$s list-providers\n\n"
95 : : " * Lists all services or services that can be associated with an account\n"
96 : : " %1$s list-services [<account id>]\n\n"
97 : : " * Lists all accounts\n"
98 : : " %1$s list-accounts\n\n"
99 : : " * List all enabled accounts\n"
100 : : " If account ID is specified lists services enabled on the given account\n"
101 : : " %1$s list-enabled [<account id>]\n\n"
102 : : " * Lists settings associated with account\n"
103 : : " %1$s list-settings <account id>\n", gl_app_name);
104 : :
105 : 0 : printf ("\nParameters in square braces '[param]' are optional\n");
106 : 0 : }
107 : :
108 : : static void
109 : 0 : show_help_text (gchar *command)
110 : : {
111 : : /* TODO: Show individal command help text if needed */
112 : 0 : show_help ();
113 : 0 : }
114 : :
115 : :
116 : : static gchar *
117 : 0 : get_string_value (const GValue *value)
118 : : {
119 : 0 : gchar *str = NULL;
120 : :
121 : 0 : if (G_VALUE_HOLDS_STRING (value))
122 : : {
123 : 0 : str = g_value_dup_string (value);
124 : : }
125 : 0 : else if (G_VALUE_HOLDS_UINT (value))
126 : : {
127 : 0 : str = g_strdup_printf ("%u", g_value_get_uint (value));
128 : : }
129 : 0 : else if (G_VALUE_HOLDS_INT (value))
130 : : {
131 : 0 : str = g_strdup_printf ("%i", g_value_get_int (value));
132 : : }
133 : 0 : else if (G_VALUE_HOLDS_BOOLEAN (value))
134 : : {
135 : 0 : str = g_strdup (g_value_get_boolean (value) ? "true" : "false");
136 : : }
137 : : else
138 : : {
139 : 0 : str = g_strdup_value_contents (value);
140 : : }
141 : 0 : return str;
142 : : }
143 : :
144 : : static void
145 : 0 : get_account (gchar **argv)
146 : : {
147 : 0 : AgManager *manager = NULL;
148 : 0 : AgAccount *account = NULL;
149 : 0 : GValue value = G_VALUE_INIT;
150 : 0 : GType type = 0;
151 : 0 : gchar *str = NULL;
152 : 0 : gchar **param = NULL;
153 : :
154 : 0 : if (argv[2] == NULL || argv[3] == NULL)
155 : : {
156 : 0 : show_error (INVALID_INPUT);
157 : 0 : show_help_text (argv[1]);
158 : 0 : return;
159 : : }
160 : :
161 : : /* param[0] = type, param[1] = key. Both separated by ':' */
162 : 0 : param = g_strsplit (argv[3], ":", 2);
163 : 0 : if (param[0] == NULL || param[1] == NULL)
164 : : {
165 : 0 : show_error (INVALID_INPUT);
166 : 0 : show_help_text (argv[1]);
167 : 0 : g_strfreev (param);
168 : 0 : return;
169 : : }
170 : :
171 : 0 : if (strcmp (param[0], "int") == 0)
172 : : {
173 : 0 : g_value_init (&value, G_TYPE_INT);
174 : 0 : type = G_TYPE_INT;
175 : : }
176 : 0 : else if (strcmp (param[0], "uint") == 0)
177 : : {
178 : 0 : g_value_init (&value, G_TYPE_UINT);
179 : 0 : type = G_TYPE_UINT;
180 : : }
181 : 0 : else if (strcmp (param[0], "bool") == 0 ||
182 : 0 : strcmp (param[0], "boolean") == 0)
183 : : {
184 : 0 : g_value_init (&value, G_TYPE_BOOLEAN);
185 : 0 : type = G_TYPE_BOOLEAN;
186 : : }
187 : 0 : else if (strcmp (param[0], "string") == 0)
188 : : {
189 : 0 : g_value_init (&value, G_TYPE_STRING);
190 : 0 : type = G_TYPE_STRING;
191 : : }
192 : : else
193 : : {
194 : 0 : show_error (INVALID_INPUT);
195 : 0 : show_help_text (argv[1]);
196 : 0 : g_strfreev (param);
197 : 0 : return;
198 : : }
199 : :
200 : 0 : manager = ag_manager_new ();
201 : 0 : if (manager == NULL)
202 : : {
203 : 0 : show_error (ERROR_GENERIC);
204 : 0 : g_strfreev (param);
205 : 0 : return;
206 : : }
207 : :
208 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
209 : 0 : if (account == NULL)
210 : : {
211 : 0 : show_error (INVALID_ACC_ID);
212 : 0 : g_strfreev (param);
213 : 0 : g_object_unref (manager);
214 : 0 : return;
215 : : }
216 : :
217 : 0 : if (ag_account_get_value (account, param[1],
218 : : &value) == AG_SETTING_SOURCE_NONE)
219 : : {
220 : 0 : show_error (INVALID_INPUT);
221 : 0 : show_help_text (argv[1]);
222 : 0 : g_strfreev (param);
223 : 0 : g_object_unref (account);
224 : 0 : g_object_unref (manager);
225 : 0 : return;
226 : : }
227 : :
228 : 0 : switch (type)
229 : : {
230 : : case G_TYPE_INT:
231 : 0 : str = g_strdup_printf ("%i", g_value_get_int (&value));
232 : 0 : break;
233 : : case G_TYPE_UINT:
234 : 0 : str = g_strdup_printf ("%u", g_value_get_uint (&value));
235 : 0 : break;
236 : : case G_TYPE_BOOLEAN:
237 : 0 : str = g_strdup_printf ("%i", g_value_get_boolean (&value));
238 : 0 : break;
239 : : case G_TYPE_STRING:
240 : 0 : str = g_value_dup_string (&value);
241 : 0 : break;
242 : : default:
243 : 0 : break;
244 : : }
245 : :
246 : 0 : if (G_IS_VALUE (&value))
247 : 0 : g_value_unset (&value);
248 : 0 : g_object_unref (account);
249 : 0 : g_object_unref (manager);
250 : :
251 : 0 : printf ("%s = %s\n", param[1], str);
252 : :
253 : 0 : g_strfreev (param);
254 : 0 : g_free(str);
255 : : }
256 : :
257 : : static void
258 : 0 : list_service_settings (AgAccount *account)
259 : : {
260 : 0 : GList *list = NULL;
261 : 0 : GList *tmp = NULL;
262 : : AgAccountSettingIter iter;
263 : 0 : const gchar *key = NULL;
264 : 0 : const GValue *val = NULL;
265 : 0 : gchar *str = NULL;
266 : :
267 : 0 : list = ag_account_list_services (account);
268 : 0 : if (list == NULL || g_list_length (list) == 0)
269 : : {
270 : 0 : return;
271 : : }
272 : :
273 : 0 : for (tmp = list; tmp != NULL; tmp = g_list_next (tmp))
274 : : {
275 : 0 : printf ("\t\t%s\n", ag_service_get_name (tmp->data));
276 : 0 : ag_account_select_service (account, (AgService *) tmp->data);
277 : :
278 : 0 : ag_account_settings_iter_init (account, &iter, NULL);
279 : 0 : while (ag_account_settings_iter_next (&iter, &key, &val))
280 : : {
281 : 0 : str = get_string_value (val);
282 : 0 : printf ("%s = %s\n", key, str);
283 : 0 : g_free (str);
284 : 0 : str = NULL;
285 : : }
286 : : }
287 : :
288 : 0 : ag_service_list_free (list);
289 : : }
290 : :
291 : : static void
292 : 0 : list_settings (gchar **argv)
293 : : {
294 : 0 : AgManager *manager = NULL;
295 : 0 : AgAccount *account = NULL;
296 : : AgAccountSettingIter iter;
297 : 0 : const gchar *key = NULL;
298 : 0 : const GValue *val = NULL;
299 : 0 : gchar *str = NULL;
300 : :
301 : 0 : if (argv[2] == NULL)
302 : : {
303 : 0 : show_error (INVALID_INPUT);
304 : 0 : show_help_text (argv[1]);
305 : 0 : return;
306 : : }
307 : :
308 : 0 : manager = ag_manager_new ();
309 : 0 : if (manager == NULL)
310 : : {
311 : 0 : show_error (ERROR_GENERIC);
312 : 0 : return;
313 : : }
314 : :
315 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
316 : 0 : if (account == NULL)
317 : : {
318 : 0 : show_error (INVALID_ACC_ID);
319 : 0 : g_object_unref (manager);
320 : 0 : return;
321 : : }
322 : :
323 : 0 : ag_account_settings_iter_init (account, &iter, NULL);
324 : 0 : while (ag_account_settings_iter_next (&iter, &key, &val))
325 : : {
326 : 0 : str = get_string_value (val);
327 : 0 : printf ("%s = %s\n", key, str);
328 : 0 : g_free (str);
329 : 0 : str = NULL;
330 : : }
331 : :
332 : 0 : list_service_settings (account);
333 : :
334 : 0 : g_object_unref (account);
335 : 0 : g_object_unref (manager);
336 : : }
337 : :
338 : : static void
339 : 0 : get_service (gchar **argv)
340 : : {
341 : 0 : AgManager *manager = NULL;
342 : 0 : AgService *service = NULL;
343 : 0 : AgAccount *account = NULL;
344 : 0 : GValue value = G_VALUE_INIT;
345 : 0 : GType type = 0;
346 : 0 : gchar *str = NULL;
347 : 0 : gchar **param = NULL;
348 : :
349 : 0 : if (argv[2] == NULL || argv[3] == NULL || argv[4] == NULL)
350 : : {
351 : 0 : show_error (INVALID_INPUT);
352 : 0 : show_help_text (argv[1]);
353 : 0 : return;
354 : : }
355 : :
356 : : /* argv[4] = type:key */
357 : 0 : param = g_strsplit (argv[4], ":", 2);
358 : 0 : if (param[0] == NULL || param[1] == NULL)
359 : : {
360 : 0 : show_error (INVALID_INPUT);
361 : 0 : show_help_text (argv[1]);
362 : 0 : g_strfreev (param);
363 : 0 : return;
364 : : }
365 : :
366 : 0 : if (strcmp (param[0], "int") == 0)
367 : : {
368 : 0 : g_value_init (&value, G_TYPE_INT);
369 : 0 : type = G_TYPE_INT;
370 : : }
371 : 0 : else if (strcmp (param[0], "uint") == 0)
372 : : {
373 : 0 : g_value_init (&value, G_TYPE_UINT);
374 : 0 : type = G_TYPE_UINT;
375 : : }
376 : 0 : else if (strcmp (param[0], "bool") == 0 ||
377 : 0 : strcmp (param[0], "boolean") == 0)
378 : : {
379 : 0 : g_value_init (&value, G_TYPE_BOOLEAN);
380 : 0 : type = G_TYPE_BOOLEAN;
381 : : }
382 : 0 : else if (strcmp (param[0], "string") == 0)
383 : : {
384 : 0 : g_value_init (&value, G_TYPE_STRING);
385 : 0 : type = G_TYPE_STRING;
386 : : }
387 : : else
388 : : {
389 : 0 : show_error (INVALID_INPUT);
390 : 0 : show_help_text (argv[1]);
391 : 0 : g_strfreev (param);
392 : 0 : return;
393 : : }
394 : :
395 : 0 : manager = ag_manager_new ();
396 : 0 : if (manager == NULL)
397 : : {
398 : 0 : show_error (ERROR_GENERIC);
399 : 0 : g_strfreev (param);
400 : 0 : return;
401 : : }
402 : :
403 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
404 : 0 : if (account == NULL)
405 : : {
406 : 0 : show_error (INVALID_ACC_ID);
407 : 0 : g_strfreev (param);
408 : 0 : g_object_unref (manager);
409 : 0 : return;
410 : : }
411 : :
412 : 0 : service = ag_manager_get_service (manager, argv[3]);
413 : 0 : if (service == NULL)
414 : : {
415 : 0 : show_error (INVALID_SERVICE_NAME);
416 : 0 : g_strfreev (param);
417 : 0 : g_object_unref (account);
418 : 0 : g_object_unref (manager);
419 : 0 : return;
420 : : }
421 : :
422 : 0 : ag_account_select_service (account, service);
423 : 0 : if (ag_account_get_value (account, param[1],
424 : : &value) == AG_SETTING_SOURCE_NONE)
425 : : {
426 : 0 : show_error (INVALID_INPUT);
427 : 0 : show_help_text (argv[1]);
428 : 0 : g_strfreev (param);
429 : 0 : ag_service_unref (service);
430 : 0 : g_object_unref (account);
431 : 0 : g_object_unref (manager);
432 : 0 : return;
433 : : }
434 : :
435 : 0 : switch (type)
436 : : {
437 : : case G_TYPE_INT:
438 : 0 : str = g_strdup_printf ("%i", g_value_get_int (&value));
439 : 0 : break;
440 : : case G_TYPE_UINT:
441 : 0 : str = g_strdup_printf ("%u", g_value_get_uint (&value));
442 : 0 : break;
443 : : case G_TYPE_BOOLEAN:
444 : 0 : str = g_strdup_printf ("%i", g_value_get_boolean (&value));
445 : 0 : break;
446 : : case G_TYPE_STRING:
447 : 0 : str = g_value_dup_string (&value);
448 : 0 : break;
449 : : default:
450 : 0 : break;
451 : : }
452 : :
453 : 0 : if (G_IS_VALUE (&value))
454 : 0 : g_value_unset (&value);
455 : 0 : ag_service_unref (service);
456 : 0 : g_object_unref (account);
457 : 0 : g_object_unref (manager);
458 : :
459 : 0 : printf ("%s = %s\n", param[1], str);
460 : :
461 : 0 : g_strfreev (param);
462 : 0 : g_free (str);
463 : : }
464 : :
465 : : static void
466 : 0 : update_service (gchar **argv)
467 : : {
468 : 0 : AgManager *manager = NULL;
469 : 0 : AgAccount *account = NULL;
470 : 0 : GValue *gvalue = NULL;
471 : 0 : gchar **param = NULL;
472 : 0 : gchar **keytype = NULL;
473 : 0 : AgService *service = NULL;
474 : 0 : GError *error = NULL;
475 : :
476 : 0 : if (argv[2] == NULL || argv[3] == NULL || argv[4] == NULL)
477 : : {
478 : 0 : show_error (INVALID_INPUT);
479 : 0 : show_help_text (argv[1]);
480 : 0 : return;
481 : : }
482 : :
483 : 0 : param = g_strsplit (argv[4], "=", 2);
484 : 0 : if (param[0] == NULL || param[1] == NULL)
485 : : {
486 : 0 : show_error (INVALID_INPUT);
487 : 0 : show_help_text (argv[1]);
488 : 0 : g_strfreev (param);
489 : 0 : return;
490 : : }
491 : :
492 : 0 : keytype = g_strsplit (param[0], ":", 2);
493 : 0 : if (keytype[0] == NULL || keytype[1] == NULL)
494 : : {
495 : 0 : show_error (INVALID_INPUT);
496 : 0 : show_help_text (argv[1]);
497 : 0 : g_strfreev (param);
498 : 0 : g_strfreev (keytype);
499 : 0 : return;
500 : : }
501 : :
502 : 0 : gvalue = g_new0 (GValue, 1);
503 : 0 : if (strcmp (keytype[0], "int") == 0)
504 : : {
505 : 0 : g_value_init (gvalue, G_TYPE_INT);
506 : 0 : g_value_set_int (gvalue, strtol (param[1], NULL, 10));
507 : : }
508 : 0 : else if (strcmp (keytype[0], "uint") == 0)
509 : : {
510 : 0 : g_value_init (gvalue, G_TYPE_UINT);
511 : 0 : g_value_set_uint (gvalue, strtoul (param[1], NULL, 10));
512 : : }
513 : 0 : else if (strcmp (keytype[0], "bool") == 0 || strcmp (keytype[0],
514 : : "boolean") == 0)
515 : : {
516 : 0 : g_value_init (gvalue, G_TYPE_BOOLEAN);
517 : 0 : g_value_set_boolean (gvalue, atoi (param[1]));
518 : : }
519 : 0 : else if (strcmp (keytype[0], "string") == 0)
520 : : {
521 : 0 : g_value_init (gvalue, G_TYPE_STRING);
522 : 0 : g_value_set_string (gvalue, param[1]);
523 : : }
524 : : else
525 : : {
526 : 0 : show_error (INVALID_INPUT);
527 : 0 : show_help_text (argv[1]);
528 : 0 : g_strfreev (param);
529 : 0 : g_strfreev (keytype);
530 : 0 : g_value_unset (gvalue);
531 : 0 : g_free (gvalue);
532 : 0 : return;
533 : : }
534 : :
535 : 0 : manager = ag_manager_new ();
536 : 0 : if (manager == NULL)
537 : : {
538 : 0 : show_error (ERROR_GENERIC);
539 : 0 : g_strfreev (param);
540 : 0 : g_strfreev (keytype);
541 : 0 : g_value_unset (gvalue);
542 : 0 : g_free (gvalue);
543 : 0 : return;
544 : : }
545 : :
546 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
547 : 0 : if (account == NULL)
548 : : {
549 : 0 : show_error (INVALID_ACC_ID);
550 : 0 : g_strfreev (param);
551 : 0 : g_strfreev (keytype);
552 : 0 : g_object_unref (manager);
553 : 0 : g_value_unset (gvalue);
554 : 0 : g_free (gvalue);
555 : 0 : return;
556 : : }
557 : :
558 : 0 : service = ag_manager_get_service (manager, argv[3]);
559 : 0 : if (service == NULL)
560 : : {
561 : 0 : show_error (INVALID_SERVICE_NAME);
562 : 0 : g_strfreev (param);
563 : 0 : g_strfreev (keytype);
564 : 0 : g_object_unref (account);
565 : 0 : g_object_unref (manager);
566 : 0 : g_value_unset (gvalue);
567 : 0 : g_free (gvalue);
568 : 0 : return;
569 : : }
570 : :
571 : 0 : ag_account_select_service (account, service);
572 : 0 : ag_account_set_value (account, keytype[1], gvalue);
573 : 0 : ag_account_store_blocking (account, &error);
574 : 0 : if (error)
575 : : {
576 : 0 : show_error (ERROR_GENERIC);
577 : 0 : g_error_free (error);
578 : : }
579 : :
580 : 0 : g_strfreev (param);
581 : 0 : g_strfreev (keytype);
582 : 0 : g_value_unset (gvalue);
583 : 0 : g_free (gvalue);
584 : 0 : ag_service_unref (service);
585 : 0 : g_object_unref (account);
586 : 0 : g_object_unref (manager);
587 : :
588 : 0 : return;
589 : : }
590 : :
591 : : static void
592 : 0 : update_account (gchar **argv)
593 : : {
594 : 0 : AgManager *manager = NULL;
595 : 0 : AgAccount *account = NULL;
596 : 0 : GValue *gvalue = NULL;
597 : 0 : gchar **param = NULL;
598 : 0 : gchar **keytype = NULL;
599 : 0 : GError *error = NULL;
600 : :
601 : : /* Input parameter will be argv[2] = <account Id>
602 : : * argv[3] = <keytype:key=value>
603 : : */
604 : 0 : if ((argv[2] == NULL) || (argv[3] == NULL))
605 : : {
606 : 0 : show_error (INVALID_INPUT);
607 : 0 : show_help_text (argv[1]);
608 : 0 : return;
609 : : }
610 : :
611 : : /* param[0] = <keytype:key>, param[1] = value */
612 : 0 : param = g_strsplit (argv[3], "=", 2);
613 : 0 : if (param[0] == NULL || param[1] == NULL)
614 : : {
615 : 0 : show_error (INVALID_INPUT);
616 : 0 : show_help_text (argv[1]);
617 : 0 : g_strfreev (param);
618 : 0 : return;
619 : : }
620 : :
621 : : /* keytype[0] = type, keytype[1] = key */
622 : 0 : keytype = g_strsplit (param[0], ":", 2);
623 : 0 : if (keytype[0] == NULL || keytype[1] == NULL)
624 : : {
625 : 0 : show_error (INVALID_INPUT);
626 : 0 : show_help_text (argv[1]);
627 : 0 : g_strfreev (param);
628 : 0 : g_strfreev (keytype);
629 : 0 : return;
630 : : }
631 : :
632 : 0 : gvalue = g_new0 (GValue, 1);
633 : 0 : if (strcmp (keytype[0], "int") == 0)
634 : : {
635 : 0 : g_value_init (gvalue, G_TYPE_INT);
636 : 0 : g_value_set_int (gvalue, strtol (param[1], NULL, 10));
637 : : }
638 : 0 : else if (strcmp (keytype[0], "uint") == 0)
639 : : {
640 : 0 : g_value_init (gvalue, G_TYPE_UINT);
641 : 0 : g_value_set_uint (gvalue, strtoul (param[1], NULL, 10));
642 : : }
643 : 0 : else if (strcmp (keytype[0], "bool") == 0 || strcmp (keytype[0],
644 : : "boolean") == 0)
645 : : {
646 : 0 : g_value_init (gvalue, G_TYPE_BOOLEAN);
647 : 0 : g_value_set_boolean (gvalue, atoi (param[1]));
648 : : }
649 : 0 : else if (strcmp (keytype[0], "string") == 0)
650 : : {
651 : 0 : g_value_init (gvalue, G_TYPE_STRING);
652 : 0 : g_value_set_string (gvalue, param[1]);
653 : : }
654 : : else
655 : : {
656 : 0 : show_error (INVALID_INPUT);
657 : 0 : show_help_text (argv[1]);
658 : 0 : g_strfreev (param);
659 : 0 : g_strfreev (keytype);
660 : 0 : g_free (gvalue);
661 : 0 : return;
662 : : }
663 : :
664 : 0 : manager = ag_manager_new ();
665 : 0 : if (manager == NULL)
666 : : {
667 : 0 : show_error (ERROR_GENERIC);
668 : 0 : g_strfreev (param);
669 : 0 : g_strfreev (keytype);
670 : 0 : g_free (gvalue);
671 : 0 : return;
672 : : }
673 : :
674 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
675 : 0 : if (account == NULL)
676 : : {
677 : 0 : show_error (INVALID_ACC_ID);
678 : 0 : g_strfreev (param);
679 : 0 : g_strfreev (keytype);
680 : 0 : g_value_unset (gvalue);
681 : 0 : g_free (gvalue);
682 : 0 : g_object_unref (manager);
683 : 0 : return;
684 : : }
685 : :
686 : 0 : ag_account_set_value (account, keytype[1], gvalue);
687 : :
688 : 0 : ag_account_store_blocking (account, &error);
689 : 0 : if (error)
690 : : {
691 : 0 : show_error (ERROR_GENERIC);
692 : 0 : g_error_free (error);
693 : : }
694 : :
695 : 0 : g_strfreev (param);
696 : 0 : g_strfreev (keytype);
697 : 0 : g_value_unset (gvalue);
698 : 0 : g_free (gvalue);
699 : 0 : g_object_unref (account);
700 : 0 : g_object_unref (manager);
701 : : }
702 : :
703 : : static void
704 : 0 : create_account (gchar **argv)
705 : : {
706 : 0 : AgManager *manager = NULL;
707 : 0 : AgAccount *account = NULL;
708 : 0 : GError *error = NULL;
709 : :
710 : 0 : if (argv[2] == NULL)
711 : : {
712 : 0 : show_error (INVALID_INPUT);
713 : 0 : show_help_text (argv[1]);
714 : 0 : return;
715 : : }
716 : :
717 : 0 : manager = ag_manager_new ();
718 : 0 : if (manager == NULL)
719 : : {
720 : 0 : show_error (ERROR_GENERIC);
721 : 0 : return;
722 : : }
723 : :
724 : 0 : account = ag_manager_create_account (manager, argv[2]);
725 : 0 : if (account == NULL)
726 : : {
727 : 0 : show_error (ERROR_GENERIC);
728 : 0 : g_object_unref (manager);
729 : 0 : return;
730 : : }
731 : :
732 : 0 : if (argv[3] != NULL)
733 : 0 : ag_account_set_display_name (account, argv[3]);
734 : :
735 : 0 : if (argv[4] != NULL)
736 : : {
737 : 0 : if (strcmp (argv[4], "enable") == 0)
738 : 0 : ag_account_set_enabled (account, TRUE);
739 : 0 : if (strcmp (argv[4], "disable") == 0)
740 : 0 : ag_account_set_enabled (account, FALSE);
741 : : }
742 : :
743 : 0 : ag_account_store_blocking (account, &error);
744 : 0 : if (error)
745 : : {
746 : 0 : show_error (ERROR_GENERIC);
747 : 0 : g_error_free (error);
748 : : }
749 : :
750 : 0 : g_object_unref (account);
751 : 0 : g_object_unref (manager);
752 : : }
753 : :
754 : : static void
755 : 0 : enable_disable_service (gchar **argv, gboolean enable)
756 : : {
757 : :
758 : 0 : AgManager *manager = NULL;
759 : 0 : AgService *service = NULL;
760 : 0 : AgAccount *account = NULL;
761 : 0 : GError *error = NULL;
762 : :
763 : 0 : if ((argv[2] == NULL) || (argv[3] == NULL))
764 : : {
765 : 0 : show_error (INVALID_INPUT);
766 : 0 : show_help_text (argv[1]);
767 : 0 : return;
768 : : }
769 : :
770 : 0 : manager = ag_manager_new ();
771 : 0 : if (manager == NULL)
772 : : {
773 : 0 : show_error (ERROR_GENERIC);
774 : 0 : return;
775 : : }
776 : :
777 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
778 : 0 : if (account == NULL)
779 : : {
780 : 0 : show_error (INVALID_ACC_ID);
781 : 0 : g_object_unref (manager);
782 : 0 : return;
783 : : }
784 : :
785 : 0 : service = ag_manager_get_service (manager, argv[3]);
786 : 0 : if (service == NULL)
787 : : {
788 : 0 : show_error (INVALID_SERVICE_NAME);
789 : 0 : g_object_unref (account);
790 : 0 : g_object_unref (manager);
791 : 0 : return;
792 : : }
793 : :
794 : 0 : ag_account_select_service (account, service);
795 : 0 : ag_account_set_enabled (account, enable);
796 : :
797 : 0 : ag_account_store_blocking (account, &error);
798 : 0 : if (error)
799 : : {
800 : 0 : show_error (ERROR_GENERIC);
801 : 0 : g_error_free (error);
802 : : }
803 : :
804 : 0 : ag_service_unref (service);
805 : 0 : g_object_unref (account);
806 : 0 : g_object_unref (manager);
807 : : }
808 : :
809 : : static void
810 : 0 : delete_account (gchar **argv)
811 : : {
812 : 0 : AgManager *manager = NULL;
813 : 0 : AgAccount *account = NULL;
814 : 0 : gint id = 0;
815 : 0 : GList *list = NULL;
816 : 0 : GList *iter = NULL;
817 : 0 : GError *error = NULL;
818 : :
819 : 0 : if (argv[2] == NULL)
820 : : {
821 : 0 : show_error (INVALID_INPUT);
822 : 0 : show_help_text (argv[1]);
823 : 0 : return;
824 : : }
825 : :
826 : 0 : manager = ag_manager_new ();
827 : 0 : if (manager == NULL)
828 : : {
829 : 0 : show_error (ERROR_GENERIC);
830 : 0 : return;
831 : : }
832 : :
833 : 0 : if (strcmp (argv[2], "all") == 0)
834 : 0 : list = ag_manager_list (manager);
835 : : else
836 : 0 : list = g_list_prepend (list, GUINT_TO_POINTER (atoi (argv[2])));
837 : :
838 : 0 : for (iter = list; iter != NULL; iter = g_list_next (iter))
839 : : {
840 : 0 : id = GPOINTER_TO_UINT (iter->data);
841 : 0 : account = ag_manager_get_account (manager, id);
842 : 0 : if (account == NULL)
843 : : {
844 : 0 : show_error (INVALID_ACC_ID);
845 : 0 : continue;
846 : : }
847 : :
848 : 0 : ag_account_delete (account);
849 : :
850 : 0 : ag_account_store_blocking (account, &error);
851 : 0 : if (error)
852 : : {
853 : 0 : show_error (ERROR_GENERIC);
854 : 0 : g_error_free (error);
855 : 0 : error = NULL;
856 : : }
857 : :
858 : 0 : g_object_unref (account);
859 : 0 : account = NULL;
860 : : }
861 : :
862 : 0 : g_object_unref (manager);
863 : 0 : ag_manager_list_free (list);
864 : : }
865 : :
866 : : static void
867 : 0 : list_providers ()
868 : : {
869 : 0 : AgManager *manager = NULL;
870 : 0 : GList *list = NULL;
871 : 0 : GList *iter = NULL;
872 : 0 : const gchar *name = NULL;
873 : :
874 : 0 : manager = ag_manager_new ();
875 : 0 : if (manager == NULL)
876 : : {
877 : 0 : show_error (ERROR_GENERIC);
878 : 0 : return;
879 : : }
880 : :
881 : 0 : list = ag_manager_list_providers (manager);
882 : 0 : if ((list == NULL) || (g_list_length (list) == 0))
883 : : {
884 : 0 : printf ("No providers are available\n");
885 : 0 : return;
886 : : }
887 : :
888 : 0 : printf ("\nProvider Name\n-------------\n");
889 : 0 : for (iter = list; iter != NULL; iter = g_list_next (iter))
890 : : {
891 : 0 : name = ag_provider_get_name ((AgProvider *) (iter->data));
892 : 0 : printf ("%s\n", name);
893 : : }
894 : :
895 : 0 : ag_provider_list_free (list);
896 : 0 : g_object_unref (manager);
897 : : }
898 : :
899 : : static void
900 : 0 : list_services (gchar **argv)
901 : : {
902 : 0 : AgManager *manager = NULL;
903 : 0 : GList *list = NULL;
904 : 0 : GList *iter = NULL;
905 : 0 : const gchar *name = NULL;
906 : 0 : AgAccount *account = NULL;
907 : 0 : const gchar *type = NULL;
908 : :
909 : 0 : manager = ag_manager_new ();
910 : 0 : if (manager == NULL)
911 : : {
912 : 0 : show_error (ERROR_GENERIC);
913 : 0 : return;
914 : : }
915 : :
916 : : /* If account Id is not specified, list all services */
917 : 0 : if (argv[2] == NULL)
918 : 0 : list = ag_manager_list_services (manager);
919 : : else
920 : : {
921 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
922 : 0 : if (account == NULL)
923 : : {
924 : 0 : show_error (INVALID_ACC_ID);
925 : 0 : g_object_unref (manager);
926 : 0 : return;
927 : : }
928 : :
929 : 0 : list = ag_account_list_services (account);
930 : : }
931 : :
932 : 0 : if (list == NULL || g_list_length (list) == 0)
933 : : {
934 : 0 : printf ("No services available\n");
935 : :
936 : 0 : if (account)
937 : 0 : g_object_unref (account);
938 : :
939 : 0 : g_object_unref (manager);
940 : 0 : return;
941 : : }
942 : :
943 : 0 : printf ("%-35s %s\n", "Service type", "Service name");
944 : 0 : printf ("%-35s %s\n", "------------", "------------");
945 : :
946 : 0 : for (iter = list; iter != NULL; iter = g_list_next (iter))
947 : : {
948 : 0 : name = ag_service_get_name ((AgService *) (iter->data));
949 : 0 : type = ag_service_get_service_type ((AgService *) (iter->data));
950 : 0 : printf ("%-35s %s\n", type, name);
951 : : }
952 : :
953 : 0 : ag_service_list_free (list);
954 : :
955 : 0 : if (account)
956 : 0 : g_object_unref (account);
957 : :
958 : 0 : g_object_unref (manager);
959 : : }
960 : :
961 : : static void
962 : 0 : list_accounts ()
963 : : {
964 : 0 : AgManager *manager = NULL;
965 : 0 : GList *list = NULL;
966 : 0 : GList *iter = NULL;
967 : 0 : const gchar *name = NULL;
968 : 0 : const gchar *provider = NULL;
969 : 0 : AgAccount *account = NULL;
970 : :
971 : 0 : manager = ag_manager_new ();
972 : 0 : if (manager == NULL)
973 : : {
974 : 0 : show_error (ERROR_GENERIC);
975 : 0 : return;
976 : : }
977 : :
978 : 0 : list = ag_manager_list (manager);
979 : 0 : if (list == NULL || g_list_length (list) == 0)
980 : : {
981 : 0 : printf ("\nNo accounts configured\n");
982 : 0 : g_object_unref (manager);
983 : 0 : return;
984 : : }
985 : :
986 : 0 : printf ("%-10s %-30s %s\n", "ID", "Provider", "Name");
987 : 0 : printf ("%-10s %-30s %s\n", "--", "--------", "----");
988 : :
989 : 0 : for (iter = list; iter != NULL; iter = g_list_next (iter))
990 : : {
991 : 0 : printf ("%-10d ", GPOINTER_TO_UINT (iter->data));
992 : :
993 : 0 : account = ag_manager_get_account (manager,
994 : 0 : GPOINTER_TO_UINT (iter->data));
995 : 0 : if (account == NULL)
996 : : {
997 : 0 : continue;
998 : : }
999 : :
1000 : 0 : provider = ag_account_get_provider_name (account);
1001 : 0 : if (provider != NULL)
1002 : 0 : printf ("%-30s ", provider);
1003 : : else
1004 : 0 : printf ("%-30s ", " ");
1005 : :
1006 : 0 : name = ag_account_get_display_name (account);
1007 : 0 : if (name != NULL)
1008 : 0 : printf ("%s\n", name);
1009 : : else
1010 : 0 : printf ("\n");
1011 : :
1012 : 0 : g_object_unref (account);
1013 : 0 : account = NULL;
1014 : : }
1015 : :
1016 : 0 : ag_manager_list_free (list);
1017 : 0 : g_object_unref (manager);
1018 : : }
1019 : :
1020 : : static void
1021 : 0 : enable_disable_account (gchar **argv, gboolean enable)
1022 : : {
1023 : 0 : AgManager *manager = NULL;
1024 : 0 : AgAccount *account = NULL;
1025 : 0 : GError *error = NULL;
1026 : :
1027 : 0 : if (argv[2] == NULL)
1028 : : {
1029 : 0 : show_error (INVALID_INPUT);
1030 : 0 : show_help_text (argv[1]);
1031 : 0 : return;
1032 : : }
1033 : :
1034 : 0 : manager = ag_manager_new ();
1035 : 0 : if (manager == NULL)
1036 : : {
1037 : 0 : show_error (ERROR_GENERIC);
1038 : 0 : return;
1039 : : }
1040 : :
1041 : 0 : account = ag_manager_get_account (manager, atoi (argv[2]));
1042 : 0 : if (account == NULL)
1043 : : {
1044 : 0 : show_error (INVALID_ACC_ID);
1045 : 0 : g_object_unref (manager);
1046 : 0 : return;
1047 : : }
1048 : :
1049 : 0 : ag_account_set_enabled (account, enable);
1050 : 0 : ag_account_store_blocking (account, &error);
1051 : 0 : if (error)
1052 : : {
1053 : 0 : show_error (ERROR_GENERIC);
1054 : 0 : g_error_free (error);
1055 : : }
1056 : :
1057 : 0 : g_object_unref (account);
1058 : 0 : g_object_unref (manager);
1059 : : }
1060 : :
1061 : : static void
1062 : 0 : list_enabled_services (gchar *id)
1063 : : {
1064 : 0 : AgManager *manager = NULL;
1065 : 0 : AgAccount *account = NULL;
1066 : 0 : GList *list = NULL;
1067 : 0 : GList *iter = NULL;
1068 : 0 : const gchar *name = NULL;
1069 : 0 : const gchar *type = NULL;
1070 : :
1071 : 0 : manager = ag_manager_new ();
1072 : 0 : if (manager == NULL)
1073 : : {
1074 : 0 : show_error (ERROR_GENERIC);
1075 : 0 : return;
1076 : : }
1077 : :
1078 : 0 : account = ag_manager_get_account (manager, atoi (id));
1079 : 0 : if (account == NULL)
1080 : : {
1081 : 0 : show_error (INVALID_ACC_ID);
1082 : 0 : g_object_unref (manager);
1083 : 0 : return;
1084 : : }
1085 : :
1086 : 0 : list = ag_account_list_enabled_services (account);
1087 : 0 : if (list == NULL || g_list_length (list) == 0)
1088 : : {
1089 : 0 : printf ("No services enabled for account\n");
1090 : 0 : g_object_unref (account);
1091 : 0 : g_object_unref (manager);
1092 : 0 : return;
1093 : : }
1094 : :
1095 : 0 : printf ("%-35s%s\n", "Type", "Service Name");
1096 : 0 : printf ("%-35s%s\n", "----", "------------");
1097 : 0 : for (iter = list; iter != NULL; iter = g_list_next (iter))
1098 : : {
1099 : 0 : name = ag_service_get_name ((AgService *) (iter->data));
1100 : 0 : type = ag_service_get_service_type ((AgService *) (iter->data));
1101 : 0 : printf ("%-35s", type);
1102 : 0 : printf ("%s\n", name);
1103 : : }
1104 : :
1105 : 0 : ag_service_list_free (list);
1106 : 0 : g_object_unref (account);
1107 : 0 : g_object_unref (manager);
1108 : : }
1109 : :
1110 : : static void
1111 : 0 : list_enabled (gchar **argv)
1112 : : {
1113 : 0 : AgManager *manager = NULL;
1114 : 0 : AgAccount *account = NULL;
1115 : 0 : GList *list = NULL;
1116 : 0 : GList *iter = NULL;
1117 : 0 : const gchar *provider = NULL;
1118 : 0 : const gchar *name = NULL;
1119 : :
1120 : 0 : if (argv[2] != NULL)
1121 : : {
1122 : 0 : list_enabled_services (argv[2]);
1123 : 0 : return;
1124 : : }
1125 : :
1126 : 0 : manager = ag_manager_new ();
1127 : 0 : if (manager == NULL)
1128 : : {
1129 : 0 : show_error (ERROR_GENERIC);
1130 : 0 : return;
1131 : : }
1132 : :
1133 : 0 : list = ag_manager_list_enabled (manager);
1134 : 0 : if (list == NULL || g_list_length (list) == 0)
1135 : : {
1136 : 0 : printf ("No accounts enabled\n");
1137 : 0 : g_object_unref (manager);
1138 : 0 : return;
1139 : : }
1140 : :
1141 : 0 : printf ("%-10s %-30s %s\n", "ID", "Provider", "Name");
1142 : 0 : printf ("%-10s %-30s %s\n", "--", "--------", "----");
1143 : :
1144 : :
1145 : 0 : for (iter = list; iter != NULL; iter = g_list_next (iter))
1146 : : {
1147 : 0 : printf ("%-10d ", (AgAccountId) GPOINTER_TO_UINT (iter->data));
1148 : :
1149 : 0 : account = ag_manager_get_account (manager,
1150 : 0 : GPOINTER_TO_UINT (iter->data));
1151 : 0 : if (account == NULL)
1152 : : {
1153 : 0 : continue;
1154 : : }
1155 : :
1156 : 0 : provider = ag_account_get_provider_name (account);
1157 : 0 : if (provider != NULL)
1158 : 0 : printf ("%-30s ", provider);
1159 : : else
1160 : 0 : printf ("%-30s ", " ");
1161 : :
1162 : 0 : name = ag_account_get_display_name (account);
1163 : 0 : if (name != NULL)
1164 : 0 : printf ("%s\n", name);
1165 : : else
1166 : 0 : printf ("\n");
1167 : :
1168 : 0 : g_object_unref (account);
1169 : 0 : account = NULL;
1170 : :
1171 : : }
1172 : 0 : ag_manager_list_free (list);
1173 : 0 : g_object_unref (manager);
1174 : : }
1175 : :
1176 : : static int
1177 : 0 : parse (int argc, char **argv)
1178 : : {
1179 : 0 : if (strcmp (argv[1], "create-account") == 0)
1180 : : {
1181 : 0 : create_account (argv);
1182 : 0 : return 0;
1183 : : }
1184 : 0 : else if (strcmp (argv[1], "delete-account") == 0)
1185 : : {
1186 : 0 : delete_account (argv);
1187 : 0 : return 0;
1188 : : }
1189 : 0 : else if (strcmp (argv[1], "list-providers") == 0)
1190 : : {
1191 : 0 : list_providers ();
1192 : 0 : return 0;
1193 : : }
1194 : 0 : else if (strcmp (argv[1], "list-services") == 0)
1195 : : {
1196 : 0 : list_services (argv);
1197 : 0 : return 0;
1198 : : }
1199 : 0 : else if (strcmp (argv[1], "list-accounts") == 0)
1200 : : {
1201 : 0 : list_accounts ();
1202 : 0 : return 0;
1203 : : }
1204 : 0 : else if (strcmp (argv[1], "enable-account") == 0)
1205 : : {
1206 : 0 : enable_disable_account (argv, TRUE);
1207 : 0 : return 0;
1208 : : }
1209 : 0 : else if (strcmp (argv[1], "disable-account") == 0)
1210 : : {
1211 : 0 : enable_disable_account (argv, FALSE);
1212 : 0 : return 0;
1213 : : }
1214 : 0 : else if (strcmp (argv[1], "list-enabled") == 0)
1215 : : {
1216 : 0 : list_enabled (argv);
1217 : 0 : return 0;
1218 : : }
1219 : 0 : else if (strcmp (argv[1], "enable-service") == 0)
1220 : : {
1221 : 0 : enable_disable_service (argv, TRUE);
1222 : 0 : return 0;
1223 : : }
1224 : 0 : else if (strcmp (argv[1], "disable-service") == 0)
1225 : : {
1226 : 0 : enable_disable_service (argv, FALSE);
1227 : 0 : return 0;
1228 : : }
1229 : 0 : else if (strcmp (argv[1], "update-account") == 0)
1230 : : {
1231 : 0 : update_account (argv);
1232 : 0 : return 0;
1233 : : }
1234 : 0 : else if (strcmp (argv[1], "update-service") == 0)
1235 : : {
1236 : 0 : update_service (argv);
1237 : 0 : return 0;
1238 : : }
1239 : 0 : else if (strcmp (argv[1], "get-service") == 0)
1240 : : {
1241 : 0 : get_service (argv);
1242 : 0 : return 0;
1243 : : }
1244 : 0 : else if (strcmp (argv[1], "get-account") == 0)
1245 : : {
1246 : 0 : get_account (argv);
1247 : 0 : return 0;
1248 : : }
1249 : 0 : else if (strcmp (argv[1], "list-settings") == 0)
1250 : : {
1251 : 0 : list_settings (argv);
1252 : 0 : return 0;
1253 : : }
1254 : :
1255 : 0 : return -1;
1256 : : }
1257 : :
1258 : : gint
1259 : 0 : main (int argc, char **argv)
1260 : : {
1261 : 0 : gl_app_name = g_path_get_basename (argv[0]);
1262 : :
1263 : 0 : if (argc < 2)
1264 : : {
1265 : 0 : show_help ();
1266 : 0 : return 0;
1267 : : }
1268 : :
1269 : 0 : if (parse (argc, argv))
1270 : 0 : show_help ();
1271 : : }
|