EmpathyAccountSettings * empathy_protocol_chooser_create_account_settings (EmpathyProtocolChooser *self) { EmpathyAccountSettings *settings; gchar *str; const gchar *display_name; TpConnectionManager *cm; TpConnectionManagerProtocol *proto; gchar *service; cm = empathy_protocol_chooser_dup_selected (self, &proto, &service); if (cm == NULL || proto == NULL) return NULL; if (service != NULL) display_name = empathy_service_name_to_display_name (service); else display_name = empathy_protocol_name_to_display_name (proto->name); /* Create account */ /* To translator: %s is the name of the protocol, such as "Google Talk" or * "Yahoo!" */ str = g_strdup_printf (_("New %s account"), display_name); settings = empathy_account_settings_new (cm->name, proto->name, service, str); g_free (str); if (!tp_strdiff (service, "google-talk")) { gchar *fallback_servers[] = { "talkx.l.google.com", "talkx.l.google.com:443,oldssl", "talkx.l.google.com:80", NULL}; empathy_account_settings_set_icon_name_async (settings, "im-google-talk", NULL, NULL); empathy_account_settings_set_strv (settings, "fallback-servers", fallback_servers); } else if (!tp_strdiff (service, "facebook")) { empathy_account_settings_set_icon_name_async (settings, "im-facebook", NULL, NULL); empathy_account_settings_set_string (settings, "server", "chat.facebook.com"); } g_object_unref (cm); g_free (service); return settings; }
static void protocol_choosers_add_cm (EmpathyProtocolChooser *chooser, TpConnectionManager *cm) { EmpathyProtocolChooserPriv *priv = GET_PRIV (chooser); const TpConnectionManagerProtocol * const *iter; for (iter = cm->protocols; iter != NULL && *iter != NULL; iter++) { const TpConnectionManagerProtocol *proto = *iter; gchar *icon_name; const gchar *display_name; const gchar *saved_cm_name; saved_cm_name = g_hash_table_lookup (priv->protocols, proto->name); if (!tp_strdiff (cm->name, "haze") && saved_cm_name != NULL && tp_strdiff (saved_cm_name, "haze")) /* the CM we're adding is a haze implementation of something we already * have; drop it. */ continue; if (!tp_strdiff (cm->name, "haze") && !tp_strdiff (proto->name, "facebook")) /* Facebook now supports XMPP so drop the purple facebook plugin; user * should use Gabble */ continue; if (!tp_strdiff (cm->name, "haze") && !tp_strdiff (proto->name, "sip")) /* Haze's SIP implementation is pretty useless (bgo #629736) */ continue; if (tp_strdiff (cm->name, "haze") && !tp_strdiff (saved_cm_name, "haze")) { GtkTreeIter titer; gboolean valid; TpConnectionManager *haze_cm; /* let's this CM replace the haze implementation */ valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->store), &titer); while (valid) { gchar *haze_proto_name = NULL; gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &titer, COL_PROTOCOL_NAME, &haze_proto_name, COL_CM, &haze_cm, -1); if (haze_cm == NULL) continue; if (!tp_strdiff (haze_cm->name, "haze") && !tp_strdiff (haze_proto_name, proto->name)) { gtk_list_store_remove (priv->store, &titer); g_object_unref (haze_cm); g_free (haze_proto_name); break; } g_object_unref (haze_cm); g_free (haze_proto_name); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), &titer); } } g_hash_table_insert (priv->protocols, g_strdup (proto->name), g_strdup (cm->name)); icon_name = empathy_protocol_icon_name (proto->name); display_name = empathy_protocol_name_to_display_name (proto->name); gtk_list_store_insert_with_values (priv->store, NULL, 0, COL_ICON, icon_name, COL_LABEL, display_name, COL_CM, cm, COL_PROTOCOL_NAME, proto->name, -1); if (!tp_strdiff (proto->name, "jabber") && !tp_strdiff (cm->name, "gabble")) { display_name = empathy_service_name_to_display_name ("google-talk"); gtk_list_store_insert_with_values (priv->store, NULL, 0, COL_ICON, "im-google-talk", COL_LABEL, display_name, COL_CM, cm, COL_PROTOCOL_NAME, proto->name, COL_SERVICE, "google-talk", -1); display_name = empathy_service_name_to_display_name ("facebook"); gtk_list_store_insert_with_values (priv->store, NULL, 0, COL_ICON, "im-facebook", COL_LABEL, display_name, COL_CM, cm, COL_PROTOCOL_NAME, proto->name, COL_SERVICE, "facebook", -1); } g_free (icon_name); } }
EmpathyAccountSettings * empathy_protocol_chooser_create_account_settings (EmpathyProtocolChooser *self) { EmpathyAccountSettings *settings = NULL; gchar *str; const gchar *display_name; TpConnectionManager *cm; TpConnectionManagerProtocol *proto; gchar *service = NULL; cm = empathy_protocol_chooser_dup_selected (self, &proto, &service); if (cm == NULL || proto == NULL) goto out; if (service != NULL) display_name = empathy_service_name_to_display_name (service); else display_name = empathy_protocol_name_to_display_name (proto->name); /* Create account */ /* To translator: %s is the name of the protocol, such as "Google Talk" or * "Yahoo!" */ str = g_strdup_printf (_("New %s account"), display_name); settings = empathy_account_settings_new (cm->name, proto->name, service, str); g_free (str); if (!tp_strdiff (service, "google-talk")) { gchar *fallback_servers[] = { "talkx.l.google.com", "talkx.l.google.com:443,oldssl", "talkx.l.google.com:80", NULL}; gchar *extra_certificate_identities[] = { "talk.google.com", NULL}; empathy_account_settings_set_icon_name_async (settings, "im-google-talk", NULL, NULL); empathy_account_settings_set_string (settings, "server", extra_certificate_identities[0]); empathy_account_settings_set_boolean (settings, "require-encryption", TRUE); empathy_account_settings_set_strv (settings, "fallback-servers", fallback_servers); if (empathy_account_settings_have_tp_param (settings, "extra-certificate-identities")) { empathy_account_settings_set_strv (settings, "extra-certificate-identities", extra_certificate_identities); } } else if (!tp_strdiff (service, "facebook")) { empathy_account_settings_set_icon_name_async (settings, "im-facebook", NULL, NULL); empathy_account_settings_set_boolean (settings, "require-encryption", TRUE); empathy_account_settings_set_string (settings, "server", "chat.facebook.com"); } out: tp_clear_object (&cm); g_free (service); return settings; }