mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-30 00:37:23 +01:00
Merge pull request #249 from CarterLi/master
[macOS] add power adapter module
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -116,6 +116,7 @@ typedef struct FFconfig
|
||||
FFModuleArgs swap;
|
||||
FFModuleArgs disk;
|
||||
FFModuleArgs battery;
|
||||
FFModuleArgs powerAdapter;
|
||||
FFModuleArgs locale;
|
||||
FFModuleArgs localIP;
|
||||
FFModuleArgs publicIP;
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user