Re: [spice-gtk][PATCH v2] Added INFO messages about a file transfer

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

 



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




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]