empathy r1834 - in trunk: libempathy-gtk src



Author: xclaesse
Date: Fri Nov 21 16:19:56 2008
New Revision: 1834
URL: http://svn.gnome.org/viewvc/empathy?rev=1834&view=rev

Log:
Handle new file channels regardless of direction in the dispatcher. (Jonny Lamb)

Signed-off-by: Jonny Lamb <jonny lamb collabora co uk>

Modified:
   trunk/libempathy-gtk/empathy-ui-utils.c
   trunk/src/empathy-event-manager.c
   trunk/src/empathy.c

Modified: trunk/libempathy-gtk/empathy-ui-utils.c
==============================================================================
--- trunk/libempathy-gtk/empathy-ui-utils.c	(original)
+++ trunk/libempathy-gtk/empathy-ui-utils.c	Fri Nov 21 16:19:56 2008
@@ -1458,39 +1458,25 @@
 	if (response_id == GTK_RESPONSE_OK) {
 		GSList *list;
 		GSList *l;
-		EmpathyFTManager *ft_manager;
 
 		list = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (widget));
-		ft_manager = empathy_ft_manager_get_default ();
 
 		DEBUG ("File chooser selected files:");
 
 		for (l = list; l; l = l->next) {
 			gchar            *uri;
 			GFile            *gfile;
-			EmpathyTpFile    *tp_file;
 			GtkRecentManager *manager;
 
 			uri = l->data;
 			gfile = g_file_new_for_uri (uri);
 
 			DEBUG ("\t%s", uri);
-			tp_file = empathy_send_file (contact,
-						     gfile);
-
-			empathy_ft_manager_add_tp_file (ft_manager, tp_file);
+			empathy_send_file (contact, gfile);
 
 			manager = gtk_recent_manager_get_default ();
 			gtk_recent_manager_add_item (manager, uri);
 
-			if (tp_file) ;
-				/* FIXME: This should be unrefed, but
-				 * it's not referenced anywhere else,
-				 * so the transfer just ends. Uncomment
-				 * this out when there is a file
-				 * transfer "manager".
-				g_object_unref (file);
-				 */
 			g_object_unref (gfile);
 			g_free (uri);
 		}

Modified: trunk/src/empathy-event-manager.c
==============================================================================
--- trunk/src/empathy-event-manager.c	(original)
+++ trunk/src/empathy-event-manager.c	Fri Nov 21 16:19:56 2008
@@ -27,6 +27,7 @@
 #include <telepathy-glib/util.h>
 
 #include <libempathy/empathy-dispatcher.h>
+#include <libempathy/empathy-contact-factory.h>
 #include <libempathy/empathy-contact-manager.h>
 #include <libempathy/empathy-tp-chat.h>
 #include <libempathy/empathy-tp-group.h>
@@ -178,59 +179,6 @@
 }
 
 static void
-event_channel_file_process_func (EventPriv *event)
-{
-	EmpathyFTManager *manager;
-	EmpathyTpFile    *tp_file = (EmpathyTpFile *) event->user_data;
-
-	manager = empathy_ft_manager_get_default ();
-	empathy_ft_manager_add_tp_file (manager, tp_file);
-	event_remove (event);
-}
-
-static void
-file_channel_state_cb (TpProxy      *proxy,
-		       const GValue *state,
-		       const GError *error,
-		       gpointer      user_data,
-		       GObject      *weak_object)
-{
-	TpChannel           *channel = (TpChannel *) weak_object;
-	EmpathyEventManager *manager = (EmpathyEventManager *) user_data;
-
-	if (error) {
-		DEBUG ("Error: %s", error->message);
-		return;
-	}
-
-	/* Only deal with incoming channels */
-	if (g_value_get_uint (state) ==
-	    EMP_FILE_TRANSFER_STATE_LOCAL_PENDING) {
-		EmpathyContact *contact;
-		gchar          *msg;
-		EmpathyTpFile  *tp_file;
-
-		tp_file = empathy_tp_file_new (channel);
-
-		contact = empathy_tp_file_get_contact (tp_file);
-		empathy_contact_run_until_ready (contact,
-			EMPATHY_CONTACT_READY_NAME, NULL);
-
-		msg = g_strdup_printf (_("Incoming file transfer from %s"),
-				       empathy_contact_get_name (contact));
-
-		event_manager_add (manager, contact,
-				   EMPATHY_IMAGE_DOCUMENT_SEND,
-				   msg,
-				   channel,
-				   event_channel_file_process_func,
-				   tp_file);
-
-		g_free (msg);
-	}
-}
-
-static void
 event_manager_filter_channel_cb (EmpathyDispatcher   *dispatcher,
 				 TpChannel           *channel,
 				 EmpathyEventManager *manager)
@@ -269,12 +217,33 @@
 		g_object_unref (tp_group);
 	}
 	else if (!tp_strdiff (channel_type, EMP_IFACE_CHANNEL_TYPE_FILE)) {
-		tp_cli_dbus_properties_call_get (channel, -1,
-						 EMP_IFACE_CHANNEL_TYPE_FILE,
-						 "State",
-						 file_channel_state_cb,
-						 manager, NULL,
-						 G_OBJECT (channel));
+		EmpathyContact        *contact;
+		gchar                 *msg;
+		TpHandle               handle;
+		McAccount             *account;
+		EmpathyContactFactory *factory;
+
+		factory = empathy_contact_factory_new ();
+		handle = tp_channel_get_handle (channel, NULL);
+		account = empathy_channel_get_account (channel);
+
+		contact = empathy_contact_factory_get_from_handle (factory,
+								   account,
+								   handle);
+
+		empathy_contact_run_until_ready (contact,
+			EMPATHY_CONTACT_READY_NAME, NULL);
+
+		msg = g_strdup_printf (_("Incoming file transfer from %s"),
+				       empathy_contact_get_name (contact));
+
+		event_manager_add (manager, contact,
+				   EMPATHY_IMAGE_DOCUMENT_SEND,
+				   msg, channel,
+				   event_channel_process_func, NULL);
+
+		g_object_unref (factory);
+		g_object_unref (account);
 	}
 
 	g_free (channel_type);

Modified: trunk/src/empathy.c
==============================================================================
--- trunk/src/empathy.c	(original)
+++ trunk/src/empathy.c	Fri Nov 21 16:19:56 2008
@@ -44,6 +44,7 @@
 #include <libempathy/empathy-tp-group.h>
 
 #include <libempathy-gtk/empathy-conf.h>
+#include <libempathy-gtk/empathy-ft-manager.h>
 
 #include <extensions/extensions.h>
 
@@ -104,6 +105,15 @@
 	else if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA)) {
 		empathy_call_window_new (channel);
 	}
+	else if (!tp_strdiff (channel_type, EMP_IFACE_CHANNEL_TYPE_FILE)) {
+		EmpathyTpFile *tp_file;
+		EmpathyFTManager *ft_manager;
+
+		ft_manager = empathy_ft_manager_get_default ();
+		tp_file = empathy_tp_file_new (channel);
+
+		empathy_ft_manager_add_tp_file (ft_manager, tp_file);
+	}
 
 	g_free (channel_type);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]