aboutsummaryrefslogtreecommitdiffstats
path: root/launcher/empathy-launcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/empathy-launcher.c')
-rw-r--r--launcher/empathy-launcher.c90
1 files changed, 84 insertions, 6 deletions
diff --git a/launcher/empathy-launcher.c b/launcher/empathy-launcher.c
index 3f58be97c..f6851f95c 100644
--- a/launcher/empathy-launcher.c
+++ b/launcher/empathy-launcher.c
@@ -21,28 +21,106 @@
*/
#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;
}