diff --git a/CMakeLists.txt b/CMakeLists.txt index a3f582051..7663965af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -261,7 +261,7 @@ set(LIBFASTFETCH_SRC src/logo/image/image.c src/logo/logo.c src/modules/battery/battery.c - src/modules/bios.c + src/modules/bios/bios.c src/modules/bluetooth.c src/modules/board.c src/modules/brightness.c diff --git a/src/common/init.c b/src/common/init.c index 4dace7205..aa427b2d0 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -75,7 +75,7 @@ static void defaultConfig(FFinstance* instance) ffInitTitleOptions(&instance->config.title); ffInitOSOptions(&instance->config.os); ffInitHostOptions(&instance->config.host); - initModuleArg(&instance->config.bios); + ffInitBiosOptions(&instance->config.bios); initModuleArg(&instance->config.board); initModuleArg(&instance->config.brightness); initModuleArg(&instance->config.chassis); @@ -315,7 +315,7 @@ static void destroyConfig(FFinstance* instance) ffDestroyTitleOptions(&instance->config.title); ffDestroyOSOptions(&instance->config.os); ffDestroyHostOptions(&instance->config.host); - destroyModuleArg(&instance->config.bios); + ffDestroyBiosOptions(&instance->config.bios); destroyModuleArg(&instance->config.board); destroyModuleArg(&instance->config.chassis); ffDestroyCommandOptions(&instance->config.command); diff --git a/src/fastfetch.c b/src/fastfetch.c index 2c1582950..bc6528567 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -1135,7 +1135,7 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con else if(ffParseOSCommandOptions(&instance->config.os, key, value)) {} else if(ffParseHostCommandOptions(&instance->config.host, key, value)) {} - else if(optionParseModuleArgs(key, value, "bios", &instance->config.bios)) {} + else if(ffParseBiosCommandOptions(&instance->config.bios, key, value)) {} else if(optionParseModuleArgs(key, value, "board", &instance->config.board)) {} else if(optionParseModuleArgs(key, value, "chassis", &instance->config.chassis)) {} else if(ffParseCommandCommandOptions(&instance->config.command, key, value)) {} @@ -1387,7 +1387,7 @@ static void parseStructureCommand(FFinstance* instance, FFdata* data, const char else if(strcasecmp(line, "host") == 0) ffPrintHost(instance, &instance->config.host); else if(strcasecmp(line, "bios") == 0) - ffPrintBios(instance); + ffPrintBios(instance, &instance->config.bios); else if(strcasecmp(line, "board") == 0) ffPrintBoard(instance); else if(strcasecmp(line, "brightness") == 0) diff --git a/src/fastfetch.h b/src/fastfetch.h index c91395b06..79dd8a0f3 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -129,7 +129,7 @@ typedef struct FFconfig FFTitleOptions title; FFOSOptions os; FFHostOptions host; - FFModuleArgs bios; + FFBiosOptions bios; FFModuleArgs board; FFModuleArgs brightness; FFModuleArgs chassis; @@ -286,7 +286,6 @@ void ffPrepareWeather(FFinstance* instance); void ffPrintCustom(FFinstance* instance, const char* key, const char* value); void ffPrintBreak(FFinstance* instance); -void ffPrintBios(FFinstance* instance); void ffPrintBoard(FFinstance* instance); void ffPrintChassis(FFinstance* instance); void ffPrintUptime(FFinstance* instance); diff --git a/src/flashfetch.c b/src/flashfetch.c index 034fea0ff..9c24a9ee8 100644 --- a/src/flashfetch.c +++ b/src/flashfetch.c @@ -24,7 +24,7 @@ int main(int argc, char** argv) ffPrintSeparator(&instance, &instance.config.separator); ffPrintOS(&instance, &instance.config.os); ffPrintHost(&instance, &instance.config.host); - //ffPrintBios(&instance); + //ffPrintBios(&instance, &instance.config.bios); //ffPrintBoard(&instance); //ffPrintChassis(&instance); ffPrintKernel(&instance, &instance.config.kernel); diff --git a/src/modules/bios.c b/src/modules/bios.c deleted file mode 100644 index 7b3853355..000000000 --- a/src/modules/bios.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "fastfetch.h" -#include "common/printing.h" -#include "detection/bios/bios.h" - -#define FF_BIOS_MODULE_NAME "Bios" -#define FF_BIOS_NUM_FORMAT_ARGS 4 - -void ffPrintBios(FFinstance* instance) -{ - FFBiosResult result; - ffDetectBios(&result); - - if(result.error.length > 0) - { - ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &instance->config.bios, "%*s", result.error.length, result.error.chars); - goto exit; - } - - if(result.biosRelease.length == 0) - { - ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &instance->config.bios, "bios_release is not set."); - goto exit; - } - - if(instance->config.bios.outputFormat.length == 0) - { - ffPrintLogoAndKey(instance, FF_BIOS_MODULE_NAME, 0, &instance->config.bios.key); - puts(result.biosRelease.chars); - } - else - { - ffPrintFormat(instance, FF_BIOS_MODULE_NAME, 0, &instance->config.bios, FF_BIOS_NUM_FORMAT_ARGS, (FFformatarg[]) { - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosDate}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosRelease}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosVendor}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosVersion}, - }); - } - -exit: - ffStrbufDestroy(&result.biosDate); - ffStrbufDestroy(&result.biosRelease); - ffStrbufDestroy(&result.biosVendor); - ffStrbufDestroy(&result.biosVersion); - ffStrbufDestroy(&result.error); -} diff --git a/src/modules/bios/bios.c b/src/modules/bios/bios.c new file mode 100644 index 000000000..718e404a9 --- /dev/null +++ b/src/modules/bios/bios.c @@ -0,0 +1,99 @@ +#include "fastfetch.h" +#include "common/printing.h" +#include "detection/bios/bios.h" +#include "modules/bios/bios.h" + +#define FF_BIOS_MODULE_NAME "Bios" +#define FF_BIOS_NUM_FORMAT_ARGS 4 + +void ffPrintBios(FFinstance* instance, FFBiosOptions* options) +{ + FFBiosResult result; + ffDetectBios(&result); + + if(result.error.length > 0) + { + ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, "%*s", result.error.length, result.error.chars); + goto exit; + } + + if(result.biosRelease.length == 0) + { + ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, "bios_release is not set."); + goto exit; + } + + if(options->moduleArgs.outputFormat.length == 0) + { + ffPrintLogoAndKey(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs.key); + puts(result.biosRelease.chars); + } + else + { + ffPrintFormat(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, FF_BIOS_NUM_FORMAT_ARGS, (FFformatarg[]) { + {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosDate}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosRelease}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosVendor}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosVersion}, + }); + } + +exit: + ffStrbufDestroy(&result.biosDate); + ffStrbufDestroy(&result.biosRelease); + ffStrbufDestroy(&result.biosVendor); + ffStrbufDestroy(&result.biosVersion); + ffStrbufDestroy(&result.error); +} + +void ffInitBiosOptions(FFBiosOptions* options) +{ + options->moduleName = FF_BIOS_MODULE_NAME; + ffOptionInitModuleArg(&options->moduleArgs); +} + +bool ffParseBiosCommandOptions(FFBiosOptions* options, const char* key, const char* value) +{ + const char* subKey = ffOptionTestPrefix(key, FF_BIOS_MODULE_NAME); + if (!subKey) return false; + if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) + return true; + + return false; +} + +void ffDestroyBiosOptions(FFBiosOptions* options) +{ + ffOptionDestroyModuleArg(&options->moduleArgs); +} + +#ifdef FF_HAVE_JSONC +bool ffParseBiosJsonObject(FFinstance* instance, const char* type, JSONCData* data, json_object* module) +{ + if (strcasecmp(type, FF_BIOS_MODULE_NAME) != 0) + return false; + + FFBiosOptions __attribute__((__cleanup__(ffDestroyBiosOptions))) options; + ffInitBiosOptions(&options); + + if (module) + { + struct lh_entry* entry; + lh_foreach(data->ffjson_object_get_object(module), entry) + { + const char* key = (const char *)lh_entry_k(entry); + if (strcasecmp(key, "type") == 0) + continue; + json_object* val = (struct json_object *)lh_entry_v(entry); + + if (ffJsonConfigParseModuleArgs(data, key, val, &options.moduleArgs)) + continue; + + ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &options.moduleArgs, "Unknown JSON key %s", key); + } + } + + ffPrintBios(instance, &options); + return true; +} +#endif diff --git a/src/modules/bios/bios.h b/src/modules/bios/bios.h new file mode 100644 index 000000000..c751285c5 --- /dev/null +++ b/src/modules/bios/bios.h @@ -0,0 +1,13 @@ +#pragma once + +#include "fastfetch.h" + +void ffPrintBios(FFinstance* instance, FFBiosOptions* options); +void ffInitBiosOptions(FFBiosOptions* options); +bool ffParseBiosCommandOptions(FFBiosOptions* options, const char* key, const char* value); +void ffDestroyBiosOptions(FFBiosOptions* options); + +#ifdef FF_HAVE_JSONC +#include "common/config.h" +bool ffParseBiosJsonObject(FFinstance* instance, const char* type, JSONCData* data, json_object* module); +#endif diff --git a/src/modules/bios/option.h b/src/modules/bios/option.h new file mode 100644 index 000000000..6c0f67420 --- /dev/null +++ b/src/modules/bios/option.h @@ -0,0 +1,11 @@ +#pragma once + +// This file will be included in "fastfetch.h", do NOT put unnecessary things here + +#include "common/option.h" + +typedef struct FFBiosOptions +{ + const char* moduleName; + FFModuleArgs moduleArgs; +} FFBiosOptions; diff --git a/src/modules/jsonconfig/jsonconfig.c b/src/modules/jsonconfig/jsonconfig.c index e4037cc17..bd062ae7d 100644 --- a/src/modules/jsonconfig/jsonconfig.c +++ b/src/modules/jsonconfig/jsonconfig.c @@ -14,6 +14,7 @@ static inline bool parseModuleJsonObject(FFinstance* instance, const char* type, return ffParseTitleJsonObject(instance, type, data, module) || ffParseBatteryJsonObject(instance, type, data, module) || + ffParseBiosJsonObject(instance, type, data, module) || ffParseCommandJsonObject(instance, type, data, module) || ffParseDateTimeJsonObject(instance, type, data, module) || ffParseDisplayJsonObject(instance, type, data, module) || diff --git a/src/modules/modules.h b/src/modules/modules.h index cbfdc0ca6..be6bac672 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -4,6 +4,7 @@ #include "modules/os/os.h" #include "modules/battery/battery.h" +#include "modules/bios/bios.h" #include "modules/command/command.h" #include "modules/datetime/datetime.h" #include "modules/display/display.h" diff --git a/src/modules/options.h b/src/modules/options.h index 2bf008d66..1b7502204 100644 --- a/src/modules/options.h +++ b/src/modules/options.h @@ -3,6 +3,7 @@ // For "fastfetch.h" #include "modules/battery/option.h" +#include "modules/bios/option.h" #include "modules/command/option.h" #include "modules/datetime/option.h" #include "modules/display/option.h"