Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/common/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ static void initConfigDirs(FFstate* state)

startIndex = colonIndex + 1;
}
ffStrbufDestroy(&xdgConfigDirs);

FFstrbuf* systemConfigHome = ffListAdd(&state->configDirs);
ffStrbufInitA(systemConfigHome, 64);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/detection/battery/battery.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 10 additions & 0 deletions src/detection/battery/battery_apple.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
3 changes: 3 additions & 0 deletions src/detection/battery/battery_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
8 changes: 8 additions & 0 deletions src/fastfetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -1442,6 +1448,8 @@ int main(int argc, const char** argv)

startIndex = colonIndex + 1;
}
ffStrbufDestroy(&data.structure);
ffValuestoreDestroy(&data.customValues);

ffFinish(&instance);
}
1 change: 1 addition & 0 deletions src/fastfetch.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ typedef struct FFconfig
FFModuleArgs swap;
FFModuleArgs disk;
FFModuleArgs battery;
FFModuleArgs powerAdapter;
FFModuleArgs locale;
FFModuleArgs localIP;
FFModuleArgs publicIP;
Expand Down
23 changes: 23 additions & 0 deletions src/modules/battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
27 changes: 6 additions & 21 deletions src/modules/locale.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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, '"');

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_ALL, NULL));
if(locale->length > 0)
return;

ffStrbufAppendS(locale, setlocale(LC_MESSAGES, NULL));
}

void ffPrintLocale(FFinstance* instance)
Expand Down
3 changes: 3 additions & 0 deletions src/modules/publicip.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -29,4 +30,6 @@ void ffPrintPublicIp(FFinstance* instance)
{FF_FORMAT_ARG_TYPE_STRBUF, &result}
});
}

ffStrbufDestroy(&result);
}
10 changes: 10 additions & 0 deletions src/util/apple/cf_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 change: 1 addition & 0 deletions src/util/apple/cf_helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -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