mirror-chatterino2/src/util/FormatTime.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

75 lines
1.5 KiB
C++
Raw Normal View History

#include "util/FormatTime.hpp"
#include <algorithm>
#include <limits>
2018-08-07 01:35:24 +02:00
namespace chatterino {
2018-08-07 01:35:24 +02:00
namespace {
void appendDuration(int count, QChar &&suffix, QString &out)
2018-08-15 22:46:20 +02:00
{
if (!out.isEmpty())
{
out.append(' ');
}
out.append(QString::number(count));
out.append(suffix);
2018-08-15 22:46:20 +02:00
}
2018-08-07 01:35:24 +02:00
} // namespace
2018-08-07 01:35:24 +02:00
QString formatTime(int totalSeconds)
{
QString res;
2018-08-07 01:35:24 +02:00
int seconds = totalSeconds % 60;
int timeoutMinutes = totalSeconds / 60;
int minutes = timeoutMinutes % 60;
int timeoutHours = timeoutMinutes / 60;
int hours = timeoutHours % 24;
int days = timeoutHours / 24;
if (days > 0)
{
appendDuration(days, 'd', res);
}
if (hours > 0)
{
appendDuration(hours, 'h', res);
}
if (minutes > 0)
{
appendDuration(minutes, 'm', res);
}
if (seconds > 0)
{
appendDuration(seconds, 's', res);
}
return res;
}
QString formatTime(QString totalSecondsString)
{
bool ok = true;
int totalSeconds(totalSecondsString.toInt(&ok));
if (ok)
{
return formatTime(totalSeconds);
}
return "n/a";
}
QString formatTime(std::chrono::seconds totalSeconds)
{
auto count = totalSeconds.count();
return formatTime(static_cast<int>(std::clamp(
count,
static_cast<std::chrono::seconds::rep>(std::numeric_limits<int>::min()),
static_cast<std::chrono::seconds::rep>(
std::numeric_limits<int>::max()))));
}
2018-08-07 01:35:24 +02:00
} // namespace chatterino