1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#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");
}
}
}
|