Skip to content

Commit 991d02e

Browse files
Merge pull request #249 from CarterLi/master
[macOS] add power adapter module
2 parents d31d157 + cbab8d7 commit 991d02e

File tree

11 files changed

+80
-21
lines changed

11 files changed

+80
-21
lines changed

src/common/init.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ static void initConfigDirs(FFstate* state)
7272

7373
startIndex = colonIndex + 1;
7474
}
75+
ffStrbufDestroy(&xdgConfigDirs);
7576

7677
FFstrbuf* systemConfigHome = ffListAdd(&state->configDirs);
7778
ffStrbufInitA(systemConfigHome, 64);
@@ -183,6 +184,7 @@ static void defaultConfig(FFinstance* instance)
183184
initModuleArg(&instance->config.swap);
184185
initModuleArg(&instance->config.disk);
185186
initModuleArg(&instance->config.battery);
187+
initModuleArg(&instance->config.powerAdapter);
186188
initModuleArg(&instance->config.locale);
187189
initModuleArg(&instance->config.localIP);
188190
initModuleArg(&instance->config.publicIP);
@@ -381,6 +383,17 @@ void ffFinish(FFinstance* instance)
381383
ffLogoPrintRemaining(instance);
382384

383385
resetConsole();
386+
387+
for(uint32_t i = 0; i < instance->state.configDirs.length; ++i)
388+
ffStrbufDestroy((FFstrbuf*)ffListGet(&instance->state.configDirs, i));
389+
ffListDestroy(&instance->state.configDirs);
390+
ffStrbufDestroy(&instance->state.cacheDir);
391+
for(uint8_t i = 0; i < (uint8_t) FASTFETCH_LOGO_MAX_COLORS; ++i)
392+
ffStrbufDestroy(&instance->config.logo.colors[i]);
393+
ffStrbufDestroy(&instance->config.colorKeys);
394+
ffStrbufDestroy(&instance->config.colorTitle);
395+
ffStrbufDestroy(&instance->config.separator);
396+
ffStrbufDestroy(&instance->config.logo.source);
384397
}
385398

386399
//Must be in a file compiled with the libfastfetch target, because the FF_HAVE* macros are not defined for the executable targets

src/detection/battery/battery.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ typedef struct BatteryResult
1212
FFstrbuf technology;
1313
FFstrbuf capacity;
1414
FFstrbuf status;
15+
FFstrbuf adapterName;
16+
int adapterWatts;
1517
} BatteryResult;
1618

1719
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results);

src/detection/battery/battery_apple.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results)
6969
else
7070
ffStrbufAppendS(&battery->status, "");
7171

72+
ffStrbufInit(&battery->adapterName);
73+
battery->adapterWatts = -1;
74+
75+
CFDictionaryRef adapter;
76+
if(!ffCfDictGetDict(properties, CFSTR("AdapterDetails"), &adapter))
77+
{
78+
ffCfDictGetInt(adapter, CFSTR("Watts"), &battery->adapterWatts);
79+
ffCfDictGetString(adapter, CFSTR("Name"), &battery->adapterName);
80+
}
81+
7282
CFRelease(properties);
7383
IOObjectRelease(registryEntry);
7484
}

src/detection/battery/battery_linux.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ static void parseBattery(FFstrbuf* dir, FFlist* results)
7070
ffStrbufAppendS(dir, "/status");
7171
ffReadFileBuffer(dir->chars, &result->status);
7272
ffStrbufSubstrBefore(dir, dirLength);
73+
74+
ffStrbufInitA(&result->adapterName, 0);
75+
result->adapterWatts = -1;
7376
}
7477

7578
const char* ffDetectBatteryImpl(FFinstance* instance, FFlist* results) {

src/fastfetch.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,12 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
11171117
optionParseString(key, value, &instance->config.battery.outputFormat);
11181118
else if(strcasecmp(key, "--battery-error") == 0)
11191119
optionParseString(key, value, &instance->config.battery.errorFormat);
1120+
else if(strcasecmp(key, "--power-adapter-key") == 0)
1121+
optionParseString(key, value, &instance->config.powerAdapter.key);
1122+
else if(strcasecmp(key, "--power-adapter-format") == 0)
1123+
optionParseString(key, value, &instance->config.powerAdapter.outputFormat);
1124+
else if(strcasecmp(key, "--power-adapter-error") == 0)
1125+
optionParseString(key, value, &instance->config.powerAdapter.errorFormat);
11201126
else if(strcasecmp(key, "--locale-key") == 0)
11211127
optionParseString(key, value, &instance->config.locale.key);
11221128
else if(strcasecmp(key, "--locale-format") == 0)
@@ -1442,6 +1448,8 @@ int main(int argc, const char** argv)
14421448

14431449
startIndex = colonIndex + 1;
14441450
}
1451+
ffStrbufDestroy(&data.structure);
1452+
ffValuestoreDestroy(&data.customValues);
14451453

14461454
ffFinish(&instance);
14471455
}

src/fastfetch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ typedef struct FFconfig
116116
FFModuleArgs swap;
117117
FFModuleArgs disk;
118118
FFModuleArgs battery;
119+
FFModuleArgs powerAdapter;
119120
FFModuleArgs locale;
120121
FFModuleArgs localIP;
121122
FFModuleArgs publicIP;

src/modules/battery.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
#define FF_BATTERY_MODULE_NAME "Battery"
66
#define FF_BATTERY_NUM_FORMAT_ARGS 5
77

8+
#define FF_POWER_ADAPTER_MODULE_NAME "Power Adapter"
9+
#define FF_POWER_ADAPTER_MODULE_ARGS 2
10+
811
static void printBattery(FFinstance* instance, const BatteryResult* result, uint8_t index)
912
{
1013
if(instance->config.battery.outputFormat.length == 0)
@@ -44,6 +47,26 @@ static void printBattery(FFinstance* instance, const BatteryResult* result, uint
4447
{FF_FORMAT_ARG_TYPE_STRBUF, &result->status}
4548
});
4649
}
50+
51+
if(result->adapterWatts != -1)
52+
{
53+
if(instance->config.powerAdapter.outputFormat.length == 0)
54+
{
55+
ffPrintLogoAndKey(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter.key);
56+
57+
if(result->adapterName.length > 0)
58+
puts(result->adapterName.chars);
59+
else
60+
printf("%dW\n", result->adapterWatts);
61+
}
62+
else
63+
{
64+
ffPrintFormat(instance, FF_POWER_ADAPTER_MODULE_NAME, index, &instance->config.powerAdapter, FF_POWER_ADAPTER_MODULE_ARGS, (FFformatarg[]){
65+
{FF_FORMAT_ARG_TYPE_INT, &result->adapterWatts},
66+
{FF_FORMAT_ARG_TYPE_STRBUF, &result->adapterName},
67+
});
68+
}
69+
}
4770
}
4871

4972
void ffPrintBattery(FFinstance* instance)

src/modules/locale.c

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "common/parsing.h"
77

88
#include <stdlib.h>
9+
#include <locale.h>
910

1011
#define FF_LOCALE_MODULE_NAME "Locale"
1112
#define FF_LOCALE_NUM_FORMAT_ARGS 1
@@ -25,27 +26,11 @@ static void getLocaleFromEnv(FFstrbuf* locale)
2526

2627
static void getLocaleFromCmd(FFstrbuf* locale)
2728
{
28-
FFstrbuf buffer;
29-
ffStrbufInitA(&buffer, 0);
30-
char* args[] = { "locale", NULL };
31-
if(ffProcessAppendStdOut(&buffer, args) == NULL)
32-
{
33-
ffParsePropLines(buffer.chars, "LANG=\"", locale);
34-
ffStrbufTrimRight(locale, '"');
35-
36-
if(locale->length == 0)
37-
{
38-
ffParsePropLines(buffer.chars, "LC_ALL=\"", locale);
39-
ffStrbufTrimRight(locale, '"');
40-
41-
if(locale->length == 0)
42-
{
43-
ffParsePropLines(buffer.chars, "LC_MESSAGES=\"", locale);
44-
ffStrbufTrimRight(locale, '"');
45-
}
46-
}
47-
}
48-
ffStrbufDestroy(&buffer);
29+
ffStrbufAppendS(locale, setlocale(LC_ALL, NULL));
30+
if(locale->length > 0)
31+
return;
32+
33+
ffStrbufAppendS(locale, setlocale(LC_MESSAGES, NULL));
4934
}
5035

5136
void ffPrintLocale(FFinstance* instance)

src/modules/publicip.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ void ffPrintPublicIp(FFinstance* instance)
1515
if(result.length == 0)
1616
{
1717
ffPrintError(instance, FF_PUBLICIP_MODULE_NAME, 0, &instance->config.publicIP, "Failed to connect to an IP detection server");
18+
ffStrbufDestroy(&result);
1819
return;
1920
}
2021

@@ -29,4 +30,6 @@ void ffPrintPublicIp(FFinstance* instance)
2930
{FF_FORMAT_ARG_TYPE_STRBUF, &result}
3031
});
3132
}
33+
34+
ffStrbufDestroy(&result);
3235
}

src/util/apple/cf_helpers.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,13 @@ const char* ffCfDictGetInt(CFDictionaryRef dict, CFStringRef key, int* result)
5757
return "Number type is not SInt32";
5858
return NULL;
5959
}
60+
61+
const char* ffCfDictGetDict(CFDictionaryRef dict, CFStringRef key, CFDictionaryRef* result)
62+
{
63+
CFDictionaryRef cf = (CFDictionaryRef)CFDictionaryGetValue(dict, key);
64+
if (cf == NULL || CFGetTypeID(cf) != CFDictionaryGetTypeID())
65+
return "TypeID is not 'CFDictionary'";
66+
67+
*result = cf;
68+
return NULL;
69+
}

0 commit comments

Comments
 (0)