]> git.0d.be Git - empathy.git/commitdiff
irc-network-chooser: set the account service
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 13 Jan 2012 13:57:00 +0000 (14:57 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 13 Jan 2012 14:14:26 +0000 (15:14 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=667791

libempathy-gtk/empathy-irc-network-chooser.c

index 7a6bd78982fc35eca974ffa82065a52a36aa4706..0f147d8874cef021461d2cd529b1d3dba01b1350 100644 (file)
@@ -118,6 +118,34 @@ unset_server_params (EmpathyIrcNetworkChooser *self)
   empathy_account_settings_unset (priv->settings, "use-ssl");
 }
 
+static gchar *
+dup_network_service (EmpathyIrcNetwork *network)
+{
+  /* Account.Service follows the same restriction as CM.Protocol
+   * http://telepathy.freedesktop.org/spec/Connection_Manager.html#Simple-Type:Protocol
+   */
+#define VALID G_CSET_a_2_z G_CSET_A_2_Z G_CSET_DIGITS
+  gchar *service;
+  gchar *result = NULL;
+
+  service = g_strdup (empathy_irc_network_get_name (network));
+  service = g_strstrip (service);
+
+  /* Service has to start with a letter */
+  if (!g_ascii_isalpha (service[0]))
+    {
+      g_free (service);
+      return NULL;
+    }
+
+  service = g_strcanon (service, VALID, '-');
+
+  result = g_ascii_strdown (service, -1);
+  g_free (service);
+
+  return result;
+}
+
 static void
 update_server_params (EmpathyIrcNetworkChooser *self)
 {
@@ -139,6 +167,7 @@ update_server_params (EmpathyIrcNetworkChooser *self)
       gchar *address;
       guint port;
       gboolean ssl;
+      gchar *service;
 
       g_object_get (server,
           "address", &address,
@@ -153,7 +182,13 @@ update_server_params (EmpathyIrcNetworkChooser *self)
       DEBUG ("Setting use-ssl to %s", ssl ? "TRUE": "FALSE" );
       empathy_account_settings_set_boolean (priv->settings, "use-ssl", ssl);
 
+      /* Set Account.Service */
+      service = dup_network_service (priv->network);
+      DEBUG ("Setting Service to %s", service);
+      empathy_account_settings_set_service (priv->settings, service);
+
       g_free (address);
+      g_free (service);
     }
   else
     {