]> git.0d.be Git - empathy.git/blobdiff - launcher/empathy-launcher.c
[darcs-to-svn @ GossipMainWindow]
[empathy.git] / launcher / empathy-launcher.c
index 44b390fb3a4c85f679ac95f38e698cc500355c17..f6851f95c2b5dd55270880185f82564a72679dae 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
- * Copyright (C) 2007 Xavier Claessens <xclaesse@gmail.com>
+ * Copyright (C) 2007 Collabora Ltd.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  * 
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
  */
 
 #include <config.h>
-
 #include <stdlib.h>
-
 #include <glib.h>
 
-#include <libempathy/empathy-session.h>
+#include <libtelepathy/tp-helpers.h>
+#include <libmissioncontrol/mc-account-monitor.h>
+#include <libmissioncontrol/mission-control.h>
+
 #include <libempathy/gossip-debug.h>
 
 #define DEBUG_DOMAIN "Launcher"
 
+static void error_cb              (MissionControl *mc,
+                                  GError         *error,
+                                  gpointer        data);
+static void service_ended_cb      (MissionControl *mc,
+                                  gpointer        user_data);
+static void start_mission_control (MissionControl *mc);
+
+
+
+
+static void
+error_cb (MissionControl *mc,
+         GError         *error,
+         gpointer        data)
+{
+       if (error) {
+               gossip_debug (DEBUG_DOMAIN, "Error: %s", error->message);
+       }
+}
+
+static void
+service_ended_cb (MissionControl *mc,
+                 gpointer        user_data)
+{
+       gossip_debug (DEBUG_DOMAIN, "Mission Control stopped");
+}
+
+static void
+account_enabled_cb (McAccountMonitor *monitor,
+                   gchar            *unique_name,
+                   MissionControl   *mc)
+{
+       gossip_debug (DEBUG_DOMAIN, "Account enabled: %s", unique_name);
+       start_mission_control (mc);
+}
+
+static void
+start_mission_control (MissionControl *mc)
+{
+       McPresence presence;
+
+       presence = mission_control_get_presence_actual (mc, NULL);
+
+       if (presence != MC_PRESENCE_UNSET &&
+           presence != MC_PRESENCE_OFFLINE) {
+               /* MC is already running and online, nothing to do */
+               return;
+       }
+
+       gossip_debug (DEBUG_DOMAIN, "Starting Mission Control...");
+
+       /* FIXME: Save/Restore status message */
+       mission_control_set_presence (mc, MC_PRESENCE_AVAILABLE,
+                                     NULL,
+                                     (McCallback) error_cb,
+                                     NULL);
+
+       mission_control_connect_all_with_default_presence (mc,
+                                                          (McCallback) error_cb,
+                                                          NULL);
+}
+
 int
 main (int argc, char *argv[])
 {
-       GMainLoop *main_loop;
+       GMainLoop        *main_loop;
+       MissionControl   *mc;
+       McAccountMonitor *monitor;
 
        g_type_init ();
 
-       empathy_session_connect ();
-
        main_loop = g_main_loop_new (NULL, FALSE);
+       monitor = mc_account_monitor_new ();
+       mc = mission_control_new (tp_get_bus ());
+
+       g_signal_connect (monitor, "account-enabled",
+                         G_CALLBACK (account_enabled_cb),
+                         mc);
+       g_signal_connect (mc, "ServiceEnded",
+                         G_CALLBACK (service_ended_cb),
+                         NULL);
+
+       start_mission_control (mc);
+
        g_main_loop_run (main_loop);
 
+       g_object_unref (monitor);
+       g_object_unref (mc);
+
        return 0;
 }