From 823f773e267d4a22b83cc15393061a55f67a8068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 5 Jun 2023 16:57:55 +0800 Subject: [PATCH] PowerAdapter: support JSON config --- CMakeLists.txt | 2 +- src/common/init.c | 4 +- src/detection/poweradapter/poweradapter.h | 4 +- .../poweradapter/poweradapter_apple.c | 4 +- src/fastfetch.c | 6 +- src/fastfetch.h | 3 +- src/flashfetch.c | 2 +- src/modules/jsonconfig/jsonconfig.c | 1 + src/modules/modules.h | 1 + src/modules/options.h | 1 + src/modules/poweradapter.c | 66 ----------- src/modules/poweradapter/option.h | 11 ++ src/modules/poweradapter/poweradapter.c | 105 ++++++++++++++++++ src/modules/poweradapter/poweradapter.h | 15 +++ 14 files changed, 146 insertions(+), 79 deletions(-) delete mode 100644 src/modules/poweradapter.c create mode 100644 src/modules/poweradapter/option.h create mode 100644 src/modules/poweradapter/poweradapter.c create mode 100644 src/modules/poweradapter/poweradapter.h diff --git a/CMakeLists.txt b/CMakeLists.txt index db2b4a4d7..342f305f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,8 +292,8 @@ set(LIBFASTFETCH_SRC src/modules/os/os.c src/modules/packages/packages.c src/modules/player.c - src/modules/poweradapter.c src/modules/processes.c + src/modules/poweradapter/poweradapter.c src/modules/publicip.c src/modules/display/display.c src/modules/separator/separator.c diff --git a/src/common/init.c b/src/common/init.c index ae90b2406..c73d7dfb5 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -88,7 +88,7 @@ static void defaultConfig(FFinstance* instance) ffInitSwapOptions(&instance->config.swap); ffInitDiskOptions(&instance->config.disk); ffInitBatteryOptions(&instance->config.battery); - initModuleArg(&instance->config.powerAdapter); + ffInitPowerAdapterOptions(&instance->config.powerAdapter); ffInitLocaleOptions(&instance->config.locale); ffInitLocalIpOptions(&instance->config.localIP); initModuleArg(&instance->config.publicIP); @@ -307,7 +307,7 @@ static void destroyConfig(FFinstance* instance) ffDestroySwapOptions(&instance->config.swap); ffDestroyDiskOptions(&instance->config.disk); ffDestroyBatteryOptions(&instance->config.battery); - destroyModuleArg(&instance->config.powerAdapter); + ffDestroyPowerAdapterOptions(&instance->config.powerAdapter); ffDestroyLocaleOptions(&instance->config.locale); ffDestroyLocalIpOptions(&instance->config.localIP); destroyModuleArg(&instance->config.publicIP); diff --git a/src/detection/poweradapter/poweradapter.h b/src/detection/poweradapter/poweradapter.h index c7f5ee7dc..1b9abd513 100644 --- a/src/detection/poweradapter/poweradapter.h +++ b/src/detection/poweradapter/poweradapter.h @@ -16,7 +16,7 @@ typedef struct PowerAdapterResult const char* ffDetectPowerAdapterImpl(FFinstance* instance, FFlist* results); -#define FF_POWER_ADAPTER_UNSET -2 -#define FF_POWER_ADAPTER_NOT_CONNECTED -1 +#define FF_POWERADAPTER_UNSET -2 +#define FF_POWERADAPTER_NOT_CONNECTED -1 #endif diff --git a/src/detection/poweradapter/poweradapter_apple.c b/src/detection/poweradapter/poweradapter_apple.c index c14ff8c4e..9c550d95d 100644 --- a/src/detection/poweradapter/poweradapter_apple.c +++ b/src/detection/poweradapter/poweradapter_apple.c @@ -32,14 +32,14 @@ const char* ffDetectPowerAdapterImpl(FFinstance* instance, FFlist* results) ffStrbufInit(&adapter->description); ffStrbufInit(&adapter->manufacturer); ffStrbufInit(&adapter->modelName); - adapter->watts = FF_POWER_ADAPTER_UNSET; + adapter->watts = FF_POWERADAPTER_UNSET; CFDictionaryRef adapterDict; if(!ffCfDictGetDict(properties, CFSTR("AdapterDetails"), &adapterDict)) { if (ffCfDictGetInt(adapterDict, CFSTR("Watts"), &adapter->watts)) { - adapter->watts = FF_POWER_ADAPTER_NOT_CONNECTED; + adapter->watts = FF_POWERADAPTER_NOT_CONNECTED; continue; } ffCfDictGetString(adapterDict, CFSTR("Name"), &adapter->name); diff --git a/src/fastfetch.c b/src/fastfetch.c index 4596d3fac..94b530a4a 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -1006,7 +1006,7 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con else if(ffParseSwapCommandOptions(&instance->config.swap, key, value)) {} else if(ffParseDiskCommandOptions(&instance->config.disk, key, value)) {} else if(ffParseBatteryCommandOptions(&instance->config.battery, key, value)) {} - else if(optionParseModuleArgs(key, value, "poweradapter", &instance->config.powerAdapter)) {} + else if(ffParsePowerAdapterCommandOptions(&instance->config.powerAdapter, key, value)) {} else if(ffParseLocaleCommandOptions(&instance->config.locale, key, value)) {} else if(ffParseLocalIpCommandOptions(&instance->config.localIP, key, value)) {} else if(optionParseModuleArgs(key, value, "publicip", &instance->config.publicIP)) {} @@ -1228,8 +1228,8 @@ static void parseStructureCommand(FFinstance* instance, const char* line) ffPrintDisk(instance, &instance->config.disk); else if(strcasecmp(line, FF_BATTERY_MODULE_NAME) == 0) ffPrintBattery(instance, &instance->config.battery); - else if(strcasecmp(line, "poweradapter") == 0) - ffPrintPowerAdapter(instance); + else if(strcasecmp(line, FF_POWERADAPTER_MODULE_NAME) == 0) + ffPrintPowerAdapter(instance, &instance->config.powerAdapter); else if(strcasecmp(line, FF_LOCALE_MODULE_NAME) == 0) ffPrintLocale(instance, &instance->config.locale); else if(strcasecmp(line, "localip") == 0) diff --git a/src/fastfetch.h b/src/fastfetch.h index 694dbce09..27f68e15a 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -89,7 +89,7 @@ typedef struct FFconfig FFSwapOptions swap; FFDiskOptions disk; FFBatteryOptions battery; - FFModuleArgs powerAdapter; + FFPowerAdapterOptions powerAdapter; FFLocaleOptions locale; FFLocalIpOptions localIP; FFModuleArgs publicIP; @@ -203,7 +203,6 @@ void ffPrintWM(FFinstance* instance); void ffPrintTheme(FFinstance* instance); void ffPrintIcons(FFinstance* instance); void ffPrintWallpaper(FFinstance* instance); -void ffPrintPowerAdapter(FFinstance* instance); void ffPrintPlayer(FFinstance* instance); void ffPrintMedia(FFinstance* instance); void ffPrintPublicIp(FFinstance* instance); diff --git a/src/flashfetch.c b/src/flashfetch.c index aa27f20e7..cc5579d8f 100644 --- a/src/flashfetch.c +++ b/src/flashfetch.c @@ -49,7 +49,7 @@ int main(int argc, char** argv) ffPrintSwap(&instance, &instance.config.swap); ffPrintDisk(&instance, &instance.config.disk); ffPrintBattery(&instance, &instance.config.battery); - ffPrintPowerAdapter(&instance); + ffPrintPowerAdapter(&instance, &instance.config.powerAdapter); //ffPrintPlayer(&instance); //ffPrintMedia(&instance); //ffPrintLocalIp(&instance); diff --git a/src/modules/jsonconfig/jsonconfig.c b/src/modules/jsonconfig/jsonconfig.c index 336bc606a..de9ea27e6 100644 --- a/src/modules/jsonconfig/jsonconfig.c +++ b/src/modules/jsonconfig/jsonconfig.c @@ -103,6 +103,7 @@ static bool parseModuleJsonObject(FFinstance* instance, const char* type, json_o case 'P': { return tryModule(instance, type, module, FF_PACKAGES_MODULE_NAME, ffParsePackagesJsonObject) || + tryModule(instance, type, module, FF_POWERADAPTER_MODULE_NAME, ffParsePowerAdapterJsonObject) || false; } diff --git a/src/modules/modules.h b/src/modules/modules.h index b1f06153d..1df0a9293 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -27,6 +27,7 @@ #include "modules/memory/memory.h" #include "modules/os/os.h" #include "modules/packages/packages.h" +#include "modules/poweradapter/poweradapter.h" #include "modules/separator/separator.h" #include "modules/shell/shell.h" #include "modules/sound/sound.h" diff --git a/src/modules/options.h b/src/modules/options.h index 99c69dd4b..f89032fa5 100644 --- a/src/modules/options.h +++ b/src/modules/options.h @@ -25,6 +25,7 @@ #include "modules/memory/option.h" #include "modules/os/option.h" #include "modules/packages/option.h" +#include "modules/poweradapter/option.h" #include "modules/separator/option.h" #include "modules/shell/option.h" #include "modules/sound/option.h" diff --git a/src/modules/poweradapter.c b/src/modules/poweradapter.c deleted file mode 100644 index c2cd7550d..000000000 --- a/src/modules/poweradapter.c +++ /dev/null @@ -1,66 +0,0 @@ -#include "fastfetch.h" -#include "common/printing.h" -#include "detection/poweradapter/poweradapter.h" - -#define FF_POWER_ADAPTER_MODULE_NAME "Power Adapter" -#define FF_POWER_ADAPTER_MODULE_ARGS 5 - -static void printPowerAdapter(FFinstance* instance, const PowerAdapterResult* result, uint8_t index) -{ - if(result->watts != FF_POWER_ADAPTER_UNSET) - { - if(instance->config.powerAdapter.outputFormat.length == 0) - { - ffPrintLogoAndKey(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter.key); - - if(result->name.length > 0) - puts(result->name.chars); - else if(result->watts == FF_POWER_ADAPTER_NOT_CONNECTED) - puts("not connected"); - else - printf("%dW\n", result->watts); - } - else - { - ffPrintFormat(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter, FF_POWER_ADAPTER_MODULE_ARGS, (FFformatarg[]){ - {FF_FORMAT_ARG_TYPE_INT, &result->watts}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result->name}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result->manufacturer}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result->modelName}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result->description}, - }); - } - } -} - -void ffPrintPowerAdapter(FFinstance* instance) -{ - FFlist results; - ffListInitA(&results, sizeof(PowerAdapterResult), 0); - - const char* error = ffDetectPowerAdapterImpl(instance, &results); - - if (error) - { - ffPrintError(instance, FF_POWER_ADAPTER_MODULE_NAME, 0, &instance->config.powerAdapter, "%s", error); - } - else if(results.length == 0) - { - ffPrintError(instance, FF_POWER_ADAPTER_MODULE_NAME, 0, &instance->config.powerAdapter, "No power adapters found"); - } - else - { - for(uint8_t i = 0; i < (uint8_t) results.length; i++) - { - PowerAdapterResult* result = ffListGet(&results, i); - printPowerAdapter(instance, result, i); - - ffStrbufDestroy(&result->manufacturer); - ffStrbufDestroy(&result->description); - ffStrbufDestroy(&result->modelName); - ffStrbufDestroy(&result->name); - } - } - - ffListDestroy(&results); -} diff --git a/src/modules/poweradapter/option.h b/src/modules/poweradapter/option.h new file mode 100644 index 000000000..7acaf29ee --- /dev/null +++ b/src/modules/poweradapter/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 FFPowerAdapterOptions +{ + const char* moduleName; + FFModuleArgs moduleArgs; +} FFPowerAdapterOptions; diff --git a/src/modules/poweradapter/poweradapter.c b/src/modules/poweradapter/poweradapter.c new file mode 100644 index 000000000..12e78395b --- /dev/null +++ b/src/modules/poweradapter/poweradapter.c @@ -0,0 +1,105 @@ +#include "fastfetch.h" +#include "common/printing.h" +#include "detection/poweradapter/poweradapter.h" +#include "modules/poweradapter/poweradapter.h" + +#define FF_POWERADAPTER_DISPLAY_NAME "Power Adapter" +#define FF_POWERADAPTER_MODULE_ARGS 5 + +void ffPrintPowerAdapter(FFinstance* instance, FFPowerAdapterOptions* options) +{ + FFlist results; + ffListInit(&results, sizeof(PowerAdapterResult)); + + const char* error = ffDetectPowerAdapterImpl(instance, &results); + + if (error) + { + ffPrintError(instance, FF_POWERADAPTER_DISPLAY_NAME, 0, &options->moduleArgs, "%s", error); + } + else if(results.length == 0) + { + ffPrintError(instance, FF_POWERADAPTER_DISPLAY_NAME, 0, &options->moduleArgs, "No power adapters found"); + } + else + { + for(uint8_t i = 0; i < (uint8_t) results.length; i++) + { + PowerAdapterResult* result = ffListGet(&results, i); + + if(result->watts != FF_POWERADAPTER_UNSET) + { + if(options->moduleArgs.outputFormat.length == 0) + { + ffPrintLogoAndKey(instance, FF_POWERADAPTER_DISPLAY_NAME, i, &options->moduleArgs.key); + + if(result->name.length > 0) + puts(result->name.chars); + else if(result->watts == FF_POWERADAPTER_NOT_CONNECTED) + puts("not connected"); + else + printf("%dW\n", result->watts); + } + else + { + ffPrintFormat(instance, FF_POWERADAPTER_DISPLAY_NAME, i, &options->moduleArgs, FF_POWERADAPTER_MODULE_ARGS, (FFformatarg[]){ + {FF_FORMAT_ARG_TYPE_INT, &result->watts}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result->name}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result->manufacturer}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result->modelName}, + {FF_FORMAT_ARG_TYPE_STRBUF, &result->description}, + }); + } + } + + ffStrbufDestroy(&result->manufacturer); + ffStrbufDestroy(&result->description); + ffStrbufDestroy(&result->modelName); + ffStrbufDestroy(&result->name); + } + } + + ffListDestroy(&results); +} + +void ffInitPowerAdapterOptions(FFPowerAdapterOptions* options) +{ + options->moduleName = FF_POWERADAPTER_MODULE_NAME; + ffOptionInitModuleArg(&options->moduleArgs); +} + +bool ffParsePowerAdapterCommandOptions(FFPowerAdapterOptions* options, const char* key, const char* value) +{ + const char* subKey = ffOptionTestPrefix(key, FF_POWERADAPTER_MODULE_NAME); + if (!subKey) return false; + if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) + return true; + + return false; +} + +void ffDestroyPowerAdapterOptions(FFPowerAdapterOptions* options) +{ + ffOptionDestroyModuleArg(&options->moduleArgs); +} + +#ifdef FF_HAVE_JSONC +void ffParsePowerAdapterJsonObject(FFinstance* instance, json_object* module) +{ + FFPowerAdapterOptions __attribute__((__cleanup__(ffDestroyPowerAdapterOptions))) options; + ffInitPowerAdapterOptions(&options); + + if (module) + { + json_object_object_foreach(module, key, val) + { + if (ffJsonConfigParseModuleArgs(key, val, &options.moduleArgs)) + continue; + + ffPrintError(instance, FF_POWERADAPTER_MODULE_NAME, 0, &options.moduleArgs, "Unknown JSON key %s", key); + } + } + + ffPrintPowerAdapter(instance, &options); +} +#endif diff --git a/src/modules/poweradapter/poweradapter.h b/src/modules/poweradapter/poweradapter.h new file mode 100644 index 000000000..4c11d1976 --- /dev/null +++ b/src/modules/poweradapter/poweradapter.h @@ -0,0 +1,15 @@ +#pragma once + +#include "fastfetch.h" + +#define FF_POWERADAPTER_MODULE_NAME "PowerAdapter" + +void ffPrintPowerAdapter(FFinstance* instance, FFPowerAdapterOptions* options); +void ffInitPowerAdapterOptions(FFPowerAdapterOptions* options); +bool ffParsePowerAdapterCommandOptions(FFPowerAdapterOptions* options, const char* key, const char* value); +void ffDestroyPowerAdapterOptions(FFPowerAdapterOptions* options); + +#ifdef FF_HAVE_JSONC +#include "common/jsonconfig.h" +void ffParsePowerAdapterJsonObject(FFinstance* instance, json_object* module); +#endif