Merge pull request #249 from CarterLi/master

[macOS] add power adapter module
This commit is contained in:
Linus Dierheimer
2022-09-22 20:50:03 +02:00
committed by GitHub
11 changed files with 79 additions and 20 deletions
+13
View File
@@ -72,6 +72,7 @@ static void initConfigDirs(FFstate* state)
startIndex = colonIndex + 1;
}
ffStrbufDestroy(&xdgConfigDirs);
FFstrbuf* systemConfigHome = ffListAdd(&state->configDirs);
ffStrbufInitA(systemConfigHome, 64);
@@ -183,6 +184,7 @@ static void defaultConfig(FFinstance* instance)
initModuleArg(&instance->config.swap);
initModuleArg(&instance->config.disk);
initModuleArg(&instance->config.battery);
initModuleArg(&instance->config.powerAdapter);
initModuleArg(&instance->config.locale);
initModuleArg(&instance->config.localIP);
initModuleArg(&instance->config.publicIP);
@@ -381,6 +383,17 @@ void ffFinish(FFinstance* instance)
ffLogoPrintRemaining(instance);
resetConsole();
for(uint32_t i = 0; i < instance->state.configDirs.length; ++i)
ffStrbufDestroy((FFstrbuf*)ffListGet(&instance->state.configDirs, i));
ffListDestroy(&instance->state.configDirs);
ffStrbufDestroy(&instance->state.cacheDir);
for(uint8_t i = 0; i < (uint8_t) FASTFETCH_LOGO_MAX_COLORS; ++i)
ffStrbufDestroy(&instance->config.logo.colors[i]);
ffStrbufDestroy(&instance->config.colorKeys);
ffStrbufDestroy(&instance->config.colorTitle);
ffStrbufDestroy(&instance->config.separator);
ffStrbufDestroy(&instance->config.logo.source);
}
//Must be in a file compiled with the libfastfetch target, because the FF_HAVE* macros are not defined for the executable targets
+2
View File
@@ -12,6 +12,8 @@ typedef struct BatteryResult
FFstrbuf technology;
FFstrbuf capacity;
FFstrbuf status;
FFstrbuf adapterName;
int adapterWatts;
} BatteryResult;
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results);
+10
View File
@@ -69,6 +69,16 @@ const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
else
ffStrbufAppendS(&battery->status, "");
ffStrbufInit(&battery->adapterName);
battery->adapterWatts = -1;
CFDictionaryRef adapter;
if(!ffCfDictGetDict(properties, CFSTR("AdapterDetails"), &adapter))
{
ffCfDictGetInt(adapter, CFSTR("Watts"), &battery->adapterWatts);
ffCfDictGetString(adapter, CFSTR("Name"), &battery->adapterName);
}
CFRelease(properties);
IOObjectRelease(registryEntry);
}
+3
View File
@@ -70,6 +70,9 @@ static void parseBattery(FFstrbuf* dir, FFlist* results)
ffStrbufAppendS(dir, "/status");
ffReadFileBuffer(dir->chars, &result->status);
ffStrbufSubstrBefore(dir, dirLength);
ffStrbufInitA(&result->adapterName, 0);
result->adapterWatts = -1;
}
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results) {
+8
View File
@@ -1117,6 +1117,12 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
optionParseString(key, value, &instance->config.battery.outputFormat);
else if(strcasecmp(key, "--battery-error") == 0)
optionParseString(key, value, &instance->config.battery.errorFormat);
else if(strcasecmp(key, "--power-adapter-key") == 0)
optionParseString(key, value, &instance->config.powerAdapter.key);
else if(strcasecmp(key, "--power-adapter-format") == 0)
optionParseString(key, value, &instance->config.powerAdapter.outputFormat);
else if(strcasecmp(key, "--power-adapter-error") == 0)
optionParseString(key, value, &instance->config.powerAdapter.errorFormat);
else if(strcasecmp(key, "--locale-key") == 0)
optionParseString(key, value, &instance->config.locale.key);
else if(strcasecmp(key, "--locale-format") == 0)
@@ -1442,6 +1448,8 @@ int main(int argc, const char** argv)
startIndex = colonIndex + 1;
}
ffStrbufDestroy(&data.structure);
ffValuestoreDestroy(&data.customValues);
ffFinish(&instance);
}
+1
View File
@@ -116,6 +116,7 @@ typedef struct FFconfig
FFModuleArgs swap;
FFModuleArgs disk;
FFModuleArgs battery;
FFModuleArgs powerAdapter;
FFModuleArgs locale;
FFModuleArgs localIP;
FFModuleArgs publicIP;
+23
View File
@@ -5,6 +5,9 @@
#define FF_BATTERY_MODULE_NAME "Battery"
#define FF_BATTERY_NUM_FORMAT_ARGS 5
#define FF_POWER_ADAPTER_MODULE_NAME "Power Adapter"
#define FF_POWER_ADAPTER_MODULE_ARGS 2
static void printBattery(FFinstance* instance, const BatteryResult* result, uint8_t index)
{
if(instance->config.battery.outputFormat.length == 0)
@@ -44,6 +47,26 @@ static void printBattery(FFinstance* instance, const BatteryResult* result, uint
{FF_FORMAT_ARG_TYPE_STRBUF, &result->status}
});
}
if(result->adapterWatts != -1)
{
if(instance->config.powerAdapter.outputFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter.key);
if(result->adapterName.length > 0)
puts(result->adapterName.chars);
else
printf("%dW\n", result->adapterWatts);
}
else
{
ffPrintFormat(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter, FF_POWER_ADAPTER_MODULE_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_INT, &result->adapterWatts},
{FF_FORMAT_ARG_TYPE_STRBUF, &result->adapterName},
});
}
}
}
void ffPrintBattery(FFinstance* instance)
+5 -20
View File
@@ -6,6 +6,7 @@
#include "common/parsing.h"
#include <stdlib.h>
#include <locale.h>
#define FF_LOCALE_MODULE_NAME "Locale"
#define FF_LOCALE_NUM_FORMAT_ARGS 1
@@ -25,27 +26,11 @@ static void getLocaleFromEnv(FFstrbuf* locale)
static void getLocaleFromCmd(FFstrbuf* locale)
{
FFstrbuf buffer;
ffStrbufInitA(&buffer, 0);
char* args[] = { "locale", NULL };
if(ffProcessAppendStdOut(&buffer, args) == NULL)
{
ffParsePropLines(buffer.chars, "LANG=\"", locale);
ffStrbufTrimRight(locale, '"');
ffStrbufAppendS(locale, setlocale(LC_ALL, NULL));
if(locale->length > 0)
return;
if(locale->length == 0)
{
ffParsePropLines(buffer.chars, "LC_ALL=\"", locale);
ffStrbufTrimRight(locale, '"');
if(locale->length == 0)
{
ffParsePropLines(buffer.chars, "LC_MESSAGES=\"", locale);
ffStrbufTrimRight(locale, '"');
}
}
}
ffStrbufDestroy(&buffer);
ffStrbufAppendS(locale, setlocale(LC_MESSAGES, NULL));
}
void ffPrintLocale(FFinstance* instance)
+3
View File
@@ -15,6 +15,7 @@ void ffPrintPublicIp(FFinstance* instance)
if(result.length == 0)
{
ffPrintError(instance, FF_PUBLICIP_MODULE_NAME, 0, &instance->config.publicIP, "Failed to connect to an IP detection server");
ffStrbufDestroy(&result);
return;
}
@@ -29,4 +30,6 @@ void ffPrintPublicIp(FFinstance* instance)
{FF_FORMAT_ARG_TYPE_STRBUF, &result}
});
}
ffStrbufDestroy(&result);
}
+10
View File
@@ -57,3 +57,13 @@ const char* ffCfDictGetInt(CFDictionaryRef dict, CFStringRef key, int* result)
return "Number type is not SInt32";
return NULL;
}
const char* ffCfDictGetDict(CFDictionaryRef dict, CFStringRef key, CFDictionaryRef* result)
{
CFDictionaryRef cf = (CFDictionaryRef)CFDictionaryGetValue(dict, key);
if (cf == NULL || CFGetTypeID(cf) != CFDictionaryGetTypeID())
return "TypeID is not 'CFDictionary'";
*result = cf;
return NULL;
}
+1
View File
@@ -11,5 +11,6 @@ const char* ffCfStrGetString(CFStringRef str, FFstrbuf* result);
const char* ffCfDictGetString(CFDictionaryRef dict, CFStringRef key, FFstrbuf* result);
const char* ffCfDictGetBool(CFDictionaryRef dict, CFStringRef key, bool* result);
const char* ffCfDictGetInt(CFDictionaryRef dict, CFStringRef key, int* result);
const char* ffCfDictGetDict(CFDictionaryRef dict, CFStringRef key, CFDictionaryRef* result);
#endif