source: trunk/qt/formatter.cc @ 13195

Last change on this file since 13195 was 13195, checked in by jordan, 10 years ago

(trunk) use base-10 units for network bandwidth (ie, speed) and disk sizes.

It looks like the Mac client is already doing this and it's clearly the trend in other apps as well. Even apt-get is using kB/s, ferchrissake... :)

Flame away.

  • Property svn:keywords set to Date Rev Author Id
File size: 4.4 KB
Line 
1/*
2 * This file Copyright (C) Mnemosyne LLC
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2
6 * as published by the Free Software Foundation.
7 *
8 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
9 *
10 * $Id: formatter.cc 13195 2012-02-03 21:21:52Z jordan $
11 */
12
13#include <iostream>
14
15#include <libtransmission/transmission.h>
16#include <libtransmission/utils.h> // tr_formatter
17
18#include "formatter.h"
19#include "speed.h"
20
21/***
22****  Constants
23***/
24
25namespace
26{
27    unsigned int speed_K;
28    unsigned int mem_K;
29    unsigned int size_K;
30}
31
32QString Formatter::unitStrings[3][5];
33
34void
35Formatter :: initUnits( )
36{
37    speed_K = 1000;
38    unitStrings[SPEED][B]  = tr(  "B/s" );
39    unitStrings[SPEED][KB] = tr( "kB/s" );
40    unitStrings[SPEED][MB] = tr( "MB/s" );
41    unitStrings[SPEED][GB] = tr( "GB/s" );
42    unitStrings[SPEED][TB] = tr( "TB/s" );
43    tr_formatter_speed_init( speed_K,
44                             qPrintable( unitStrings[SPEED][KB] ),
45                             qPrintable( unitStrings[SPEED][MB] ),
46                             qPrintable( unitStrings[SPEED][GB] ),
47                             qPrintable( unitStrings[SPEED][TB] ) );
48
49    size_K = 1000;
50    unitStrings[SIZE][B]  = tr(  "B" );
51    unitStrings[SIZE][KB] = tr( "kB" );
52    unitStrings[SIZE][MB] = tr( "MB" );
53    unitStrings[SIZE][GB] = tr( "GB" );
54    unitStrings[SIZE][TB] = tr( "TB" );
55    tr_formatter_size_init( size_K,
56                            qPrintable( unitStrings[SIZE][KB] ),
57                            qPrintable( unitStrings[SIZE][MB] ),
58                            qPrintable( unitStrings[SIZE][GB] ),
59                            qPrintable( unitStrings[SIZE][TB] ) );
60
61    mem_K = 1024;
62    unitStrings[MEM][B]  = tr(   "B" );
63    unitStrings[MEM][KB] = tr( "KiB" );
64    unitStrings[MEM][MB] = tr( "MiB" );
65    unitStrings[MEM][GB] = tr( "GiB" );
66    unitStrings[MEM][TB] = tr( "TiB" );
67    tr_formatter_mem_init( mem_K,
68                           qPrintable( unitStrings[MEM][KB] ),
69                           qPrintable( unitStrings[MEM][MB] ),
70                           qPrintable( unitStrings[MEM][GB] ),
71                           qPrintable( unitStrings[MEM][TB] ) );
72}
73
74/***
75****
76***/
77
78double
79Speed :: KBps( ) const
80{
81    return _Bps / (double)speed_K;
82}
83
84Speed
85Speed :: fromKBps( double KBps )
86{
87    return int( KBps * speed_K );
88}
89
90/***
91****
92***/
93
94QString
95Formatter :: memToString( int64_t bytes )
96{
97    if( bytes < 1 )
98        return tr( "Unknown" );
99    else if( !bytes )
100        return tr( "None" );
101    else {
102        char buf[128];
103        tr_formatter_mem_B( buf, bytes, sizeof( buf ) );
104        return buf;
105    }
106}
107
108QString
109Formatter :: sizeToString( int64_t bytes )
110{
111    if( bytes < 1 )
112        return tr( "Unknown" );
113    else if( !bytes )
114        return tr( "None" );
115    else {
116        char buf[128];
117        tr_formatter_size_B( buf, bytes, sizeof( buf ) );
118        return buf;
119    }
120}
121
122QString
123Formatter :: speedToString( const Speed& speed )
124{
125    if( speed.isZero( ) )
126        return tr( "None" );
127    else {
128        char buf[128];
129        tr_formatter_speed_KBps( buf, speed.KBps( ), sizeof( buf ) );
130        return buf;
131    }
132}
133
134QString
135Formatter :: percentToString( double x )
136{
137    char buf[128];
138    return QString( tr_strpercent( buf, x, sizeof(buf) ) );
139}
140
141QString
142Formatter :: ratioToString( double ratio )
143{
144    char buf[128];
145    return QString::fromUtf8( tr_strratio( buf, sizeof(buf), ratio, "\xE2\x88\x9E" ) );
146}
147
148QString
149Formatter :: timeToString( int seconds )
150{
151    int days, hours, minutes;
152    QString d, h, m, s;
153    QString str;
154
155    if( seconds < 0 )
156        seconds = 0;
157
158    days = seconds / 86400;
159    hours = ( seconds % 86400 ) / 3600;
160    minutes = ( seconds % 3600 ) / 60;
161    seconds %= 60;
162
163    d = tr( "%Ln day(s)", 0, days );
164    h = tr( "%Ln hour(s)", 0, hours );
165    m = tr( "%Ln minute(s)", 0, minutes );
166    s = tr( "%Ln second(s)", 0, seconds );
167
168    if( days )
169    {
170        if( days >= 4 || !hours )
171            str = d;
172        else
173            str = tr( "%1, %2" ).arg( d ).arg( h );
174    }
175    else if( hours )
176    {
177        if( hours >= 4 || !minutes )
178            str = h;
179        else
180            str = tr( "%1, %2" ).arg( h ).arg( m );
181    }
182    else if( minutes )
183    {
184        if( minutes >= 4 || !seconds )
185            str = m;
186        else
187            str = tr( "%1, %2" ).arg( m ).arg( s );
188    }
189    else
190    {
191        str = s;
192    }
193
194    return str;
195}
Note: See TracBrowser for help on using the repository browser.