]> git.0d.be Git - empathy.git/blobdiff - src/empathy.c
Port empathy.c to new API
[empathy.git] / src / empathy.c
index 5da2b25296fc66674c9b4fa9a963b4c1eae6dc8c..817b9bc37fe6cdd6344522f01c014acd0f7aba65 100644 (file)
@@ -32,6 +32,7 @@
 #include <gdk/gdkx.h>
 
 #include <libebook/e-book.h>
+#include <libnotify/notify.h>
 
 #include <telepathy-glib/util.h>
 #include <libmissioncontrol/mc-account.h>
 
 #include <libempathy/empathy-idle.h>
 #include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-call-factory.h>
 #include <libempathy/empathy-chatroom-manager.h>
+#include <libempathy/empathy-account-manager.h>
 #include <libempathy/empathy-dispatcher.h>
 #include <libempathy/empathy-dispatch-operation.h>
+#include <libempathy/empathy-log-manager.h>
 #include <libempathy/empathy-tp-chat.h>
 #include <libempathy/empathy-tp-call.h>
 
 #include "empathy-ft-manager.h"
 #include "bacon-message-connection.h"
 
+#include "extensions/extensions.h"
+
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
 #include <libempathy/empathy-debug.h>
 
+#include <gst/gst.h>
+
 static BaconMessageConnection *connection = NULL;
 
 static void
@@ -89,10 +97,16 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
                }
 
                if (id) {
+                       EmpathyAccountManager *manager;
+                       TpConnection *connection;
                        McAccount *account;
 
-                       account = empathy_tp_chat_get_account (tp_chat);
+                       manager = empathy_account_manager_dup_singleton ();
+                       connection = empathy_tp_chat_get_connection (tp_chat);
+                       account = empathy_account_manager_get_account (manager,
+                                                                      connection);
                        chat = empathy_chat_window_find_chat (account, id);
+                       g_object_unref (manager);
                }
 
                if (chat) {
@@ -102,23 +116,14 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
                }
 
                empathy_chat_window_present_chat (chat);
-               g_object_unref (tp_chat);
 
                empathy_dispatch_operation_claim (operation);
        } else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA) {
-               EmpathyTpCall *call;
-
-               call = EMPATHY_TP_CALL (
-                       empathy_dispatch_operation_get_channel_wrapper (operation));
-
-               empathy_dispatch_operation_claim (operation);
-
-               empathy_call_window_new (call);
+               EmpathyCallFactory *factory;
 
-               g_object_unref (call);
-
-       }
-       else if (channel_type == EMP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER) {
+               factory = empathy_call_factory_get ();
+               empathy_call_factory_claim_channel (factory, operation);
+       } else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER) {
                EmpathyFTManager *ft_manager;
                EmpathyTpFile    *tp_file;
 
@@ -126,8 +131,8 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
                tp_file = EMPATHY_TP_FILE (
                        empathy_dispatch_operation_get_channel_wrapper (operation));
                empathy_ft_manager_add_tp_file (ft_manager, tp_file);
-               g_object_unref (tp_file);
                empathy_dispatch_operation_claim (operation);
+               g_object_unref (ft_manager);
        }
 }
 
@@ -385,13 +390,39 @@ get_startup_timestamp ()
        return (retval > 0) ? retval : 0;
 }
 
+static gboolean
+show_version_cb (const char *option_name,
+                 const char *value,
+                 gpointer data,
+                 GError **error)
+{
+       g_print ("%s\n", PACKAGE_STRING);
+
+       exit (EXIT_SUCCESS);
+
+       return FALSE;
+}
+
+static void
+new_call_handler_cb (EmpathyCallFactory *factory, EmpathyCallHandler *handler,
+       gboolean outgoing, gpointer user_data)
+{
+               EmpathyCallWindow *window;
+
+               window = empathy_call_window_new (handler);
+               gtk_widget_show (GTK_WIDGET (window));
+}
+
 int
 main (int argc, char *argv[])
 {
        guint32            startup_timestamp;
        EmpathyStatusIcon *icon;
        EmpathyDispatcher *dispatcher;
+       EmpathyLogManager *log_manager;
        EmpathyChatroomManager *chatroom_manager;
+       EmpathyFTManager  *ft_manager;
+       EmpathyCallFactory *call_factory;
        GtkWidget         *window;
        MissionControl    *mc;
        EmpathyIdle       *idle;
@@ -413,19 +444,28 @@ main (int argc, char *argv[])
                  0, G_OPTION_ARG_NONE, &accounts_dialog,
                  N_("Show the accounts dialog"),
                  NULL },
+               { "version", 'v',
+                 G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version_cb, NULL, NULL },
                { NULL }
        };
 
        /* Init */
        g_thread_init (NULL);
+       empathy_init ();
+
        if (!gtk_init_with_args (&argc, &argv,
-                                _("- Empathy Instant Messenger"),
+                                N_("- Empathy Instant Messenger"),
                                 options, GETTEXT_PACKAGE, &error)) {
                g_warning ("Error in empathy init: %s", error->message);
                return EXIT_FAILURE;
        }
+
        empathy_gtk_init ();
-       g_set_application_name (PACKAGE_NAME);
+       g_set_application_name (_(PACKAGE_NAME));
+       g_setenv("PULSE_PROP_media.role", "phone", TRUE);
+
+       gst_init (&argc, &argv);
+
        gtk_window_set_default_icon_name ("empathy");
        textdomain (GETTEXT_PACKAGE);
 
@@ -465,7 +505,7 @@ main (int argc, char *argv[])
        }
 
        /* Setting up MC */
-       mc = empathy_mission_control_new ();
+       mc = empathy_mission_control_dup_singleton ();
        g_signal_connect (mc, "ServiceEnded",
                          G_CALLBACK (service_ended_cb),
                          NULL);
@@ -518,9 +558,21 @@ main (int argc, char *argv[])
        dispatcher = empathy_dispatcher_dup_singleton ();
        g_signal_connect (dispatcher, "dispatch", G_CALLBACK (dispatch_cb), NULL);
 
+       /* Logging */
+       log_manager = empathy_log_manager_dup_singleton ();
+       empathy_log_manager_observe (log_manager, dispatcher);
+
        chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
        empathy_chatroom_manager_observe (chatroom_manager, dispatcher);
 
+       ft_manager = empathy_ft_manager_dup_singleton ();
+
+       notify_init (_(PACKAGE_NAME));
+       /* Create the call factory */
+       call_factory = empathy_call_factory_initialise ();
+       g_signal_connect (G_OBJECT (call_factory), "new-call-handler",
+               G_CALLBACK (new_call_handler_cb), NULL);
+
        gtk_main ();
 
        empathy_idle_set_state (idle, MC_PRESENCE_OFFLINE);
@@ -528,8 +580,12 @@ main (int argc, char *argv[])
        g_object_unref (mc);
        g_object_unref (idle);
        g_object_unref (icon);
+       g_object_unref (log_manager);
        g_object_unref (dispatcher);
        g_object_unref (chatroom_manager);
+       g_object_unref (ft_manager);
+
+       notify_uninit ();
 
        return EXIT_SUCCESS;
 }