diff options
-rw-r--r-- | util/mc-tool.c | 1991 |
1 files changed, 1026 insertions, 965 deletions
diff --git a/util/mc-tool.c b/util/mc-tool.c index 8d41acce..8ac5f9a9 100644 --- a/util/mc-tool.c +++ b/util/mc-tool.c @@ -40,279 +40,305 @@ static GMainLoop *main_loop; static void show_help (gchar * err) { - if (err) - printf ("Error: %s\n", err); - - printf ("Usage:\n" - " %1$s list\n" - " %1$s summary\n" - " %1$s dump\n" - " %1$s add <manager>/<protocol> <display name> [<param> ...]\n" - " %1$s update <account name> [<param>|clear:key] ...\n" - " %1$s display <account name> <display name>\n" - " %1$s nick <account name> <nick name>\n" - " %1$s service <account name> <service name>\n" - " %1$s icon <account name> <icon name>\n" - " %1$s show <account name>\n" - " %1$s get <account name> [key...]\n" - " %1$s enable <account name>\n" - " %1$s disable <account name>\n" - " %1$s auto-presence <account name> <presence status> [<message>]\n" - " %1$s request <account name> <presence status> [<message>]\n" - " %1$s auto-connect <account name> [(on|off)]\n" - " %1$s reconnect <account name>\n" - " %1$s remove <account name>\n" - " where <param> matches (int|uint|bool|string|path):<key>=<value>\n", - app_name); - - if (err) - exit (-1); - else - exit (0); + if (err != NULL) + printf ("Error: %s\n", err); + + printf ("Usage:\n" + " %1$s list\n" + " %1$s summary\n" + " %1$s dump\n" + " %1$s add <manager>/<protocol> <display name> [<param> ...]\n" + " %1$s update <account name> [<param>|clear:key] ...\n" + " %1$s display <account name> <display name>\n" + " %1$s nick <account name> <nick name>\n" + " %1$s service <account name> <service name>\n" + " %1$s icon <account name> <icon name>\n" + " %1$s show <account name>\n" + " %1$s get <account name> [key...]\n" + " %1$s enable <account name>\n" + " %1$s disable <account name>\n" + " %1$s auto-presence <account name> <presence status> [<message>]\n" + " %1$s request <account name> <presence status> [<message>]\n" + " %1$s auto-connect <account name> [(on|off)]\n" + " %1$s reconnect <account name>\n" + " %1$s remove <account name>\n" + " where <param> matches (int|uint|bool|string|path):<key>=<value>\n", + app_name); + + if (err) + exit (-1); + else + exit (0); } static -union command { - struct common { - void *callback; - gchar const *name; - gchar const *account; - int ret; +union command +{ + struct common + { + void *callback; + gchar const *name; + gchar const *account; + int ret; } common; - union { - gboolean (*manager) (TpAccountManager *manager); - gboolean (*account) (TpAccount *account); + union + { + gboolean (*manager) (TpAccountManager *manager); + gboolean (*account) (TpAccount *account); } ready; - struct { - struct common common; - gchar const *manager, *protocol, *display; - GHashTable *parameters; + struct + { + struct common common; + gchar const *manager, *protocol, *display; + GHashTable *parameters; } add; - struct { - struct common common; - GHashTable *set; - GPtrArray *unset; + struct + { + struct common common; + GHashTable *set; + GPtrArray *unset; } update; - struct { - struct common common; - GPtrArray *args; + struct + { + struct common common; + GPtrArray *args; } get; - struct { - struct common common; - gchar const *name; + struct + { + struct common common; + gchar const *name; } display, nick, icon, service; - struct { - struct common common; - TpConnectionPresenceType type; - gchar const *status, *message; + struct + { + struct common common; + TpConnectionPresenceType type; + gchar const *status, *message; } presence; - struct { - struct common common; - gboolean value; + struct + { + struct common common; + gboolean value; } boolean; } command; -struct presence { - TpConnectionPresenceType type; - gchar *status; - gchar *message; +struct presence +{ + TpConnectionPresenceType type; + gchar *status; + gchar *message; }; -static const char *strip_prefix (char const *string, char const *prefix) +static const char * +strip_prefix (char const *string, + char const *prefix) { - while (*prefix && *string) - if (*prefix++ != *string++) - return 0; - return *prefix == '\0' ? (char *)string : NULL; + while (*prefix && *string) + if (*prefix++ != *string++) + return 0; + + return *prefix == '\0' ? (char *)string : NULL; } -static char *ensure_prefix (char const *string) +static char * +ensure_prefix (char const *string) { - if (g_str_has_prefix (string, TP_ACCOUNT_OBJECT_PATH_BASE)) - return g_strdup (string); - return g_strdup_printf ("%s%s", TP_ACCOUNT_OBJECT_PATH_BASE, string); + if (g_str_has_prefix (string, TP_ACCOUNT_OBJECT_PATH_BASE)) + return g_strdup (string); + + return g_strdup_printf ("%s%s", TP_ACCOUNT_OBJECT_PATH_BASE, string); } static void _g_value_free (gpointer data) { - GValue *value = (GValue *) data; - g_value_unset (value); - g_free (value); + GValue *value = (GValue *) data; + g_value_unset (value); + g_free (value); } static GHashTable * new_params (void) { - return g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, _g_value_free); + return g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _g_value_free); } static gboolean set_param (GHashTable *parameters, - GPtrArray *clear, - gchar *param_value) + GPtrArray *clear, + gchar *param_value) { - gchar **strv_param_value = NULL; - gchar **strv_type_key = NULL; - const gchar *param, *type, *key, *value; - gboolean ret = 0; - GValue *gvalue; + gchar **strv_param_value = NULL; + gchar **strv_type_key = NULL; + const gchar *param, *type, *key, *value; + gboolean ret = 0; + GValue *gvalue; - if (!param_value) - return FALSE; + if (!param_value) + return FALSE; - strv_type_key = g_strsplit (param_value, ":", 2); + strv_type_key = g_strsplit (param_value, ":", 2); - if (strv_type_key == NULL || - strv_type_key[0] == NULL || - strv_type_key[1] == NULL || - strv_type_key[2] != NULL) - goto CLEANUP; + if (strv_type_key == NULL || + strv_type_key[0] == NULL || + strv_type_key[1] == NULL || + strv_type_key[2] != NULL) + goto CLEANUP; - type = strv_type_key[0]; - param = strv_type_key[1]; + type = strv_type_key[0]; + param = strv_type_key[1]; - if (clear) - { - if (strcmp (type, "clear") == 0 || strcmp (type, "unset") == 0) + if (clear) + { + if (strcmp (type, "clear") == 0 || strcmp (type, "unset") == 0) { - g_ptr_array_add (clear, g_strdup (param)); - ret = TRUE; - goto CLEANUP; + g_ptr_array_add (clear, g_strdup (param)); + ret = TRUE; + goto CLEANUP; } - } + } - strv_param_value = g_strsplit (param, "=", 2); + strv_param_value = g_strsplit (param, "=", 2); - if (strv_param_value == NULL || - strv_param_value[0] == NULL || - strv_param_value[1] == NULL || - strv_param_value[2] != NULL) - goto CLEANUP; + if (strv_param_value == NULL || + strv_param_value[0] == NULL || + strv_param_value[1] == NULL || + strv_param_value[2] != NULL) + goto CLEANUP; - key = strv_param_value[0]; - value = strv_param_value[1]; + key = strv_param_value[0]; + value = strv_param_value[1]; - gvalue = g_new0 (GValue, 1); + gvalue = g_new0 (GValue, 1); - /* Set the key */ - if (strcmp (type, "int") == 0) - { - g_value_init (gvalue, G_TYPE_INT); - g_value_set_int (gvalue, strtol (value, NULL, 10)); - ret = TRUE; - } - else if (strcmp (type, "uint") == 0) + /* Set the key */ + if (strcmp (type, "int") == 0) { - g_value_init (gvalue, G_TYPE_UINT); - g_value_set_uint (gvalue, strtoul (value, NULL, 10)); - ret = TRUE; + g_value_init (gvalue, G_TYPE_INT); + g_value_set_int (gvalue, strtol (value, NULL, 10)); + ret = TRUE; } - else if (strcmp (type, "bool") == 0 || strcmp (type, "boolean") == 0) + else if (strcmp (type, "uint") == 0) { - g_value_init (gvalue, G_TYPE_BOOLEAN); - if (g_ascii_strcasecmp (value, "1") == 0 || - g_ascii_strcasecmp (value, "true") == 0 || - /* "yes please!" / "yes sir, captain tightpants" */ - g_ascii_strncasecmp (value, "yes", 3) == 0 || - g_ascii_strcasecmp (value, "mos def") == 0 || - g_ascii_strcasecmp (value, "oui") == 0 || - strcmp (value, "ou là là!") == 0) - { - g_value_set_boolean (gvalue, TRUE); - ret = TRUE; - } - else if (g_ascii_strcasecmp (value, "0") == 0 || - g_ascii_strcasecmp (value, "false") == 0 || - g_ascii_strcasecmp (value, "no") == 0 || - g_ascii_strcasecmp (value, "nope") == 0 || - g_ascii_strcasecmp (value, "non") == 0) - { - g_value_set_boolean (gvalue, FALSE); - ret = TRUE; - } + g_value_init (gvalue, G_TYPE_UINT); + g_value_set_uint (gvalue, strtoul (value, NULL, 10)); + ret = TRUE; } - else if (strcmp (type, "string") == 0) + else if (strcmp (type, "bool") == 0 || strcmp (type, "boolean") == 0) { - g_value_init (gvalue, G_TYPE_STRING); - g_value_set_string (gvalue, value); - ret = TRUE; + g_value_init (gvalue, G_TYPE_BOOLEAN); + + if (g_ascii_strcasecmp (value, "1") == 0 || + g_ascii_strcasecmp (value, "true") == 0 || + /* "yes please!" / "yes sir, captain tightpants" */ + g_ascii_strncasecmp (value, "yes", 3) == 0 || + g_ascii_strcasecmp (value, "mos def") == 0 || + g_ascii_strcasecmp (value, "oui") == 0 || + strcmp (value, "ou là là!") == 0) + { + g_value_set_boolean (gvalue, TRUE); + ret = TRUE; + } + else if (g_ascii_strcasecmp (value, "0") == 0 || + g_ascii_strcasecmp (value, "false") == 0 || + g_ascii_strcasecmp (value, "no") == 0 || + g_ascii_strcasecmp (value, "nope") == 0 || + g_ascii_strcasecmp (value, "non") == 0) + { + g_value_set_boolean (gvalue, FALSE); + ret = TRUE; + } } - else if (strcmp (type, "path") == 0) + else if (strcmp (type, "string") == 0) { - g_value_init (gvalue, DBUS_TYPE_G_OBJECT_PATH); - g_value_set_boxed (gvalue, value); - ret = TRUE; + g_value_init (gvalue, G_TYPE_STRING); + g_value_set_string (gvalue, value); + ret = TRUE; } - - if (ret) - g_hash_table_replace (parameters, g_strdup (key), gvalue); - else - g_free (gvalue); + else if (strcmp (type, "path") == 0) + { + g_value_init (gvalue, DBUS_TYPE_G_OBJECT_PATH); + g_value_set_boxed (gvalue, value); + ret = TRUE; + } + + if (ret) + g_hash_table_replace (parameters, g_strdup (key), gvalue); + else + g_free (gvalue); CLEANUP: - g_strfreev (strv_param_value); - g_strfreev (strv_type_key); - return ret; + g_strfreev (strv_param_value); + g_strfreev (strv_type_key); + return ret; } static void show_param (gchar const *key, GValue *value) { - gchar const *type; - gchar *decoded = NULL; - int width; + gchar const *type; + gchar *decoded = NULL; + int width; - if (G_VALUE_HOLDS_STRING (value)) { - type = "string"; - decoded = g_value_dup_string (value); + if (G_VALUE_HOLDS_STRING (value)) + { + type = "string"; + decoded = g_value_dup_string (value); } - else if (G_VALUE_HOLDS_UINT (value)) { - type = "uint"; - decoded = g_strdup_printf ("%u", g_value_get_uint (value)); + else if (G_VALUE_HOLDS_UINT (value)) + { + type = "uint"; + decoded = g_strdup_printf ("%u", g_value_get_uint (value)); } - else if (G_VALUE_HOLDS_INT (value)) { - type = "int"; - decoded = g_strdup_printf ("%i", g_value_get_int (value)); + else if (G_VALUE_HOLDS_INT (value)) + { + type = "int"; + decoded = g_strdup_printf ("%i", g_value_get_int (value)); } - else if (G_VALUE_HOLDS_BOOLEAN (value)) { - type = "bool"; - decoded = g_strdup (g_value_get_boolean (value) ? "true" : "false"); + else if (G_VALUE_HOLDS_BOOLEAN (value)) + { + type = "bool"; + decoded = g_strdup (g_value_get_boolean (value) ? "true" : "false"); } - else if (G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) { - type = "path"; - decoded = g_value_dup_boxed (value); + else if (G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH)) + { + type = "path"; + decoded = g_value_dup_boxed (value); } - else { - type = G_VALUE_TYPE_NAME (value); - decoded = g_strdup_value_contents (value); + else + { + type = G_VALUE_TYPE_NAME (value); + decoded = g_strdup_value_contents (value); } - width = 11 - strlen (type); if (width < 0) width = 0; + width = 11 - strlen (type); + if (width < 0) + width = 0; - printf ("%*s (%s) %s = %s\n", width, "", type, key, decoded); + printf ("%*s (%s) %s = %s\n", width, "", type, key, decoded); - g_free (decoded); + g_free (decoded); } static int -show (gchar const *what, gchar const *value) +show (gchar const *what, + gchar const *value) { - if (value == NULL || value[0] == '\0') - return 0; - return printf ("%12s: %s\n", what, value); + if (value == NULL || value[0] == '\0') + return 0; + + return printf ("%12s: %s\n", what, value); } static int -show_presence (gchar const *what, struct presence *presence) +show_presence (gchar const *what, + struct presence *presence) { return printf ("%12s: %s (%d) \"%s\"\n", what, presence->status, presence->type, presence->message); @@ -342,339 +368,362 @@ free_presence (struct presence *presence) static TpConnectionPresenceType get_presence_type_for_status(char const *status) { - if (g_ascii_strcasecmp(status, "unset") == 0) - return TP_CONNECTION_PRESENCE_TYPE_UNSET; - if (g_ascii_strcasecmp(status, "unknown") == 0) - return TP_CONNECTION_PRESENCE_TYPE_UNKNOWN; - if (g_ascii_strcasecmp(status, "offline") == 0) - return TP_CONNECTION_PRESENCE_TYPE_OFFLINE; - if (g_ascii_strcasecmp(status, "available") == 0 || - g_ascii_strcasecmp(status, "online") == 0) - return TP_CONNECTION_PRESENCE_TYPE_AVAILABLE; - if (g_ascii_strcasecmp(status, "away") == 0 || - g_ascii_strcasecmp(status, "brb") == 0) - return TP_CONNECTION_PRESENCE_TYPE_AWAY; - if (g_ascii_strcasecmp(status, "xa") == 0 || - g_ascii_strcasecmp(status, "extended-away") == 0 || - g_ascii_strcasecmp(status, "extendedaway") == 0) - return TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY; - if (g_ascii_strcasecmp(status, "hidden") == 0) - return TP_CONNECTION_PRESENCE_TYPE_HIDDEN; - if (g_ascii_strcasecmp(status, "busy") == 0 || - g_ascii_strcasecmp(status, "dnd") == 0 || - g_ascii_strcasecmp(status, "do_not_disturb") == 0 || - g_ascii_strcasecmp(status, "donotdisturb") == 0) - return TP_CONNECTION_PRESENCE_TYPE_BUSY; - if (g_ascii_strcasecmp(status, "error") == 0) - return TP_CONNECTION_PRESENCE_TYPE_ERROR; - + if (g_ascii_strcasecmp(status, "unset") == 0) + return TP_CONNECTION_PRESENCE_TYPE_UNSET; + if (g_ascii_strcasecmp(status, "unknown") == 0) return TP_CONNECTION_PRESENCE_TYPE_UNKNOWN; + if (g_ascii_strcasecmp(status, "offline") == 0) + return TP_CONNECTION_PRESENCE_TYPE_OFFLINE; + if (g_ascii_strcasecmp(status, "available") == 0 || + g_ascii_strcasecmp(status, "online") == 0) + return TP_CONNECTION_PRESENCE_TYPE_AVAILABLE; + if (g_ascii_strcasecmp(status, "away") == 0 || + g_ascii_strcasecmp(status, "brb") == 0) + return TP_CONNECTION_PRESENCE_TYPE_AWAY; + if (g_ascii_strcasecmp(status, "xa") == 0 || + g_ascii_strcasecmp(status, "extended-away") == 0 || + g_ascii_strcasecmp(status, "extendedaway") == 0) + return TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY; + if (g_ascii_strcasecmp(status, "hidden") == 0) + return TP_CONNECTION_PRESENCE_TYPE_HIDDEN; + if (g_ascii_strcasecmp(status, "busy") == 0 || + g_ascii_strcasecmp(status, "dnd") == 0 || + g_ascii_strcasecmp(status, "do_not_disturb") == 0 || + g_ascii_strcasecmp(status, "donotdisturb") == 0) + return TP_CONNECTION_PRESENCE_TYPE_BUSY; + if (g_ascii_strcasecmp(status, "error") == 0) + return TP_CONNECTION_PRESENCE_TYPE_ERROR; + + return TP_CONNECTION_PRESENCE_TYPE_UNKNOWN; } static gchar const * -connection_status_as_string(TpConnectionStatus status) +connection_status_as_string (TpConnectionStatus status) { - switch (status) + switch (status) { - case TP_CONNECTION_STATUS_CONNECTED: return "CONNECTED"; - case TP_CONNECTION_STATUS_CONNECTING: return "CONNECTING"; - case TP_CONNECTION_STATUS_DISCONNECTED: return "DISCONNECTED"; - default: return "<unknown>"; + case TP_CONNECTION_STATUS_CONNECTED: + return "CONNECTED"; + case TP_CONNECTION_STATUS_CONNECTING: + return "CONNECTING"; + case TP_CONNECTION_STATUS_DISCONNECTED: + return "DISCONNECTED"; + default: + return "<unknown>"; } } static gchar const * -connection_status_reason_as_string(TpConnectionStatusReason reason) +connection_status_reason_as_string (TpConnectionStatusReason reason) { - switch (reason) + switch (reason) { - case TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED: - return "NONE"; - case TP_CONNECTION_STATUS_REASON_REQUESTED: - return "REQUESTED"; - case TP_CONNECTION_STATUS_REASON_NETWORK_ERROR: - return "NETWORK_ERROR"; - case TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED: - return "AUTHENTICATION_FAILED"; - case TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR: - return "ENCRYPTION_ERROR"; - case TP_CONNECTION_STATUS_REASON_NAME_IN_USE: - return "NAME_IN_USE"; - case TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED: - return "CERT_NOT_PROVIDED"; - case TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED: - return "CERT_UNTRUSTED"; - case TP_CONNECTION_STATUS_REASON_CERT_EXPIRED: - return "CERT_EXPIRED"; - case TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED: - return "CERT_NOT_ACTIVATED"; - case TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH: - return "CERT_HOSTNAME_MISMATCH"; - case TP_CONNECTION_STATUS_REASON_CERT_FINGERPRINT_MISMATCH: - return "CERT_FINGERPRINT_MISMATCH"; - case TP_CONNECTION_STATUS_REASON_CERT_SELF_SIGNED: - return "CERT_SELF_SIGNED"; - case TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR: - return "CERT_OTHER_ERROR"; - default: - return "<unknown>"; + case TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED: + return "NONE"; + case TP_CONNECTION_STATUS_REASON_REQUESTED: + return "REQUESTED"; + case TP_CONNECTION_STATUS_REASON_NETWORK_ERROR: + return "NETWORK_ERROR"; + case TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED: + return "AUTHENTICATION_FAILED"; + case TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR: + return "ENCRYPTION_ERROR"; + case TP_CONNECTION_STATUS_REASON_NAME_IN_USE: + return "NAME_IN_USE"; + case TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED: + return "CERT_NOT_PROVIDED"; + case TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED: + return "CERT_UNTRUSTED"; + case TP_CONNECTION_STATUS_REASON_CERT_EXPIRED: + return "CERT_EXPIRED"; + case TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED: + return "CERT_NOT_ACTIVATED"; + case TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH: + return "CERT_HOSTNAME_MISMATCH"; + case TP_CONNECTION_STATUS_REASON_CERT_FINGERPRINT_MISMATCH: + return "CERT_FINGERPRINT_MISMATCH"; + case TP_CONNECTION_STATUS_REASON_CERT_SELF_SIGNED: + return "CERT_SELF_SIGNED"; + case TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR: + return "CERT_OTHER_ERROR"; + default: + return "<unknown>"; } } -typedef enum { - GET_PARAM, - GET_STRING, - GET_BOOLEAN, - GET_PRESENCE, - GET_PRESENCE_TYPE, - GET_PRESENCE_STATUS, - GET_PRESENCE_MESSAGE +typedef enum +{ + GET_PARAM, + GET_STRING, + GET_BOOLEAN, + GET_PRESENCE, + GET_PRESENCE_TYPE, + GET_PRESENCE_STATUS, + GET_PRESENCE_MESSAGE } GetterType; -typedef struct _Getter { - gchar const *name; - GetterType type; - gpointer function; +typedef struct _Getter +{ + gchar const *name; + GetterType type; + gpointer function; } Getter; static GData *getter_list; static void getter_list_add(gchar const *name, - GetterType type, - gpointer function) + GetterType type, + gpointer function) { - GQuark id; - Getter *getter; + GQuark id; + Getter *getter; - id = g_quark_from_static_string(name); + id = g_quark_from_static_string (name); - getter = g_new0(Getter, 1); - getter->name = name; - getter->type = type; - getter->function = function; + getter = g_new0 (Getter, 1); + getter->name = name; + getter->type = type; + getter->function = function; - g_datalist_id_set_data(&getter_list, id, getter); + g_datalist_id_set_data (&getter_list, id, getter); } static void -getter_list_init(void) +getter_list_init (void) { - static int init; - - if (init) return; - - init = 1; - - getter_list_add("DisplayName", GET_STRING, tp_account_get_display_name); - getter_list_add("Icon", GET_STRING, tp_account_get_icon_name); - getter_list_add("Usable", GET_BOOLEAN, tp_account_is_usable); - getter_list_add("Enabled", GET_BOOLEAN, tp_account_is_enabled); - getter_list_add("Nickname", GET_STRING, tp_account_get_nickname); - getter_list_add("ConnectAutomatically", GET_BOOLEAN, - tp_account_get_connect_automatically); - getter_list_add("NormalizedName", GET_STRING, tp_account_get_normalized_name); - - getter_list_add("AutomaticPresence", - GET_PRESENCE, tp_account_get_automatic_presence); - getter_list_add("AutomaticPresenceType", - GET_PRESENCE_TYPE, tp_account_get_automatic_presence); - getter_list_add("AutomaticPresenceStatus", - GET_PRESENCE_STATUS, tp_account_get_automatic_presence); - getter_list_add("AutomaticPresenceMessage", - GET_PRESENCE_MESSAGE, tp_account_get_automatic_presence); - - getter_list_add("RequestedPresenceType", - GET_PRESENCE_TYPE, tp_account_get_requested_presence); - getter_list_add("RequestedPresenceStatus", - GET_PRESENCE_STATUS, tp_account_get_requested_presence); - getter_list_add("RequestedPresenceMessage", - GET_PRESENCE_MESSAGE, tp_account_get_requested_presence); - - getter_list_add("CurrentPresenceType", - GET_PRESENCE_TYPE, tp_account_get_current_presence); - getter_list_add("CurrentPresenceStatus", - GET_PRESENCE_STATUS, tp_account_get_current_presence); - getter_list_add("CurrentPresenceMessage", - GET_PRESENCE_MESSAGE, tp_account_get_current_presence); + static int init; + + if (init) + return; + + init = 1; + + getter_list_add ("DisplayName", GET_STRING, tp_account_get_display_name); + getter_list_add ("Icon", GET_STRING, tp_account_get_icon_name); + getter_list_add ("Usable", GET_BOOLEAN, tp_account_is_usable); + getter_list_add ("Enabled", GET_BOOLEAN, tp_account_is_enabled); + getter_list_add ("Nickname", GET_STRING, tp_account_get_nickname); + getter_list_add ("ConnectAutomatically", GET_BOOLEAN, + tp_account_get_connect_automatically); + getter_list_add ("NormalizedName", GET_STRING, + tp_account_get_normalized_name); + + getter_list_add ("AutomaticPresence", + GET_PRESENCE, tp_account_get_automatic_presence); + getter_list_add ("AutomaticPresenceType", + GET_PRESENCE_TYPE, tp_account_get_automatic_presence); + getter_list_add ("AutomaticPresenceStatus", + GET_PRESENCE_STATUS, tp_account_get_automatic_presence); + getter_list_add ("AutomaticPresenceMessage", + GET_PRESENCE_MESSAGE, tp_account_get_automatic_presence); + + getter_list_add ("RequestedPresenceType", + GET_PRESENCE_TYPE, tp_account_get_requested_presence); + getter_list_add ("RequestedPresenceStatus", + GET_PRESENCE_STATUS, tp_account_get_requested_presence); + getter_list_add ("RequestedPresenceMessage", + GET_PRESENCE_MESSAGE, tp_account_get_requested_presence); + + getter_list_add ("CurrentPresenceType", + GET_PRESENCE_TYPE, tp_account_get_current_presence); + getter_list_add ("CurrentPresenceStatus", + GET_PRESENCE_STATUS, tp_account_get_current_presence); + getter_list_add ("CurrentPresenceMessage", + GET_PRESENCE_MESSAGE, tp_account_get_current_presence); } static Getter * -getter_by_name(char *name) +getter_by_name (char *name) { - getter_list_init(); + getter_list_init (); - return g_datalist_get_data(&getter_list, name); + return g_datalist_get_data (&getter_list, name); } /* ====================================================================== */ static gint compare_accounts (gconstpointer a, - gconstpointer b) + gconstpointer b) { - return strcmp (tp_account_get_path_suffix (TP_ACCOUNT (a)), - tp_account_get_path_suffix (TP_ACCOUNT (b))); + return strcmp (tp_account_get_path_suffix (TP_ACCOUNT (a)), + tp_account_get_path_suffix (TP_ACCOUNT (b))); } static GList * dup_usable_accounts_sorted (TpAccountManager *manager) { - return g_list_sort (tp_account_manager_dup_usable_accounts (manager), - compare_accounts); + return g_list_sort (tp_account_manager_dup_usable_accounts (manager), + compare_accounts); } static gboolean command_list (TpAccountManager *manager) { - GList *accounts = dup_usable_accounts_sorted (manager); + GList *accounts = dup_usable_accounts_sorted (manager); - if (accounts != NULL) { - GList *ptr; + if (accounts != NULL) + { + GList *ptr; - command.common.ret = 0; + command.common.ret = 0; - for (ptr = accounts; ptr != NULL; ptr = ptr->next) { - puts (tp_account_get_path_suffix (ptr->data)); - } + for (ptr = accounts; ptr != NULL; ptr = ptr->next) + { + puts (tp_account_get_path_suffix (ptr->data)); + } - g_list_free_full (accounts, g_object_unref); + g_list_free_full (accounts, g_object_unref); } - return FALSE; /* stop mainloop */ + return FALSE; /* stop mainloop */ } static gboolean command_summary (TpAccountManager *manager) { - GList *accounts, *l; - guint longest_account = 0; + GList *accounts, *l; + guint longest_account = 0; - accounts = tp_account_manager_dup_usable_accounts (manager); - if (accounts == NULL) { - return FALSE; - } - command.common.ret = 0; + accounts = tp_account_manager_dup_usable_accounts (manager); + if (accounts == NULL) + return FALSE; - for (l = accounts; l != NULL; l = l->next) { - TpAccount *account = TP_ACCOUNT (l->data); + command.common.ret = 0; - longest_account = MAX (longest_account, - strlen (tp_account_get_path_suffix (account))); + for (l = accounts; l != NULL; l = l->next) + { + TpAccount *account = TP_ACCOUNT (l->data); + + longest_account = MAX (longest_account, + strlen (tp_account_get_path_suffix (account))); } - /* The -6 is so we can line up the "Enabled" header to have the ticks and - * crosses below the 7th and final character. We're only guaranteed - * longest_account ≥ 5 in theory (a/b/c is the shortest legal suffix) but - * in practice it's always going to be ≥ 7. - */ - g_return_val_if_fail (longest_account >= 7, FALSE); - printf ("%-*s %s %s\n", longest_account - 6, "Account", "Enabled", "Requested"); - printf ("%-*s %s %s\n", longest_account - 6, "=======", "=======", "========="); - - for (l = accounts; l != NULL; l = l->next) { - TpAccount *account = TP_ACCOUNT (l->data); - gchar *status; - - tp_account_get_requested_presence (account, &status, NULL); - printf ("%-*s %s %s\n", - longest_account, tp_account_get_path_suffix (account), - tp_account_is_enabled (account) ? "✓" : "☐", - status); + /* The -6 is so we can line up the "Enabled" header to have the ticks and + * crosses below the 7th and final character. We're only guaranteed + * longest_account ≥ 5 in theory (a/b/c is the shortest legal suffix) but + * in practice it's always going to be ≥ 7. + */ + g_return_val_if_fail (longest_account >= 7, FALSE); + printf ("%-*s %s %s\n", longest_account - 6, + "Account", "Enabled", "Requested"); + printf ("%-*s %s %s\n", longest_account - 6, + "=======", "=======", "========="); + + for (l = accounts; l != NULL; l = l->next) + { + TpAccount *account = TP_ACCOUNT (l->data); + gchar *status; + + tp_account_get_requested_presence (account, &status, NULL); + printf ("%-*s %s %s\n", + longest_account, tp_account_get_path_suffix (account), + tp_account_is_enabled (account) ? "✓" : "☐", + status); } - g_list_free_full (accounts, g_object_unref); - return FALSE; /* stop mainloop */ + g_list_free_full (accounts, g_object_unref); + return FALSE; /* stop mainloop */ } static void callback_for_create_account (GObject *source, - GAsyncResult *result, - gpointer user_data) + GAsyncResult *result, + gpointer user_data) { - TpAccountManager *am = TP_ACCOUNT_MANAGER (source); - TpAccount *account; - GError *error = NULL; + TpAccountManager *am = TP_ACCOUNT_MANAGER (source); + TpAccount *account; + GError *error = NULL; - account = tp_account_manager_create_account_finish (am, result, &error); + account = tp_account_manager_create_account_finish (am, result, &error); - if (account != NULL) { - command.common.ret = 0; - puts (tp_account_get_path_suffix (account)); + if (account != NULL) + { + command.common.ret = 0; + puts (tp_account_get_path_suffix (account)); } - else { - fprintf (stderr, "%s %s: %s\n", app_name, command.common.name, - error->message); + else + { + fprintf (stderr, "%s %s: %s\n", app_name, command.common.name, + error->message); } - g_main_loop_quit (main_loop); + + g_main_loop_quit (main_loop); } static gboolean command_add (TpAccountManager *manager) { - GHashTable *properties = tp_asv_new (NULL, NULL); - - tp_account_manager_create_account_async (manager, - command.add.manager, - command.add.protocol, - command.add.display, - command.add.parameters, - properties, - callback_for_create_account, - NULL); - return TRUE; + GHashTable *properties = tp_asv_new (NULL, NULL); + + tp_account_manager_create_account_async (manager, + command.add.manager, + command.add.protocol, + command.add.display, + command.add.parameters, + properties, + callback_for_create_account, + NULL); + + return TRUE; } static void callback_for_update_parameters (GObject *source, - GAsyncResult *result, - gpointer user_data G_GNUC_UNUSED) + GAsyncResult *result, + gpointer user_data G_GNUC_UNUSED) { - TpAccount *account = TP_ACCOUNT (source); - gchar **reconnect_required = NULL; - GError *error = NULL; + TpAccount *account = TP_ACCOUNT (source); + gchar **reconnect_required = NULL; + GError *error = NULL; - if (tp_account_update_parameters_finish (account, result, - &reconnect_required, &error)) { - if (reconnect_required[0] != NULL) { - gchar *r = g_strjoinv (", ", reconnect_required); - - printf ("To apply changes to these parameters:\n"); - printf (" %s\n", r); - printf ("run:\n"); - printf (" %s reconnect %s\n", app_name, - tp_account_get_path_suffix (account)); - g_free (r); - g_strfreev (reconnect_required); + if (tp_account_update_parameters_finish (account, result, + &reconnect_required, &error)) + { + if (reconnect_required[0] != NULL) + { + gchar *r = g_strjoinv (", ", reconnect_required); + + printf ("To apply changes to these parameters:\n"); + printf (" %s\n", r); + printf ("run:\n"); + printf (" %s reconnect %s\n", app_name, + tp_account_get_path_suffix (account)); + g_free (r); + g_strfreev (reconnect_required); } - command.common.ret = 0; + command.common.ret = 0; } - else { - fprintf (stderr, "%s %s: %s\n", app_name, command.common.name, - error->message); + else + { + fprintf (stderr, "%s %s: %s\n", app_name, command.common.name, + error->message); } - g_main_loop_quit (main_loop); + g_main_loop_quit (main_loop); } static void callback_for_async (GObject *account, - GAsyncResult *res, - gpointer user_data) + GAsyncResult *res, + gpointer user_data) { gboolean (* finish_func) (TpAccount *, GAsyncResult *, GError **); GError *error = NULL; finish_func = user_data; - if (!finish_func (TP_ACCOUNT (account), res, &error)) { + if (!finish_func (TP_ACCOUNT (account), res, &error)) + { fprintf (stderr, "%s %s: %s\n", app_name, command.common.name, error->message); g_error_free (error); - } - else { + } + else + { command.common.ret = 0; - } + } g_main_loop_quit (main_loop); } @@ -682,8 +731,9 @@ callback_for_async (GObject *account, static gboolean command_remove (TpAccount *account) { - tp_account_remove_async (account, callback_for_async, tp_account_remove_finish); - return TRUE; + tp_account_remove_async (account, callback_for_async, + tp_account_remove_finish); + return TRUE; } static gchar * @@ -719,768 +769,779 @@ dup_storage_restrictions (TpAccount *account) static gboolean command_show (TpAccount *account) { - const GHashTable *parameters; - GHashTableIter i[1]; - gpointer keyp, valuep; - struct presence automatic, current, requested; - const gchar * const *schemes; - const gchar *storage_provider; - const gchar * const *supersedes; - - show ("Account", tp_account_get_path_suffix (account)); - show ("Display Name", tp_account_get_display_name (account)); - show ("Normalized", tp_account_get_normalized_name (account)); - show ("Enabled", tp_account_is_enabled (account) ? "enabled" : "disabled"); - show ("Usable", tp_account_is_usable (account) ? "" : "false"); - show ("Icon", tp_account_get_icon_name (account)); - show ("Connects", - tp_account_get_connect_automatically (account) - ? "automatically" : "only when requested"); - show ("Nickname", tp_account_get_nickname (account)); - show ("Service", tp_account_get_service (account)); - - puts (""); - puts ("Presences:"); - automatic.type = tp_account_get_automatic_presence (account, - &automatic.status, - &automatic.message); - show_presence ("Automatic", &automatic); - free_presence (&automatic); - - current.type = tp_account_get_current_presence (account, - ¤t.status, - ¤t.message); - show_presence ("Current", ¤t); - free_presence (¤t); - - requested.type = tp_account_get_requested_presence (account, - &requested.status, - &requested.message); - show_presence ("Requested", &requested); - free_presence (&requested); - - show ("Changing", - tp_account_get_changing_presence (account) ? "yes" : "no"); - - schemes = tp_account_get_uri_schemes (account); - if (schemes != NULL && schemes[0] != NULL) - { - puts (""); - puts ("Addressing:"); + const GHashTable *parameters; + GHashTableIter i[1]; + gpointer keyp, valuep; + struct presence automatic, current, requested; + const gchar * const *schemes; + const gchar *storage_provider; + const gchar * const *supersedes; + + show ("Account", tp_account_get_path_suffix (account)); + show ("Display Name", tp_account_get_display_name (account)); + show ("Normalized", tp_account_get_normalized_name (account)); + show ("Enabled", tp_account_is_enabled (account) ? "enabled" : "disabled"); + show ("Usable", tp_account_is_usable (account) ? "" : "false"); + show ("Icon", tp_account_get_icon_name (account)); + show ("Connects", tp_account_get_connect_automatically (account) + ? "automatically" : "only when requested"); + show ("Nickname", tp_account_get_nickname (account)); + show ("Service", tp_account_get_service (account)); + + puts (""); + puts ("Presences:"); + automatic.type = tp_account_get_automatic_presence (account, + &automatic.status, &automatic.message); + show_presence ("Automatic", &automatic); + free_presence (&automatic); + + current.type = tp_account_get_current_presence (account, ¤t.status, + ¤t.message); + show_presence ("Current", ¤t); + free_presence (¤t); + + requested.type = tp_account_get_requested_presence (account, + &requested.status, &requested.message); + show_presence ("Requested", &requested); + free_presence (&requested); + + show ("Changing", tp_account_get_changing_presence (account) ? "yes" : "no"); + + schemes = tp_account_get_uri_schemes (account); + if (schemes != NULL && schemes[0] != NULL) + { + puts (""); + puts ("Addressing:"); - show_uri_schemes (schemes); - } + show_uri_schemes (schemes); + } - storage_provider = tp_account_get_storage_provider (account); - if (!tp_str_empty (storage_provider)) - { - GVariant *storage_identifier; - gchar *storage_restrictions; + storage_provider = tp_account_get_storage_provider (account); + if (!tp_str_empty (storage_provider)) + { + GVariant *storage_identifier; + gchar *storage_restrictions; - puts (""); - puts ("Storage:"); - show ("Provider", storage_provider); + puts (""); + puts ("Storage:"); + show ("Provider", storage_provider); - storage_identifier = tp_account_dup_storage_identifier ( - account); - if (storage_identifier != NULL) - { - gchar *tmp = g_variant_print (storage_identifier, TRUE); + storage_identifier = tp_account_dup_storage_identifier (account); + if (storage_identifier != NULL) + { + gchar *tmp = g_variant_print (storage_identifier, TRUE); - show ("Identifier", tmp); + show ("Identifier", tmp); - g_free (tmp); - g_variant_unref (storage_identifier); - } + g_free (tmp); + g_variant_unref (storage_identifier); + } - storage_restrictions = dup_storage_restrictions (account); - show ("Restrictions", storage_restrictions); - g_free (storage_restrictions); - } + storage_restrictions = dup_storage_restrictions (account); + show ("Restrictions", storage_restrictions); + g_free (storage_restrictions); + } - supersedes = tp_account_get_supersedes (account); - if (supersedes != NULL && supersedes[0] != NULL) - { - puts (""); - puts ("Supersedes:"); - for (; *supersedes != NULL; supersedes++) - printf (" %s\n", *supersedes + strlen (TP_ACCOUNT_OBJECT_PATH_BASE)); - } + supersedes = tp_account_get_supersedes (account); + if (supersedes != NULL && supersedes[0] != NULL) + { + puts (""); + puts ("Supersedes:"); + for (; *supersedes != NULL; supersedes++) + printf (" %s\n", *supersedes + strlen (TP_ACCOUNT_OBJECT_PATH_BASE)); + } - puts (""); - parameters = tp_account_get_parameters (account); + puts (""); + parameters = tp_account_get_parameters (account); - for (g_hash_table_iter_init (i, (GHashTable *) parameters); - g_hash_table_iter_next (i, &keyp, &valuep);) { - show_param (keyp, valuep); + for (g_hash_table_iter_init (i, (GHashTable *) parameters); + g_hash_table_iter_next (i, &keyp, &valuep);) + { + show_param (keyp, valuep); } - command.common.ret = 0; + command.common.ret = 0; - return FALSE; + return FALSE; } static gboolean command_dump (TpAccountManager *manager) { - GList *accounts, *l; + GList *accounts, *l; - accounts = tp_account_manager_dup_usable_accounts (manager); - if (accounts == NULL) { - return FALSE; - } - command.common.ret = 0; + accounts = tp_account_manager_dup_usable_accounts (manager); + if (accounts == NULL) + return FALSE; + + command.common.ret = 0; - for (l = accounts; l != NULL; l = l->next) { - TpAccount *account = TP_ACCOUNT (l->data); + for (l = accounts; l != NULL; l = l->next) + { + TpAccount *account = TP_ACCOUNT (l->data); - command_show (account); + command_show (account); - if (l->next != NULL) - printf ("\n------------------------------------------------------------\n\n"); + if (l->next != NULL) + printf ( + "\n------------------------------------------------------------\n\n"); } - g_list_free_full (accounts, g_object_unref); - return FALSE; /* stop mainloop */ + g_list_free_full (accounts, g_object_unref); + return FALSE; /* stop mainloop */ } static gboolean command_connection (TpAccount *account) { - TpConnection *conn; + TpConnection *conn; - conn = tp_account_get_connection (account); + conn = tp_account_get_connection (account); - if (conn != NULL) { - TpConnectionStatus status; - TpConnectionStatusReason reason; - const gchar *name; + if (conn != NULL) + { + TpConnectionStatus status; + TpConnectionStatusReason reason; + const gchar *name; - name = tp_proxy_get_object_path (conn); - status = tp_account_get_connection_status (account, &reason); + name = tp_proxy_get_object_path (conn); + status = tp_account_get_connection_status (account, &reason); - printf("%s %s %s\n", name, - connection_status_as_string(status), - connection_status_reason_as_string(reason)); - command.common.ret = 0; + printf ("%s %s %s\n", name, connection_status_as_string(status), + connection_status_reason_as_string(reason)); + command.common.ret = 0; } - else { - fprintf(stderr, "%s: no connection\n", - tp_account_get_path_suffix (account)); + else + { + fprintf(stderr, "%s: no connection\n", + tp_account_get_path_suffix (account)); } - return FALSE; + return FALSE; } static gboolean command_get (TpAccount *account) { - GPtrArray *args = command.get.args; - GHashTable *parameters = NULL; - guint i; - - command.common.ret = 0; - - for (i = 0; i < args->len; i++) { - Getter *getter = g_ptr_array_index(args, i); - - if (getter->function) { - gchar const *(*getstring)(TpAccount *) = getter->function; - gboolean (*getboolean)(TpAccount *) = getter->function; - TpConnectionPresenceType (*getpresence)(TpAccount *, - gchar **status, gchar **message) = - getter->function; - - if (getter->type == GET_STRING) { - printf("\"%s\"\n", getstring(account)); - } - else if (getter->type == GET_BOOLEAN) { - puts(getboolean(account) ? "true" : "false"); - } - else if (getter->type == GET_PRESENCE) + GPtrArray *args = command.get.args; + GHashTable *parameters = NULL; + guint i; + + command.common.ret = 0; + + for (i = 0; i < args->len; i++) + { + Getter *getter = g_ptr_array_index(args, i); + + if (getter->function) + { + gchar const *(*getstring)(TpAccount *) = getter->function; + gboolean (*getboolean)(TpAccount *) = getter->function; + TpConnectionPresenceType (*getpresence)(TpAccount *, + gchar **status, gchar **message) = getter->function; + + if (getter->type == GET_STRING) + { + printf ("\"%s\"\n", getstring(account)); + } + else if (getter->type == GET_BOOLEAN) { - struct presence presence; + puts(getboolean(account) ? "true" : "false"); + } + else if (getter->type == GET_PRESENCE) + { + struct presence presence; + + presence.type = getpresence(account, &presence.status, + &presence.message); + printf ("(%u, \"%s\", \"%s\")\n", presence.type, + presence.status, presence.message); + free_presence (&presence); + } + else if (getter->type == GET_PRESENCE_TYPE || + getter->type == GET_PRESENCE_STATUS || + getter->type == GET_PRESENCE_MESSAGE) + { + struct presence presence; - presence.type = getpresence(account, &presence.status, + presence.type = getpresence(account, &presence.status, &presence.message); - printf ("(%u, \"%s\", \"%s\")\n", presence.type, - presence.status, presence.message); - free_presence (&presence); + + if (getter->type == GET_PRESENCE_TYPE) + printf ("%u\n", presence.type); + else if (getter->type == GET_PRESENCE_STATUS) + printf("\"%s\"\n", presence.status); + else + printf("\"%s\"\n", presence.message); + + free_presence (&presence); } - else if (getter->type == GET_PRESENCE_TYPE || - getter->type == GET_PRESENCE_STATUS || - getter->type == GET_PRESENCE_MESSAGE) { - struct presence presence; - - presence.type = getpresence(account, &presence.status, - &presence.message); - - if (getter->type == GET_PRESENCE_TYPE) - printf("%u\n", presence.type); - else if (getter->type == GET_PRESENCE_STATUS) - printf("\"%s\"\n", presence.status); - else - printf("\"%s\"\n", presence.message); - - free_presence (&presence); - } - else { - } - } - else { - GValue *gvalue; - gchar *value; - - if (parameters == NULL) - parameters = (GHashTable *) tp_account_get_parameters(account); - - gvalue = g_hash_table_lookup(parameters, getter->name); - - if (gvalue == NULL) { - command.common.ret = 1; - fprintf(stderr, "%s %s: param=%s: %s\n", - app_name, command.common.name, - getter->name, "not found"); - continue; - } - - value = g_strdup_value_contents (gvalue); - puts(value); - g_free(value); - } + } + else + { + GValue *gvalue; + gchar *value; + + if (parameters == NULL) + parameters = (GHashTable *) tp_account_get_parameters(account); + + gvalue = g_hash_table_lookup (parameters, getter->name); + + if (gvalue == NULL) + { + command.common.ret = 1; + fprintf (stderr, "%s %s: param=%s: %s\n", + app_name, command.common.name, + getter->name, "not found"); + continue; + } + + value = g_strdup_value_contents (gvalue); + puts(value); + g_free(value); + } } - return FALSE; + return FALSE; } static gboolean command_enable (TpAccount *account) { - tp_account_set_enabled_async (account, TRUE, - callback_for_async, - tp_account_set_enabled_finish); + tp_account_set_enabled_async (account, TRUE, + callback_for_async, tp_account_set_enabled_finish); - return TRUE; + return TRUE; } static gboolean command_disable (TpAccount *account) { - tp_account_set_enabled_async (account, FALSE, - callback_for_async, - tp_account_set_enabled_finish); + tp_account_set_enabled_async (account, FALSE, + callback_for_async, tp_account_set_enabled_finish); - return TRUE; + return TRUE; } static gboolean command_display (TpAccount *account) { - tp_account_set_display_name_async (account, command.display.name, - callback_for_async, - tp_account_set_display_name_finish); + tp_account_set_display_name_async (account, command.display.name, + callback_for_async, tp_account_set_display_name_finish); - return TRUE; + return TRUE; } static gboolean command_nick (TpAccount *account) { - tp_account_set_nickname_async (account, command.nick.name, - callback_for_async, - tp_account_set_nickname_finish); + tp_account_set_nickname_async (account, command.nick.name, + callback_for_async, tp_account_set_nickname_finish); - return TRUE; + return TRUE; } static gboolean command_service (TpAccount *account) { - tp_account_set_service_async (account, command.service.name, - callback_for_async, - tp_account_set_service_finish); + tp_account_set_service_async (account, command.service.name, + callback_for_async, tp_account_set_service_finish); - return TRUE; + return TRUE; } static gboolean command_icon (TpAccount *account) { - tp_account_set_icon_name_async (account, command.icon.name, - callback_for_async, - tp_account_set_icon_name_finish); + tp_account_set_icon_name_async (account, command.icon.name, + callback_for_async, tp_account_set_icon_name_finish); - return TRUE; + return TRUE; } static gboolean command_auto_connect (TpAccount *account) { - tp_account_set_connect_automatically_async (account, command.boolean.value, - callback_for_async, - tp_account_set_connect_automatically_finish); + tp_account_set_connect_automatically_async (account, command.boolean.value, + callback_for_async, tp_account_set_connect_automatically_finish); - return TRUE; + return TRUE; } static gboolean command_reconnect (TpAccount *account) { - tp_account_reconnect_async (account, callback_for_async, - tp_account_reconnect_finish); + tp_account_reconnect_async (account, callback_for_async, + tp_account_reconnect_finish); - return TRUE; + return TRUE; } static gboolean command_update (TpAccount *account) { - tp_account_update_parameters_async (account, - command.update.set, - (const gchar **) command.update.unset->pdata, - callback_for_update_parameters, - NULL); - return TRUE; + tp_account_update_parameters_async (account, + command.update.set, + (const gchar **) command.update.unset->pdata, + callback_for_update_parameters, + NULL); + + return TRUE; } static gboolean command_auto_presence (TpAccount *account) { - tp_account_set_automatic_presence_async (account, - command.presence.type, - command.presence.status, - command.presence.message, - callback_for_async, - tp_account_request_presence_finish); - - return TRUE; + tp_account_set_automatic_presence_async (account, + command.presence.type, + command.presence.status, + command.presence.message, + callback_for_async, + tp_account_request_presence_finish); + + return TRUE; } static gboolean command_request (TpAccount *account) { - tp_account_request_presence_async (account, - command.presence.type, - command.presence.status, - command.presence.message, - callback_for_async, - tp_account_request_presence_finish); - - return TRUE; + tp_account_request_presence_async (account, + command.presence.type, + command.presence.status, + command.presence.message, + callback_for_async, + tp_account_request_presence_finish); + + return TRUE; } static void parse (int argc, char **argv) { - int i; - gboolean status; + int i; + gboolean status; - app_name = basename (argv[0]); + app_name = basename (argv[0]); - if (argc < 2) - show_help ("No command specified"); + if (argc < 2) + show_help ("No command specified"); - g_type_init (); - /* Command processing */ + g_type_init (); + /* Command processing */ - command.common.name = argv[1]; + command.common.name = argv[1]; - if (strcmp (argv[1], "add") == 0) + if (strcmp (argv[1], "add") == 0) { - gchar **strv; - - /* Add account */ - if (argc < 4) - show_help ("Invalid add command."); - - if (strchr (argv[2], '/') != NULL) - { - strv = g_strsplit (argv[2], "/", 2); - - if (strv[0] == NULL || strv[1] == NULL || strv[2] != NULL) - show_help ("Invalid add command."); - - command.add.manager = strv[0]; - command.add.protocol = strv[1]; - } - else - { - show_help ("Invalid add command."); - } - - command.ready.manager = command_add; - command.add.display = argv[3]; - - command.add.parameters = new_params (); - - for (i = 4; i < argc; i++) - { - status = set_param (command.add.parameters, NULL, argv[i]); - if (!status) { - g_warning ("%s: bad parameter: %s", argv[1], argv[i]); - exit (1); - } - } + gchar **strv; + + /* Add account */ + if (argc < 4) + show_help ("Invalid add command."); + + if (strchr (argv[2], '/') != NULL) + { + strv = g_strsplit (argv[2], "/", 2); + + if (strv[0] == NULL || strv[1] == NULL || strv[2] != NULL) + show_help ("Invalid add command."); + + command.add.manager = strv[0]; + command.add.protocol = strv[1]; + } + else + { + show_help ("Invalid add command."); + } + + command.ready.manager = command_add; + command.add.display = argv[3]; + + command.add.parameters = new_params (); + + for (i = 4; i < argc; i++) + { + status = set_param (command.add.parameters, NULL, argv[i]); + + if (!status) + { + g_warning ("%s: bad parameter: %s", argv[1], argv[i]); + exit (1); + } + } } - else if (strcmp (argv[1], "list") == 0) + else if (strcmp (argv[1], "list") == 0) { - /* List accounts */ - if (argc != 2) - show_help ("Invalid list command."); + /* List accounts */ + if (argc != 2) + show_help ("Invalid list command."); - command.ready.manager = command_list; + command.ready.manager = command_list; } - else if (strcmp (argv[1], "summary") == 0) + else if (strcmp (argv[1], "summary") == 0) { - /* List accounts */ - if (argc != 2) - show_help ("Invalid summary command."); + /* List accounts */ + if (argc != 2) + show_help ("Invalid summary command."); - command.ready.manager = command_summary; + command.ready.manager = command_summary; } - else if (strcmp (argv[1], "dump") == 0) + else if (strcmp (argv[1], "dump") == 0) { - /* Dump all accounts */ - if (argc != 2) - show_help ("Invalid dump command."); + /* Dump all accounts */ + if (argc != 2) + show_help ("Invalid dump command."); - command.ready.manager = command_dump; + command.ready.manager = command_dump; } - else if (strcmp (argv[1], "remove") == 0 - || strcmp (argv[1], "delete") == 0) + else if (strcmp (argv[1], "remove") == 0 + || strcmp (argv[1], "delete") == 0) { - /* Remove account */ - if (argc != 3) - show_help ("Invalid remove command."); + /* Remove account */ + if (argc != 3) + show_help ("Invalid remove command."); - command.ready.account = command_remove; - command.common.account = argv[2]; + command.ready.account = command_remove; + command.common.account = argv[2]; } - else if (strcmp (argv[1], "show") == 0) + else if (strcmp (argv[1], "show") == 0) { - /* Show account details */ + /* Show account details */ + if (argc != 3) + show_help ("Invalid show command."); - if (argc != 3) - show_help ("Invalid show command."); - - command.ready.account = command_show; - command.common.account = argv[2]; + command.ready.account = command_show; + command.common.account = argv[2]; } - else if (strcmp (argv[1], "get") == 0) - { - /* Get account details */ - - if (argc < 3) - show_help ("Invalid get command."); - - command.ready.account = command_get; - command.common.account = argv[2]; - command.get.args = g_ptr_array_new(); - - for (i = 3; argv[i]; i++) { - char *name = argv[i]; - Getter *getter; - const char *param = strip_prefix (name, "param="); - - if (param != NULL) { - getter = g_new0(Getter, 1); - getter->name = param; - getter->type = GET_PARAM; - getter->function = NULL; - } - else { - getter = getter_by_name(name); - if (getter == NULL) { - fprintf(stderr, "%s %s: %s: unknown\n", app_name, - "get", name); - exit(1); - } - } - - g_ptr_array_add(command.get.args, getter); - } + else if (strcmp (argv[1], "get") == 0) + { + /* Get account details */ + + if (argc < 3) + show_help ("Invalid get command."); + + command.ready.account = command_get; + command.common.account = argv[2]; + command.get.args = g_ptr_array_new(); + + for (i = 3; argv[i]; i++) + { + char *name = argv[i]; + Getter *getter; + const char *param = strip_prefix (name, "param="); + + if (param != NULL) + { + getter = g_new0(Getter, 1); + getter->name = param; + getter->type = GET_PARAM; + getter->function = NULL; + } + else + { + getter = getter_by_name(name); + if (getter == NULL) + { + fprintf(stderr, "%s %s: %s: unknown\n", app_name, + "get", name); + exit(1); + } + } + + g_ptr_array_add(command.get.args, getter); } - else if (strcmp (argv[1], "connection") == 0) + } + else if (strcmp (argv[1], "connection") == 0) { - /* Show connection status */ + /* Show connection status */ - if (argc != 3) - show_help ("Invalid connection command."); + if (argc != 3) + show_help ("Invalid connection command."); - command.ready.account = command_connection; - command.common.account = argv[2]; + command.ready.account = command_connection; + command.common.account = argv[2]; } - else if (strcmp (argv[1], "enable") == 0) + else if (strcmp (argv[1], "enable") == 0) { - /* Enable account */ - if (argc != 3) - show_help ("Invalid enable command."); + /* Enable account */ + if (argc != 3) + show_help ("Invalid enable command."); - command.ready.account = command_enable; - command.common.account = argv[2]; + command.ready.account = command_enable; + command.common.account = argv[2]; } - else if (strcmp (argv[1], "disable") == 0) + else if (strcmp (argv[1], "disable") == 0) { - /* Disable account */ - if (argc != 3) - show_help ("Invalid disable command."); + /* Disable account */ + if (argc != 3) + show_help ("Invalid disable command."); - command.ready.account = command_disable; - command.common.account = argv[2]; + command.ready.account = command_disable; + command.common.account = argv[2]; } - else if (strcmp (argv[1], "display") == 0) + else if (strcmp (argv[1], "display") == 0) { - /* Set display name */ - if (argc != 4) - show_help ("Invalid display command."); + /* Set display name */ + if (argc != 4) + show_help ("Invalid display command."); - command.ready.account = command_display; - command.common.account = argv[2]; - command.display.name = argv[3]; + command.ready.account = command_display; + command.common.account = argv[2]; + command.display.name = argv[3]; } - else if (strcmp (argv[1], "nick") == 0) + else if (strcmp (argv[1], "nick") == 0) { - /* Set nickname */ - if (argc != 4) - show_help ("Invalid nick command."); + /* Set nickname */ + if (argc != 4) + show_help ("Invalid nick command."); - command.ready.account = command_nick; - command.common.account = argv[2]; - command.nick.name = argv[3]; + command.ready.account = command_nick; + command.common.account = argv[2]; + command.nick.name = argv[3]; } - else if (strcmp (argv[1], "service") == 0) + else if (strcmp (argv[1], "service") == 0) { - /* Set service */ - if (argc != 4) - show_help ("Invalid service command."); + /* Set service */ + if (argc != 4) + show_help ("Invalid service command."); - command.ready.account = command_service; - command.common.account = argv[2]; - command.service.name = argv[3]; + command.ready.account = command_service; + command.common.account = argv[2]; + command.service.name = argv[3]; } - else if (strcmp (argv[1], "icon") == 0) + else if (strcmp (argv[1], "icon") == 0) { - /* Set icon */ - if (argc != 4) - show_help ("Invalid icon command."); + /* Set icon */ + if (argc != 4) + show_help ("Invalid icon command."); - command.ready.account = command_icon; - command.common.account = argv[2]; - command.icon.name = argv[3]; + command.ready.account = command_icon; + command.common.account = argv[2]; + command.icon.name = argv[3]; } - else if (strcmp (argv[1], "update") == 0 - || strcmp (argv[1], "set") == 0) + else if (strcmp (argv[1], "update") == 0 + || strcmp (argv[1], "set") == 0) { - /* Set account parameter (s) */ - if (argc < 4) - show_help ("Invalid update command."); - - command.ready.account = command_update; - command.common.account = argv[2]; - command.update.set = new_params (); - command.update.unset = g_ptr_array_new (); - - for (i = 3; i < argc; i++) - { - status = set_param (command.update.set, command.update.unset, - argv[i]); - if (!status) { - g_warning ("%s: bad parameter: %s", argv[1], argv[i]); - exit (1); - } - } - - g_ptr_array_add (command.update.unset, NULL); + /* Set account parameter (s) */ + if (argc < 4) + show_help ("Invalid update command."); + + command.ready.account = command_update; + command.common.account = argv[2]; + command.update.set = new_params (); + command.update.unset = g_ptr_array_new (); + + for (i = 3; i < argc; i++) + { + status = set_param (command.update.set, command.update.unset, + argv[i]); + if (!status) + { + g_warning ("%s: bad parameter: %s", argv[1], argv[i]); + exit (1); + } + } + + g_ptr_array_add (command.update.unset, NULL); } - else if (strcmp (argv[1], "auto-presence") == 0) + else if (strcmp (argv[1], "auto-presence") == 0) { - /* Set automatic presence */ - if (argc != 4 && argc != 5) - show_help ("Invalid auto-presence command."); - - command.ready.account = command_auto_presence; - command.common.account = argv[2]; - command.presence.type = get_presence_type_for_status(argv[3]); - command.presence.status = argv[3]; - command.presence.message = argv[4] ? argv[4] : ""; - - switch (command.presence.type) { - case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN: - case TP_CONNECTION_PRESENCE_TYPE_ERROR: - fprintf(stderr, "%s: %s: unknown presence %s\n", - app_name, argv[1], argv[3]); - exit(1); - break; - default: - break; - } + /* Set automatic presence */ + if (argc != 4 && argc != 5) + show_help ("Invalid auto-presence command."); + + command.ready.account = command_auto_presence; + command.common.account = argv[2]; + command.presence.type = get_presence_type_for_status(argv[3]); + command.presence.status = argv[3]; + command.presence.message = argv[4] ? argv[4] : ""; + + switch (command.presence.type) + { + case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN: + case TP_CONNECTION_PRESENCE_TYPE_ERROR: + fprintf(stderr, "%s: %s: unknown presence %s\n", + app_name, argv[1], argv[3]); + exit(1); + break; + default: + break; + } } - else if (strcmp (argv[1], "request") == 0) + else if (strcmp (argv[1], "request") == 0) { - /* Set presence */ - if (argc != 4 && argc != 5) - show_help ("Invalid request command."); - - command.ready.account = command_request; - command.common.account = argv[2]; - command.presence.type = get_presence_type_for_status(argv[3]); - command.presence.status = argv[3]; - command.presence.message = argv[4] ? argv[4] : ""; - - switch (command.presence.type) { - case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN: - case TP_CONNECTION_PRESENCE_TYPE_ERROR: - fprintf(stderr, "%s: %s: unknown presence %s\n", - app_name, argv[1], argv[3]); - exit(1); - break; - default: - break; - } + /* Set presence */ + if (argc != 4 && argc != 5) + show_help ("Invalid request command."); + + command.ready.account = command_request; + command.common.account = argv[2]; + command.presence.type = get_presence_type_for_status(argv[3]); + command.presence.status = argv[3]; + command.presence.message = argv[4] ? argv[4] : ""; + + switch (command.presence.type) + { + case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN: + case TP_CONNECTION_PRESENCE_TYPE_ERROR: + fprintf(stderr, "%s: %s: unknown presence %s\n", + app_name, argv[1], argv[3]); + exit(1); + break; + default: + break; + } } - else if (strcmp (argv[1], "auto-connect") == 0) { - /* Turn on (or off) auto-connect */ - if (argc != 3 && argc != 4) - show_help ("Invalid auto-connect command."); - - command.ready.account = command_auto_connect; - command.common.account = argv[2]; - if (argv[3] == NULL || - g_ascii_strcasecmp (argv[3], "on") == 0 || - g_ascii_strcasecmp (argv[3], "true") == 0 || - g_ascii_strcasecmp (argv[3], "1") == 0) - command.boolean.value = TRUE; - else if (g_ascii_strcasecmp (argv[3], "off") == 0 || - g_ascii_strcasecmp (argv[3], "false") == 0 || - g_ascii_strcasecmp (argv[3], "0") == 0) - command.boolean.value = FALSE; - else - show_help ("Invalid auto-connect command."); + else if (strcmp (argv[1], "auto-connect") == 0) + { + /* Turn on (or off) auto-connect */ + if (argc != 3 && argc != 4) + show_help ("Invalid auto-connect command."); + + command.ready.account = command_auto_connect; + command.common.account = argv[2]; + if (argv[3] == NULL || + g_ascii_strcasecmp (argv[3], "on") == 0 || + g_ascii_strcasecmp (argv[3], "true") == 0 || + g_ascii_strcasecmp (argv[3], "1") == 0) + command.boolean.value = TRUE; + else if (g_ascii_strcasecmp (argv[3], "off") == 0 || + g_ascii_strcasecmp (argv[3], "false") == 0 || + g_ascii_strcasecmp (argv[3], "0") == 0) + command.boolean.value = FALSE; + else + show_help ("Invalid auto-connect command."); } - else if (strcmp (argv[1], "reconnect") == 0) { - if (argc != 3) - show_help ("Invalid reconnect command."); + else if (strcmp (argv[1], "reconnect") == 0) + { + if (argc != 3) + show_help ("Invalid reconnect command."); - command.ready.account = command_reconnect; - command.common.account = argv[2]; + command.ready.account = command_reconnect; + command.common.account = argv[2]; } - else if (strcmp (argv[1], "help") == 0 - || strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) + else if (strcmp (argv[1], "help") == 0 + || strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) { - show_help (NULL); - + show_help (NULL); } - else + else { - show_help ("Unknown command."); + show_help ("Unknown command."); } } static void manager_ready (GObject *manager, - GAsyncResult *res, - gpointer user_data) + GAsyncResult *res, + gpointer user_data) { - GError *error = NULL; + GError *error = NULL; - if (!tp_proxy_prepare_finish (manager, res, &error)) { - fprintf (stderr, "%s: %s\n", app_name, error->message); - g_error_free (error); + if (!tp_proxy_prepare_finish (manager, res, &error)) + { + fprintf (stderr, "%s: %s\n", app_name, error->message); + g_error_free (error); } - else { - if (command.ready.manager (TP_ACCOUNT_MANAGER (manager))) - return; + else + { + if (command.ready.manager (TP_ACCOUNT_MANAGER (manager))) + return; } - g_main_loop_quit (main_loop); + g_main_loop_quit (main_loop); } static void account_ready (GObject *source, - GAsyncResult *res, - gpointer user_data) + GAsyncResult *res, + gpointer user_data) { - TpAccount *account = TP_ACCOUNT (source); - GError *error = NULL; + TpAccount *account = TP_ACCOUNT (source); + GError *error = NULL; - if (!tp_proxy_prepare_finish (account, res, &error)) { - fprintf (stderr, "%s: couldn't load account '%s': %s\n", app_name, - tp_account_get_path_suffix (account), error->message); - fprintf (stderr, "Try '%s list' to list known accounts.\n", app_name); - g_error_free (error); + if (!tp_proxy_prepare_finish (account, res, &error)) + { + fprintf (stderr, "%s: couldn't load account '%s': %s\n", app_name, + tp_account_get_path_suffix (account), error->message); + fprintf (stderr, "Try '%s list' to list known accounts.\n", app_name); + g_error_free (error); } - else { - if (command.ready.account (account)) - return; + else + { + if (command.ready.account (account)) + return; } - g_main_loop_quit (main_loop); + g_main_loop_quit (main_loop); } int main (int argc, char **argv) { - TpAccountManager *am = NULL; - TpAccount *a = NULL; - TpDBusDaemon *dbus = NULL; - TpClientFactory *client_factory = NULL; - GError *error = NULL; - const GQuark features[] = { TP_ACCOUNT_FEATURE_CORE, - TP_ACCOUNT_FEATURE_ADDRESSING, TP_ACCOUNT_FEATURE_STORAGE, 0 }; + TpAccountManager *am = NULL; + TpAccount *a = NULL; + TpDBusDaemon *dbus = NULL; + TpClientFactory *client_factory = NULL; + GError *error = NULL; + const GQuark features[] = { TP_ACCOUNT_FEATURE_CORE, + TP_ACCOUNT_FEATURE_ADDRESSING, TP_ACCOUNT_FEATURE_STORAGE, 0 }; - g_type_init (); + g_type_init (); - app_name = basename (argv[0]); + app_name = basename (argv[0]); - parse (argc, argv); + parse (argc, argv); - command.common.ret = 1; + command.common.ret = 1; - dbus = tp_dbus_daemon_dup (&error); - if (error != NULL) { - fprintf (stderr, "%s %s: Failed to connect to D-Bus: %s\n", - app_name, command.common.name, error->message); - goto out; + dbus = tp_dbus_daemon_dup (&error); + if (error != NULL) + { + fprintf (stderr, "%s %s: Failed to connect to D-Bus: %s\n", + app_name, command.common.name, error->message); + goto out; } - client_factory = tp_client_factory_new (dbus); - if (command.common.account == NULL) { - TpClientFactory *factory; + client_factory = tp_client_factory_new (dbus); - am = tp_account_manager_new (dbus); - factory = tp_proxy_get_factory (am); + if (command.common.account == NULL) + { + TpClientFactory *factory; - tp_client_factory_add_account_features (factory, features); + am = tp_account_manager_new (dbus); + factory = tp_proxy_get_factory (am); - tp_proxy_prepare_async (am, NULL, manager_ready, NULL); - } - else { + tp_client_factory_add_account_features (factory, features); - command.common.account = ensure_prefix (command.common.account); - a = tp_client_factory_ensure_account (client_factory, - command.common.account, NULL, &error); + tp_proxy_prepare_async (am, NULL, manager_ready, NULL); + } + else + { + command.common.account = ensure_prefix (command.common.account); + a = tp_client_factory_ensure_account (client_factory, + command.common.account, NULL, &error); - if (error != NULL) - { - fprintf (stderr, "%s %s: %s\n", - app_name, command.common.name, - error->message); - goto out; - } + if (error != NULL) + { + fprintf (stderr, "%s %s: %s\n", app_name, command.common.name, + error->message); + goto out; + } - tp_proxy_prepare_async (a, features, account_ready, NULL); + tp_proxy_prepare_async (a, features, account_ready, NULL); } - main_loop = g_main_loop_new (NULL, FALSE); - g_main_loop_run (main_loop); + main_loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (main_loop); out: - g_clear_error (&error); - tp_clear_object (&client_factory); - tp_clear_object (&dbus); - tp_clear_object (&am); - tp_clear_object (&a); - tp_clear_pointer (&main_loop, g_main_loop_unref); - - return command.common.ret; + g_clear_error (&error); + tp_clear_object (&client_factory); + tp_clear_object (&dbus); + tp_clear_object (&am); + tp_clear_object (&a); + tp_clear_pointer (&main_loop, g_main_loop_unref); + + return command.common.ret; } |