]> git.0d.be Git - empathy.git/blobdiff - src/empathy.c
Fix conflict after rebase
[empathy.git] / src / empathy.c
index c99e4b50df4945ebc97133628126cd48762e501d..d5be4df8d4a7902dea53a3b50ef2395fda5512bb 100644 (file)
@@ -14,9 +14,9 @@
  *
  * You should have received a copy of the GNU General Public
  * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- * 
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA  02110-1301  USA
+ *
  * Authors: Xavier Claessens <xclaesse@gmail.com>
  */
 
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 
+#if HAVE_LIBCHAMPLAIN
+#include <clutter-gtk/gtk-clutter-embed.h>
+#endif
+
 #include <libebook/e-book.h>
 #include <libnotify/notify.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-ft-factory.h>
 #include <libempathy/empathy-tp-chat.h>
 #include <libempathy/empathy-tp-call.h>
 
 #include <libempathy-gtk/empathy-conf.h>
 #include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy-gtk/empathy-location-manager.h>
 
 #include "empathy-accounts-dialog.h"
 #include "empathy-main-window.h"
@@ -95,10 +103,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) {
@@ -115,15 +129,18 @@ dispatch_cb (EmpathyDispatcher *dispatcher,
 
                factory = empathy_call_factory_get ();
                empathy_call_factory_claim_channel (factory, operation);
-       } else if (channel_type == EMP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER) {
-               EmpathyFTManager *ft_manager;
-               EmpathyTpFile    *tp_file;
+       } else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER) {
+               EmpathyFTFactory *factory;
 
-               ft_manager = empathy_ft_manager_dup_singleton ();
-               tp_file = EMPATHY_TP_FILE (
-                       empathy_dispatch_operation_get_channel_wrapper (operation));
-               empathy_ft_manager_add_tp_file (ft_manager, tp_file);
-               empathy_dispatch_operation_claim (operation);
+               factory = empathy_ft_factory_dup_singleton ();
+
+               /* if the operation is not incoming, don't claim it,
+                * as it might have been triggered by another client, and
+                * we are observing it.
+                */
+               if (empathy_dispatch_operation_is_incoming (operation)) {
+                       empathy_ft_factory_claim_channel (factory, operation);
+               }
        }
 }
 
@@ -220,7 +237,7 @@ create_salut_account (void)
        GError     *error = NULL;
 
        /* Check if we already created a salut account */
-       empathy_conf_get_bool (empathy_conf_get(),
+       empathy_conf_get_bool (empathy_conf_get (),
                               EMPATHY_PREFS_SALUT_ACCOUNT_CREATED,
                               &salut_created);
        if (salut_created) {
@@ -303,7 +320,7 @@ create_salut_account (void)
 /* The code that handles single-instance and startup notification is
  * copied from gedit.
  *
- * Copyright (C) 2005 - Paolo Maggi 
+ * Copyright (C) 2005 - Paolo Maggi
  */
 static void
 on_bacon_message_received (const char *message,
@@ -394,29 +411,62 @@ show_version_cb (const char *option_name,
        return FALSE;
 }
 
+static void
+new_incoming_transfer_cb (EmpathyFTFactory *factory,
+                         EmpathyFTHandler *handler,
+                          GError *error,
+                         gpointer user_data)
+{
+       if (error) {
+               empathy_ft_manager_display_error (handler, error);
+       } else {
+               empathy_receive_file_with_file_chooser (handler);
+       }
+}
+
+static void
+new_ft_handler_cb (EmpathyFTFactory *factory,
+                  EmpathyFTHandler *handler,
+                   GError *error,
+                  gpointer user_data)
+{
+       if (error) {
+               empathy_ft_manager_display_error (handler, error);
+       } else {
+               empathy_ft_manager_add_handler (handler);
+       }
+
+       g_object_unref (handler);
+}
+
 static void
 new_call_handler_cb (EmpathyCallFactory *factory, EmpathyCallHandler *handler,
        gboolean outgoing, gpointer user_data)
 {
-               EmpathyCallWindow *window;
+       EmpathyCallWindow *window;
 
-               window = empathy_call_window_new (handler);
-               gtk_widget_show (GTK_WIDGET (window));
+       window = empathy_call_window_new (handler);
+       gtk_widget_show (GTK_WIDGET (window));
 }
 
 int
 main (int argc, char *argv[])
 {
        guint32            startup_timestamp;
+#if HAVE_GEOCLUE
+       EmpathyLocationManager *location_manager = NULL;
+#endif
        EmpathyStatusIcon *icon;
        EmpathyDispatcher *dispatcher;
+       EmpathyLogManager *log_manager;
        EmpathyChatroomManager *chatroom_manager;
        EmpathyCallFactory *call_factory;
+       EmpathyFTFactory  *ft_factory;
        GtkWidget         *window;
        MissionControl    *mc;
        EmpathyIdle       *idle;
        gboolean           autoconnect = TRUE;
-       gboolean           no_connect = FALSE; 
+       gboolean           no_connect = FALSE;
        gboolean           hide_contact_list = FALSE;
        gboolean           accounts_dialog = FALSE;
        GError            *error = NULL;
@@ -451,9 +501,14 @@ main (int argc, char *argv[])
 
        empathy_gtk_init ();
        g_set_application_name (_(PACKAGE_NAME));
+       g_setenv ("PULSE_PROP_media.role", "phone", TRUE);
 
        gst_init (&argc, &argv);
 
+#if HAVE_LIBCHAMPLAIN
+       gtk_clutter_init (&argc, &argv);
+#endif
+
        gtk_window_set_default_icon_name ("empathy");
        textdomain (GETTEXT_PACKAGE);
 
@@ -521,11 +576,12 @@ main (int argc, char *argv[])
                                 use_nm_notify_cb, idle);
 
        /* Autoconnect */
-       empathy_conf_get_bool (empathy_conf_get(),
+       empathy_conf_get_bool (empathy_conf_get (),
                               EMPATHY_PREFS_AUTOCONNECT,
                               &autoconnect);
        if (autoconnect && ! no_connect &&
-           empathy_idle_get_state (idle) <= MC_PRESENCE_OFFLINE) {
+               tp_connection_presence_type_cmp_availability (empathy_idle_get_state
+                       (idle), TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0) {
                empathy_idle_set_state (idle, MC_PRESENCE_AVAILABLE);
        }
        
@@ -546,6 +602,10 @@ 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);
 
@@ -554,16 +614,32 @@ main (int argc, char *argv[])
        call_factory = empathy_call_factory_initialise ();
        g_signal_connect (G_OBJECT (call_factory), "new-call-handler",
                G_CALLBACK (new_call_handler_cb), NULL);
+       /* Create the FT factory */
+       ft_factory = empathy_ft_factory_dup_singleton ();
+       g_signal_connect (ft_factory, "new-ft-handler",
+               G_CALLBACK (new_ft_handler_cb), NULL);
+       g_signal_connect (ft_factory, "new-incoming-transfer",
+               G_CALLBACK (new_incoming_transfer_cb), NULL);
+
+       /* Location mananger */
+#if HAVE_GEOCLUE
+       location_manager = empathy_location_manager_dup_singleton ();
+#endif
 
        gtk_main ();
 
-       empathy_idle_set_state (idle, MC_PRESENCE_OFFLINE);
+       empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
 
        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);
+#if HAVE_GEOCLUE
+       g_object_unref (location_manager);
+#endif
+       g_object_unref (ft_factory);
 
        notify_uninit ();