On Thu, 2014-09-18 at 04:14 -0400, Pavel Grunt wrote: > Hi, > > Thanks for the review. I made changes according to your suggestions. Also all the logging is now placed just in 'gtk/spice-widget.c'. > > Pavel > > --- > gtk/spice-widget.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 68 insertions(+), 2 deletions(-) > > diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c > index 1220030..ee344f8 100644 > --- a/gtk/spice-widget.c > +++ b/gtk/spice-widget.c > @@ -473,6 +473,61 @@ static gboolean grab_broken(SpiceDisplay *self, GdkEventGrabBroken *event, > return false; > } > > +typedef struct FileTransferInfo { > + gchar *basename; > + GDateTime *start_time; > + GDateTime *last_update; > +} FileTransferInfo; > + > +static void file_progress_callback(goffset current_num_bytes, > + goffset total_num_bytes, > + gpointer user_data) > +{ > + GDateTime *now; > + GTimeSpan diff; > + const GTimeSpan interval = 20 * G_TIME_SPAN_SECOND; > + FileTransferInfo *file_transfer_info = user_data; > + > + if (file_transfer_info == NULL) > + return; > + > + now = g_date_time_new_now_local(); > + > + if (current_num_bytes == total_num_bytes) { > + const double mega = 1048576; > + double seconds, speed_mbps; > + > + diff = g_date_time_difference(now, file_transfer_info->start_time); > + seconds = (double) diff / G_TIME_SPAN_SECOND; > + speed_mbps = (double) total_num_bytes / mega / seconds; > + > + g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, > + "transferred file %s of %.2f kB size in %.2f seconds (%.2f MB/s)", > + file_transfer_info->basename, total_num_bytes / 1000.0, > + seconds, speed_mbps); > + > + g_free(file_transfer_info->basename); > + g_date_time_unref(file_transfer_info->start_time); > + g_date_time_unref(file_transfer_info->last_update); > + g_date_time_unref(now); > + g_free(file_transfer_info); > + file_transfer_info = NULL; > + return; > + } > + > + diff = g_date_time_difference(now, file_transfer_info->last_update); > + if (diff < interval) { > + g_date_time_unref(now); > + return; > + } > + > + g_date_time_unref(file_transfer_info->last_update); > + file_transfer_info->last_update = now; > + > + g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "transferred %.2f%% of the file %s", > + 100.0 * current_num_bytes / total_num_bytes, file_transfer_info->basename); > +} > + > static void drag_data_received_callback(SpiceDisplay *self, > GdkDragContext *drag_context, > gint x, > @@ -488,6 +543,7 @@ static void drag_data_received_callback(SpiceDisplay *self, > SpiceDisplayPrivate *d = self->priv; > int i = 0; > GFile **files; > + FileTransferInfo *file_transfer_info = NULL; > > /* We get a buf like: > * file:///root/a.txt\r\nfile:///root/b.txt\r\n > @@ -504,8 +560,18 @@ static void drag_data_received_callback(SpiceDisplay *self, > } > g_strfreev(file_urls); > > - spice_main_file_copy_async(d->main, files, 0, NULL, NULL, > - NULL, NULL, NULL); > + if (n_files == 1) { > + file_transfer_info = g_malloc0(sizeof(FileTransferInfo)); > + file_transfer_info->basename = g_file_get_basename(files[0]); > + file_transfer_info->start_time = g_date_time_new_now_local(); > + file_transfer_info->last_update = g_date_time_ref(file_transfer_info->start_time); > + g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "transfer of file %s has started", > + file_transfer_info->basename); > + } I didn't get exactly why you're logging only when the user transfers just one file. > + > + spice_main_file_copy_async(d->main, files, 0, NULL, > + file_progress_callback, file_transfer_info, > + NULL, NULL); > for (i = 0; i < n_files; i++) { > g_object_unref(files[i]); > } _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel