From 8aaf6865026ead0f21a233a2897a89a7de332f5d Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Tue, 1 May 2007 12:18:26 +0000 Subject: [darcs-to-svn @ Connect accounts in empathy-launcher, not in empathy-contact-list] svn path=/trunk/; revision=14 --- launcher/empathy-launcher.c | 90 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 6 deletions(-) (limited to 'launcher/empathy-launcher.c') 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 - #include - #include -#include +#include +#include +#include + #include #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; } -- cgit v1.2.3