diff options
-rw-r--r-- | src/empathy-import-dialog.c | 595 |
1 files changed, 308 insertions, 287 deletions
diff --git a/src/empathy-import-dialog.c b/src/empathy-import-dialog.c index a72d26162..aa9169acf 100644 --- a/src/empathy-import-dialog.c +++ b/src/empathy-import-dialog.c @@ -37,66 +37,71 @@ #define DEBUG_FLAG EMPATHY_DEBUG_OTHER #include <libempathy/empathy-debug.h> -typedef enum { - EMPATHY_IMPORT_SETTING_TYPE_STRING, - EMPATHY_IMPORT_SETTING_TYPE_BOOL, - EMPATHY_IMPORT_SETTING_TYPE_INT, +typedef enum +{ + EMPATHY_IMPORT_SETTING_TYPE_STRING, + EMPATHY_IMPORT_SETTING_TYPE_BOOL, + EMPATHY_IMPORT_SETTING_TYPE_INT, } EmpathyImportSettingType; -typedef struct { - gpointer value; - EmpathyImportSettingType type; +typedef struct +{ + gpointer value; + EmpathyImportSettingType type; } EmpathyImportSetting; /* Pidgin to MC map */ -typedef struct { - gchar *protocol; - gchar *pidgin_name; - gchar *mc_name; +typedef struct +{ + gchar *protocol; + gchar *pidgin_name; + gchar *mc_name; } PidginMcMapItem; -static PidginMcMapItem pidgin_mc_map[] = { - { "msn", "server", "server" }, - { "msn", "port", "port" }, - - { "jabber", "connect_server", "server" }, - { "jabber", "port", "port" }, - { "jabber", "require_tls", "require-encryption" }, - { "jabber", "old_ssl", "old-ssl" }, - - { "aim", "server", "server" }, - { "aim", "port", "port" }, - - { "salut", "first", "first-name" }, - { "salut", "last", "last-name" }, - { "salut", "jid", "jid" }, - { "salut", "email", "email" }, - - { "groupwise", "server", "server" }, - { "groupwise", "port", "port" }, - - { "icq", "server", "server" }, - { "icq", "port", "port" }, - - { "irc", "realname", "fullname" }, - { "irc", "ssl", "use-ssl" }, - { "irc", "port", "port" }, - - { "yahoo", "server", "server" }, - { "yahoo", "port", "port" }, - { "yahoo", "xfer_port", "xfer-port" }, - { "yahoo", "ignore_invites", "ignore-invites" }, - { "yahoo", "yahoojp", "yahoojp" }, - { "yahoo", "xferjp_host", "xferjp-host" }, - { "yahoo", "serverjp", "serverjp" }, - { "yahoo", "xfer_host", "xfer-host" }, +static PidginMcMapItem pidgin_mc_map[] = +{ + { "msn", "server", "server" }, + { "msn", "port", "port" }, + + { "jabber", "connect_server", "server" }, + { "jabber", "port", "port" }, + { "jabber", "require_tls", "require-encryption" }, + { "jabber", "old_ssl", "old-ssl" }, + + { "aim", "server", "server" }, + { "aim", "port", "port" }, + + { "salut", "first", "first-name" }, + { "salut", "last", "last-name" }, + { "salut", "jid", "jid" }, + { "salut", "email", "email" }, + + { "groupwise", "server", "server" }, + { "groupwise", "port", "port" }, + + { "icq", "server", "server" }, + { "icq", "port", "port" }, + + { "irc", "realname", "fullname" }, + { "irc", "ssl", "use-ssl" }, + { "irc", "port", "port" }, + + { "yahoo", "server", "server" }, + { "yahoo", "port", "port" }, + { "yahoo", "xfer_port", "xfer-port" }, + { "yahoo", "ignore_invites", "ignore-invites" }, + { "yahoo", "yahoojp", "yahoojp" }, + { "yahoo", "xferjp_host", "xferjp-host" }, + { "yahoo", "serverjp", "serverjp" }, + { "yahoo", "xfer_host", "xfer-host" }, }; -typedef struct { - GtkWidget *window; - GtkWidget *label_select; - GtkWidget *combo; +typedef struct +{ + GtkWidget *window; + GtkWidget *label_select; + GtkWidget *combo; } EmpathyImportDialog; #define PIDGIN_ACCOUNT_TAG_NAME "name" @@ -108,89 +113,86 @@ typedef struct { #define PIDGIN_PROTOCOL_BONJOUR "bonjour" #define PIDGIN_PROTOCOL_NOVELL "novell" -static void empathy_import_dialog_add_setting (GHashTable *settings, - gchar *key, - gpointer value, - EmpathyImportSettingType type); -static gboolean empathy_import_dialog_add_account (gchar *protocol_name, - GHashTable *settings); -static void empathy_import_dialog_pidgin_parse_setting (gchar *protocol, - xmlNodePtr setting, - GHashTable *settings); -static void empathy_import_dialog_pidgin_import_accounts (); -static void empathy_import_dialog_response_cb (GtkDialog *dialog_window, - gint response, - EmpathyImportDialog *dialog); +static void empathy_import_dialog_add_setting (GHashTable *settings, + gchar *key, gpointer value, EmpathyImportSettingType type); +static gboolean empathy_import_dialog_add_account (gchar *protocol_name, + GHashTable *settings); +static void empathy_import_dialog_pidgin_parse_setting (gchar *protocol, + xmlNodePtr setting, GHashTable *settings); +static void empathy_import_dialog_pidgin_import_accounts (); +static void empathy_import_dialog_response_cb (GtkDialog *dialog_window, + gint response, EmpathyImportDialog *dialog); static void -empathy_import_dialog_add_setting (GHashTable *settings, - gchar *key, - gpointer value, +empathy_import_dialog_add_setting (GHashTable *settings, + gchar *key, + gpointer value, EmpathyImportSettingType type) { - EmpathyImportSetting *set = g_slice_new0 (EmpathyImportSetting); + EmpathyImportSetting *set = g_slice_new0 (EmpathyImportSetting); - set->value = value; - set->type = type; + set->value = value; + set->type = type; - g_hash_table_insert (settings, key, set); + g_hash_table_insert (settings, key, set); } static gboolean -empathy_import_dialog_add_account (gchar *protocol_name, +empathy_import_dialog_add_account (gchar *protocol_name, GHashTable *settings) { - McProfile *profile; - McAccount *account; - const gchar *unique_name; - gchar *key_char; - GHashTableIter iter; - gpointer key, value; - EmpathyImportSetting *set; - - - DEBUG ("Looking up profile with protocol '%s'", protocol_name); - profile = mc_profile_lookup (protocol_name); - - if (profile == NULL) { - return FALSE; - } - - account = mc_account_create (profile); - - unique_name = mc_account_get_unique_name (account); - mc_account_set_display_name (account, unique_name); - - g_hash_table_iter_init (&iter, settings); - while (g_hash_table_iter_next (&iter, &key, &value)) { - set = (EmpathyImportSetting *) value; - key_char = (gchar *) key; - switch (((EmpathyImportSetting *) value)->type) { - case EMPATHY_IMPORT_SETTING_TYPE_STRING: - DEBUG ("Setting %s to (string) %s", - key_char, (gchar *) set->value); - mc_account_set_param_string (account, - key_char, (gchar *) set->value); - break; - - case EMPATHY_IMPORT_SETTING_TYPE_BOOL: - DEBUG ("Setting %s to (bool) %i", - key_char, (gboolean) set->value); - mc_account_set_param_boolean (account, - key_char, (gboolean) set->value); - break; - - case EMPATHY_IMPORT_SETTING_TYPE_INT: - DEBUG ("Setting %s to (int) %i", - key_char, (gint) set->value); - mc_account_set_param_int (account, - key_char, (gint) set->value); - break; - } + McProfile *profile; + McAccount *account; + const gchar *unique_name; + gchar *key_char; + GHashTableIter iter; + gpointer key, value; + EmpathyImportSetting *set; + + + DEBUG ("Looking up profile with protocol '%s'", protocol_name); + profile = mc_profile_lookup (protocol_name); + + if (profile == NULL) + return FALSE; + + account = mc_account_create (profile); + + unique_name = mc_account_get_unique_name (account); + mc_account_set_display_name (account, unique_name); + + g_hash_table_iter_init (&iter, settings); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + set = (EmpathyImportSetting *) value; + key_char = (gchar *) key; + switch (((EmpathyImportSetting *) value)->type) + { + case EMPATHY_IMPORT_SETTING_TYPE_STRING: + DEBUG ("Setting %s to (string) %s", + key_char, (gchar *) set->value); + mc_account_set_param_string (account, + key_char, (gchar *) set->value); + break; + + case EMPATHY_IMPORT_SETTING_TYPE_BOOL: + DEBUG ("Setting %s to (bool) %i", + key_char, (gboolean) set->value); + mc_account_set_param_boolean (account, + key_char, (gboolean) set->value); + break; + + case EMPATHY_IMPORT_SETTING_TYPE_INT: + DEBUG ("Setting %s to (int) %i", + key_char, (gint) set->value); + mc_account_set_param_int (account, + key_char, (gint) set->value); + break; } - g_object_unref (account); - g_object_unref (profile); - return TRUE; + } + g_object_unref (account); + g_object_unref (profile); + return TRUE; } static void @@ -198,205 +200,224 @@ empathy_import_dialog_pidgin_parse_setting (gchar *protocol, xmlNodePtr setting, GHashTable *settings) { - int i; - - if (!xmlHasProp (setting, PIDGIN_ACCOUNT_TAG_NAME)) - return; - - for (i = 0; i < G_N_ELEMENTS (pidgin_mc_map); i++) { - if (strcmp(protocol, pidgin_mc_map[i].protocol) != 0) { - continue; - } - - if (strcmp ((gchar *) xmlGetProp (setting, PIDGIN_ACCOUNT_TAG_NAME), - pidgin_mc_map[i].pidgin_name) == 0) { - - gint arg; - gchar *type = NULL; - - type = (gchar *) xmlGetProp (setting, PIDGIN_SETTING_PROP_TYPE); - - if (strcmp (type, "bool") == 0) { - sscanf ((gchar *) xmlNodeGetContent (setting),"%i", &arg); - empathy_import_dialog_add_setting (settings, pidgin_mc_map[i].mc_name, - (gpointer) arg, - EMPATHY_IMPORT_SETTING_TYPE_BOOL); - } else if (strcmp (type, "int") == 0) { - sscanf ((gchar *) xmlNodeGetContent (setting), - "%i", &arg); - empathy_import_dialog_add_setting (settings, pidgin_mc_map[i].mc_name, - (gpointer) arg, - EMPATHY_IMPORT_SETTING_TYPE_INT); - } else if (strcmp (type, "string") == 0) { - empathy_import_dialog_add_setting (settings, pidgin_mc_map[i].mc_name, - (gpointer) xmlNodeGetContent (setting), - EMPATHY_IMPORT_SETTING_TYPE_STRING); - } - } + int i; + + if (!xmlHasProp (setting, PIDGIN_ACCOUNT_TAG_NAME)) + return; + + for (i = 0; i < G_N_ELEMENTS (pidgin_mc_map); i++) + { + if (strcmp(protocol, pidgin_mc_map[i].protocol) != 0) + continue; + + if (strcmp ((gchar *) xmlGetProp (setting, PIDGIN_ACCOUNT_TAG_NAME), + pidgin_mc_map[i].pidgin_name) == 0) + { + gint arg; + gchar *type = NULL; + + type = (gchar *) xmlGetProp (setting, PIDGIN_SETTING_PROP_TYPE); + + if (strcmp (type, "bool") == 0) + { + sscanf ((gchar *) xmlNodeGetContent (setting),"%i", &arg); + empathy_import_dialog_add_setting (settings, + pidgin_mc_map[i].mc_name, + (gpointer) arg, + EMPATHY_IMPORT_SETTING_TYPE_BOOL); + } + else if (strcmp (type, "int") == 0) + { + sscanf ((gchar *) xmlNodeGetContent (setting), + "%i", &arg); + empathy_import_dialog_add_setting (settings, + pidgin_mc_map[i].mc_name, + (gpointer) arg, + EMPATHY_IMPORT_SETTING_TYPE_INT); + } + else if (strcmp (type, "string") == 0) + { + empathy_import_dialog_add_setting (settings, + pidgin_mc_map[i].mc_name, + (gpointer) xmlNodeGetContent (setting), + EMPATHY_IMPORT_SETTING_TYPE_STRING); + } } - + } } static void empathy_import_dialog_pidgin_import_accounts () { - xmlNodePtr rootnode, node, child, setting; - xmlParserCtxtPtr ctxt; - xmlDocPtr doc; - gchar *filename; - gchar *protocol = NULL; - gchar *name = NULL; - gchar *username = NULL; - GHashTable *settings; - - ctxt = xmlNewParserCtxt (); - filename = g_build_filename (g_get_home_dir (), ".purple", "accounts.xml", NULL); - doc = xmlCtxtReadFile (ctxt, filename, NULL, 0); - g_free (filename); - - rootnode = xmlDocGetRootElement (doc); - if (rootnode == NULL) { - return; - } + xmlNodePtr rootnode, node, child, setting; + xmlParserCtxtPtr ctxt; + xmlDocPtr doc; + gchar *filename; + gchar *protocol = NULL; + gchar *name = NULL; + gchar *username = NULL; + GHashTable *settings; + + ctxt = xmlNewParserCtxt (); + filename = g_build_filename (g_get_home_dir (), ".purple", "accounts.xml", + NULL); + doc = xmlCtxtReadFile (ctxt, filename, NULL, 0); + g_free (filename); + + rootnode = xmlDocGetRootElement (doc); + if (rootnode == NULL) + return; + + node = rootnode->children; + while (node) + { + if (strcmp ((gchar *) node->name, PIDGIN_ACCOUNT_TAG_ACCOUNT) == 0) + { + child = node->children; + + settings = g_hash_table_new (g_str_hash, g_str_equal); + + while (child) + { + + if (strcmp ((gchar *) child->name, + PIDGIN_ACCOUNT_TAG_PROTOCOL) == 0) + { + protocol = (gchar *) xmlNodeGetContent (child); + + if (g_str_has_prefix (protocol, "prpl-")) + protocol = strchr (protocol, '-') + 1; + + if (strcmp (protocol, PIDGIN_PROTOCOL_BONJOUR) == 0) + protocol = "salut"; + else if (strcmp (protocol, PIDGIN_PROTOCOL_NOVELL) == 0) + protocol = "groupwise"; + + empathy_import_dialog_add_setting (settings, "protocol", + (gpointer) protocol, + EMPATHY_IMPORT_SETTING_TYPE_STRING); + + } + else if (strcmp ((gchar *) child->name, + PIDGIN_ACCOUNT_TAG_NAME) == 0) + { + name = (gchar *) xmlNodeGetContent (child); + + if (g_strrstr (name, "/") != NULL) + { + gchar **name_resource; + name_resource = g_strsplit (name, "/", 2); + username = g_strdup(name_resource[0]); + g_free (name_resource); + } + else + username = name; + + if (strstr (name, "@") && strcmp (protocol, "irc") == 0) + { + gchar **nick_server; + nick_server = g_strsplit (name, "@", 2); + username = nick_server[0]; + empathy_import_dialog_add_setting (settings, + "server", (gpointer) nick_server[1], + EMPATHY_IMPORT_SETTING_TYPE_STRING); + } + + empathy_import_dialog_add_setting (settings, "account", + (gpointer) username, EMPATHY_IMPORT_SETTING_TYPE_STRING); + + } + else if (strcmp ((gchar *) child->name, + PIDGIN_ACCOUNT_TAG_PASSWORD) == 0) + { + empathy_import_dialog_add_setting (settings, "password", + (gpointer) xmlNodeGetContent (child), + EMPATHY_IMPORT_SETTING_TYPE_STRING); - node = rootnode->children; - while (node) { - if (strcmp ((gchar *) node->name, PIDGIN_ACCOUNT_TAG_ACCOUNT) == 0) { - child = node->children; - - settings = g_hash_table_new (g_str_hash, g_str_equal); - - while (child) { - - if (strcmp ((gchar *) child->name, PIDGIN_ACCOUNT_TAG_PROTOCOL) == 0) { - protocol = (gchar *) xmlNodeGetContent (child); - - if (g_str_has_prefix (protocol, "prpl-")) { - protocol = strchr (protocol, '-') + 1; - } - - if (strcmp (protocol, PIDGIN_PROTOCOL_BONJOUR) == 0) { - protocol = "salut"; - } else if (strcmp (protocol, PIDGIN_PROTOCOL_NOVELL) == 0) { - protocol = "groupwise"; - } - - empathy_import_dialog_add_setting (settings, "protocol", - (gpointer) protocol, - EMPATHY_IMPORT_SETTING_TYPE_STRING); - - } else if (strcmp ((gchar *) child->name, PIDGIN_ACCOUNT_TAG_NAME) == 0) { - name = (gchar *) xmlNodeGetContent (child); - - if (g_strrstr (name, "/") != NULL) { - gchar **name_resource; - name_resource = g_strsplit (name, "/", 2); - username = g_strdup(name_resource[0]); - g_free (name_resource); - } else { - username = name; - } - - if (strstr (name, "@") && strcmp (protocol, "irc") == 0) { - gchar **nick_server; - nick_server = g_strsplit (name, "@", 2); - username = nick_server[0]; - empathy_import_dialog_add_setting (settings, - "server", (gpointer) nick_server[1], - EMPATHY_IMPORT_SETTING_TYPE_STRING); - } - - empathy_import_dialog_add_setting (settings, "account", - (gpointer) username, EMPATHY_IMPORT_SETTING_TYPE_STRING); - - } else if (strcmp ((gchar *) child->name, PIDGIN_ACCOUNT_TAG_PASSWORD) == 0) { - empathy_import_dialog_add_setting (settings, "password", - (gpointer) xmlNodeGetContent (child), - EMPATHY_IMPORT_SETTING_TYPE_STRING); - - } else if (strcmp ((gchar *) child->name, PIDGIN_ACCOUNT_TAG_SETTINGS) == 0) { - - setting = child->children; - - while (setting) { - empathy_import_dialog_pidgin_parse_setting (protocol, - setting, settings); - setting = setting->next; - } - - } - child = child->next; - } - - if (g_hash_table_size (settings) > 0) { - empathy_import_dialog_add_account (protocol, settings); - } - g_free (username); - g_hash_table_unref (settings); + } + else if (strcmp ((gchar *) child->name, + PIDGIN_ACCOUNT_TAG_SETTINGS) == 0) + { + setting = child->children; + + while (setting) + { + empathy_import_dialog_pidgin_parse_setting (protocol, + setting, settings); + setting = setting->next; + } } - node = node->next; + child = child->next; + } + + if (g_hash_table_size (settings) > 0) + empathy_import_dialog_add_account (protocol, settings); + + g_free (username); + g_hash_table_unref (settings); } - xmlFreeDoc(doc); - xmlFreeParserCtxt (ctxt); + node = node->next; + } + xmlFreeDoc(doc); + xmlFreeParserCtxt (ctxt); } static void -empathy_import_dialog_response_cb (GtkDialog *dialog_window, - gint response, +empathy_import_dialog_response_cb (GtkDialog *dialog_window, + gint response, EmpathyImportDialog *dialog) { - gchar *from = NULL; - if (response == GTK_RESPONSE_OK) { - from = gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->combo)); + gchar *from = NULL; + if (response == GTK_RESPONSE_OK) + { + from = gtk_combo_box_get_active_text (GTK_COMBO_BOX (dialog->combo)); - if (strcmp (from, "Pidgin") == 0) { - empathy_import_dialog_pidgin_import_accounts (); - } - } + if (strcmp (from, "Pidgin") == 0) + empathy_import_dialog_pidgin_import_accounts (); + } - gtk_widget_destroy (GTK_WIDGET (dialog_window)); - g_slice_free (EmpathyImportDialog, dialog); + gtk_widget_destroy (GTK_WIDGET (dialog_window)); + g_slice_free (EmpathyImportDialog, dialog); } void empathy_import_dialog_show (GtkWindow *parent) { - EmpathyImportDialog *dialog; + EmpathyImportDialog *dialog; - dialog = g_slice_new0 (EmpathyImportDialog); + dialog = g_slice_new0 (EmpathyImportDialog); - dialog->window = gtk_dialog_new_with_buttons (_("Import accounts"), - NULL, - GTK_DIALOG_MODAL, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, - NULL); + dialog->window = gtk_dialog_new_with_buttons (_("Import accounts"), + NULL, + GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); - g_signal_connect (G_OBJECT (dialog->window), "response", - G_CALLBACK (empathy_import_dialog_response_cb), - dialog); + g_signal_connect (G_OBJECT (dialog->window), "response", + G_CALLBACK (empathy_import_dialog_response_cb), + dialog); - dialog->label_select = gtk_label_new (_("Select the program to import accounts from:")); + dialog->label_select = gtk_label_new ( + _("Select the program to import accounts from:")); - dialog->combo = gtk_combo_box_new_text (); + dialog->combo = gtk_combo_box_new_text (); - gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->combo), "Pidgin"); - gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combo), 0); + gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->combo), "Pidgin"); + gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combo), 0); - gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog->window)->vbox), - dialog->label_select); + gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog->window)->vbox), + dialog->label_select); - gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog->window)->vbox), - dialog->combo); + gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog->window)->vbox), + dialog->combo); - if (parent) { - gtk_window_set_transient_for (GTK_WINDOW (dialog->window), - parent); - } + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (dialog->window), parent); - gtk_widget_show_all (dialog->window); + gtk_widget_show_all (dialog->window); } |