diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dba0e869..fd57c3ff3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -310,7 +310,7 @@ set(LIBFASTFETCH_SRC src/modules/vulkan.c src/modules/wallpaper.c src/modules/weather.c - src/modules/wifi.c + src/modules/wifi/wifi.c src/modules/wm.c src/modules/wmtheme/wmtheme.c src/modules/jsonconfig/jsonconfig.c diff --git a/src/common/init.c b/src/common/init.c index 587664fe8..3c17d8207 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -93,7 +93,7 @@ static void defaultConfig(FFinstance* instance) ffInitLocalIpOptions(&instance->config.localIP); initModuleArg(&instance->config.publicIP); initModuleArg(&instance->config.weather); - initModuleArg(&instance->config.wifi); + ffInitWifiOptions(&instance->config.wifi); initModuleArg(&instance->config.player); initModuleArg(&instance->config.media); ffInitDateTimeOptions(&instance->config.dateTime); @@ -316,7 +316,7 @@ static void destroyConfig(FFinstance* instance) destroyModuleArg(&instance->config.publicIP); destroyModuleArg(&instance->config.wallpaper); destroyModuleArg(&instance->config.weather); - destroyModuleArg(&instance->config.wifi); + ffDestroyWifiOptions(&instance->config.wifi); destroyModuleArg(&instance->config.player); destroyModuleArg(&instance->config.media); ffDestroyDateTimeOptions(&instance->config.dateTime); diff --git a/src/fastfetch.c b/src/fastfetch.c index 58eca8995..7701b57e1 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -989,7 +989,7 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con else if(ffParseDisplayCommandOptions(&instance->config.display, key, value)) {} else if(ffParseBrightnessCommandOptions(&instance->config.brightness, key, value)) {} else if(optionParseModuleArgs(key, value, "de", &instance->config.de)) {} - else if(optionParseModuleArgs(key, value, "wifi", &instance->config.wifi)) {} + else if(ffParseWifiCommandOptions(&instance->config.wifi, key, value)) {} else if(optionParseModuleArgs(key, value, "wm", &instance->config.wm)) {} else if(ffParseWMThemeCommandOptions(&instance->config.wmTheme, key, value)) {} else if(optionParseModuleArgs(key, value, "theme", &instance->config.theme)) {} @@ -1240,8 +1240,8 @@ static void parseStructureCommand(FFinstance* instance, const char* line) ffPrintLocalIp(instance, &instance->config.localIP); else if(strcasecmp(line, "publicip") == 0) ffPrintPublicIp(instance); - else if(strcasecmp(line, "wifi") == 0) - ffPrintWifi(instance); + else if(strcasecmp(line, FF_WIFI_MODULE_NAME) == 0) + ffPrintWifi(instance, &instance->config.wifi); else if(strcasecmp(line, "weather") == 0) ffPrintWeather(instance); else if(strcasecmp(line, "player") == 0) diff --git a/src/fastfetch.h b/src/fastfetch.h index cf8562d86..e1f394daf 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -72,7 +72,7 @@ typedef struct FFconfig FFDisplayOptions display; FFModuleArgs de; FFModuleArgs wallpaper; - FFModuleArgs wifi; + FFWifiOptions wifi; FFModuleArgs wm; FFWMThemeOptions wmTheme; FFModuleArgs theme; @@ -215,7 +215,6 @@ void ffPrintPlayer(FFinstance* instance); void ffPrintMedia(FFinstance* instance); void ffPrintPublicIp(FFinstance* instance); void ffPrintWeather(FFinstance* instance); -void ffPrintWifi(FFinstance* instance); void ffPrintColors(FFinstance* instance); void ffPrintVulkan(FFinstance* instance); void ffPrintOpenGL(FFinstance* instance); diff --git a/src/modules/jsonconfig/jsonconfig.c b/src/modules/jsonconfig/jsonconfig.c index 7e27ddc43..6bbb99c69 100644 --- a/src/modules/jsonconfig/jsonconfig.c +++ b/src/modules/jsonconfig/jsonconfig.c @@ -122,6 +122,7 @@ static bool parseModuleJsonObject(FFinstance* instance, const char* type, json_o case 'W': { return + tryModule(instance, type, module, FF_WIFI_MODULE_NAME, ffParseWifiJsonObject) || tryModule(instance, type, module, FF_WMTHEME_MODULE_NAME, ffParseWMThemeJsonObject) || false; } diff --git a/src/modules/modules.h b/src/modules/modules.h index abf78d850..7b1011537 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -32,4 +32,5 @@ #include "modules/title/title.h" #include "modules/jsonconfig/jsonconfig.h" #include "modules/uptime/uptime.h" +#include "modules/wifi/wifi.h" #include "modules/wmtheme/wmtheme.h" diff --git a/src/modules/options.h b/src/modules/options.h index e6fec4bd4..117bdb6e4 100644 --- a/src/modules/options.h +++ b/src/modules/options.h @@ -29,4 +29,5 @@ #include "modules/swap/option.h" #include "modules/title/option.h" #include "modules/uptime/option.h" +#include "modules/wifi/option.h" #include "modules/wmtheme/option.h" diff --git a/src/modules/wifi/option.h b/src/modules/wifi/option.h new file mode 100644 index 000000000..4d713b5d8 --- /dev/null +++ b/src/modules/wifi/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 FFWifiOptions +{ + const char* moduleName; + FFModuleArgs moduleArgs; +} FFWifiOptions; diff --git a/src/modules/wifi.c b/src/modules/wifi/wifi.c similarity index 58% rename from src/modules/wifi.c rename to src/modules/wifi/wifi.c index d78d750b4..cd35eb5f9 100644 --- a/src/modules/wifi.c +++ b/src/modules/wifi/wifi.c @@ -1,23 +1,23 @@ #include "fastfetch.h" #include "common/printing.h" #include "detection/wifi/wifi.h" +#include "modules/wifi/wifi.h" -#define FF_WIFI_MODULE_NAME "Wifi" #define FF_WIFI_NUM_FORMAT_ARGS 10 -void ffPrintWifi(FFinstance* instance) +void ffPrintWifi(FFinstance* instance, FFWifiOptions* options) { FF_LIST_AUTO_DESTROY result = ffListCreate(sizeof(FFWifiResult)); const char* error = ffDetectWifi(instance, &result); if(error) { - ffPrintError(instance, FF_WIFI_MODULE_NAME, 0, &instance->config.wifi, "%s", error); + ffPrintError(instance, FF_WIFI_MODULE_NAME, 0, &options->moduleArgs, "%s", error); return; } if(!result.length) { - ffPrintError(instance, FF_WIFI_MODULE_NAME, 0, &instance->config.wifi, "No Wifi interfaces found"); + ffPrintError(instance, FF_WIFI_MODULE_NAME, 0, &options->moduleArgs, "No Wifi interfaces found"); return; } @@ -26,9 +26,9 @@ void ffPrintWifi(FFinstance* instance) FFWifiResult* item = (FFWifiResult*)ffListGet(&result, index); uint8_t moduleIndex = result.length == 1 ? 0 : (uint8_t)(index + 1); - if(instance->config.wifi.outputFormat.length == 0) + if(options->moduleArgs.outputFormat.length == 0) { - ffPrintLogoAndKey(instance, FF_WIFI_MODULE_NAME, moduleIndex, &instance->config.wifi.key); + ffPrintLogoAndKey(instance, FF_WIFI_MODULE_NAME, moduleIndex, &options->moduleArgs.key); if(item->conn.ssid.length) { ffStrbufWriteTo(&item->conn.ssid, stdout); @@ -45,7 +45,7 @@ void ffPrintWifi(FFinstance* instance) } else { - ffPrintFormat(instance, FF_WIFI_MODULE_NAME, moduleIndex, &instance->config.wifi, FF_WIFI_NUM_FORMAT_ARGS, (FFformatarg[]){ + ffPrintFormat(instance, FF_WIFI_MODULE_NAME, moduleIndex, &options->moduleArgs, FF_WIFI_NUM_FORMAT_ARGS, (FFformatarg[]){ {FF_FORMAT_ARG_TYPE_STRBUF, &item->inf.description}, {FF_FORMAT_ARG_TYPE_STRBUF, &item->inf.status}, {FF_FORMAT_ARG_TYPE_STRBUF, &item->conn.status}, @@ -68,3 +68,45 @@ void ffPrintWifi(FFinstance* instance) ffStrbufDestroy(&item->conn.security); } } + +void ffInitWifiOptions(FFWifiOptions* options) +{ + options->moduleName = FF_WIFI_MODULE_NAME; + ffOptionInitModuleArg(&options->moduleArgs); +} + +bool ffParseWifiCommandOptions(FFWifiOptions* options, const char* key, const char* value) +{ + const char* subKey = ffOptionTestPrefix(key, FF_WIFI_MODULE_NAME); + if (!subKey) return false; + if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) + return true; + + return false; +} + +void ffDestroyWifiOptions(FFWifiOptions* options) +{ + ffOptionDestroyModuleArg(&options->moduleArgs); +} + +#ifdef FF_HAVE_JSONC +void ffParseWifiJsonObject(FFinstance* instance, json_object* module) +{ + FFWifiOptions __attribute__((__cleanup__(ffDestroyWifiOptions))) options; + ffInitWifiOptions(&options); + + if (module) + { + json_object_object_foreach(module, key, val) + { + if (ffJsonConfigParseModuleArgs(key, val, &options.moduleArgs)) + continue; + + ffPrintError(instance, FF_WIFI_MODULE_NAME, 0, &options.moduleArgs, "Unknown JSON key %s", key); + } + } + + ffPrintWifi(instance, &options); +} +#endif diff --git a/src/modules/wifi/wifi.h b/src/modules/wifi/wifi.h new file mode 100644 index 000000000..bb6aa1884 --- /dev/null +++ b/src/modules/wifi/wifi.h @@ -0,0 +1,16 @@ +#pragma once + +#include "fastfetch.h" +#include "modules/wifi/option.h" + +#define FF_WIFI_MODULE_NAME "Wifi" + +void ffPrintWifi(FFinstance* instance, FFWifiOptions* options); +void ffInitWifiOptions(FFWifiOptions* options); +bool ffParseWifiCommandOptions(FFWifiOptions* options, const char* key, const char* value); +void ffDestroyWifiOptions(FFWifiOptions* options); + +#ifdef FF_HAVE_JSONC +#include "common/jsonconfig.h" +void ffParseWifiJsonObject(FFinstance* instance, json_object* module); +#endif