*/
#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)
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)
{
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)
gchar *address;
guint port;
gboolean ssl;
+ gchar *service;
g_object_get (server,
"address", &address,
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
{
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)
{
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);
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_generic,
G_TYPE_NONE,
0);