Uptime: fix non-normalized time being shown

Fix #1720
This commit is contained in:
李通洲
2025-04-29 10:20:23 +08:00
parent 3b36b8ca57
commit 5d960ec744
6 changed files with 117 additions and 33 deletions
+15 -8
View File
@@ -190,19 +190,26 @@ void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, co
}
}
void ffParseDuration(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds, FFstrbuf* result)
void ffParseDuration(uint64_t totalSeconds, FFstrbuf* result)
{
if(days == 0 && hours == 0 && minutes == 0)
if(totalSeconds < 60)
{
ffStrbufAppendF(result, "%u seconds", seconds);
ffStrbufAppendF(result, "%u second", (unsigned) totalSeconds);
if (totalSeconds != 1)
ffStrbufAppendC(result, 's');
return;
}
if(seconds >= 30)
{
minutes++;
seconds = 0;
}
uint32_t seconds = totalSeconds % 60;
totalSeconds /= 60;
if (seconds >= 30)
totalSeconds++;
uint32_t minutes = totalSeconds % 60;
totalSeconds /= 60;
uint32_t hours = totalSeconds % 24;
totalSeconds /= 24;
uint32_t days = (uint32_t) totalSeconds;
if(days > 0)
{
+1 -1
View File
@@ -27,4 +27,4 @@ int8_t ffVersionCompare(const FFVersion* version1, const FFVersion* version2);
void ffParseSize(uint64_t bytes, FFstrbuf* result);
bool ffParseFrequency(uint32_t mhz, FFstrbuf* result);
void ffParseDuration(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds, FFstrbuf* result);
void ffParseDuration(uint64_t totalSeconds, FFstrbuf* result);
+10 -12
View File
@@ -27,17 +27,6 @@ static void printBattery(FFBatteryOptions* options, FFBatteryResult* result, uin
}));
}
uint32_t timeRemaining = result->timeRemaining < 0 ? 0 : (uint32_t) result->timeRemaining;
uint32_t seconds = timeRemaining % 60;
timeRemaining /= 60;
uint32_t minutes = timeRemaining % 60;
timeRemaining /= 60;
uint32_t hours = timeRemaining % 24;
timeRemaining /= 24;
uint32_t days = timeRemaining;
FFPercentageTypeFlags percentType = options->percent.type == 0 ? instance.config.display.percentType : options->percent.type;
if(options->moduleArgs.outputFormat.length == 0)
@@ -70,7 +59,7 @@ static void printBattery(FFBatteryOptions* options, FFBatteryResult* result, uin
if(str.length > 0)
ffStrbufAppendS(&str, " (");
ffParseDuration(days, hours, minutes, seconds, &str);
ffParseDuration((uint32_t) result->timeRemaining, &str);
ffStrbufAppendS(&str, " remaining)");
}
}
@@ -95,6 +84,15 @@ static void printBattery(FFBatteryOptions* options, FFBatteryResult* result, uin
}
else
{
uint32_t timeRemaining = result->timeRemaining < 0 ? 0 : (uint32_t) result->timeRemaining;
uint32_t seconds = timeRemaining % 60;
timeRemaining /= 60;
uint32_t minutes = timeRemaining % 60;
timeRemaining /= 60;
uint32_t hours = timeRemaining % 24;
timeRemaining /= 24;
uint32_t days = timeRemaining;
FF_STRBUF_AUTO_DESTROY capacityNum = ffStrbufCreate();
if(percentType & FF_PERCENTAGE_TYPE_NUM_BIT)
ffPercentAppendNum(&capacityNum, result->capacity, options->percent, false, &options->moduleArgs);
+12 -12
View File
@@ -7,7 +7,7 @@
void ffPrintUptime(FFUptimeOptions* options)
{
FFUptimeResult result;
FFUptimeResult result = {};
const char* error = ffDetectUptime(&result);
@@ -19,26 +19,26 @@ void ffPrintUptime(FFUptimeOptions* options)
uint64_t uptime = result.uptime;
uint32_t milliseconds = (uint32_t) (uptime % 1000);
uptime /= 1000;
uint32_t seconds = (uint32_t) (uptime % 60);
uptime /= 60;
uint32_t minutes = (uint32_t) (uptime % 60);
uptime /= 60;
uint32_t hours = (uint32_t) (uptime % 24);
uptime /= 24;
uint32_t days = (uint32_t) uptime;
if(options->moduleArgs.outputFormat.length == 0)
{
ffPrintLogoAndKey(FF_UPTIME_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT);
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
ffParseDuration(days, hours, minutes, seconds, &buffer);
ffParseDuration((uptime + 500) / 1000, &buffer);
ffStrbufPutTo(&buffer, stdout);
}
else
{
uint32_t milliseconds = (uint32_t) (uptime % 1000);
uptime /= 1000;
uint32_t seconds = (uint32_t) (uptime % 60);
uptime /= 60;
uint32_t minutes = (uint32_t) (uptime % 60);
uptime /= 60;
uint32_t hours = (uint32_t) (uptime % 24);
uptime /= 24;
uint32_t days = (uint32_t) uptime;
FF_PRINT_FORMAT_CHECKED(FF_UPTIME_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, ((FFformatarg[]){
FF_FORMAT_ARG(days, "days"),
FF_FORMAT_ARG(hours, "hours"),