]> 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 cc6b1cd9595136fcd89049ffe5cc3c655243dcec..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
+#define DEFAULT_IRC_SSL FALSE
 
 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIrcNetworkChooser)
 
@@ -116,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)
 {
@@ -127,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)
@@ -137,6 +164,7 @@ update_server_params (EmpathyIrcNetworkChooser *self)
       gchar *address;
       guint port;
       gboolean ssl;
+      gchar *service;
 
       g_object_get (server,
           "address", &address,
@@ -145,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
     {
@@ -178,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)
     {
@@ -216,13 +253,29 @@ set_label_from_settings (EmpathyIrcNetworkChooser *self)
       set_label (self);
 
       g_object_unref (srv);
+      g_free (server);
       return;
     }
 
   /* Set default network */
   priv->network = empathy_irc_network_manager_find_network_by_address (
           priv->network_manager, DEFAULT_IRC_NETWORK);
-  g_assert (priv->network != NULL);
+
+  if (priv->network == NULL)
+    {
+      /* Default network is not known, recreate it */
+      EmpathyIrcServer *srv;
+
+      priv->network = empathy_irc_network_new (DEFAULT_IRC_NETWORK);
+
+      srv = empathy_irc_server_new (DEFAULT_IRC_NETWORK, DEFAULT_IRC_PORT,
+          DEFAULT_IRC_SSL);
+
+      empathy_irc_network_append_server (priv->network, srv);
+      empathy_irc_network_manager_add (priv->network_manager, priv->network);
+
+      g_object_unref (srv);
+    }
 
   set_label (self);
   update_server_params (self);
@@ -331,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);