}
return path;
}
+
+gchar*
+midori_download_prepare_tooltip_text (WebKitDownload* download)
+{
+ gdouble* last_time;
+ guint64* last_size;
+ gint hour = 3600, min = 60;
+ gint hours_left, minutes_left, seconds_left;
+ guint64 total_size = webkit_download_get_total_size (download);
+ guint64 current_size = webkit_download_get_current_size (download);
+ gdouble time_elapsed = webkit_download_get_elapsed_time (download);
+ gdouble time_estimated, time_diff;
+ gchar* current, *total, *download_speed;
+ gchar* hours_str, *minutes_str, *seconds_str;
+ GString* tooltip = g_string_new (NULL);
+
+ time_diff = time_elapsed / current_size;
+ time_estimated = (total_size - current_size) * time_diff;
+
+ hours_left = time_estimated / hour;
+ minutes_left = (time_estimated - (hours_left * hour)) / min;
+ seconds_left = (time_estimated - (hours_left * hour) - (minutes_left * min));
+
+ hours_str = g_strdup_printf (ngettext ("%d hour", "%d hours", hours_left), hours_left);
+ minutes_str = g_strdup_printf (ngettext ("%d minute", "%d minutes", minutes_left), minutes_left);
+ seconds_str = g_strdup_printf (ngettext ("%d second", "%d seconds", seconds_left), seconds_left);
+
+ current = g_format_size_for_display (current_size);
+ total = g_format_size_for_display (total_size);
+ last_time = g_object_get_data (G_OBJECT (download), "last-time");
+ last_size = g_object_get_data (G_OBJECT (download), "last-size");
+
+ /* i18n: Download tooltip (size): 4KB of 43MB */
+ g_string_append_printf (tooltip, _("%s of %s"), current, total);
+ g_free (current);
+ g_free (total);
+
+ if (time_elapsed != *last_time)
+ download_speed = g_format_size_for_display (
+ (current_size - *last_size) / (time_elapsed - *last_time));
+ else
+ /* i18n: Unknown number of bytes, used for transfer rate like ?B/s */
+ download_speed = g_strdup (_("?B"));
+
+ /* i18n: Download tooltip (transfer rate): (130KB/s) */
+ g_string_append_printf (tooltip, _(" (%s/s)"), download_speed);
+ g_free (download_speed);
+
+ if (time_estimated > 0)
+ {
+ gchar* eta;
+ if (hours_left > 0)
+ eta = g_strdup_printf ("%s, %s", hours_str, minutes_str);
+ else if (minutes_left >= 10)
+ eta = g_strdup_printf ("%s", minutes_str);
+ else if (minutes_left < 10 && minutes_left > 0)
+ eta = g_strdup_printf ("%s, %s", minutes_str, seconds_str);
+ else if (seconds_left > 0)
+ eta = g_strdup_printf ("%s", seconds_str);
+ else
+ eta = g_strdup ("");
+ /* i18n: Download tooltip (estimated time) : - 1 hour, 5 minutes remaning */
+ g_string_append_printf (tooltip, _(" - %s remaining"), eta);
+ g_free (eta);
+ }
+
+ g_free (hours_str);
+ g_free (seconds_str);
+ g_free (minutes_str);
+
+ if (time_elapsed - *last_time > 5.0)
+ {
+ *last_time = time_elapsed;
+ *last_size = current_size;
+ }
+
+ return g_string_free (tooltip, FALSE);
+}
+
GParamSpec* pspec,
GtkWidget* progress)
{
- gchar* current;
- gchar* total;
- gchar* size_text;
+ gchar* tooltip;
gchar* text;
- gchar* transfer;
- gdouble* last_time;
- guint64* last_size;
- gdouble timestamp;
guint64 size;
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress),
return;
}
- current = g_format_size_for_display (webkit_download_get_current_size (download));
- total = g_format_size_for_display (webkit_download_get_total_size (download));
- last_time = g_object_get_data (G_OBJECT (download), "last-time");
- last_size = g_object_get_data (G_OBJECT (download), "last-size");
- timestamp = webkit_download_get_elapsed_time (download);
- if (timestamp != *last_time)
- transfer = g_format_size_for_display ((size - *last_size) / (timestamp - *last_time));
- else
- /* i18n: Unknown number of bytes, used for transfer rate like ?B/s */
- transfer = g_strdup (_("?B"));
- /* i18n: Download tooltip, 4KB of 43MB, 130KB/s */
- size_text = g_strdup_printf (_("%s of %s, %s/s"), current, total, transfer);
- if (timestamp - *last_time > 5.0)
- {
- *last_time = timestamp;
- *last_size = size;
- }
- g_free (current);
- g_free (total);
- text = g_strdup_printf ("%s (%s)",
- gtk_progress_bar_get_text (GTK_PROGRESS_BAR (progress)),
- size_text);
+ tooltip = midori_download_prepare_tooltip_text (download);
+ text = g_strdup_printf ("%s\n%s",
+ gtk_progress_bar_get_text (GTK_PROGRESS_BAR (progress)), tooltip);
gtk_widget_set_tooltip_text (progress, text);
- g_free (size_text);
- g_free (transfer);
+
+ g_free (tooltip);
g_free (text);
}