mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-30 00:37:23 +01:00
83 lines
2.2 KiB
C
83 lines
2.2 KiB
C
#include "common/duration.h"
|
|
|
|
void ffDurationAppendNum(uint64_t totalSeconds, FFstrbuf* result)
|
|
{
|
|
const FFOptionsDisplay* options = &instance.config.display;
|
|
|
|
bool spaceBeforeUnit = options->durationSpaceBeforeUnit != FF_SPACE_BEFORE_UNIT_NEVER;
|
|
|
|
if (totalSeconds < 60)
|
|
{
|
|
ffStrbufAppendUInt(result, totalSeconds);
|
|
if (spaceBeforeUnit) ffStrbufAppendC(result, ' ');
|
|
ffStrbufAppendS(result, options->durationAbbreviation ? "sec" : "second");
|
|
if (totalSeconds != 1)
|
|
ffStrbufAppendC(result, 's');
|
|
return;
|
|
}
|
|
|
|
uint32_t seconds = (uint32_t) (totalSeconds % 60);
|
|
totalSeconds /= 60;
|
|
if (seconds >= 30)
|
|
totalSeconds++;
|
|
|
|
uint32_t minutes = (uint32_t) (totalSeconds % 60);
|
|
totalSeconds /= 60;
|
|
uint32_t hours = (uint32_t) (totalSeconds % 24);
|
|
totalSeconds /= 24;
|
|
uint32_t days = (uint32_t) totalSeconds;
|
|
|
|
if (days > 0)
|
|
{
|
|
ffStrbufAppendUInt(result, days);
|
|
if (spaceBeforeUnit) ffStrbufAppendC(result, ' ');
|
|
if (options->durationAbbreviation)
|
|
{
|
|
ffStrbufAppendC(result, 'd');
|
|
|
|
if (hours > 0 || minutes > 0)
|
|
ffStrbufAppendC(result, ' ');
|
|
}
|
|
else
|
|
{
|
|
ffStrbufAppendS(result, days == 1 ? "day" : "days");
|
|
|
|
if (days >= 100)
|
|
ffStrbufAppendS(result, "(!)");
|
|
|
|
if (hours > 0 || minutes > 0)
|
|
ffStrbufAppendS(result, ", ");
|
|
}
|
|
}
|
|
|
|
if (hours > 0)
|
|
{
|
|
ffStrbufAppendUInt(result, hours);
|
|
if (spaceBeforeUnit) ffStrbufAppendC(result, ' ');
|
|
if (options->durationAbbreviation)
|
|
{
|
|
ffStrbufAppendC(result, 'h');
|
|
|
|
if (minutes > 0)
|
|
ffStrbufAppendC(result, ' ');
|
|
}
|
|
else
|
|
{
|
|
ffStrbufAppendS(result, hours == 1 ? "hour" : "hours");
|
|
|
|
if (minutes > 0)
|
|
ffStrbufAppendS(result, ", ");
|
|
}
|
|
}
|
|
|
|
if (minutes > 0)
|
|
{
|
|
ffStrbufAppendUInt(result, minutes);
|
|
if (spaceBeforeUnit) ffStrbufAppendC(result, ' ');
|
|
if (options->durationAbbreviation)
|
|
ffStrbufAppendC(result, 'm');
|
|
else
|
|
ffStrbufAppendS(result, minutes == 1 ? "min" : "mins");
|
|
}
|
|
}
|