diff options
Diffstat (limited to 'launcher/empathy-launcher.c')
-rw-r--r-- | launcher/empathy-launcher.c | 90 |
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; } |