libpurple/xfer.c

changeset 40255
42922708e18e
parent 40254
09402b6a28cf
child 40256
39eb6d1b71ff
--- a/libpurple/xfer.c	Sat Dec 21 20:14:34 2019 -0500
+++ b/libpurple/xfer.c	Sat Dec 21 20:44:34 2019 -0500
@@ -115,6 +115,7 @@
 	PROP_START_TIME,
 	PROP_END_TIME,
 	PROP_STATUS,
+	PROP_PROGRESS,
 	PROP_UI_DATA,
 	PROP_LAST
 };
@@ -913,7 +914,6 @@
 purple_xfer_set_completed(PurpleXfer *xfer, gboolean completed)
 {
 	PurpleXferPrivate *priv = NULL;
-	PurpleXferUiOps *ui_ops;
 
 	g_return_if_fail(PURPLE_IS_XFER(xfer));
 
@@ -954,10 +954,7 @@
 		g_free(msg);
 	}
 
-	ui_ops = purple_xfer_get_ui_ops(xfer);
-
-	if (ui_ops != NULL && ui_ops->update_progress != NULL)
-		ui_ops->update_progress(xfer, purple_xfer_get_progress(xfer));
+	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_PROGRESS]);
 }
 
 void
@@ -1033,6 +1030,7 @@
 	priv->size = size;
 
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_FILE_SIZE]);
+	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_PROGRESS]);
 }
 
 void
@@ -1059,6 +1057,7 @@
 	priv->bytes_sent = bytes_sent;
 
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_BYTES_SENT]);
+	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_PROGRESS]);
 }
 
 PurpleXferUiOps *
@@ -1300,12 +1299,9 @@
 do_transfer(PurpleXfer *xfer)
 {
 	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
-	PurpleXferUiOps *ui_ops;
 	guchar *buffer = NULL;
 	gssize r = 0;
 
-	ui_ops = purple_xfer_get_ui_ops(xfer);
-
 	if (priv->type == PURPLE_XFER_TYPE_RECEIVE) {
 		r = purple_xfer_read(xfer, &buffer);
 		if (r > 0) {
@@ -1423,10 +1419,6 @@
 
 		if (klass && klass->ack)
 			klass->ack(xfer, buffer, r);
-
-		if (ui_ops != NULL && ui_ops->update_progress != NULL)
-			ui_ops->update_progress(xfer,
-				purple_xfer_get_progress(xfer));
 	}
 
 	g_free(buffer);
@@ -1882,19 +1874,6 @@
 	g_free(title);
 }
 
-void
-purple_xfer_update_progress(PurpleXfer *xfer)
-{
-	PurpleXferUiOps *ui_ops;
-
-	g_return_if_fail(PURPLE_IS_XFER(xfer));
-
-	ui_ops = purple_xfer_get_ui_ops(xfer);
-	if (ui_ops != NULL && ui_ops->update_progress != NULL) {
-		ui_ops->update_progress(xfer, purple_xfer_get_progress(xfer));
-	}
-}
-
 gconstpointer
 purple_xfer_get_thumbnail(PurpleXfer *xfer, gsize *len)
 {
@@ -2102,6 +2081,9 @@
 		case PROP_STATUS:
 			g_value_set_enum(value, purple_xfer_get_status(xfer));
 			break;
+		case PROP_PROGRESS:
+			g_value_set_double(value, purple_xfer_get_progress(xfer));
+			break;
 		case PROP_UI_DATA:
 			g_value_set_pointer(value, purple_xfer_get_ui_data(xfer));
 			break;
@@ -2279,6 +2261,11 @@
 				PURPLE_TYPE_XFER_STATUS, PURPLE_XFER_STATUS_UNKNOWN,
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	properties[PROP_PROGRESS] = g_param_spec_double(
+	        "progress", "Progress",
+	        "The current progress of the file transfer.", -1.0, 1.0, -1.0,
+	        G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
 	properties[PROP_UI_DATA] = g_param_spec_pointer("ui-data", "UI Data",
 				"The UI specific data for this xfer",
 				G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);

mercurial