JsonConfig: write all flags when generating config file

This commit is contained in:
李通洲
2025-08-04 16:46:28 +08:00
parent e753d4d3a4
commit fa4e11c73b
83 changed files with 700 additions and 932 deletions
+233 -166
View File
@@ -343,7 +343,16 @@ const char* ffOptionsParseDisplayJsonConfig(FFOptionsDisplay* options, yyjson_va
if (!yyjson_is_obj(color)) return "display.bar.color must be an object";
yyjson_val* colorElapsed = yyjson_obj_get(color, "elapsed");
if (colorElapsed) ffOptionParseColor(yyjson_get_str(colorElapsed), &options->barColorElapsed);
if (colorElapsed)
{
const char* value = yyjson_get_str(colorElapsed);
if (!value)
ffStrbufClear(&options->barColorElapsed);
else if (ffStrEqualsIgnCase(value, "auto"))
ffStrbufSetStatic(&options->barColorElapsed, "auto");
else
ffOptionParseColor(value, &options->barColorElapsed);
}
yyjson_val* colorTotal = yyjson_obj_get(color, "total");
if (colorTotal) ffOptionParseColor(yyjson_get_str(colorTotal), &options->barColorTotal);
@@ -700,7 +709,14 @@ bool ffOptionsParseDisplayCommandLine(FFOptionsDisplay* options, const char* key
else if(ffStrEqualsIgnCase(subkey, "border-right-elapsed"))
ffOptionParseString(key, value, &options->barBorderRightElapsed);
else if(ffStrEqualsIgnCase(subkey, "color-elapsed"))
ffOptionParseColor(value, &options->barColorElapsed);
{
if (!value)
ffStrbufClear(&options->barColorElapsed);
else if (ffStrEqualsIgnCase(value, "auto"))
ffStrbufSetStatic(&options->barColorElapsed, "auto");
else
ffOptionParseColor(value, &options->barColorElapsed);
}
else if(ffStrEqualsIgnCase(subkey, "color-total"))
ffOptionParseColor(value, &options->barColorTotal);
else if(ffStrEqualsIgnCase(subkey, "color-border"))
@@ -813,188 +829,239 @@ void ffOptionsDestroyDisplay(FFOptionsDisplay* options)
void ffOptionsGenerateDisplayJsonConfig(FFOptionsDisplay* options, yyjson_mut_doc* doc)
{
__attribute__((__cleanup__(ffOptionsDestroyDisplay))) FFOptionsDisplay defaultOptions;
ffOptionsInitDisplay(&defaultOptions);
yyjson_mut_val* obj = yyjson_mut_obj_add_obj(doc, doc->root, "display");
yyjson_mut_val* obj = yyjson_mut_obj(doc);
if (options->stat <= 0)
yyjson_mut_obj_add_bool(doc, obj, "stat", options->stat == 0);
else
yyjson_mut_obj_add_int(doc, obj, "stat", options->stat);
yyjson_mut_obj_add_bool(doc, obj, "pipe", options->pipe);
yyjson_mut_obj_add_bool(doc, obj, "showErrors", options->showErrors);
yyjson_mut_obj_add_bool(doc, obj, "disableLinewrap", options->disableLinewrap);
yyjson_mut_obj_add_bool(doc, obj, "hideCursor", options->hideCursor);
yyjson_mut_obj_add_strbuf(doc, obj, "separator", &options->keyValueSeparator);
if (options->stat != defaultOptions.stat)
{
if (options->stat <= 0)
yyjson_mut_obj_add_bool(doc, obj, "stat", options->stat == 0);
yyjson_mut_val* color = yyjson_mut_obj_add_obj(doc, obj, "color");
yyjson_mut_obj_add_strbuf(doc, color, "keys", &options->colorKeys);
yyjson_mut_obj_add_strbuf(doc, color, "title", &options->colorTitle);
yyjson_mut_obj_add_strbuf(doc, color, "output", &options->colorOutput);
yyjson_mut_obj_add_strbuf(doc, color, "separator", &options->colorSeparator);
}
yyjson_mut_obj_add_bool(doc, obj, "brightColor", options->brightColor);
{
yyjson_mut_val* duration = yyjson_mut_obj_add_obj(doc, obj, "duration");
yyjson_mut_obj_add_bool(doc, duration, "abbreviation", options->durationAbbreviation);
switch (options->durationSpaceBeforeUnit)
{
case FF_SPACE_BEFORE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, duration, "spaceBeforeUnit", "default");
break;
case FF_SPACE_BEFORE_UNIT_ALWAYS:
yyjson_mut_obj_add_str(doc, duration, "spaceBeforeUnit", "always");
break;
case FF_SPACE_BEFORE_UNIT_NEVER:
yyjson_mut_obj_add_str(doc, duration, "spaceBeforeUnit", "never");
break;
}
}
{
yyjson_mut_val* size = yyjson_mut_obj_add_obj(doc, obj, "size");
yyjson_mut_obj_add_str(doc, size, "maxPrefix", ((const char* []) {
"B",
"kB",
"MB",
"GB",
"TB",
"PB",
"EB",
"ZB",
"YB",
})[options->sizeMaxPrefix]);
switch (options->sizeBinaryPrefix)
{
case FF_SIZE_BINARY_PREFIX_TYPE_IEC:
yyjson_mut_obj_add_str(doc, size, "binaryPrefix", "iec");
break;
case FF_SIZE_BINARY_PREFIX_TYPE_SI:
yyjson_mut_obj_add_str(doc, size, "binaryPrefix", "si");
break;
case FF_SIZE_BINARY_PREFIX_TYPE_JEDEC:
yyjson_mut_obj_add_str(doc, size, "binaryPrefix", "jedec");
break;
}
yyjson_mut_obj_add_uint(doc, size, "ndigits", options->sizeNdigits);
switch (options->sizeSpaceBeforeUnit)
{
case FF_SPACE_BEFORE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, size, "spaceBeforeUnit", "default");
break;
case FF_SPACE_BEFORE_UNIT_ALWAYS:
yyjson_mut_obj_add_str(doc, size, "spaceBeforeUnit", "always");
break;
case FF_SPACE_BEFORE_UNIT_NEVER:
yyjson_mut_obj_add_str(doc, size, "spaceBeforeUnit", "never");
break;
}
}
{
yyjson_mut_val* temperature = yyjson_mut_obj_add_obj(doc, obj, "temp");
switch (options->tempUnit)
{
case FF_TEMPERATURE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, temperature, "unit", "D");
break;
case FF_TEMPERATURE_UNIT_CELSIUS:
yyjson_mut_obj_add_str(doc, obj, "unit", "C");
break;
case FF_TEMPERATURE_UNIT_FAHRENHEIT:
yyjson_mut_obj_add_str(doc, obj, "unit", "F");
break;
case FF_TEMPERATURE_UNIT_KELVIN:
yyjson_mut_obj_add_str(doc, obj, "unit", "K");
break;
}
yyjson_mut_obj_add_uint(doc, temperature, "ndigits", options->tempNdigits);
{
yyjson_mut_val* color = yyjson_mut_obj_add_obj(doc, temperature, "color");
yyjson_mut_obj_add_strbuf(doc, color, "green", &options->tempColorGreen);
yyjson_mut_obj_add_strbuf(doc, color, "yellow", &options->tempColorYellow);
yyjson_mut_obj_add_strbuf(doc, color, "red", &options->tempColorRed);
}
switch (options->tempSpaceBeforeUnit)
{
case FF_SPACE_BEFORE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, temperature, "spaceBeforeUnit", "default");
break;
case FF_SPACE_BEFORE_UNIT_ALWAYS:
yyjson_mut_obj_add_str(doc, temperature, "spaceBeforeUnit", "always");
break;
case FF_SPACE_BEFORE_UNIT_NEVER:
yyjson_mut_obj_add_str(doc, temperature, "spaceBeforeUnit", "never");
break;
}
}
{
yyjson_mut_val* percent = yyjson_mut_obj_add_obj(doc, obj, "percent");
{
yyjson_mut_val* type = yyjson_mut_obj_add_arr(doc, percent, "type");
if (options->percentType & FF_PERCENTAGE_TYPE_NUM_BIT)
yyjson_mut_arr_add_str(doc, type, "num");
if (options->percentType & FF_PERCENTAGE_TYPE_BAR_BIT)
yyjson_mut_arr_add_str(doc, type, "var");
if (options->percentType & FF_PERCENTAGE_TYPE_HIDE_OTHERS_BIT)
yyjson_mut_arr_add_str(doc, type, "hide-others");
if (options->percentType & FF_PERCENTAGE_TYPE_NUM_COLOR_BIT)
yyjson_mut_arr_add_str(doc, type, "num-color");
if (options->percentType & FF_PERCENTAGE_TYPE_BAR_MONOCHROME_BIT)
yyjson_mut_arr_add_str(doc, type, "bar-monochrome");
}
yyjson_mut_obj_add_uint(doc, percent, "ndigits", options->percentNdigits);
{
yyjson_mut_val* color = yyjson_mut_obj_add_obj(doc, percent, "color");
yyjson_mut_obj_add_strbuf(doc, color, "green", &options->percentColorGreen);
yyjson_mut_obj_add_strbuf(doc, color, "yellow", &options->percentColorYellow);
yyjson_mut_obj_add_strbuf(doc, color, "red", &options->percentColorRed);
}
switch (options->percentSpaceBeforeUnit)
{
case FF_SPACE_BEFORE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, percent, "spaceBeforeUnit", "default");
break;
case FF_SPACE_BEFORE_UNIT_ALWAYS:
yyjson_mut_obj_add_str(doc, percent, "spaceBeforeUnit", "always");
break;
case FF_SPACE_BEFORE_UNIT_NEVER:
yyjson_mut_obj_add_str(doc, percent, "spaceBeforeUnit", "never");
break;
}
yyjson_mut_obj_add_uint(doc, percent, "width", options->percentWidth);
}
{
yyjson_mut_val* bar = yyjson_mut_obj_add_obj(doc, obj, "bar");
yyjson_mut_val* char_ = yyjson_mut_obj_add_obj(doc, bar, "char");
yyjson_mut_obj_add_strbuf(doc, char_, "elapsed", &options->barCharElapsed);
yyjson_mut_obj_add_strbuf(doc, char_, "total", &options->barCharTotal);
yyjson_mut_val* border = yyjson_mut_obj_add_obj(doc, bar, "border");
yyjson_mut_obj_add_strbuf(doc, border, "left", &options->barBorderLeft);
yyjson_mut_obj_add_strbuf(doc, border, "right", &options->barBorderRight);
yyjson_mut_obj_add_strbuf(doc, border, "leftElapsed", &options->barBorderLeftElapsed);
yyjson_mut_obj_add_strbuf(doc, border, "rightElapsed", &options->barBorderRightElapsed);
yyjson_mut_val* color = yyjson_mut_obj_add_obj(doc, bar, "color");
yyjson_mut_obj_add_strbuf(doc, color, "elapsed", &options->barColorElapsed);
yyjson_mut_obj_add_strbuf(doc, color, "total", &options->barColorTotal);
yyjson_mut_obj_add_strbuf(doc, color, "border", &options->barColorBorder);
yyjson_mut_obj_add_uint(doc, bar, "width", options->barWidth);
}
{
yyjson_mut_val* fraction = yyjson_mut_obj_add_obj(doc, obj, "fraction");
if (options->fractionNdigits < 0)
yyjson_mut_obj_add_null(doc, fraction, "ndigits");
else
yyjson_mut_obj_add_int(doc, obj, "stat", options->stat);
yyjson_mut_obj_add_uint(doc, fraction, "ndigits", (uint8_t) options->fractionNdigits);
}
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_obj_add_bool(doc, obj, "noBuffer", options->noBuffer);
{
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 (!ffStrbufEqual(&options->colorOutput, &defaultOptions.colorOutput))
yyjson_mut_obj_add_strbuf(doc, color, "output", &options->colorOutput);
if (!ffStrbufEqual(&options->colorSeparator, &defaultOptions.colorSeparator))
yyjson_mut_obj_add_strbuf(doc, color, "separator", &options->colorSeparator);
if (yyjson_mut_obj_size(color) > 0)
yyjson_mut_val* key = yyjson_mut_obj_add_obj(doc, obj, "key");
yyjson_mut_obj_add_uint(doc, key, "width", options->keyWidth);
switch ((uint8_t) options->keyType)
{
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);
case FF_MODULE_KEY_TYPE_NONE:
yyjson_mut_obj_add_str(doc, key, "type", "none");
break;
case FF_MODULE_KEY_TYPE_STRING:
yyjson_mut_obj_add_str(doc, key, "type", "string");
break;
case FF_MODULE_KEY_TYPE_ICON:
yyjson_mut_obj_add_str(doc, key, "type", "icon");
break;
case FF_MODULE_KEY_TYPE_BOTH:
yyjson_mut_obj_add_str(doc, key, "type", "both");
break;
}
}
if (options->brightColor != defaultOptions.brightColor)
yyjson_mut_obj_add_bool(doc, obj, "brightColor", options->brightColor);
{
yyjson_mut_val* size = yyjson_mut_obj(doc);
if (options->sizeNdigits != defaultOptions.sizeNdigits)
yyjson_mut_obj_add_uint(doc, size, "ndigits", options->sizeNdigits);
if (options->sizeMaxPrefix != defaultOptions.sizeMaxPrefix && options->sizeMaxPrefix <= 8)
{
yyjson_mut_obj_add_str(doc, size, "maxPrefix", ((const char* []) {
"B",
"kB",
"MB",
"GB",
"TB",
"PB",
"EB",
"ZB",
"YB",
})[options->sizeMaxPrefix]);
}
if (options->sizeBinaryPrefix != defaultOptions.sizeBinaryPrefix)
{
switch (options->sizeBinaryPrefix)
{
case FF_SIZE_BINARY_PREFIX_TYPE_IEC:
yyjson_mut_obj_add_str(doc, size, "binaryPrefix", "iec");
break;
case FF_SIZE_BINARY_PREFIX_TYPE_SI:
yyjson_mut_obj_add_str(doc, size, "binaryPrefix", "si");
break;
case FF_SIZE_BINARY_PREFIX_TYPE_JEDEC:
yyjson_mut_obj_add_str(doc, size, "binaryPrefix", "jedec");
break;
}
}
if (yyjson_mut_obj_size(size) > 0)
yyjson_mut_obj_add_val(doc, obj, "size", size);
yyjson_mut_obj_add_uint(doc, key, "paddingLeft", options->keyPaddingLeft);
}
{
yyjson_mut_val* temperature = yyjson_mut_obj(doc);
if (options->tempUnit != defaultOptions.tempUnit)
yyjson_mut_val* freq = yyjson_mut_obj_add_obj(doc, obj, "freq");
yyjson_mut_obj_add_int(doc, freq, "ndigits", options->freqNdigits);
switch (options->percentSpaceBeforeUnit)
{
switch (options->tempUnit)
{
case FF_TEMPERATURE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, temperature, "unit", "DEFAULT");
break;
case FF_TEMPERATURE_UNIT_CELSIUS:
yyjson_mut_obj_add_str(doc, obj, "unit", "C");
break;
case FF_TEMPERATURE_UNIT_FAHRENHEIT:
yyjson_mut_obj_add_str(doc, obj, "unit", "F");
break;
case FF_TEMPERATURE_UNIT_KELVIN:
yyjson_mut_obj_add_str(doc, obj, "unit", "K");
break;
}
case FF_SPACE_BEFORE_UNIT_DEFAULT:
yyjson_mut_obj_add_str(doc, freq, "spaceBeforeUnit", "default");
break;
case FF_SPACE_BEFORE_UNIT_ALWAYS:
yyjson_mut_obj_add_str(doc, freq, "spaceBeforeUnit", "always");
break;
case FF_SPACE_BEFORE_UNIT_NEVER:
yyjson_mut_obj_add_str(doc, freq, "spaceBeforeUnit", "never");
break;
}
if (options->tempNdigits != defaultOptions.tempNdigits)
yyjson_mut_obj_add_uint(doc, temperature, "ndigits", options->tempNdigits);
{
yyjson_mut_val* color = yyjson_mut_obj(doc);
if (!ffStrbufEqual(&options->tempColorGreen, &defaultOptions.tempColorGreen))
yyjson_mut_obj_add_strbuf(doc, color, "green", &options->tempColorGreen);
if (!ffStrbufEqual(&options->tempColorYellow, &defaultOptions.tempColorYellow))
yyjson_mut_obj_add_strbuf(doc, color, "yellow", &options->tempColorYellow);
if (!ffStrbufEqual(&options->tempColorRed, &defaultOptions.tempColorRed))
yyjson_mut_obj_add_strbuf(doc, color, "red", &options->tempColorRed);
if (yyjson_mut_obj_size(color) > 0)
yyjson_mut_obj_add_val(doc, temperature, "color", color);
}
if (yyjson_mut_obj_size(temperature) > 0)
yyjson_mut_obj_add_val(doc, obj, "temp", temperature);
}
{
yyjson_mut_val* percent = yyjson_mut_obj(doc);
if (options->percentType != defaultOptions.percentType)
yyjson_mut_obj_add_uint(doc, percent, "type", options->percentType);
if (options->percentNdigits != defaultOptions.percentNdigits)
yyjson_mut_obj_add_uint(doc, percent, "ndigits", options->percentNdigits);
{
yyjson_mut_val* color = yyjson_mut_obj(doc);
if (!ffStrbufEqual(&options->percentColorGreen, &defaultOptions.percentColorGreen))
yyjson_mut_obj_add_strbuf(doc, color, "green", &options->percentColorGreen);
if (!ffStrbufEqual(&options->percentColorYellow, &defaultOptions.percentColorYellow))
yyjson_mut_obj_add_strbuf(doc, color, "yellow", &options->percentColorYellow);
if (!ffStrbufEqual(&options->percentColorRed, &defaultOptions.percentColorRed))
yyjson_mut_obj_add_strbuf(doc, color, "red", &options->percentColorRed);
if (yyjson_mut_obj_size(color) > 0)
yyjson_mut_obj_add_val(doc, percent, "color", color);
}
if (yyjson_mut_obj_size(percent) > 0)
yyjson_mut_obj_add_val(doc, obj, "percent", percent);
yyjson_mut_val* constants = yyjson_mut_obj_add_arr(doc, obj, "constants");
FF_LIST_FOR_EACH(FFstrbuf, item, options->constants)
yyjson_mut_arr_add_strbuf(doc, constants, item);
}
{
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 (!ffStrbufEqual(&options->barBorderLeft, &defaultOptions.barBorderLeft))
yyjson_mut_obj_add_strbuf(doc, bar, "borderLeft", &options->barBorderLeft);
if (!ffStrbufEqual(&options->barBorderRight, &defaultOptions.barBorderRight))
yyjson_mut_obj_add_strbuf(doc, bar, "borderRight", &options->barBorderRight);
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 (options->keyType != defaultOptions.keyType)
yyjson_mut_obj_add_uint(doc, obj, "keyType", options->keyType);
if (options->keyPaddingLeft != defaultOptions.keyPaddingLeft)
yyjson_mut_obj_add_uint(doc, obj, "keyPaddingLeft", options->keyPaddingLeft);
{
yyjson_mut_val* freq = yyjson_mut_obj(doc);
if (options->freqNdigits != defaultOptions.freqNdigits)
yyjson_mut_obj_add_int(doc, freq, "ndigits", options->freqNdigits);
if (yyjson_mut_obj_size(freq) > 0)
yyjson_mut_obj_add_val(doc, obj, "freq", freq);
}
if (yyjson_mut_obj_size(obj) > 0)
yyjson_mut_obj_add_val(doc, doc->root, "display", obj);
}
+15 -28
View File
@@ -121,45 +121,32 @@ void ffOptionsDestroyGeneral(FF_MAYBE_UNUSED FFOptionsGeneral* options)
void ffOptionsGenerateGeneralJsonConfig(FFOptionsGeneral* options, yyjson_mut_doc* doc)
{
__attribute__((__cleanup__(ffOptionsDestroyGeneral))) FFOptionsGeneral defaultOptions;
ffOptionsInitGeneral(&defaultOptions);
yyjson_mut_val* obj = yyjson_mut_obj_add_obj(doc, doc->root, "general");
yyjson_mut_val* obj = yyjson_mut_obj(doc);
yyjson_mut_obj_add_bool(doc, obj, "thread", options->multithreading);
if (options->multithreading != defaultOptions.multithreading)
yyjson_mut_obj_add_bool(doc, obj, "thread", options->multithreading);
if (options->processingTimeout != defaultOptions.processingTimeout)
yyjson_mut_obj_add_int(doc, obj, "processingTimeout", options->processingTimeout);
yyjson_mut_obj_add_int(doc, obj, "processingTimeout", options->processingTimeout);
#if defined(__linux__) || defined(__FreeBSD__) || defined(__sun) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__)
if (!ffStrbufEqual(&options->playerName, &defaultOptions.playerName))
yyjson_mut_obj_add_strbuf(doc, obj, "playerName", &options->playerName);
yyjson_mut_obj_add_strbuf(doc, obj, "playerName", &options->playerName);
if (options->dsForceDrm != defaultOptions.dsForceDrm)
switch (options->dsForceDrm)
{
switch (options->dsForceDrm)
{
case FF_DS_FORCE_DRM_TYPE_FALSE:
yyjson_mut_obj_add_bool(doc, obj, "dsForceDrm", false);
break;
case FF_DS_FORCE_DRM_TYPE_SYSFS_ONLY:
yyjson_mut_obj_add_str(doc, obj, "dsForceDrm", "sysfs-only");
break;
case FF_DS_FORCE_DRM_TYPE_TRUE:
yyjson_mut_obj_add_bool(doc, obj, "dsForceDrm", true);
break;
}
case FF_DS_FORCE_DRM_TYPE_FALSE:
yyjson_mut_obj_add_bool(doc, obj, "dsForceDrm", false);
break;
case FF_DS_FORCE_DRM_TYPE_SYSFS_ONLY:
yyjson_mut_obj_add_str(doc, obj, "dsForceDrm", "sysfs-only");
break;
case FF_DS_FORCE_DRM_TYPE_TRUE:
yyjson_mut_obj_add_bool(doc, obj, "dsForceDrm", true);
break;
}
#elif defined(_WIN32)
if (options->wmiTimeout != defaultOptions.wmiTimeout)
yyjson_mut_obj_add_int(doc, obj, "wmiTimeout", options->wmiTimeout);
yyjson_mut_obj_add_int(doc, obj, "wmiTimeout", options->wmiTimeout);
#endif
if (yyjson_mut_obj_size(obj) > 0)
yyjson_mut_obj_add_val(doc, doc->root, "general", obj);
}
+96 -103
View File
@@ -327,18 +327,28 @@ const char* ffOptionsParseLogoJsonConfig(FFOptionsLogo* options, yyjson_val* roo
}
else if (ffStrEqualsIgnCase(key, "width"))
{
uint32_t value = (uint32_t) yyjson_get_uint(val);
if (value == 0)
return "Logo width must be a positive integer";
options->width = value;
if (yyjson_is_null(val))
options->width = 0;
else
{
uint32_t value = (uint32_t) yyjson_get_uint(val);
if (value == 0)
return "Logo width must be a positive integer";
options->width = value;
}
continue;
}
else if (ffStrEqualsIgnCase(key, "height"))
{
uint32_t value = (uint32_t) yyjson_get_uint(val);
if (value == 0)
return "Logo height must be a positive integer";
options->height = value;
if (yyjson_is_null(val))
options->height = 0;
else
{
uint32_t value = (uint32_t) yyjson_get_uint(val);
if (value == 0)
return "Logo height must be a positive integer";
options->height = value;
}
continue;
}
else if (ffStrEqualsIgnCase(key, "padding"))
@@ -463,121 +473,106 @@ const char* ffOptionsParseLogoJsonConfig(FFOptionsLogo* options, yyjson_val* roo
void ffOptionsGenerateLogoJsonConfig(FFOptionsLogo* options, yyjson_mut_doc* doc)
{
__attribute__((__cleanup__(ffOptionsDestroyLogo))) FFOptionsLogo defaultOptions;
ffOptionsInitLogo(&defaultOptions);
yyjson_mut_val* obj = yyjson_mut_obj(doc);
if (options->type != defaultOptions.type)
switch (options->type)
{
switch (options->type)
{
case FF_LOGO_TYPE_NONE:
yyjson_mut_obj_add_null(doc, doc->root, "logo");
return;
case FF_LOGO_TYPE_BUILTIN:
yyjson_mut_obj_add_str(doc, obj, "type", "builtin");
break;
case FF_LOGO_TYPE_SMALL:
yyjson_mut_obj_add_str(doc, obj, "type", "small");
break;
case FF_LOGO_TYPE_FILE:
yyjson_mut_obj_add_str(doc, obj, "type", "file");
break;
case FF_LOGO_TYPE_FILE_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "file-raw");
break;
case FF_LOGO_TYPE_DATA:
yyjson_mut_obj_add_str(doc, obj, "type", "data");
break;
case FF_LOGO_TYPE_DATA_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "data-raw");
break;
case FF_LOGO_TYPE_COMMAND_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "command-raw");
break;
case FF_LOGO_TYPE_IMAGE_SIXEL:
yyjson_mut_obj_add_str(doc, obj, "type", "sixel");
break;
case FF_LOGO_TYPE_IMAGE_KITTY:
yyjson_mut_obj_add_str(doc, obj, "type", "kitty");
break;
case FF_LOGO_TYPE_IMAGE_ITERM:
yyjson_mut_obj_add_str(doc, obj, "type", "iterm");
break;
case FF_LOGO_TYPE_IMAGE_CHAFA:
yyjson_mut_obj_add_str(doc, obj, "type", "chafa");
break;
case FF_LOGO_TYPE_IMAGE_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "raw");
break;
default:
yyjson_mut_obj_add_str(doc, obj, "type", "auto");
break;
}
case FF_LOGO_TYPE_NONE:
yyjson_mut_obj_add_null(doc, doc->root, "logo");
return;
case FF_LOGO_TYPE_BUILTIN:
yyjson_mut_obj_add_str(doc, obj, "type", "builtin");
break;
case FF_LOGO_TYPE_SMALL:
yyjson_mut_obj_add_str(doc, obj, "type", "small");
break;
case FF_LOGO_TYPE_FILE:
yyjson_mut_obj_add_str(doc, obj, "type", "file");
break;
case FF_LOGO_TYPE_FILE_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "file-raw");
break;
case FF_LOGO_TYPE_DATA:
yyjson_mut_obj_add_str(doc, obj, "type", "data");
break;
case FF_LOGO_TYPE_DATA_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "data-raw");
break;
case FF_LOGO_TYPE_COMMAND_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "command-raw");
break;
case FF_LOGO_TYPE_IMAGE_SIXEL:
yyjson_mut_obj_add_str(doc, obj, "type", "sixel");
break;
case FF_LOGO_TYPE_IMAGE_KITTY:
yyjson_mut_obj_add_str(doc, obj, "type", "kitty");
break;
case FF_LOGO_TYPE_IMAGE_KITTY_DIRECT:
yyjson_mut_obj_add_str(doc, obj, "type", "kitty-direct");
break;
case FF_LOGO_TYPE_IMAGE_KITTY_ICAT:
yyjson_mut_obj_add_str(doc, obj, "type", "kitty-icat");
break;
case FF_LOGO_TYPE_IMAGE_ITERM:
yyjson_mut_obj_add_str(doc, obj, "type", "iterm");
break;
case FF_LOGO_TYPE_IMAGE_CHAFA:
yyjson_mut_obj_add_str(doc, obj, "type", "chafa");
break;
case FF_LOGO_TYPE_IMAGE_RAW:
yyjson_mut_obj_add_str(doc, obj, "type", "raw");
break;
default:
yyjson_mut_obj_add_str(doc, obj, "type", "auto");
break;
}
if (!ffStrbufEqual(&options->source, &defaultOptions.source))
yyjson_mut_obj_add_str(doc, obj, "source", options->source.chars);
yyjson_mut_obj_add_str(doc, obj, "source", options->source.chars);
{
yyjson_mut_val* color = yyjson_mut_obj(doc);
for (int i = 0; i < FASTFETCH_LOGO_MAX_COLORS; i++)
{
if (!ffStrbufEqual(&options->colors[i], &defaultOptions.colors[i]))
{
char c = (char)('1' + i);
yyjson_mut_obj_add(color, yyjson_mut_strncpy(doc, &c, 1), yyjson_mut_strbuf(doc, &options->colors[i]));
}
char c = (char)('1' + i);
yyjson_mut_obj_add(color, yyjson_mut_strncpy(doc, &c, 1), yyjson_mut_strbuf(doc, &options->colors[i]));
}
if (yyjson_mut_obj_size(color) > 0)
yyjson_mut_obj_add_val(doc, obj, "color", color);
yyjson_mut_obj_add_val(doc, obj, "color", color);
}
if (options->width != defaultOptions.width)
if (options->width == 0)
yyjson_mut_obj_add_null(doc, obj, "width");
else
yyjson_mut_obj_add_uint(doc, obj, "width", options->width);
if (options->height != defaultOptions.height)
if (options->height == 0)
yyjson_mut_obj_add_null(doc, obj, "height");
else
yyjson_mut_obj_add_uint(doc, obj, "height", options->height);
{
yyjson_mut_val* padding = yyjson_mut_obj(doc);
if (options->paddingTop != defaultOptions.paddingTop)
yyjson_mut_obj_add_uint(doc, padding, "top", options->paddingTop);
if (options->paddingLeft != defaultOptions.paddingLeft)
yyjson_mut_obj_add_uint(doc, padding, "left", options->paddingLeft);
if (options->paddingRight != defaultOptions.paddingRight)
yyjson_mut_obj_add_uint(doc, padding, "right", options->paddingRight);
if (yyjson_mut_obj_size(padding) > 0)
yyjson_mut_obj_add_val(doc, obj, "padding", padding);
yyjson_mut_val* padding = yyjson_mut_obj_add_obj(doc, obj, "padding");
yyjson_mut_obj_add_uint(doc, padding, "top", options->paddingTop);
yyjson_mut_obj_add_uint(doc, padding, "left", options->paddingLeft);
yyjson_mut_obj_add_uint(doc, padding, "right", options->paddingRight);
}
if (options->printRemaining != defaultOptions.printRemaining)
yyjson_mut_obj_add_bool(doc, obj, "printRemaining", options->printRemaining);
yyjson_mut_obj_add_bool(doc, obj, "printRemaining", options->printRemaining);
if (options->preserveAspectRatio != defaultOptions.preserveAspectRatio)
yyjson_mut_obj_add_bool(doc, obj, "preserveAspectRatio", options->preserveAspectRatio);
yyjson_mut_obj_add_bool(doc, obj, "preserveAspectRatio", options->preserveAspectRatio);
if (options->recache != defaultOptions.recache)
yyjson_mut_obj_add_bool(doc, obj, "recache", options->recache);
yyjson_mut_obj_add_bool(doc, obj, "recache", options->recache);
if (options->position != defaultOptions.position)
{
yyjson_mut_obj_add_str(doc, obj, "position", ((const char* []) {
"left",
"top",
"right",
})[options->position]);
}
yyjson_mut_obj_add_str(doc, obj, "position", ((const char* []) {
"left",
"top",
"right",
})[options->position]);
{
yyjson_mut_val* chafa = yyjson_mut_obj(doc);
if (options->chafaFgOnly != defaultOptions.chafaFgOnly)
yyjson_mut_obj_add_bool(doc, chafa, "fgOnly", options->chafaFgOnly);
if (!ffStrbufEqual(&options->chafaSymbols, &defaultOptions.chafaSymbols))
yyjson_mut_obj_add_strbuf(doc, chafa, "symbols", &options->chafaSymbols);
if (options->chafaCanvasMode != defaultOptions.chafaCanvasMode && options->chafaCanvasMode <= 7)
yyjson_mut_obj_add_bool(doc, chafa, "fgOnly", options->chafaFgOnly);
yyjson_mut_obj_add_strbuf(doc, chafa, "symbols", &options->chafaSymbols);
if (options->chafaCanvasMode <= 7)
{
yyjson_mut_obj_add_str(doc, chafa, "canvasMode", ((const char* []) {
"TRUECOLOR",
@@ -590,14 +585,14 @@ void ffOptionsGenerateLogoJsonConfig(FFOptionsLogo* options, yyjson_mut_doc* doc
"INDEXED_16_8",
})[options->chafaCanvasMode]);
}
if (options->chafaColorSpace != defaultOptions.chafaColorSpace && options->chafaColorSpace <= 1)
if (options->chafaColorSpace <= 1)
{
yyjson_mut_obj_add_str(doc, chafa, "colorSpace", ((const char* []) {
"RGB",
"DIN99D",
})[options->chafaColorSpace]);
}
if (options->chafaDitherMode != defaultOptions.chafaDitherMode && options->chafaDitherMode <= 2)
if (options->chafaDitherMode <= 2)
{
yyjson_mut_obj_add_str(doc, chafa, "ditherMode", ((const char* []) {
"NONE",
@@ -606,10 +601,8 @@ void ffOptionsGenerateLogoJsonConfig(FFOptionsLogo* options, yyjson_mut_doc* doc
})[options->chafaDitherMode]);
}
if (yyjson_mut_obj_size(chafa) > 0)
yyjson_mut_obj_add_val(doc, obj, "chafa", chafa);
yyjson_mut_obj_add_val(doc, obj, "chafa", chafa);
}
if (yyjson_mut_obj_size(obj) > 0)
yyjson_mut_obj_add_val(doc, doc->root, "logo", obj);
yyjson_mut_obj_add_val(doc, doc->root, "logo", obj);
}