COL_LABEL,
COL_CM,
COL_PROTOCOL_NAME,
- COL_IS_GTALK,
- COL_IS_FACEBOOK,
+ COL_SERVICE,
COL_COUNT
};
* non-gtalk */
if (cmp == 0)
{
- gboolean is_gtalk, is_facebook;
+ gchar *service;
+
gtk_tree_model_get (model, iter_a,
- COL_IS_GTALK, &is_gtalk,
- COL_IS_FACEBOOK, &is_facebook,
+ COL_SERVICE, &service,
-1);
- if (is_gtalk || is_facebook)
+ if (service != NULL)
cmp = 1;
else
cmp = -1;
+
+ g_free (service);
}
}
* 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;
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);
- if (display_name == NULL)
- display_name = proto->name;
+ display_name = empathy_protocol_name_to_display_name (proto->name);
gtk_list_store_insert_with_values (priv->store,
NULL, 0,
COL_LABEL, display_name,
COL_CM, cm,
COL_PROTOCOL_NAME, proto->name,
- COL_IS_GTALK, FALSE,
- COL_IS_FACEBOOK, FALSE,
-1);
if (!tp_strdiff (proto->name, "jabber") &&
!tp_strdiff (cm->name, "gabble"))
{
- display_name = empathy_protocol_name_to_display_name ("gtalk");
+ 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_IS_GTALK, TRUE,
- COL_IS_FACEBOOK, FALSE,
+ COL_SERVICE, "google-talk",
-1);
- display_name = empathy_protocol_name_to_display_name ("facebook");
+ 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_IS_GTALK, FALSE,
- COL_IS_FACEBOOK, TRUE,
+ COL_SERVICE, "facebook",
-1);
}
G_TYPE_STRING, /* Label */
G_TYPE_OBJECT, /* CM */
G_TYPE_STRING, /* protocol name */
- G_TYPE_BOOLEAN, /* is gtalk */
- G_TYPE_BOOLEAN); /* is facebook */
+ G_TYPE_STRING); /* service */
/* Set the protocol sort function */
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->store),
if (priv->protocols)
{
- g_hash_table_destroy (priv->protocols);
+ g_hash_table_unref (priv->protocols);
priv->protocols = NULL;
}
TpConnectionManager *cm = NULL;
gchar *protocol_name = NULL;
gboolean visible = FALSE;
- gboolean is_gtalk, is_facebook;
+ gchar *service;
gtk_tree_model_get (model, iter,
COL_CM, &cm,
COL_PROTOCOL_NAME, &protocol_name,
- COL_IS_GTALK, &is_gtalk,
- COL_IS_FACEBOOK, &is_facebook,
+ COL_SERVICE, &service,
-1);
if (cm != NULL && protocol_name != NULL)
if (protocol != NULL)
{
- visible = priv->filter_func (cm, protocol, is_gtalk, is_facebook,
+ visible = priv->filter_func (cm, protocol, service,
priv->filter_user_data);
}
}
if (cm != NULL)
g_object_unref (cm);
+ g_free (service);
return visible;
}
empathy_protocol_chooser_dup_selected (
EmpathyProtocolChooser *protocol_chooser,
TpConnectionManagerProtocol **protocol,
- gboolean *is_gtalk,
- gboolean *is_facebook)
+ gchar **service)
{
GtkTreeIter iter;
TpConnectionManager *cm = NULL;
}
}
- if (is_gtalk != NULL)
+ if (service != NULL)
{
gtk_tree_model_get (GTK_TREE_MODEL (cur_model), &iter,
- COL_IS_GTALK, is_gtalk,
- -1);
- }
-
- if (is_facebook != NULL)
- {
- gtk_tree_model_get (GTK_TREE_MODEL (cur_model), &iter,
- COL_IS_FACEBOOK, is_facebook,
+ COL_SERVICE, service,
-1);
}
}
gtk_combo_box_set_active (GTK_COMBO_BOX (protocol_chooser), 0);
}
+
+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;
+}