[Spice-devel] [spice-gtk v3 01/16] file-xfer: get functions for SpiceFileTransferTask

Victor Toso victortoso at redhat.com
Mon May 30 09:54:57 UTC 2016


In order to channel-main interact with each SpiceFileTransferTask for
the file-transfer operation, the following functions are introduced:
* spice_file_transfer_task_get_id
* spice_file_transfer_task_get_channel
* spice_file_transfer_task_get_cancellable

Note that although "id" property is public and could be acquired by
g_object_get but having the helper function is more practical.

This change is related to split SpiceFileTransferTask from
channel-main.
---
 src/channel-main.c | 32 +++++++++++++++++++++++++++++---
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/channel-main.c b/src/channel-main.c
index 2f29312..89675d5 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -54,6 +54,10 @@
 
 typedef struct spice_migrate spice_migrate;
 
+static guint32 spice_file_transfer_task_get_id(SpiceFileTransferTask *self);
+static SpiceMainChannel *spice_file_transfer_task_get_channel(SpiceFileTransferTask *self);
+static GCancellable *spice_file_transfer_task_get_cancellable(SpiceFileTransferTask *self);
+
 /**
  * SECTION:file-transfer-task
  * @short_description: Monitoring file transfers
@@ -1902,9 +1906,12 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
 static void file_xfer_queue(SpiceFileTransferTask *self, int data_size)
 {
     VDAgentFileXferDataMessage msg;
-    SpiceMainChannel *channel = SPICE_MAIN_CHANNEL(self->channel);
+    SpiceMainChannel *channel;
 
-    msg.id = self->id;
+    channel = spice_file_transfer_task_get_channel(self);
+    g_return_if_fail(channel != NULL);
+
+    msg.id = spice_file_transfer_task_get_id(self);
     msg.size = data_size;
     agent_msg_queue_many(channel, VD_AGENT_FILE_XFER_DATA,
                          &msg, sizeof(msg),
@@ -1932,12 +1939,15 @@ static void file_xfer_read_cb(GObject *source_object,
     }
 
     if (count > 0 || self->file_size == 0) {
+        GCancellable *cancellable;
+
         self->read_bytes += count;
         g_object_notify(G_OBJECT(self), "progress");
         file_xfer_queue(self, count);
         if (count == 0)
             return;
-        file_xfer_flush_async(channel, self->cancellable,
+        cancellable = spice_file_transfer_task_get_cancellable(self);
+        file_xfer_flush_async(channel, cancellable,
                               file_xfer_data_flushed_cb, self);
         self->pending = TRUE;
     } else if (error) {
@@ -3221,7 +3231,23 @@ gboolean spice_main_file_copy_finish(SpiceMainChannel *channel,
     return g_task_propagate_boolean(task, error);
 }
 
+static guint32 spice_file_transfer_task_get_id(SpiceFileTransferTask *self)
+{
+    g_return_val_if_fail(self != NULL, 0);
+    return self->id;
+}
+
+static SpiceMainChannel *spice_file_transfer_task_get_channel(SpiceFileTransferTask *self)
+{
+    g_return_val_if_fail(self != NULL, NULL);
+    return self->channel;
+}
 
+static GCancellable *spice_file_transfer_task_get_cancellable(SpiceFileTransferTask *self)
+{
+    g_return_val_if_fail(self != NULL, NULL);
+    return self->cancellable;
+}
 
 static void
 spice_file_transfer_task_get_property(GObject *object,
-- 
2.5.5



More information about the Spice-devel mailing list