#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"); } }