Battery: major code refactoring

ditto
This commit is contained in:
李通洲
2023-03-07 16:13:53 +08:00
parent 6cb073e6a5
commit 4e3e469ba8
16 changed files with 122 additions and 39 deletions
+1 -1
View File
@@ -259,7 +259,7 @@ set(LIBFASTFETCH_SRC
src/logo/image/im7.c
src/logo/image/image.c
src/logo/logo.c
src/modules/battery.c
src/modules/battery/battery.c
src/modules/bios.c
src/modules/bluetooth.c
src/modules/board.c
+3 -7
View File
@@ -15,7 +15,7 @@
#include <signal.h>
#endif
#include "modules/os/os.h"
#include "modules/modules.h"
static void initState(FFstate* state)
{
@@ -98,7 +98,7 @@ static void defaultConfig(FFinstance* instance)
initModuleArg(&instance->config.memory);
initModuleArg(&instance->config.swap);
initModuleArg(&instance->config.disk);
initModuleArg(&instance->config.battery);
ffInitBatteryOptions(&instance->config.battery);
initModuleArg(&instance->config.powerAdapter);
initModuleArg(&instance->config.locale);
initModuleArg(&instance->config.localIP);
@@ -148,7 +148,6 @@ static void defaultConfig(FFinstance* instance)
instance->config.cpuTemp = false;
instance->config.gpuTemp = false;
instance->config.gpuForceVulkan = false;
instance->config.batteryTemp = false;
instance->config.gpuHideIntegrated = false;
instance->config.gpuHideDiscrete = false;
@@ -169,8 +168,6 @@ static void defaultConfig(FFinstance* instance)
instance->config.soundType = FF_SOUND_TYPE_MAIN;
ffStrbufInitA(&instance->config.batteryDir, 0);
ffStrbufInitA(&instance->config.separatorString, 0);
instance->config.localIpShowType = FF_LOCALIP_TYPE_IPV4_BIT;
@@ -359,7 +356,7 @@ static void destroyConfig(FFinstance* instance)
destroyModuleArg(&instance->config.memory);
destroyModuleArg(&instance->config.swap);
destroyModuleArg(&instance->config.disk);
destroyModuleArg(&instance->config.battery);
ffDestroyBatteryOptions(&instance->config.battery);
destroyModuleArg(&instance->config.powerAdapter);
destroyModuleArg(&instance->config.locale);
destroyModuleArg(&instance->config.localIP);
@@ -407,7 +404,6 @@ static void destroyConfig(FFinstance* instance)
ffStrbufDestroy(&instance->config.libnm);
ffStrbufDestroy(&instance->config.diskFolders);
ffStrbufDestroy(&instance->config.batteryDir);
ffStrbufDestroy(&instance->config.separatorString);
ffStrbufDestroy(&instance->config.localIpNamePrefix);
ffStrbufDestroy(&instance->config.publicIpUrl);
+11
View File
@@ -105,6 +105,17 @@ void ffOptionParseEnum(const char* argumentKey, const char* requestedKey, void*
exit(478);
}
bool ffOptionParseBoolean(const char* str)
{
return (
!ffStrSet(str) ||
strcasecmp(str, "true") == 0 ||
strcasecmp(str, "yes") == 0 ||
strcasecmp(str, "on") == 0 ||
strcasecmp(str, "1") == 0
);
}
void ffOptionInitModuleArg(FFModuleArgs* args)
{
ffStrbufInit(&args->key);
+1
View File
@@ -14,5 +14,6 @@ bool ffOptionParseModuleArgs(const char* argumentKey, const char* pkey, const ch
void ffOptionParseString(const char* argumentKey, const char* value, FFstrbuf* buffer);
uint32_t ffOptionParseUInt32(const char* argumentKey, const char* value);
void ffOptionParseEnum(const char* argumentKey, const char* requestedKey, void* result, ...);
bool ffOptionParseBoolean(const char* str);
void ffOptionInitModuleArg(FFModuleArgs* args);
void ffOptionDestroyModuleArg(FFModuleArgs* args);
+2 -2
View File
@@ -7,7 +7,7 @@
#define FF_TERMUX_API_PATH FASTFETCH_TARGET_DIR_ROOT "/libexec/termux-api"
#define FF_TERMUX_API_PARAM "BatteryStatus"
const char* ffDetectBatteryImpl(FF_MAYBE_UNUSED FFinstance* instance, FFlist* results)
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
{
FF_STRBUF_AUTO_DESTROY buffer;
ffStrbufInit(&buffer);
@@ -35,7 +35,7 @@ const char* ffDetectBatteryImpl(FF_MAYBE_UNUSED FFinstance* instance, FFlist* re
ffStrbufClear(&battery->status);
}
if(instance->config.batteryTemp)
if(instance->config.battery.temp)
{
if(ffParsePropLines(buffer.chars, "\"temperature\": ", &battery->status))
{
+1 -3
View File
@@ -30,8 +30,6 @@ static double detectBatteryTemp()
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
{
FF_UNUSED(instance);
CFMutableDictionaryRef matchDict = IOServiceMatching("AppleSmartBattery");
if (matchDict == NULL)
return "IOServiceMatching(\"AppleSmartBattery\") failed";
@@ -93,7 +91,7 @@ const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
else
ffStrbufAppendS(&battery->status, "");
if(instance->config.batteryTemp)
if(instance->config.battery.temp)
battery->temperature = detectBatteryTemp();
else
battery->temperature = FF_BATTERY_TEMP_UNSET;
+4 -3
View File
@@ -74,12 +74,13 @@ static void parseBattery(FFstrbuf* dir, FFlist* results)
result->temperature = FF_BATTERY_TEMP_UNSET;
}
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results) {
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
{
FFstrbuf baseDir;
ffStrbufInitA(&baseDir, 64);
if(instance->config.batteryDir.length > 0)
if(instance->config.battery.dir.length > 0)
{
ffStrbufAppend(&baseDir, &instance->config.batteryDir);
ffStrbufAppend(&baseDir, &instance->config.battery.dir);
ffStrbufEnsureEndsWithC(&baseDir, '/');
}
else
+1 -1
View File
@@ -111,7 +111,7 @@ const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
}
battery->temperature = 0.0/0.0;
if(instance->config.batteryTemp)
if(instance->config.battery.temp)
{
bqi.InformationLevel = BatteryTemperature;
ULONG temp;
+3 -6
View File
@@ -18,6 +18,7 @@
#pragma GCC diagnostic ignored "-Wsign-conversion"
#include "modules/os/os.h"
#include "modules/modules.h"
typedef struct CustomValue
{
@@ -1160,7 +1161,7 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
else if(optionParseModuleArgs(key, value, "memory", &instance->config.memory)) {}
else if(optionParseModuleArgs(key, value, "swap", &instance->config.swap)) {}
else if(optionParseModuleArgs(key, value, "disk", &instance->config.disk)) {}
else if(optionParseModuleArgs(key, value, "battery", &instance->config.battery)) {}
else if(ffParseBatteryCommandOptions(&instance->config.battery, key, value)) {}
else if(optionParseModuleArgs(key, value, "poweradapter", &instance->config.powerAdapter)) {}
else if(optionParseModuleArgs(key, value, "locale", &instance->config.locale)) {}
else if(optionParseModuleArgs(key, value, "localip", &instance->config.localIP)) {}
@@ -1250,8 +1251,6 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
instance->config.gpuTemp = optionParseBoolean(value);
else if(strcasecmp(key, "--gpu-force-vulkan") == 0)
instance->config.gpuForceVulkan = optionParseBoolean(value);
else if(strcasecmp(key, "--battery-temp") == 0)
instance->config.batteryTemp = optionParseBoolean(value);
else if(strcasecmp(key, "--gpu-hide-integrated") == 0)
instance->config.gpuHideIntegrated = optionParseBoolean(value);
else if(strcasecmp(key, "--gpu-hide-discrete") == 0)
@@ -1297,8 +1296,6 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
NULL
);
}
else if(strcasecmp(key, "--battery-dir") == 0)
optionParseString(key, value, &instance->config.batteryDir);
else if(strcasecmp(key, "--separator-string") == 0)
optionParseString(key, value, &instance->config.separatorString);
else if(strcasecmp(key, "--localip-show-ipv4") == 0)
@@ -1471,7 +1468,7 @@ static void parseStructureCommand(FFinstance* instance, FFdata* data, const char
else if(strcasecmp(line, "disk") == 0)
ffPrintDisk(instance);
else if(strcasecmp(line, "battery") == 0)
ffPrintBattery(instance);
ffPrintBattery(instance, &instance->config.battery);
else if(strcasecmp(line, "poweradapter") == 0)
ffPrintPowerAdapter(instance);
else if(strcasecmp(line, "locale") == 0)
+2 -6
View File
@@ -18,7 +18,7 @@ static inline void ffUnused(int dummy, ...) { (void) dummy; }
#define FASTFETCH_LOGO_MAX_COLORS 9 //two digits would make parsing much more complicated (index 1 - 9)
#include "modules/os/option.h"
#include "modules/options.h"
typedef enum FFLogoType
{
@@ -162,7 +162,7 @@ typedef struct FFconfig
FFModuleArgs memory;
FFModuleArgs swap;
FFModuleArgs disk;
FFModuleArgs battery;
FFBatteryOptions battery;
FFModuleArgs powerAdapter;
FFModuleArgs locale;
FFModuleArgs localIP;
@@ -210,7 +210,6 @@ typedef struct FFconfig
bool cpuTemp;
bool gpuTemp;
bool gpuForceVulkan;
bool batteryTemp;
bool gpuHideIntegrated;
bool gpuHideDiscrete;
@@ -229,8 +228,6 @@ typedef struct FFconfig
bool bluetoothShowDisconnected;
FFstrbuf batteryDir;
FFstrbuf separatorString;
FFstrbuf localIpNamePrefix;
@@ -336,7 +333,6 @@ void ffPrintGPU(FFinstance* instance);
void ffPrintMemory(FFinstance* instance);
void ffPrintSwap(FFinstance* instance);
void ffPrintDisk(FFinstance* instance);
void ffPrintBattery(FFinstance* instance);
void ffPrintPowerAdapter(FFinstance* instance);
void ffPrintLocale(FFinstance* instance);
void ffPrintPlayer(FFinstance* instance);
+2 -2
View File
@@ -1,6 +1,6 @@
#include "fastfetch.h"
#include "modules/os/os.h"
#include "modules/modules.h"
int main(int argc, char** argv)
{
@@ -48,7 +48,7 @@ int main(int argc, char** argv)
ffPrintMemory(&instance);
//ffPrintSwap(&instance);
ffPrintDisk(&instance);
ffPrintBattery(&instance);
ffPrintBattery(&instance, &instance.config.battery);
ffPrintPowerAdapter(&instance);
//ffPrintPlayer(&instance);
//ffPrintMedia(&instance);
@@ -2,15 +2,16 @@
#include "common/printing.h"
#include "common/bar.h"
#include "detection/battery/battery.h"
#include "modules/battery/battery.h"
#define FF_BATTERY_MODULE_NAME "Battery"
#define FF_BATTERY_NUM_FORMAT_ARGS 5
static void printBattery(FFinstance* instance, BatteryResult* result, uint8_t index)
static void printBattery(FFinstance* instance, FFBatteryOptions* options, BatteryResult* result, uint8_t index)
{
if(instance->config.battery.outputFormat.length == 0)
if(instance->config.battery.moduleArgs.outputFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_BATTERY_MODULE_NAME, index, &instance->config.battery.key);
ffPrintLogoAndKey(instance, FF_BATTERY_MODULE_NAME, index, &options->moduleArgs.key);
bool showStatus =
!(instance->config.percentType & FF_PERCENTAGE_TYPE_HIDE_OTHERS_BIT) &&
@@ -62,7 +63,7 @@ static void printBattery(FFinstance* instance, BatteryResult* result, uint8_t in
}
else
{
ffPrintFormat(instance, FF_BATTERY_MODULE_NAME, index, &instance->config.battery, FF_BATTERY_NUM_FORMAT_ARGS, (FFformatarg[]){
ffPrintFormat(instance, FF_BATTERY_MODULE_NAME, index, &options->moduleArgs, FF_BATTERY_NUM_FORMAT_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRBUF, &result->manufacturer},
{FF_FORMAT_ARG_TYPE_STRBUF, &result->modelName},
{FF_FORMAT_ARG_TYPE_STRBUF, &result->technology},
@@ -73,7 +74,7 @@ static void printBattery(FFinstance* instance, BatteryResult* result, uint8_t in
}
}
void ffPrintBattery(FFinstance* instance)
void ffPrintBattery(FFinstance* instance, FFBatteryOptions* options)
{
FFlist results;
ffListInitA(&results, sizeof(BatteryResult), 0);
@@ -82,14 +83,14 @@ void ffPrintBattery(FFinstance* instance)
if (error)
{
ffPrintError(instance, FF_BATTERY_MODULE_NAME, 0, &instance->config.battery, "%s", error);
ffPrintError(instance, FF_BATTERY_MODULE_NAME, 0, &options->moduleArgs, "%s", error);
}
else
{
for(uint8_t i = 0; i < (uint8_t) results.length; i++)
{
BatteryResult* result = ffListGet(&results, i);
printBattery(instance, result, i);
printBattery(instance, options, result, i);
ffStrbufDestroy(&result->manufacturer);
ffStrbufDestroy(&result->modelName);
@@ -97,8 +98,51 @@ void ffPrintBattery(FFinstance* instance)
ffStrbufDestroy(&result->status);
}
if(results.length == 0)
ffPrintError(instance, FF_BATTERY_MODULE_NAME, 0, &instance->config.battery, "No batteries found");
ffPrintError(instance, FF_BATTERY_MODULE_NAME, 0, &options->moduleArgs, "No batteries found");
}
ffListDestroy(&results);
}
void ffInitBatteryOptions(FFBatteryOptions* options)
{
options->moduleName = FF_BATTERY_MODULE_NAME;
ffOptionInitModuleArg(&options->moduleArgs);
options->temp = false;
#ifdef __linux__
ffStrbufInit(&options->dir);
#endif
}
bool ffParseBatteryCommandOptions(FFBatteryOptions* options, const char* key, const char* value)
{
const char* subKey = ffOptionTestPrefix(key, FF_BATTERY_MODULE_NAME);
if (!subKey) return false;
if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs))
return true;
if (strcasecmp(subKey, "temp") == 0)
{
options->temp = ffOptionParseBoolean(value);
return true;
}
#ifdef __linux__
if (strcasecmp(subKey, "dir") == 0)
{
ffOptionParseString(key, value, &options->dir);
return true;
}
#endif
return false;
}
void ffDestroyBatteryOptions(FFBatteryOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
#ifdef __linux__
ffStrbufDestroy(&options->dir);
#endif
}
+10
View File
@@ -0,0 +1,10 @@
#pragma once
#include "fastfetch.h"
#include "modules/battery/option.h"
void ffPrintBattery(FFinstance* instance, FFBatteryOptions* options);
void ffInitBatteryOptions(FFBatteryOptions* options);
bool ffParseBatteryCommandOptions(FFBatteryOptions* options, const char* key, const char* value);
void ffDestroyBatteryOptions(FFBatteryOptions* options);
+17
View File
@@ -0,0 +1,17 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFBatteryOptions
{
const char* moduleName;
FFModuleArgs moduleArgs;
bool temp;
#ifdef __linux__
FFstrbuf dir;
#endif
} FFBatteryOptions;
+6
View File
@@ -0,0 +1,6 @@
#pragma once
// For "fastfetch.c" and "flashfetch.c"
#include "modules/os/os.h"
#include "modules/battery/battery.h"
+6
View File
@@ -0,0 +1,6 @@
#pragma once
// For "fastfetch.h"
#include "modules/battery/option.h"
#include "modules/os/option.h"