transmission/qt/Formatter.cc

211 lines
4.5 KiB
C++

/*
* This file Copyright (C) 2012-2015 Mnemosyne LLC
*
* It may be used under the GNU GPL versions 2 or 3
* or any future license endorsed by Mnemosyne LLC.
*
*/
#include <libtransmission/transmission.h>
#include <libtransmission/utils.h> // tr_formatter
#include "Formatter.h"
#include "Speed.h"
/***
**** Constants
***/
namespace
{
unsigned int speed_K;
unsigned int mem_K;
unsigned int size_K;
} // namespace
QString Formatter::unitStrings[3][5];
void Formatter::initUnits()
{
speed_K = 1000;
unitStrings[SPEED][B] = tr("B/s");
unitStrings[SPEED][KB] = tr("kB/s");
unitStrings[SPEED][MB] = tr("MB/s");
unitStrings[SPEED][GB] = tr("GB/s");
unitStrings[SPEED][TB] = tr("TB/s");
tr_formatter_speed_init(speed_K, unitStrings[SPEED][KB].toUtf8().constData(), unitStrings[SPEED][MB].toUtf8().constData(),
unitStrings[SPEED][GB].toUtf8().constData(), unitStrings[SPEED][TB].toUtf8().constData());
size_K = 1000;
unitStrings[SIZE][B] = tr("B");
unitStrings[SIZE][KB] = tr("kB");
unitStrings[SIZE][MB] = tr("MB");
unitStrings[SIZE][GB] = tr("GB");
unitStrings[SIZE][TB] = tr("TB");
tr_formatter_size_init(size_K, unitStrings[SIZE][KB].toUtf8().constData(), unitStrings[SIZE][MB].toUtf8().constData(),
unitStrings[SIZE][GB].toUtf8().constData(), unitStrings[SIZE][TB].toUtf8().constData());
mem_K = 1024;
unitStrings[MEM][B] = tr("B");
unitStrings[MEM][KB] = tr("KiB");
unitStrings[MEM][MB] = tr("MiB");
unitStrings[MEM][GB] = tr("GiB");
unitStrings[MEM][TB] = tr("TiB");
tr_formatter_mem_init(mem_K, unitStrings[MEM][KB].toUtf8().constData(), unitStrings[MEM][MB].toUtf8().constData(),
unitStrings[MEM][GB].toUtf8().constData(), unitStrings[MEM][TB].toUtf8().constData());
}
/***
****
***/
double Speed::KBps() const
{
return _Bps / static_cast<double>(speed_K);
}
Speed Speed::fromKBps(double KBps)
{
return static_cast<int>(KBps * speed_K);
}
/***
****
***/
QString Formatter::memToString(int64_t bytes)
{
if (bytes < 0)
{
return tr("Unknown");
}
if (bytes == 0)
{
return tr("None");
}
char buf[128];
tr_formatter_mem_B(buf, bytes, sizeof(buf));
return QString::fromUtf8(buf);
}
QString Formatter::sizeToString(int64_t bytes)
{
if (bytes < 0)
{
return tr("Unknown");
}
if (bytes == 0)
{
return tr("None");
}
char buf[128];
tr_formatter_size_B(buf, bytes, sizeof(buf));
return QString::fromUtf8(buf);
}
QString Formatter::speedToString(Speed const& speed)
{
char buf[128];
tr_formatter_speed_KBps(buf, speed.KBps(), sizeof(buf));
return QString::fromUtf8(buf);
}
QString Formatter::uploadSpeedToString(Speed const& uploadSpeed)
{
static QChar const uploadSymbol(0x25B4);
return tr("%1 %2").arg(speedToString(uploadSpeed)).arg(uploadSymbol);
}
QString Formatter::downloadSpeedToString(Speed const& downloadSpeed)
{
static QChar const downloadSymbol(0x25BE);
return tr("%1 %2").arg(speedToString(downloadSpeed)).arg(downloadSymbol);
}
QString Formatter::percentToString(double x)
{
char buf[128];
return QString::fromUtf8(tr_strpercent(buf, x, sizeof(buf)));
}
QString Formatter::ratioToString(double ratio)
{
char buf[128];
return QString::fromUtf8(tr_strratio(buf, sizeof(buf), ratio, "\xE2\x88\x9E"));
}
QString Formatter::timeToString(int seconds)
{
int days;
int hours;
int minutes;
QString d;
QString h;
QString m;
QString s;
QString str;
if (seconds < 0)
{
seconds = 0;
}
days = seconds / 86400;
hours = (seconds % 86400) / 3600;
minutes = (seconds % 3600) / 60;
seconds %= 60;
d = tr("%Ln day(s)", nullptr, days);
h = tr("%Ln hour(s)", nullptr, hours);
m = tr("%Ln minute(s)", nullptr, minutes);
s = tr("%Ln second(s)", nullptr, seconds);
if (days != 0)
{
if (days >= 4 || hours == 0)
{
str = d;
}
else
{
str = tr("%1, %2").arg(d).arg(h);
}
}
else if (hours != 0)
{
if (hours >= 4 || minutes == 0)
{
str = h;
}
else
{
str = tr("%1, %2").arg(h).arg(m);
}
}
else if (minutes != 0)
{
if (minutes >= 4 || seconds == 0)
{
str = m;
}
else
{
str = tr("%1, %2").arg(m).arg(s);
}
}
else
{
str = s;
}
return str;
}