--- 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);