diff options
author | Alan Fitton <ajf@eth0.org.uk> | 2012-01-02 14:14:41 +0000 |
---|---|---|
committer | Alan Fitton <ajf@eth0.org.uk> | 2012-01-02 14:14:41 +0000 |
commit | cd3800287297bdcd9fb8c90ee01a2414be3b9312 (patch) | |
tree | 93c4718a5f8dab79f9fd3c0af22c7ab1fc892a26 /src | |
parent | 8259ceddd02f76a337bb7037cdf5b86872ad09c6 (diff) |
change units to the IEC standard (and the Ubuntu units policy) for base2 (/1024) - KiB/GiB etc. this is instead of KB/s etc which Windows and many other apps use for base2. I've tried to fix up the translations as best as I can.
Diffstat (limited to 'src')
-rw-r--r-- | src/json.c | 20 | ||||
-rw-r--r-- | src/json.h | 2 | ||||
-rw-r--r-- | src/torrent.c | 1 | ||||
-rw-r--r-- | src/trg-cell-renderer-speed.c | 2 | ||||
-rw-r--r-- | src/trg-client.c | 5 | ||||
-rw-r--r-- | src/trg-general-panel.c | 4 | ||||
-rw-r--r-- | src/trg-json-widgets.c | 1 | ||||
-rw-r--r-- | src/trg-main-window.c | 6 | ||||
-rw-r--r-- | src/trg-remote-prefs-dialog.c | 10 | ||||
-rw-r--r-- | src/trg-status-bar.c | 4 | ||||
-rw-r--r-- | src/trg-torrent-graph.c | 2 | ||||
-rw-r--r-- | src/trg-torrent-props-dialog.c | 4 | ||||
-rw-r--r-- | src/util.c | 388 | ||||
-rw-r--r-- | src/util.h | 37 |
14 files changed, 312 insertions, 174 deletions
@@ -92,3 +92,23 @@ JsonObject *get_arguments(JsonObject * req) { return json_object_get_object_member(req, PARAM_ARGUMENTS); } + +gdouble json_double_to_progress(JsonNode * n) +{ + return json_node_really_get_double(n) * 100.0; +} + +gdouble json_node_really_get_double(JsonNode * node) +{ + GValue a = { 0 }; + + json_node_get_value(node, &a); + switch (G_VALUE_TYPE(&a)) { + case G_TYPE_INT64: + return (gdouble) g_value_get_int64(&a); + case G_TYPE_DOUBLE: + return g_value_get_double(&a); + default: + return 0.0; + } +} @@ -29,5 +29,7 @@ gchar *trg_serialize(JsonNode * req); JsonObject *trg_deserialize(trg_response * response, GError ** error); JsonObject *get_arguments(JsonObject * req); JsonObject *node_get_arguments(JsonNode * req); +gdouble json_double_to_progress(JsonNode * n); +gdouble json_node_really_get_double(JsonNode * node); #endif /* JSON_H_ */ diff --git a/src/torrent.c b/src/torrent.c index ab123c3..45e77c8 100644 --- a/src/torrent.c +++ b/src/torrent.c @@ -23,6 +23,7 @@ #include <json-glib/json-glib.h> #include "trg-client.h" +#include "json.h" #include "torrent.h" #include "protocol-constants.h" #include "util.h" diff --git a/src/trg-cell-renderer-speed.c b/src/trg-cell-renderer-speed.c index 9f87561..ed921ea 100644 --- a/src/trg-cell-renderer-speed.c +++ b/src/trg-cell-renderer-speed.c @@ -66,7 +66,7 @@ trg_cell_renderer_speed_set_property(GObject * object, guint property_id, if (priv->speed_value > 0) { char speedString[32]; trg_strlspeed(speedString, - priv->speed_value / KILOBYTE_FACTOR); + priv->speed_value / disk_K); g_object_set(object, "text", speedString, NULL); } else { g_object_set(object, "text", "", NULL); diff --git a/src/trg-client.c b/src/trg-client.c index 5304a81..ff5eb2a 100644 --- a/src/trg-client.c +++ b/src/trg-client.c @@ -23,6 +23,7 @@ #include <string.h> #include <glib.h> #include <glib/gprintf.h> +#include <glib/gi18n.h> #ifdef HAVE_LIBPROXY #include <proxy.h> @@ -156,6 +157,10 @@ TrgClient *trg_client_new(void) priv->pool = g_thread_pool_new((GFunc) dispatch_async_threadfunc, tc, DISPATCH_POOL_SIZE, TRUE, NULL); + tr_formatter_size_init( disk_K, _(disk_K_str), _(disk_M_str), _(disk_G_str), _(disk_T_str) ); + tr_formatter_speed_init( speed_K, _(speed_K_str), _(speed_M_str), _(speed_G_str), _(speed_T_str) ); + + return tc; } diff --git a/src/trg-general-panel.c b/src/trg-general-panel.c index ac5e9ba..6d88c3f 100644 --- a/src/trg-general-panel.c +++ b/src/trg-general-panel.c @@ -126,10 +126,10 @@ void trg_general_panel_update(TrgGeneralPanel * panel, JsonObject * t, trg_strlsize(buf, torrent_get_size(t)); gtk_label_set_text(GTK_LABEL(priv->gen_size_label), buf); - trg_strlspeed(buf, torrent_get_rate_down(t) / KILOBYTE_FACTOR); + trg_strlspeed(buf, torrent_get_rate_down(t) / disk_K); gtk_label_set_text(GTK_LABEL(priv->gen_down_rate_label), buf); - trg_strlspeed(buf, torrent_get_rate_up(t) / KILOBYTE_FACTOR); + trg_strlspeed(buf, torrent_get_rate_up(t) / disk_K); gtk_label_set_text(GTK_LABEL(priv->gen_up_rate_label), buf); uploaded = torrent_get_uploaded(t); diff --git a/src/trg-json-widgets.c b/src/trg-json-widgets.c index abdaf27..1814769 100644 --- a/src/trg-json-widgets.c +++ b/src/trg-json-widgets.c @@ -21,6 +21,7 @@ #include <json-glib/json-glib.h> #include "trg-json-widgets.h" +#include "json.h" #include "util.h" /* Functions for creating widgets that load/save their state from/to a JSON diff --git a/src/trg-main-window.c b/src/trg-main-window.c index ee49419..8ad7f3a 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -1745,14 +1745,10 @@ static GtkWidget *limit_item_new(TrgMainWindow * win, GtkWidget * menu, GtkWidget *item; gboolean active = limit < 0 ? FALSE : (currentLimit == (gint64) limit); - if (limit >= 1000) - g_snprintf(speed, sizeof(speed), "%.2f MB/s", limit / 1024); - else - g_snprintf(speed, sizeof(speed), "%.0f KB/s", limit); + trg_strlspeed(speed, limit); item = gtk_check_menu_item_new_with_label(speed); - /* Yeah, I know it's unsafe to cast from a float to an int, but its safe here */ g_object_set_data(G_OBJECT(item), "limit", GINT_TO_POINTER((gint) limit)); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), active); diff --git a/src/trg-remote-prefs-dialog.c b/src/trg-remote-prefs-dialog.c index c698046..1511ecc 100644 --- a/src/trg-remote-prefs-dialog.c +++ b/src/trg-remote-prefs-dialog.c @@ -262,14 +262,14 @@ static GtkWidget *trg_rprefs_bandwidthPage(TrgRemotePrefsDialog * win, hig_workarea_add_section_title(t, &row, _("Bandwidth limits")); tb = trg_json_widget_check_new(&priv->widgets, json, - SGET_SPEED_LIMIT_DOWN_ENABLED, _("Down Limit (KB/s)"), + SGET_SPEED_LIMIT_DOWN_ENABLED, _("Down Limit (KiB/s)"), NULL); w = trg_json_widget_spin_new(&priv->widgets, json, SGET_SPEED_LIMIT_DOWN, tb, 0, INT_MAX, 5); hig_workarea_add_row_w(t, &row, tb, w, NULL); tb = trg_json_widget_check_new(&priv->widgets, json, - SGET_SPEED_LIMIT_UP_ENABLED, _("Up Limit (KB/s)"), NULL); + SGET_SPEED_LIMIT_UP_ENABLED, _("Up Limit (KiB/s)"), NULL); w = trg_json_widget_spin_new(&priv->widgets, json, SGET_SPEED_LIMIT_UP, tb, 0, INT_MAX, 5); hig_workarea_add_row_w(t, &row, tb, w, NULL); @@ -288,11 +288,11 @@ static GtkWidget *trg_rprefs_bandwidthPage(TrgRemotePrefsDialog * win, w = trg_rprefs_alt_speed_spin_new(&priv->widgets, json, SGET_ALT_SPEED_DOWN, priv->alt_check, tb); - hig_workarea_add_row(t, &row, _("Alternate down limit (KB/s)"), w, w); + hig_workarea_add_row(t, &row, _("Alternate down limit (KiB/s)"), w, w); w = trg_rprefs_alt_speed_spin_new(&priv->widgets, json, SGET_ALT_SPEED_UP, priv->alt_check, tb); - hig_workarea_add_row(t, &row, _("Alternate up limit (KB/s)"), w, w); + hig_workarea_add_row(t, &row, _("Alternate up limit (KiB/s)"), w, w); return t; } @@ -542,7 +542,7 @@ static GtkWidget *trg_rprefs_generalPage(TrgRemotePrefsDialog * win, if (cache_size_mb >= 0) { w = trg_json_widget_spin_new(&priv->widgets, s, SGET_CACHE_SIZE_MB, NULL, 0, INT_MAX, 1); - hig_workarea_add_row(t, &row, _("Cache size (MB)"), w, w); + hig_workarea_add_row(t, &row, _("Cache size (MiB)"), w, w); } hig_workarea_add_section_title(t, &row, _("Behavior")); diff --git a/src/trg-status-bar.c b/src/trg-status-bar.c index dc9d4e8..91699cb 100644 --- a/src/trg-status-bar.c +++ b/src/trg-status-bar.c @@ -181,8 +181,8 @@ void trg_status_bar_update(TrgStatusBar * sb, session, SGET_SPEED_LIMIT_UP) : -1; - trg_strlspeed(downRateTotalString, stats->downRateTotal / KILOBYTE_FACTOR); - trg_strlspeed(upRateTotalString, stats->upRateTotal / KILOBYTE_FACTOR); + trg_strlspeed(downRateTotalString, stats->downRateTotal / disk_K); + trg_strlspeed(upRateTotalString, stats->upRateTotal / disk_K); if (uplimitraw >= 0) { gchar uplimitstring[32]; diff --git a/src/trg-torrent-graph.c b/src/trg-torrent-graph.c index 1b22375..94c4ecc 100644 --- a/src/trg-torrent-graph.c +++ b/src/trg-torrent-graph.c @@ -400,7 +400,7 @@ static void trg_torrent_graph_update_net(TrgTorrentGraph * g) fp[0] = 1.0f * priv->out / priv->max; fp[1] = 1.0f * priv->in / priv->max; - trg_strlspeed(speed, (gint64) (priv->out / KILOBYTE_FACTOR)); + trg_strlspeed(speed, (gint64) (priv->out / disk_K)); labelMarkup = g_markup_printf_escaped("<span font_size=\"small\" color=\"" GRAPH_OUT_COLOR "\">%s: %s</span>", diff --git a/src/trg-torrent-props-dialog.c b/src/trg-torrent-props-dialog.c index 1ab2f8a..399405b 100644 --- a/src/trg-torrent-props-dialog.c +++ b/src/trg-torrent-props-dialog.c @@ -195,7 +195,7 @@ static GtkWidget *trg_props_limitsPage(TrgTorrentPropsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_DOWNLOAD_LIMITED, - _("Limit download speed (KB/s)"), NULL); + _("Limit download speed (KiB/s)"), NULL); w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_DOWNLOAD_LIMIT, tb, 0, INT_MAX, 1); @@ -203,7 +203,7 @@ static GtkWidget *trg_props_limitsPage(TrgTorrentPropsDialog * win, tb = trg_json_widget_check_new(&priv->widgets, json, FIELD_UPLOAD_LIMITED, - _("Limit upload speed (KB/s)"), NULL); + _("Limit upload speed (KiB/s)"), NULL); w = trg_json_widget_spin_new(&priv->widgets, json, FIELD_UPLOAD_LIMIT, tb, 0, INT_MAX, 1); @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -/* Most of these functions are taken from the Transmission Project. */ +/* Many of these functions are taken from the Transmission Project. */ #include <stdlib.h> #include <math.h> @@ -33,6 +33,138 @@ #include "util.h" +/*** +**** The code for formatting size and speeds, taken from Transmission. +***/ + +const int disk_K = 1024; +const char * disk_K_str = N_("KiB"); +const char * disk_M_str = N_("MiB"); +const char * disk_G_str = N_("GiB"); +const char * disk_T_str = N_("TiB"); + +const int speed_K = 1024; +const char * speed_K_str = N_("KiB/s"); +const char * speed_M_str = N_("MiB/s"); +const char * speed_G_str = N_("GiB/s"); +const char * speed_T_str = N_("TiB/s"); + +struct formatter_unit +{ + char * name; + gint64 value; +}; + +struct formatter_units +{ + struct formatter_unit units[4]; +}; + +enum { TR_FMT_KB, TR_FMT_MB, TR_FMT_GB, TR_FMT_TB }; + +static void +formatter_init( struct formatter_units * units, + unsigned int kilo, + const char * kb, const char * mb, + const char * gb, const char * tb ) +{ + guint64 value = kilo; + units->units[TR_FMT_KB].name = g_strdup( kb ); + units->units[TR_FMT_KB].value = value; + + value *= kilo; + units->units[TR_FMT_MB].name = g_strdup( mb ); + units->units[TR_FMT_MB].value = value; + + value *= kilo; + units->units[TR_FMT_GB].name = g_strdup( gb ); + units->units[TR_FMT_GB].value = value; + + value *= kilo; + units->units[TR_FMT_TB].name = g_strdup( tb ); + units->units[TR_FMT_TB].value = value; +} + +static char* +formatter_get_size_str( const struct formatter_units * u, + char * buf, gint64 bytes, size_t buflen ) +{ + int precision; + double value; + const char * units; + const struct formatter_unit * unit; + + if( bytes < u->units[1].value ) unit = &u->units[0]; + else if( bytes < u->units[2].value ) unit = &u->units[1]; + else if( bytes < u->units[3].value ) unit = &u->units[2]; + else unit = &u->units[3]; + + value = (double)bytes / unit->value; + units = unit->name; + if( unit->value == 1 ) + precision = 0; + else if( value < 100 ) + precision = 2; + else + precision = 1; + tr_snprintf( buf, buflen, "%.*f %s", precision, value, units ); + return buf; +} + +static struct formatter_units size_units; + +void +tr_formatter_size_init( unsigned int kilo, + const char * kb, const char * mb, + const char * gb, const char * tb ) +{ + formatter_init( &size_units, kilo, kb, mb, gb, tb ); +} + +char* +tr_formatter_size_B( char * buf, gint64 bytes, size_t buflen ) +{ + return formatter_get_size_str( &size_units, buf, bytes, buflen ); +} + +static struct formatter_units speed_units; + +unsigned int tr_speed_K = 0u; + +void +tr_formatter_speed_init( unsigned int kilo, + const char * kb, const char * mb, + const char * gb, const char * tb ) +{ + tr_speed_K = kilo; + formatter_init( &speed_units, kilo, kb, mb, gb, tb ); +} + +char* +tr_formatter_speed_KBps( char * buf, double KBps, size_t buflen ) +{ + const double K = speed_units.units[TR_FMT_KB].value; + double speed = KBps; + + if( speed <= 999.95 ) /* 0.0 KB to 999.9 KB */ + tr_snprintf( buf, buflen, "%d %s", (int)speed, speed_units.units[TR_FMT_KB].name ); + else { + speed /= K; + if( speed <= 99.995 ) /* 0.98 MB to 99.99 MB */ + tr_snprintf( buf, buflen, "%.2f %s", speed, speed_units.units[TR_FMT_MB].name ); + else if (speed <= 999.95) /* 100.0 MB to 999.9 MB */ + tr_snprintf( buf, buflen, "%.1f %s", speed, speed_units.units[TR_FMT_MB].name ); + else { + speed /= K; + tr_snprintf( buf, buflen, "%.1f %s", speed, speed_units.units[TR_FMT_GB].name ); + } + } + + return buf; +} + +/* URL checkers. */ + gboolean is_magnet(gchar * string) { return g_str_has_prefix(string, "magnet:"); @@ -44,22 +176,40 @@ gboolean is_url(gchar * string) return g_regex_match_simple("^http[s]?://", string, 0, 0); } -void add_file_id_to_array(JsonObject * args, gchar * key, gint index) +/* + * Glib-ish Utility functions. + */ + +gchar *trg_base64encode(const gchar * filename) { - JsonArray *array; - if (json_object_has_member(args, key)) { - array = json_object_get_array_member(args, key); + GError *error = NULL; + GMappedFile *mf = g_mapped_file_new(filename, FALSE, &error); + gchar *b64out = NULL; + + if (error) { + g_error("%s", error->message); + g_error_free(error); } else { - array = json_array_new(); - json_object_set_array_member(args, key, array); + b64out = + g_base64_encode((guchar *) g_mapped_file_get_contents(mf), + g_mapped_file_get_length(mf)); } - json_array_add_int_element(array, index); + + g_mapped_file_unref(mf); + + return b64out; } -void g_str_slist_free(GSList * list) +gchar *trg_gregex_get_first(GRegex * rx, const gchar * src) { - g_slist_foreach(list, (GFunc) g_free, NULL); - g_slist_free(list); + GMatchInfo *mi = NULL; + gchar *dst = NULL; + g_regex_match(rx, src, 0, &mi); + if (mi) { + dst = g_match_info_fetch(mi, 1); + g_match_info_free(mi); + } + return dst; } GRegex *trg_uri_host_regex_new(void) @@ -70,6 +220,76 @@ GRegex *trg_uri_host_regex_new(void) G_REGEX_OPTIMIZE, 0, NULL); } +void g_str_slist_free(GSList * list) +{ + g_slist_foreach(list, (GFunc) g_free, NULL); + g_slist_free(list); +} + +void rm_trailing_slashes(gchar * str) +{ + if (!str) + return; + + int i, len; + if ((len = strlen(str)) < 1) + return; + + for (i = strlen(str) - 1; str[i]; i--) { + if (str[i] == '/') + str[i] = '\0'; + else + return; + } +} + +/* Working with torrents.. */ + +void add_file_id_to_array(JsonObject * args, gchar * key, gint index) +{ + JsonArray *array; + if (json_object_has_member(args, key)) { + array = json_object_get_array_member(args, key); + } else { + array = json_array_new(); + json_object_set_array_member(args, key, array); + } + json_array_add_int_element(array, index); +} + +/* GTK utilities. */ + +GtkWidget *gtr_combo_box_new_enum(const char *text_1, ...) +{ + GtkWidget *w; + GtkCellRenderer *r; + GtkListStore *store; + va_list vl; + const char *text; + va_start(vl, text_1); + + store = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); + + text = text_1; + if (text != NULL) + do { + const int val = va_arg(vl, int); + gtk_list_store_insert_with_values(store, NULL, INT_MAX, 0, val, + 1, text, -1); + text = va_arg(vl, const char *); + } + while (text != NULL); + + w = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); + r = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), r, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), r, "text", 1, NULL); + + /* cleanup */ + g_object_unref(store); + return w; +} + GtkWidget *my_scrolledwin_new(GtkWidget * child) { GtkWidget *scrolled_win = gtk_scrolled_window_new(NULL, NULL); @@ -80,16 +300,15 @@ GtkWidget *my_scrolledwin_new(GtkWidget * child) return scrolled_win; } -gchar *trg_gregex_get_first(GRegex * rx, const gchar * src) +/* gtk_widget_set_sensitive() was introduced in 2.18, we can have a minimum of + * 2.16 otherwise. */ + +void trg_widget_set_visible(GtkWidget * w, gboolean visible) { - GMatchInfo *mi = NULL; - gchar *dst = NULL; - g_regex_match(rx, src, 0, &mi); - if (mi) { - dst = g_match_info_fetch(mi, 1); - g_match_info_free(mi); - } - return dst; + if (visible) + gtk_widget_show(w); + else + gtk_widget_hide(w); } void trg_error_dialog(GtkWindow * parent, trg_response * response) @@ -125,6 +344,8 @@ gchar *make_error_message(JsonObject * response, int status) } } +/* Formatters and Transmission basic utility functions.. */ + char *tr_strlpercent(char *buf, double x, size_t buflen) { return tr_strpercent(buf, x, buflen); @@ -172,34 +393,6 @@ char *tr_strlratio(char *buf, double ratio, size_t buflen) return tr_strratio(buf, buflen, ratio, "\xE2\x88\x9E"); } -char *tr_strlsize(char *buf, guint64 size, size_t buflen) -{ - if (!size) - g_strlcpy(buf, _("None"), buflen); - else { - char *tmp = g_format_size_for_display(size); - g_strlcpy(buf, tmp, buflen); - g_free(tmp); - } - return buf; -} - -char *tr_strlspeed(char *buf, double kb_sec, size_t buflen) -{ - const double speed = kb_sec; - - if (speed < 1000.0) /* 0.0 KB to 999.9 KB */ - g_snprintf(buf, buflen, _("%.1f KB/s"), speed); - else if (speed < 102400.0) /* 0.98 MB to 99.99 MB */ - g_snprintf(buf, buflen, _("%.2f MB/s"), (speed / KILOBYTE_FACTOR)); - else if (speed < 1024000.0) /* 100.0 MB to 999.9 MB */ - g_snprintf(buf, buflen, _("%.1f MB/s"), (speed / MEGABYTE_FACTOR)); - else /* insane speeds */ - g_snprintf(buf, buflen, _("%.2f GB/s"), (speed / GIGABYTE_FACTOR)); - - return buf; -} - char *tr_strltime_short(char *buf, long seconds, size_t buflen) { int hours, minutes; @@ -337,102 +530,3 @@ evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap) return r; #endif } - -void rm_trailing_slashes(gchar * str) -{ - if (!str) - return; - - int i, len; - if ((len = strlen(str)) < 1) - return; - - for (i = strlen(str) - 1; str[i]; i--) { - if (str[i] == '/') - str[i] = '\0'; - else - return; - } -} - -/* gtk_widget_set_sensitive() was introduced in 2.18, we can have a minimum of - * 2.16 otherwise. */ - -void trg_widget_set_visible(GtkWidget * w, gboolean visible) -{ - if (visible) - gtk_widget_show(w); - else - gtk_widget_hide(w); -} - -gdouble json_double_to_progress(JsonNode * n) -{ - return json_node_really_get_double(n) * 100.0; -} - -gdouble json_node_really_get_double(JsonNode * node) -{ - GValue a = { 0 }; - - json_node_get_value(node, &a); - switch (G_VALUE_TYPE(&a)) { - case G_TYPE_INT64: - return (gdouble) g_value_get_int64(&a); - case G_TYPE_DOUBLE: - return g_value_get_double(&a); - default: - return 0.0; - } -} - -gchar *trg_base64encode(const gchar * filename) -{ - GError *error = NULL; - GMappedFile *mf = g_mapped_file_new(filename, FALSE, &error); - gchar *b64out = NULL; - - if (error) { - g_error("%s", error->message); - g_error_free(error); - } else { - b64out = - g_base64_encode((guchar *) g_mapped_file_get_contents(mf), - g_mapped_file_get_length(mf)); - } - - g_mapped_file_unref(mf); - - return b64out; -} - -GtkWidget *gtr_combo_box_new_enum(const char *text_1, ...) -{ - GtkWidget *w; - GtkCellRenderer *r; - GtkListStore *store; - va_list vl; - const char *text; - va_start(vl, text_1); - - store = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); - - text = text_1; - if (text != NULL) - do { - const int val = va_arg(vl, int); - gtk_list_store_insert_with_values(store, NULL, INT_MAX, 0, val, - 1, text, -1); - text = va_arg(vl, const char *); - } - while (text != NULL); - - w = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); - r = gtk_cell_renderer_text_new(); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), r, TRUE); - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), r, "text", 1, NULL); - - /* cleanup */ - g_object_unref(store); - return w; -} @@ -28,16 +28,25 @@ #include "trg-client.h" -#define trg_strlspeed(a, b) tr_strlspeed(a, b, sizeof(a)) +#define trg_strlspeed(a, b) tr_formatter_speed_KBps(a, b, sizeof(a)) #define trg_strlpercent(a, b) tr_strlpercent(a, b, sizeof(a)) -#define trg_strlsize(a, b) tr_strlsize(a, b, sizeof(a)) +#define trg_strlsize(a, b) tr_formatter_size_B(a, b, sizeof(a)) #define trg_strlratio(a, b) tr_strlratio(a, b, sizeof(a)) #define TR_RATIO_NA -1 #define TR_RATIO_INF -2 -#define KILOBYTE_FACTOR 1024.0 -#define MEGABYTE_FACTOR ( 1024.0 * 1024.0 ) -#define GIGABYTE_FACTOR ( 1024.0 * 1024.0 * 1024.0 ) + +extern const int disk_K; +extern const char * disk_K_str; +extern const char * disk_M_str; +extern const char * disk_G_str; +extern const char * disk_T_str; + +extern const int speed_K; +extern const char * speed_K_str; +extern const char * speed_M_str; +extern const char * speed_G_str; +extern const char * speed_T_str; void add_file_id_to_array(JsonObject * args, gchar * key, gint index); void g_str_slist_free(GSList * list); @@ -46,6 +55,20 @@ gchar *trg_gregex_get_first(GRegex * rx, const gchar * uri); gchar *make_error_message(JsonObject * response, int status); void trg_error_dialog(GtkWindow * parent, trg_response * response); +void +tr_formatter_size_init( unsigned int kilo, + const char * kb, const char * mb, + const char * gb, const char * tb ); +char* +tr_formatter_size_B( char * buf, gint64 bytes, size_t buflen ); + +void +tr_formatter_speed_init( unsigned int kilo, + const char * kb, const char * mb, + const char * gb, const char * tb ); +char* +tr_formatter_speed_KBps( char * buf, double KBps, size_t buflen ); + char *tr_strltime_long(char *buf, long seconds, size_t buflen); char *tr_strltime_short(char *buf, long seconds, size_t buflen); char *tr_strpercent(char *buf, double x, size_t buflen); @@ -53,8 +76,6 @@ char *tr_strlpercent(char *buf, double x, size_t buflen); char *tr_strratio(char *buf, size_t buflen, double ratio, const char *infinity); char *tr_strlratio(char *buf, double ratio, size_t buflen); -char *tr_strlspeed(char *buf, double kb_sec, size_t buflen); -char *tr_strlsize(char *buf, guint64 size, size_t buflen); char *gtr_localtime(time_t time); char *gtr_localtime2(char *buf, time_t time, size_t buflen); int tr_snprintf(char *buf, size_t buflen, const char *fmt, ...); @@ -65,12 +86,10 @@ int evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap); void rm_trailing_slashes(gchar * str); void trg_widget_set_visible(GtkWidget * w, gboolean visible); -gdouble json_double_to_progress(JsonNode * n); gchar *trg_base64encode(const gchar * filename); GtkWidget *my_scrolledwin_new(GtkWidget * child); gboolean is_url(gchar * string); gboolean is_magnet(gchar * string); -gdouble json_node_really_get_double(JsonNode * node); GtkWidget *gtr_combo_box_new_enum(const char *text_1, ...); #endif /* UTIL_H_ */ |