]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-protocol-chooser.c
Merge remote-tracking branch 'jonny/ft'
[empathy.git] / libempathy-gtk / empathy-protocol-chooser.c
index 852f381745d9a8d3cd3bcf64ff8d22c93359eed4..216e4ffdb96f190b541a9377bb88274dd5b67cc7 100644 (file)
@@ -77,8 +77,7 @@ enum
   COL_LABEL,
   COL_CM,
   COL_PROTOCOL_NAME,
-  COL_IS_GTALK,
-  COL_IS_FACEBOOK,
+  COL_SERVICE,
   COL_COUNT
 };
 
@@ -131,16 +130,18 @@ protocol_chooser_sort_func (GtkTreeModel *model,
        * 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);
         }
     }
 
@@ -224,10 +225,8 @@ protocol_choosers_add_cm (EmpathyProtocolChooser *chooser,
           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,
@@ -235,33 +234,29 @@ protocol_choosers_add_cm (EmpathyProtocolChooser *chooser,
           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);
         }
 
@@ -312,8 +307,7 @@ protocol_chooser_constructed (GObject *object)
           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),
@@ -371,7 +365,7 @@ protocol_chooser_finalize (GObject *object)
 
   if (priv->protocols)
     {
-      g_hash_table_destroy (priv->protocols);
+      g_hash_table_unref (priv->protocols);
       priv->protocols = NULL;
     }
 
@@ -426,13 +420,12 @@ protocol_chooser_filter_visible_func (GtkTreeModel *model,
   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)
@@ -444,7 +437,7 @@ protocol_chooser_filter_visible_func (GtkTreeModel *model,
 
       if (protocol != NULL)
         {
-          visible = priv->filter_func (cm, protocol, is_gtalk, is_facebook,
+          visible = priv->filter_func (cm, protocol, service,
               priv->filter_user_data);
         }
     }
@@ -452,6 +445,7 @@ protocol_chooser_filter_visible_func (GtkTreeModel *model,
   if (cm != NULL)
     g_object_unref (cm);
 
+  g_free (service);
   return visible;
 }
 
@@ -470,8 +464,7 @@ TpConnectionManager *
 empathy_protocol_chooser_dup_selected (
     EmpathyProtocolChooser *protocol_chooser,
     TpConnectionManagerProtocol **protocol,
-    gboolean *is_gtalk,
-    gboolean *is_facebook)
+    gchar **service)
 {
   GtkTreeIter iter;
   TpConnectionManager *cm = NULL;
@@ -512,17 +505,10 @@ empathy_protocol_chooser_dup_selected (
             }
         }
 
-      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);
         }
     }
@@ -571,3 +557,75 @@ empathy_protocol_chooser_set_visible (EmpathyProtocolChooser *protocol_chooser,
 
   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;
+}