]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-irc-network-chooser.c
Merge branch 'gnome-3-8'
[empathy.git] / libempathy-gtk / empathy-irc-network-chooser.c
index 0fbd7b5fd1f7d6673e156d88d21e4426073ed4a5..fab6a3a3f05a4eb8b9192ee5ab9f7d7a86ac7ea3 100644 (file)
  */
 
 #include "config.h"
+#include "empathy-irc-network-chooser.h"
 
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-irc-network-manager.h>
-
-#include "empathy-irc-network-dialog.h"
-#include "empathy-ui-utils.h"
 #include "empathy-irc-network-chooser-dialog.h"
+#include "empathy-irc-network-manager.h"
+#include "empathy-ui-utils.h"
+#include "empathy-utils.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT | EMPATHY_DEBUG_IRC
-#include <libempathy/empathy-debug.h>
-
-#include "empathy-irc-network-chooser.h"
+#include "empathy-debug.h"
 
 #define DEFAULT_IRC_NETWORK "irc.gimp.org"
 #define DEFAULT_IRC_PORT 6667
@@ -118,6 +108,40 @@ unset_server_params (EmpathyIrcNetworkChooser *self)
   empathy_account_settings_unset (priv->settings, "use-ssl");
 }
 
+static gchar *
+dup_network_service (EmpathyIrcNetwork *network)
+{
+  /* Account.Service has to be a lower case alphanumeric string which may
+   * also contain '-' but not start with it. */
+#define VALID G_CSET_a_2_z G_CSET_DIGITS "-"
+  gchar *service, *tmp;
+
+  service = g_strdup (empathy_irc_network_get_name (network));
+  service = g_strstrip (service);
+
+  if (tp_str_empty (service))
+    {
+      g_free (service);
+      return NULL;
+    }
+
+  tmp = service;
+  service = g_ascii_strdown (service, -1);
+  g_free (tmp);
+
+  service = g_strcanon (service, VALID, '-');
+
+  if (service[0] == '-')
+    {
+      tmp = service;
+      service = g_strdup (service + 1);
+
+      g_free (tmp);
+    }
+
+  return service;
+}
+
 static void
 update_server_params (EmpathyIrcNetworkChooser *self)
 {
@@ -129,7 +153,8 @@ update_server_params (EmpathyIrcNetworkChooser *self)
 
   charset = empathy_irc_network_get_charset (priv->network);
   DEBUG ("Setting charset to %s", charset);
-  empathy_account_settings_set_string (priv->settings, "charset", charset);
+  empathy_account_settings_set (priv->settings, "charset",
+      g_variant_new_string (charset));
 
   servers = empathy_irc_network_get_servers (priv->network);
   if (g_slist_length (servers) > 0)
@@ -139,6 +164,7 @@ update_server_params (EmpathyIrcNetworkChooser *self)
       gchar *address;
       guint port;
       gboolean ssl;
+      gchar *service;
 
       g_object_get (server,
           "address", &address,
@@ -147,13 +173,22 @@ update_server_params (EmpathyIrcNetworkChooser *self)
           NULL);
 
       DEBUG ("Setting server to %s", address);
-      empathy_account_settings_set_string (priv->settings, "server", address);
+      empathy_account_settings_set (priv->settings, "server",
+          g_variant_new_string (address));
       DEBUG ("Setting port to %u", port);
-      empathy_account_settings_set_uint32 (priv->settings, "port", port);
+      empathy_account_settings_set (priv->settings, "port",
+          g_variant_new_uint32 (port));
       DEBUG ("Setting use-ssl to %s", ssl ? "TRUE": "FALSE" );
-      empathy_account_settings_set_boolean (priv->settings, "use-ssl", ssl);
+      empathy_account_settings_set (priv->settings, "use-ssl",
+          g_variant_new_boolean (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
     {
@@ -180,11 +215,11 @@ static void
 set_label_from_settings (EmpathyIrcNetworkChooser *self)
 {
   EmpathyIrcNetworkChooserPriv *priv = GET_PRIV (self);
-  const gchar *server;
+  gchar *server;
 
   tp_clear_object (&priv->network);
 
-  server = empathy_account_settings_get_string (priv->settings, "server");
+  server = empathy_account_settings_dup_string (priv->settings, "server");
 
   if (server != NULL)
     {
@@ -218,6 +253,7 @@ set_label_from_settings (EmpathyIrcNetworkChooser *self)
       set_label (self);
 
       g_object_unref (srv);
+      g_free (server);
       return;
     }
 
@@ -348,7 +384,7 @@ empathy_irc_network_chooser_class_init (EmpathyIrcNetworkChooserClass *klass)
       G_SIGNAL_RUN_LAST,
       0,
       NULL, NULL,
-      g_cclosure_marshal_VOID__VOID,
+      g_cclosure_marshal_generic,
       G_TYPE_NONE,
       0);