]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-irc-network-chooser.c
Move should_create_salut_account to local-xmpp-assistant-widget
[empathy.git] / libempathy-gtk / empathy-irc-network-chooser.c
index 55a90fd0c5012279d56c16f1946bf0f12251495d..74c9685e867861a9085c9fbdb4d2b507fee255de 100644 (file)
@@ -41,6 +41,8 @@
 #include "empathy-irc-network-chooser.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 +118,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)
 {
@@ -137,6 +173,7 @@ update_server_params (EmpathyIrcNetworkChooser *self)
       gchar *address;
       guint port;
       gboolean ssl;
+      gchar *service;
 
       g_object_get (server,
           "address", &address,
@@ -151,7 +188,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
     {
@@ -222,7 +265,22 @@ set_label_from_settings (EmpathyIrcNetworkChooser *self)
   /* 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 +389,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);
 
@@ -358,3 +416,11 @@ empathy_irc_network_chooser_new (EmpathyAccountSettings *settings)
       "settings", settings,
       NULL);
 }
+
+EmpathyIrcNetwork *
+empathy_irc_network_chooser_get_network (EmpathyIrcNetworkChooser *self)
+{
+  EmpathyIrcNetworkChooserPriv *priv = GET_PRIV (self);
+
+  return priv->network;
+}