]> git.0d.be Git - empathy.git/blobdiff - src/empathy.c
migrate configuration files to XDG config directory
[empathy.git] / src / empathy.c
index f23ce9145eb21a5d3c999989ef7f80f30b0d146a..ea14c4da907e8db03c00ba473164834659124851 100644 (file)
@@ -40,7 +40,6 @@
 
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/util.h>
-#include <libmissioncontrol/mc-account.h>
 #include <libmissioncontrol/mission-control.h>
 
 #include <libempathy/empathy-idle.h>
@@ -48,6 +47,7 @@
 #include <libempathy/empathy-call-factory.h>
 #include <libempathy/empathy-chatroom-manager.h>
 #include <libempathy/empathy-account-manager.h>
+#include <libempathy/empathy-debugger.h>
 #include <libempathy/empathy-dispatcher.h>
 #include <libempathy/empathy-dispatch-operation.h>
 #include <libempathy/empathy-log-manager.h>
@@ -106,7 +106,7 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
                if (id) {
                        EmpathyAccountManager *manager;
                        TpConnection *connection;
-                       McAccount *account;
+                       EmpathyAccount *account;
 
                        manager = empathy_account_manager_dup_singleton ();
                        connection = empathy_tp_chat_get_connection (tp_chat);
@@ -226,7 +226,8 @@ create_salut_account (void)
        McProfile  *profile;
        McProtocol *protocol;
        gboolean    salut_created = FALSE;
-       McAccount  *account;
+       EmpathyAccount  *account;
+       EmpathyAccountManager *account_manager;
        GList      *accounts;
        EBook      *book;
        EContact   *contact;
@@ -283,15 +284,17 @@ create_salut_account (void)
                return;
        }
 
-       account = mc_account_create (profile);
-       mc_account_set_display_name (account, _("People nearby"));
-       
+       account_manager = empathy_account_manager_dup_singleton ();
+       account = empathy_account_manager_create (account_manager, profile);
+       empathy_account_set_display_name (account, _("People nearby"));
+       g_object_unref (account_manager);
+
        nickname = e_contact_get (contact, E_CONTACT_NICKNAME);
        first_name = e_contact_get (contact, E_CONTACT_GIVEN_NAME);
        last_name = e_contact_get (contact, E_CONTACT_FAMILY_NAME);
        email = e_contact_get (contact, E_CONTACT_EMAIL_1);
        jid = e_contact_get (contact, E_CONTACT_IM_JABBER_HOME_1);
-       
+
        if (!tp_strdiff (nickname, "nickname")) {
                g_free (nickname);
                nickname = NULL;
@@ -301,11 +304,11 @@ create_salut_account (void)
                "last-name=%s\nemail=%s\njid=%s\n",
                nickname, first_name, last_name, email, jid);
 
-       mc_account_set_param_string (account, "nickname", nickname ? nickname : "");
-       mc_account_set_param_string (account, "first-name", first_name ? first_name : "");
-       mc_account_set_param_string (account, "last-name", last_name ? last_name : "");
-       mc_account_set_param_string (account, "email", email ? email : "");
-       mc_account_set_param_string (account, "jid", jid ? jid : "");
+       empathy_account_set_param_string (account, "nickname", nickname ? nickname : "");
+       empathy_account_set_param_string (account, "first-name", first_name ? first_name : "");
+       empathy_account_set_param_string (account, "last-name", last_name ? last_name : "");
+       empathy_account_set_param_string (account, "email", email ? email : "");
+       empathy_account_set_param_string (account, "jid", jid ? jid : "");
 
        g_free (nickname);
        g_free (first_name);
@@ -318,6 +321,67 @@ create_salut_account (void)
        g_object_unref (book);
 }
 
+static void
+migrate_config_to_xdg_dir (void)
+{
+       gchar *xdg_dir, *old_dir, *xdg_filename, *old_filename;
+       int i;
+       GFile *xdg_file, *old_file;
+       static const gchar* filenames[] = {
+               "geometry.ini",
+               "irc-networks.xml",
+               "chatrooms.xml",
+               "contact-groups.xml",
+               "status-presets.xml",
+               "accels.txt",
+               NULL
+       };
+
+       xdg_dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL);
+       if (g_file_test (xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+               /* xdg config dir already exists */
+               g_free (xdg_dir);
+               return;
+       }
+
+       old_dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+       if (!g_file_test (old_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+               /* old config dir didn't exist */
+               g_free (xdg_dir);
+               g_free (old_dir);
+               return;
+       }
+
+       if (g_mkdir_with_parents (xdg_dir, (S_IRUSR | S_IWUSR | S_IXUSR)) == -1) {
+               DEBUG ("Failed to create configuration directory; aborting migration");
+               g_free (xdg_dir);
+               g_free (old_dir);
+               return;
+       }
+
+       for (i = 0; filenames[i]; i++) {
+               old_filename = g_build_filename (old_dir, filenames[i], NULL);
+               if (!g_file_test (old_filename, G_FILE_TEST_EXISTS)) {
+                       g_free (old_filename);
+                       continue;
+               }
+               xdg_filename = g_build_filename (xdg_dir, filenames[i], NULL);
+               old_file = g_file_new_for_path (old_filename);
+               xdg_file = g_file_new_for_path (xdg_filename);
+               if (!g_file_move (old_file, xdg_file, G_FILE_COPY_NONE,
+                                 NULL, NULL, NULL, NULL)) {
+                       DEBUG ("Failed to migrate %s", filenames[i]);
+               }
+               g_free (old_filename);
+               g_free (xdg_filename);
+               g_object_unref (old_file);
+               g_object_unref (xdg_file);
+       }
+
+       g_free (xdg_dir);
+       g_free (old_dir);
+}
+
 /* The code that handles single-instance and startup notification is
  * copied from gedit.
  *
@@ -354,7 +418,7 @@ on_bacon_message_received (const char *message,
                                gtk_widget_realize (GTK_WIDGET (window));
                        }
 
-                       startup_timestamp = gdk_x11_get_server_time (window->window);
+                       startup_timestamp = gdk_x11_get_server_time (gtk_widget_get_window (window));
                }
 
                gtk_window_present_with_time (GTK_WINDOW (window), startup_timestamp);
@@ -450,6 +514,31 @@ new_call_handler_cb (EmpathyCallFactory *factory, EmpathyCallHandler *handler,
        gtk_widget_show (GTK_WIDGET (window));
 }
 
+#ifdef ENABLE_DEBUG
+static void
+default_log_handler (const gchar *log_domain,
+    GLogLevelFlags log_level,
+    const gchar *message,
+    gpointer user_data)
+{
+       g_log_default_handler (log_domain, log_level, message, NULL);
+
+       /* G_LOG_DOMAIN = "empathy". No need to send empathy messages to the
+        * debugger as they already have in empathy_debug. */
+       if (log_level != G_LOG_LEVEL_DEBUG
+           || tp_strdiff (log_domain, G_LOG_DOMAIN)) {
+               EmpathyDebugger *dbg;
+               GTimeVal now;
+
+               dbg = empathy_debugger_get_singleton ();
+               g_get_current_time (&now);
+
+               empathy_debugger_add_message (dbg, &now, log_domain,
+                                             log_level, message);
+       }
+}
+#endif /* ENABLE_DEBUG */
+
 int
 main (int argc, char *argv[])
 {
@@ -514,6 +603,11 @@ main (int argc, char *argv[])
        gtk_window_set_default_icon_name ("empathy");
        textdomain (GETTEXT_PACKAGE);
 
+#ifdef ENABLE_DEBUG
+       /* Set up debugger */
+       g_log_set_default_handler (default_log_handler, NULL);
+#endif
+
         /* Setting up the bacon connection */
        startup_timestamp = get_startup_timestamp ();
        connection = bacon_message_connection_new ("empathy");
@@ -603,7 +697,9 @@ main (int argc, char *argv[])
                        (idle), TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0) {
                empathy_idle_set_state (idle, MC_PRESENCE_AVAILABLE);
        }
+
        
+       migrate_config_to_xdg_dir ();
        create_salut_account ();
 
        /* Setting up UI */