empathy r1913 - in trunk: libempathy src



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

Log:
Remove empathy_tp_file_keep_alive hack and connect to "notify::state" in file_channel_create_cb() to unref the object when the FT is done.

Modified:
   trunk/libempathy/empathy-dispatcher.c
   trunk/libempathy/empathy-tp-file.c
   trunk/libempathy/empathy-tp-file.h
   trunk/src/empathy.c

Modified: trunk/libempathy/empathy-dispatcher.c
==============================================================================
--- trunk/libempathy/empathy-dispatcher.c	(original)
+++ trunk/libempathy/empathy-dispatcher.c	Fri Nov 21 16:25:11 2008
@@ -934,6 +934,19 @@
 } FileChannelRequest;
 
 static void
+tp_file_state_notify_cb (EmpathyTpFile *tp_file)
+{
+	EmpFileTransferState state;
+
+	state = empathy_tp_file_get_state (tp_file, NULL);
+	if (state == EMP_FILE_TRANSFER_STATE_COMPLETED ||
+	    state == EMP_FILE_TRANSFER_STATE_CANCELLED) {
+		DEBUG ("Transfer is done, unref the object");
+		g_object_unref (tp_file);
+	}
+}
+
+static void
 file_channel_create_cb (TpConnection *connection,
 			const gchar  *object_path,
 			GHashTable   *properties,
@@ -957,10 +970,13 @@
 				 request->handle,
 				 NULL);
 
+	/* We give the ref to the callback, it is responsible to unref the
+	 * object once the transfer is done. */
 	tp_file = empathy_tp_file_new (channel);
 	empathy_tp_file_offer (tp_file, request->gfile, NULL);
-	empathy_tp_file_keep_alive (tp_file);
-	g_object_unref (tp_file);
+	g_signal_connect (tp_file, "notify::state",
+			  G_CALLBACK (tp_file_state_notify_cb),
+			  NULL);
 
 	g_object_unref (request->gfile);
 	g_slice_free (FileChannelRequest, request);

Modified: trunk/libempathy/empathy-tp-file.c
==============================================================================
--- trunk/libempathy/empathy-tp-file.c	(original)
+++ trunk/libempathy/empathy-tp-file.c	Fri Nov 21 16:25:11 2008
@@ -297,7 +297,6 @@
   time_t start_time;
   gchar *unix_socket_path;
   GCancellable *cancellable;
-  gboolean keep_alive;
 };
 
 enum {
@@ -327,18 +326,6 @@
 }
 
 static void
-tp_file_check_keep_alive (EmpathyTpFile *tp_file)
-{
-  if (tp_file->priv->keep_alive &&
-      (tp_file->priv->state == EMP_FILE_TRANSFER_STATE_COMPLETED ||
-       tp_file->priv->state == EMP_FILE_TRANSFER_STATE_CANCELLED))
-    {
-      tp_file->priv->keep_alive = FALSE;
-      g_object_unref (tp_file);
-    }
-}
-
-static void
 tp_file_invalidated_cb (TpProxy       *proxy,
 			guint          domain,
 			gint           code,
@@ -356,8 +343,6 @@
           EMP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_ERROR;
       g_object_notify (G_OBJECT (tp_file), "state");
     }
-
-  tp_file_check_keep_alive (tp_file);
 }
 
 static void
@@ -488,7 +473,6 @@
   tp_file->priv->state_change_reason = reason;
 
   g_object_notify (G_OBJECT (tp_file), "state");
-  tp_file_check_keep_alive (tp_file);
 }
 
 static void
@@ -840,27 +824,6 @@
       &nothing, tp_file_method_cb, NULL, NULL, G_OBJECT (tp_file));
 }
 
-/**
- * empathy_tp_file_keep_alive:
- * @tp_file: an #EmpathyTpFile
- *
- * Keep @tp_file alive until the file transfer is COMPLETED or CANCELLED, by
- * adding a temporary reference.
- */
-void
-empathy_tp_file_keep_alive (EmpathyTpFile *tp_file)
-{
-  g_return_if_fail (EMPATHY_IS_TP_FILE (tp_file));
-
-  if (tp_file->priv->keep_alive)
-    return;
-
-  tp_file->priv->keep_alive = TRUE;
-  if (tp_file->priv->state != EMP_FILE_TRANSFER_STATE_COMPLETED &&
-      tp_file->priv->state != EMP_FILE_TRANSFER_STATE_CANCELLED)
-    g_object_ref (tp_file);
-}
-
 EmpathyContact *
 empathy_tp_file_get_contact (EmpathyTpFile *tp_file)
 {

Modified: trunk/libempathy/empathy-tp-file.h
==============================================================================
--- trunk/libempathy/empathy-tp-file.h	(original)
+++ trunk/libempathy/empathy-tp-file.h	Fri Nov 21 16:25:11 2008
@@ -72,7 +72,6 @@
 void empathy_tp_file_cancel (EmpathyTpFile *tp_file);
 void empathy_tp_file_offer (EmpathyTpFile *tp_file, GFile *gfile,
   GError **error);
-void empathy_tp_file_keep_alive (EmpathyTpFile *tp_file);
 
 guint64 empathy_tp_file_get_transferred_bytes (EmpathyTpFile *tp_file);
 EmpathyContact *empathy_tp_file_get_contact (EmpathyTpFile *tp_file);

Modified: trunk/src/empathy.c
==============================================================================
--- trunk/src/empathy.c	(original)
+++ trunk/src/empathy.c	Fri Nov 21 16:25:11 2008
@@ -112,7 +112,6 @@
 		ft_manager = empathy_ft_manager_get_default ();
 		tp_file = empathy_tp_file_new (channel);
 		empathy_ft_manager_add_tp_file (ft_manager, tp_file);
-		empathy_tp_file_keep_alive (tp_file);
 		g_object_unref (tp_file);
 	}
 }



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