Changeset 5212
- Timestamp:
- Mar 7, 2008, 3:16:25 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gtk/util.c
r5169 r5212 63 63 } 64 64 65 #define KILOBYTE_FACTOR 1024.0 66 #define MEGABYTE_FACTOR (1024.0 * 1024.0) 67 #define GIGABYTE_FACTOR (1024.0 * 1024.0 * 1024.0) 68 65 69 char* 66 70 tr_strlsize( char * buf, guint64 size, size_t buflen ) 67 71 { 68 if( !size ) 69 g_strlcpy( buf, _( "None" ), buflen ); 72 const goffset s = (goffset)size; 73 #if GLIB_CHECK_VERSION(2,16,0) 74 char * tmp = g_format_size_for_display( s ); 75 g_strlcpy( buf, tmp, buflen ); 76 g_free( tmp ); 77 #else 78 if ( s < (goffset)KILOBYTE_FACTOR ) 79 g_snprintf( buf, buflen, ngettext("%u byte", "%u bytes", (guint)s), (guint)s ); 70 80 else { 71 static const char *units[] = {72 N_("B"), N_("KiB"), N_("MiB"), N_("GiB"), N_("TiB"),73 N_("PiB"), N_("EiB"), N_("ZiB"), N_("YiB")74 };75 unsigned int i;76 double small = size;77 for( i=0; i<G_N_ELEMENTS(units) && (small>=1024.0); ++i )78 small /= 1024.0;79 if( i < 2 ) /* B & KiB */80 g_snprintf( buf, buflen, "%d %s", (int)small, _(units[i]));81 else82 g_snprintf( buf, buflen, "%.1f %s", small, _(units[i]) );83 } 81 gdouble displayed_size; 82 if (size < (goffset) MEGABYTE_FACTOR) { 83 displayed_size = (gdouble) size / KILOBYTE_FACTOR; 84 g_snprintf( buf, buflen, _("%.1f KB"), displayed_size ); 85 } else if (size < (goffset) GIGABYTE_FACTOR) { 86 displayed_size = (gdouble) size / MEGABYTE_FACTOR; 87 g_snprintf( buf, buflen, _("%.1f MB"), displayed_size ); 88 } else { 89 displayed_size = (gdouble) size / GIGABYTE_FACTOR; 90 g_snprintf( buf, buflen, _("%.1f GB"), displayed_size ); 91 } 92 } 93 #endif 84 94 return buf; 85 95 } … … 88 98 tr_strlspeed( char * buf, double KiBps, size_t buflen ) 89 99 { 90 const guint64 bps = KiBps * 1024; 91 if( !bps ) 92 g_strlcpy( buf, _( "None" ), buflen ); 93 else { 94 char bbuf[64]; 95 tr_strlsize( bbuf, (guint64)(KiBps*1024), sizeof(bbuf) ); 96 g_snprintf( buf, buflen, _("%s/s"), bbuf ); 97 } 100 const double speed = KiBps; 101 102 if ( speed < 1000.0 ) /* 0.0 KB to 999.9 KB */ 103 g_snprintf( buf, buflen, _( "%.1f KB/s" ), speed ); 104 else if( speed < 102400.0 ) /* 0.98 MB to 99.99 MB */ 105 g_snprintf( buf, buflen, _( "%.2f MB/s" ), (speed/1024) ); 106 else if( speed < 1024000.0 ) /* 100.0 MB to 999.9 MB */ 107 g_snprintf( buf, buflen, _( "%.1f MB/s" ), (speed/1024) ); 108 else /* insane speeds */ 109 g_snprintf( buf, buflen, _( "%.2f GB/s" ), (speed/1048576) ); 110 98 111 return buf; 99 112 } 100 113 101 #define SECONDS(s) ((s) % 60)102 #define MINUTES(s) ((s) / 60 % 60)103 #define HOURS(s) ((s) / 60 / 60 % 24)104 #define DAYS(s) ((s) / 60 / 60 / 24 % 7)105 106 114 char* 107 tr_strltime( char * buf, int secs, size_t buflen ) 108 { 109 if( secs < 60 ) 110 { 111 g_snprintf( buf, buflen, _( "%i %s" ), 112 SECONDS(secs), ngettext("sec", "secs", SECONDS(secs))); 113 } 114 else if( secs < 60*60 ) 115 { 116 g_snprintf( buf, buflen, _("%i %s %i %s"), 117 MINUTES(secs), ngettext("min", "mins", MINUTES(secs)), 118 SECONDS(secs), ngettext("sec", "secs", SECONDS(secs))); 119 } 120 else if( secs < 60*60*24 ) 121 { 122 g_snprintf( buf, buflen, _("%i %s %i %s"), 123 HOURS(secs), ngettext("hr", "hrs", HOURS(secs)), 124 MINUTES(secs), ngettext("min", "mins", MINUTES(secs))); 125 } 126 else 127 { 128 g_snprintf( buf, buflen, _("%i %s %i %s"), 129 DAYS(secs), ngettext("day", "days", DAYS(secs)), 130 HOURS(secs), ngettext("hr", "hrs", HOURS(secs))); 131 } 132 115 tr_strltime( char * buf, int seconds, size_t buflen ) 116 { 117 int hours; 118 119 if( seconds < 0 ) 120 seconds = 0; 121 122 if( seconds < 60 ) 123 { 124 g_snprintf( buf, sizeof( buf ), ngettext( "%'d second", "%'d seconds", (int)seconds ), (int) seconds ); 125 return buf; 126 } 127 128 if( seconds < ( 60 * 60 ) ) 129 { 130 const int minutes = ( seconds + 30 ) / 60; 131 g_snprintf( buf, sizeof( buf ), ngettext( "%'d minute", "%'d minutes", minutes ), minutes ); 132 return buf; 133 } 134 135 hours = seconds / ( 60 *60 ); 136 137 if( seconds < ( 60 * 60 * 4 ) ) 138 { 139 char h[64]; 140 char m[64]; 141 142 const int minutes = ( seconds - hours * 60 * 60 + 30 ) / 60; 143 144 g_snprintf( h, sizeof(h), ngettext( "%'d hour", "%'d hours", hours ), hours ); 145 g_snprintf( m, sizeof(m), ngettext( "%'d minute", "%'d minutes", minutes ), minutes ); 146 g_snprintf( buf, buflen, "%s, %s", h, m ); 147 return buf; 148 } 149 150 g_snprintf( buf, sizeof( buf ), ngettext( "%'d hour", "%'d hours", hours ), hours ); 133 151 return buf; 134 152 }
Note: See TracChangeset
for help on using the changeset viewer.