Migration (Display): support display options

This commit is contained in:
李通洲 2023-10-26 11:02:08 +08:00
parent 399e2235d4
commit 6c82686283
No known key found for this signature in database
GPG Key ID: 269AD4F5325A22A3
4 changed files with 142 additions and 6 deletions

View File

@ -344,10 +344,19 @@
"binaryPrefix": {
"type": "string",
"title": "Set the binary prefix to used when printing bytes",
"enum": [
"iec",
"si",
"jedec"
"oneOf": [
{
"const": "iec",
"description": "1024 Bytes = 1 KiB, 1024 KiB = 1 MiB, ... (standard)"
},
{
"const": "si",
"description": "1000 Bytes = 1 KB, 1000 KB = 1 MB, ..."
},
{
"const": "jedec",
"description": "1024 Bytes = 1 kB, 1024 K = 1 MB, ..."
}
]
},
"sizeNdigits": {
@ -602,10 +611,10 @@
"oneOf": [
{
"title": "Break",
"description": "Print a empty line",
"properties": {
"type": {
"const": "break"
"const": "break",
"description": "Print a empty line"
}
},
"additionalProperties": false

View File

@ -652,6 +652,7 @@ static void run(FFdata* data)
static void migrateConfig(FFdata* data)
{
ffOptionsGenerateLogoJsonConfig(&instance.config.logo, instance.state.migrateConfigDoc);
ffOptionsGenerateDisplayJsonConfig(&instance.config.display, instance.state.migrateConfigDoc);
ffMigrateCommandOptionToJsonc(data);
}

View File

@ -296,3 +296,128 @@ void ffOptionsDestroyDisplay(FFOptionsDisplay* options)
ffStrbufDestroy(&options->barCharElapsed);
ffStrbufDestroy(&options->barCharTotal);
}
void ffOptionsGenerateDisplayJsonConfig(FFOptionsDisplay* options, yyjson_mut_doc* doc)
{
__attribute__((__cleanup__(ffOptionsDestroyDisplay))) FFOptionsDisplay defaultOptions;
ffOptionsInitDisplay(&defaultOptions);
yyjson_mut_val* obj = yyjson_mut_obj(doc);
if (options->stat != defaultOptions.stat)
yyjson_mut_obj_add_bool(doc, obj, "stat", options->stat);
if (options->pipe != defaultOptions.pipe)
yyjson_mut_obj_add_bool(doc, obj, "pipe", options->pipe);
if (options->showErrors != defaultOptions.showErrors)
yyjson_mut_obj_add_bool(doc, obj, "showErrors", options->showErrors);
if (options->disableLinewrap != defaultOptions.disableLinewrap)
yyjson_mut_obj_add_bool(doc, obj, "disableLinewrap", options->disableLinewrap);
if (options->hideCursor != defaultOptions.hideCursor)
yyjson_mut_obj_add_bool(doc, obj, "hideCursor", options->hideCursor);
if (!ffStrbufEqual(&options->keyValueSeparator, &defaultOptions.keyValueSeparator))
yyjson_mut_obj_add_strbuf(doc, obj, "separator", &options->keyValueSeparator);
{
yyjson_mut_val* color = yyjson_mut_obj(doc);
if (!ffStrbufEqual(&options->colorKeys, &defaultOptions.colorKeys))
yyjson_mut_obj_add_strbuf(doc, color, "keys", &options->colorKeys);
if (!ffStrbufEqual(&options->colorTitle, &defaultOptions.colorTitle))
yyjson_mut_obj_add_strbuf(doc, color, "title", &options->colorTitle);
if (yyjson_mut_obj_size(color) > 0)
{
if (yyjson_mut_obj_size(color) == 2 && ffStrbufEqual(&options->colorKeys, &options->colorTitle))
yyjson_mut_obj_add_strbuf(doc, obj, "color", &options->colorKeys);
else
yyjson_mut_obj_add_val(doc, obj, "color", color);
}
}
if (options->brightColor != defaultOptions.brightColor)
yyjson_mut_obj_add_bool(doc, obj, "brightColor", options->brightColor);
if (options->binaryPrefixType != defaultOptions.binaryPrefixType)
{
switch (options->binaryPrefixType)
{
case FF_BINARY_PREFIX_TYPE_IEC:
yyjson_mut_obj_add_str(doc, obj, "binaryPrefix", "iec");
break;
case FF_BINARY_PREFIX_TYPE_SI:
yyjson_mut_obj_add_str(doc, obj, "binaryPrefix", "si");
break;
case FF_BINARY_PREFIX_TYPE_JEDEC:
yyjson_mut_obj_add_str(doc, obj, "binaryPrefix", "jedec");
break;
}
}
if (options->sizeNdigits != defaultOptions.sizeNdigits)
yyjson_mut_obj_add_uint(doc, obj, "sizeNdigits", options->sizeNdigits);
if (options->sizeMaxPrefix != defaultOptions.sizeMaxPrefix && options->sizeMaxPrefix <= 8)
{
yyjson_mut_obj_add_str(doc, obj, "sizeMaxPrefix", ((const char* []) {
"B",
"kB",
"MB",
"GB",
"TB",
"PB",
"EB",
"ZB",
"YB",
})[options->sizeMaxPrefix]);
}
if (options->temperatureUnit != defaultOptions.temperatureUnit)
{
switch (options->temperatureUnit)
{
case FF_TEMPERATURE_UNIT_CELSIUS:
yyjson_mut_obj_add_str(doc, obj, "temperatureUnit", "C");
break;
case FF_TEMPERATURE_UNIT_FAHRENHEIT:
yyjson_mut_obj_add_str(doc, obj, "temperatureUnit", "F");
break;
case FF_TEMPERATURE_UNIT_KELVIN:
yyjson_mut_obj_add_str(doc, obj, "temperatureUnit", "K");
break;
}
}
if (options->percentType != defaultOptions.percentType)
yyjson_mut_obj_add_uint(doc, obj, "percentType", options->percentType);
if (options->percentNdigits != defaultOptions.percentNdigits)
yyjson_mut_obj_add_uint(doc, obj, "percentNdigits", options->percentNdigits);
{
yyjson_mut_val* bar = yyjson_mut_obj(doc);
if (!ffStrbufEqual(&options->barCharElapsed, &defaultOptions.barCharElapsed))
yyjson_mut_obj_add_strbuf(doc, bar, "charElapsed", &options->barCharElapsed);
if (!ffStrbufEqual(&options->barCharTotal, &defaultOptions.barCharTotal))
yyjson_mut_obj_add_strbuf(doc, bar, "charTotal", &options->barCharTotal);
if (options->barBorder != defaultOptions.barBorder)
yyjson_mut_obj_add_bool(doc, bar, "border", options->barBorder);
if (options->barWidth != defaultOptions.barWidth)
yyjson_mut_obj_add_uint(doc, bar, "width", options->barWidth);
if (yyjson_mut_obj_size(bar) > 0)
yyjson_mut_obj_add_val(doc, obj, "bar", bar);
}
if (options->noBuffer != defaultOptions.noBuffer)
yyjson_mut_obj_add_bool(doc, obj, "noBuffer", options->noBuffer);
if (options->keyWidth != defaultOptions.keyWidth)
yyjson_mut_obj_add_uint(doc, obj, "keyWidth", options->keyWidth);
if (yyjson_mut_obj_size(obj) > 0)
yyjson_mut_obj_add_val(doc, doc->root, "display", obj);
}

View File

@ -49,3 +49,4 @@ const char* ffOptionsParseDisplayJsonConfig(FFOptionsDisplay* options, yyjson_va
bool ffOptionsParseDisplayCommandLine(FFOptionsDisplay* options, const char* key, const char* value);
void ffOptionsInitDisplay(FFOptionsDisplay* options);
void ffOptionsDestroyDisplay(FFOptionsDisplay* options);
void ffOptionsGenerateDisplayJsonConfig(FFOptionsDisplay* options, yyjson_mut_doc* doc);