Skip to content

Commit 6e3e717

Browse files
--<module>-error options
1 parent aae182c commit 6e3e717

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+546
-563
lines changed

src/common/caching.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void ffCacheClose(FFcache* cache)
7777
fclose(cache->split);
7878
}
7979

80-
static bool printCachedValue(FFinstance* instance, const char* moduleName, const FFstrbuf* customKeyFormat)
80+
static bool printCachedValue(FFinstance* instance, const char* moduleName, const FFModuleArgs* moduleArgs)
8181
{
8282
FFstrbuf content;
8383
ffStrbufInitA(&content, 512);
@@ -95,7 +95,7 @@ static bool printCachedValue(FFinstance* instance, const char* moduleName, const
9595
{
9696
uint32_t nullByteIndex = ffStrbufNextIndexC(&content, startIndex, '\0');
9797
uint8_t moduleIndex = (moduleCounter == 1 && nullByteIndex == content.length) ? 0 : moduleCounter;
98-
ffPrintLogoAndKey(instance, moduleName, moduleIndex, customKeyFormat);
98+
ffPrintLogoAndKey(instance, moduleName, moduleIndex, &moduleArgs->key);
9999
puts(content.chars + startIndex);
100100
startIndex = nullByteIndex + 1;
101101
++moduleCounter;
@@ -106,7 +106,7 @@ static bool printCachedValue(FFinstance* instance, const char* moduleName, const
106106
return moduleCounter > 1;
107107
}
108108

109-
static bool printCachedFormat(FFinstance* instance, const char* moduleName, const FFstrbuf* customKeyFormat, const FFstrbuf* formatString, uint32_t numArgs)
109+
static bool printCachedFormat(FFinstance* instance, const char* moduleName, const FFModuleArgs* moduleArgs, uint32_t numArgs)
110110
{
111111
FFstrbuf content;
112112
ffStrbufInitA(&content, 512);
@@ -134,7 +134,7 @@ static bool printCachedFormat(FFinstance* instance, const char* moduleName, cons
134134
if(argumentCounter == numArgs)
135135
{
136136
uint8_t moduleIndex = (moduleCounter == 1 && nullByteIndex == content.length) ? 0 : moduleCounter;
137-
ffPrintFormatString(instance, moduleName, moduleIndex, customKeyFormat, formatString, NULL, numArgs, arguments);
137+
ffPrintFormat(instance, moduleName, moduleIndex, moduleArgs, numArgs, arguments);
138138
++moduleCounter;
139139
argumentCounter = 0;
140140
}
@@ -148,27 +148,27 @@ static bool printCachedFormat(FFinstance* instance, const char* moduleName, cons
148148
return moduleCounter > 1;
149149
}
150150

151-
bool ffPrintFromCache(FFinstance* instance, const char* moduleName, const FFstrbuf* customKeyFormat, const FFstrbuf* formatString, uint32_t numArgs)
151+
bool ffPrintFromCache(FFinstance* instance, const char* moduleName, const FFModuleArgs* moduleArgs, uint32_t numArgs)
152152
{
153153
if(instance->config.recache)
154154
return false;
155155

156-
if(formatString == NULL || formatString->length == 0)
157-
return printCachedValue(instance, moduleName, customKeyFormat);
156+
if(moduleArgs->outputFormat.length == 0)
157+
return printCachedValue(instance, moduleName, moduleArgs);
158158
else
159-
return printCachedFormat(instance, moduleName, customKeyFormat, formatString, numArgs);
159+
return printCachedFormat(instance, moduleName, moduleArgs, numArgs);
160160
}
161161

162-
void ffPrintAndAppendToCache(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, FFcache* cache, const FFstrbuf* value, const FFstrbuf* formatString, uint32_t numArgs, const FFformatarg* arguments)
162+
void ffPrintAndAppendToCache(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, FFcache* cache, const FFstrbuf* value, uint32_t numArgs, const FFformatarg* arguments)
163163
{
164-
if(formatString == NULL || formatString->length == 0)
164+
if(moduleArgs->outputFormat.length == 0)
165165
{
166-
ffPrintLogoAndKey(instance, moduleName, moduleIndex, customKeyFormat);
166+
ffPrintLogoAndKey(instance, moduleName, moduleIndex, &moduleArgs->key);
167167
ffStrbufPutTo(value, stdout);
168168
}
169169
else
170170
{
171-
ffPrintFormatString(instance, moduleName, moduleIndex, customKeyFormat, formatString, NULL, numArgs, arguments);
171+
ffPrintFormat(instance, moduleName, moduleIndex, moduleArgs, numArgs, arguments);
172172
}
173173

174174
if(cache->value != NULL)
@@ -191,10 +191,10 @@ void ffPrintAndAppendToCache(FFinstance* instance, const char* moduleName, uint8
191191
}
192192
}
193193

194-
void ffPrintAndWriteToCache(FFinstance* instance, const char* moduleName, const FFstrbuf* customKeyFormat, const FFstrbuf* value, const FFstrbuf* formatString, uint32_t numArgs, const FFformatarg* arguments)
194+
void ffPrintAndWriteToCache(FFinstance* instance, const char* moduleName, const FFModuleArgs* moduleArgs, const FFstrbuf* value, uint32_t numArgs, const FFformatarg* arguments)
195195
{
196196
FFcache cache;
197197
ffCacheOpenWrite(instance, moduleName, &cache);
198-
ffPrintAndAppendToCache(instance, moduleName, 0, customKeyFormat, &cache, value, formatString, numArgs, arguments);
198+
ffPrintAndAppendToCache(instance, moduleName, 0, moduleArgs, &cache, value, numArgs, arguments);
199199
ffCacheClose(&cache);
200200
}

src/common/format.c

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,6 @@ void ffFormatAppendFormatArg(FFstrbuf* buffer, const FFformatarg* formatarg)
3232
}
3333
}
3434

35-
static inline bool placeholderValueIsForError(const FFstrbuf* placeholderValue)
36-
{
37-
return
38-
ffStrbufIgnCaseCompS(placeholderValue, "e") == 0 ||
39-
ffStrbufIgnCaseCompS(placeholderValue, "error") == 0 ||
40-
ffStrbufIgnCaseCompS(placeholderValue, "0") == 0
41-
;
42-
}
43-
4435
static inline uint32_t getArgumentIndex(const FFstrbuf* placeholderValue)
4536
{
4637
uint32_t result = UINT32_MAX;
@@ -82,7 +73,7 @@ static inline bool formatArgSet(const FFformatarg* arg)
8273
);
8374
}
8475

85-
void ffParseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, const FFstrbuf* error, uint32_t numArgs, const FFformatarg* arguments)
76+
void ffParseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, uint32_t numArgs, const FFformatarg* arguments)
8677
{
8778
uint32_t argCounter = 0;
8879

@@ -129,13 +120,6 @@ void ffParseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, const FFst
129120
while(i < formatstr->length && formatstr->chars[i] != '}')
130121
ffStrbufAppendC(&placeholderValue, formatstr->chars[i++]);
131122

132-
// test for error, if so print it
133-
if(placeholderValueIsForError(&placeholderValue)) {
134-
ffStrbufAppend(buffer, error);
135-
ffStrbufDestroy(&placeholderValue);
136-
continue;
137-
}
138-
139123
// test if for stop, if so break the loop
140124
if(placeholderValue.length == 1 && placeholderValue.chars[0] == '-')
141125
{
@@ -187,14 +171,6 @@ void ffParseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, const FFst
187171
{
188172
ffStrbufSubstrAfter(&placeholderValue, 0);
189173

190-
// continue if an error is set
191-
if(placeholderValueIsForError(&placeholderValue) && error != NULL && error->length > 0)
192-
{
193-
++numOpenIfs;
194-
ffStrbufDestroy(&placeholderValue);
195-
continue;
196-
}
197-
198174
uint32_t index = getArgumentIndex(&placeholderValue);
199175

200176
// testing for an invalid index
@@ -224,14 +200,6 @@ void ffParseFormatString(FFstrbuf* buffer, const FFstrbuf* formatstr, const FFst
224200
{
225201
ffStrbufSubstrAfter(&placeholderValue, 0);
226202

227-
//continue if an error os not set
228-
if(placeholderValueIsForError(&placeholderValue) && (error == NULL || error->length == 0))
229-
{
230-
++numOpenNotIfs;
231-
ffStrbufDestroy(&placeholderValue);
232-
continue;
233-
}
234-
235203
uint32_t index = getArgumentIndex(&placeholderValue);
236204

237205
// testing for an invalid index

src/common/init.c

Lines changed: 41 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ static void initState(FFstate* state)
102102
initCacheDir(state);
103103
}
104104

105+
static void initModuleArg(FFModuleArgs* args)
106+
{
107+
ffStrbufInitA(&args->key, 0);
108+
ffStrbufInitA(&args->outputFormat, 0);
109+
ffStrbufInitA(&args->errorFormat, 0);
110+
}
111+
105112
static void defaultConfig(FFinstance* instance)
106113
{
107114
ffStrbufInit(&instance->config.logoSource);
@@ -128,74 +135,40 @@ static void defaultConfig(FFinstance* instance)
128135
instance->config.glType = FF_GL_TYPE_AUTO;
129136
instance->config.pipe = false;
130137

131-
ffStrbufInitA(&instance->config.osFormat, 0);
132-
ffStrbufInitA(&instance->config.osKey, 0);
133-
ffStrbufInitA(&instance->config.hostFormat, 0);
134-
ffStrbufInitA(&instance->config.hostKey, 0);
135-
ffStrbufInitA(&instance->config.kernelFormat, 0);
136-
ffStrbufInitA(&instance->config.kernelKey, 0);
137-
ffStrbufInitA(&instance->config.uptimeFormat, 0);
138-
ffStrbufInitA(&instance->config.uptimeKey, 0);
139-
ffStrbufInitA(&instance->config.processesFormat, 0);
140-
ffStrbufInitA(&instance->config.processesKey, 0);
141-
ffStrbufInitA(&instance->config.packagesFormat, 0);
142-
ffStrbufInitA(&instance->config.packagesKey, 0);
143-
ffStrbufInitA(&instance->config.shellFormat, 0);
144-
ffStrbufInitA(&instance->config.shellKey, 0);
145-
ffStrbufInitA(&instance->config.resolutionFormat, 0);
146-
ffStrbufInitA(&instance->config.resolutionKey, 0);
147-
ffStrbufInitA(&instance->config.deFormat, 0);
148-
ffStrbufInitA(&instance->config.deKey, 0);
149-
ffStrbufInitA(&instance->config.wmFormat, 0);
150-
ffStrbufInitA(&instance->config.wmKey, 0);
151-
ffStrbufInitA(&instance->config.wmThemeFormat, 0);
152-
ffStrbufInitA(&instance->config.wmThemeKey, 0);
153-
ffStrbufInitA(&instance->config.themeFormat, 0);
154-
ffStrbufInitA(&instance->config.themeKey, 0);
155-
ffStrbufInitA(&instance->config.iconsFormat, 0);
156-
ffStrbufInitA(&instance->config.iconsKey, 0);
157-
ffStrbufInitA(&instance->config.fontFormat, 0);
158-
ffStrbufInitA(&instance->config.fontKey, 0);
159-
ffStrbufInitA(&instance->config.cursorKey, 0);
160-
ffStrbufInitA(&instance->config.cursorFormat, 0);
161-
ffStrbufInitA(&instance->config.terminalFormat, 0);
162-
ffStrbufInitA(&instance->config.terminalKey, 0);
163-
ffStrbufInitA(&instance->config.termFontFormat, 0);
164-
ffStrbufInitA(&instance->config.termFontKey, 0);
165-
ffStrbufInitA(&instance->config.cpuFormat, 0);
166-
ffStrbufInitA(&instance->config.cpuKey, 0);
167-
ffStrbufInitA(&instance->config.cpuUsageFormat, 0);
168-
ffStrbufInitA(&instance->config.cpuUsageKey, 0);
169-
ffStrbufInitA(&instance->config.gpuFormat, 0);
170-
ffStrbufInitA(&instance->config.gpuKey, 0);
171-
ffStrbufInitA(&instance->config.memoryFormat, 0);
172-
ffStrbufInitA(&instance->config.memoryKey, 0);
173-
ffStrbufInitA(&instance->config.diskFormat, 0);
174-
ffStrbufInitA(&instance->config.diskKey, 0);
175-
ffStrbufInitA(&instance->config.batteryFormat, 0);
176-
ffStrbufInitA(&instance->config.batteryKey, 0);
177-
ffStrbufInitA(&instance->config.localeFormat, 0);
178-
ffStrbufInitA(&instance->config.localeKey, 0);
179-
ffStrbufInitA(&instance->config.localIpKey, 0);
180-
ffStrbufInitA(&instance->config.localIpFormat, 0);
181-
ffStrbufInitA(&instance->config.publicIpKey, 0);
182-
ffStrbufInitA(&instance->config.publicIpFormat, 0);
183-
ffStrbufInitA(&instance->config.playerKey, 0);
184-
ffStrbufInitA(&instance->config.playerFormat, 0);
185-
ffStrbufInitA(&instance->config.songKey, 0);
186-
ffStrbufInitA(&instance->config.songFormat, 0);
187-
ffStrbufInitA(&instance->config.dateTimeKey, 0);
188-
ffStrbufInitA(&instance->config.dateTimeFormat, 0);
189-
ffStrbufInitA(&instance->config.dateKey, 0);
190-
ffStrbufInitA(&instance->config.dateFormat, 0);
191-
ffStrbufInitA(&instance->config.timeKey, 0);
192-
ffStrbufInitA(&instance->config.timeFormat, 0);
193-
ffStrbufInitA(&instance->config.vulkanKey, 0);
194-
ffStrbufInitA(&instance->config.vulkanFormat, 0);
195-
ffStrbufInitA(&instance->config.openGLKey, 0);
196-
ffStrbufInitA(&instance->config.openGLFormat, 0);
197-
ffStrbufInitA(&instance->config.openCLKey, 0);
198-
ffStrbufInitA(&instance->config.openCLFormat, 0);
138+
initModuleArg(&instance->config.os);
139+
initModuleArg(&instance->config.host);
140+
initModuleArg(&instance->config.kernel);
141+
initModuleArg(&instance->config.uptime);
142+
initModuleArg(&instance->config.processes);
143+
initModuleArg(&instance->config.packages);
144+
initModuleArg(&instance->config.shell);
145+
initModuleArg(&instance->config.resolution);
146+
initModuleArg(&instance->config.de);
147+
initModuleArg(&instance->config.wm);
148+
initModuleArg(&instance->config.wmTheme);
149+
initModuleArg(&instance->config.theme);
150+
initModuleArg(&instance->config.icons);
151+
initModuleArg(&instance->config.font);
152+
initModuleArg(&instance->config.cursor);
153+
initModuleArg(&instance->config.terminal);
154+
initModuleArg(&instance->config.terminalFont);
155+
initModuleArg(&instance->config.cpu);
156+
initModuleArg(&instance->config.cpuUsage);
157+
initModuleArg(&instance->config.gpu);
158+
initModuleArg(&instance->config.memory);
159+
initModuleArg(&instance->config.disk);
160+
initModuleArg(&instance->config.battery);
161+
initModuleArg(&instance->config.locale);
162+
initModuleArg(&instance->config.localIP);
163+
initModuleArg(&instance->config.publicIP);
164+
initModuleArg(&instance->config.player);
165+
initModuleArg(&instance->config.song);
166+
initModuleArg(&instance->config.dateTime);
167+
initModuleArg(&instance->config.date);
168+
initModuleArg(&instance->config.time);
169+
initModuleArg(&instance->config.vulkan);
170+
initModuleArg(&instance->config.openGL);
171+
initModuleArg(&instance->config.openCL);
199172

200173
ffStrbufInitA(&instance->config.libPCI, 0);
201174
ffStrbufInitA(&instance->config.libVulkan, 0);

src/common/printing.c

Lines changed: 52 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ void ffPrintLogoAndKey(FFinstance* instance, const char* moduleName, uint8_t mod
1010
ffPrintColor(&instance->config.mainColor);
1111
}
1212

13+
//NULL check is required for modules with custom keys, e.g. disk with the folder path
1314
if(customKeyFormat == NULL || customKeyFormat->length == 0)
1415
{
1516
fputs(moduleName, stdout);
@@ -21,7 +22,7 @@ void ffPrintLogoAndKey(FFinstance* instance, const char* moduleName, uint8_t mod
2122
{
2223
FFstrbuf key;
2324
ffStrbufInit(&key);
24-
ffParseFormatString(&key, customKeyFormat, NULL, 1, (FFformatarg[]){
25+
ffParseFormatString(&key, customKeyFormat, 1, (FFformatarg[]){
2526
{FF_FORMAT_ARG_TYPE_UINT8, &moduleIndex}
2627
});
2728
ffStrbufWriteTo(&key, stdout);
@@ -37,52 +38,73 @@ void ffPrintLogoAndKey(FFinstance* instance, const char* moduleName, uint8_t mod
3738
fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout);
3839
}
3940

40-
void ffPrintError(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* formatString, uint32_t numFormatArgs, const char* message, ...)
41+
void ffPrintFormatString(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* format, uint32_t numArgs, const FFformatarg* arguments)
4142
{
42-
if(!instance->config.showErrors)
43-
return;
43+
FFstrbuf buffer;
44+
ffStrbufInitA(&buffer, 256);
4445

45-
va_list arguments;
46-
va_start(arguments, message);
46+
ffParseFormatString(&buffer, format, numArgs, arguments);
4747

48-
if(formatString == NULL || formatString->length == 0)
48+
if(buffer.length > 0)
4949
{
5050
ffPrintLogoAndKey(instance, moduleName, moduleIndex, customKeyFormat);
51-
fputs(FASTFETCH_TEXT_MODIFIER_ERROR, stdout);
52-
vprintf(message, arguments);
53-
puts(FASTFETCH_TEXT_MODIFIER_RESET);
51+
ffStrbufPutTo(&buffer, stdout);
5452
}
55-
else
56-
{
57-
FF_STRBUF_CREATE(error);
58-
ffStrbufAppendVF(&error, message, arguments);
59-
60-
// calloc sets all to 0 and FF_FORMAT_ARG_TYPE_NULL also has value 0 so we don't need to explictly set it
61-
FFformatarg* nullArgs = calloc(numFormatArgs, sizeof(FFformatarg));
6253

63-
ffPrintFormatString(instance, moduleName, moduleIndex, customKeyFormat, formatString, &error, numFormatArgs, nullArgs);
64-
65-
free(nullArgs);
66-
ffStrbufDestroy(&error);
67-
}
54+
ffStrbufDestroy(&buffer);
55+
}
6856

69-
va_end(arguments);
57+
void ffPrintFormat(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, uint32_t numArgs, const FFformatarg* arguments)
58+
{
59+
ffPrintFormatString(instance, moduleName, moduleIndex, &moduleArgs->key, &moduleArgs->outputFormat, numArgs, arguments);
7060
}
7161

72-
void ffPrintFormatString(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* formatString, const FFstrbuf* error, uint32_t numArgs, const FFformatarg* arguments)
62+
static void printError(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* customErrorFormat, const char* message, va_list arguments)
7363
{
74-
FFstrbuf buffer;
75-
ffStrbufInitA(&buffer, 256);
64+
bool hasCustomErrorFormat = customErrorFormat != NULL && customErrorFormat->length > 0;
65+
if(!hasCustomErrorFormat && !instance->config.showErrors)
66+
return;
7667

77-
ffParseFormatString(&buffer, formatString, error, numArgs, arguments);
68+
if(hasCustomErrorFormat)
69+
{
70+
FFstrbuf error;
71+
ffStrbufInit(&error);
72+
ffStrbufAppendVF(&error, message, arguments);
7873

79-
if(buffer.length > 0)
74+
ffPrintFormatString(instance, moduleName, moduleIndex, customKeyFormat, customErrorFormat, 1, (FFformatarg[]) {
75+
{FF_FORMAT_ARG_TYPE_STRBUF, &error}
76+
});
77+
78+
ffStrbufDestroy(&error);
79+
}
80+
else
8081
{
8182
ffPrintLogoAndKey(instance, moduleName, moduleIndex, customKeyFormat);
82-
ffStrbufPutTo(&buffer, stdout);
83+
84+
if(!instance->config.pipe)
85+
fputs(FASTFETCH_TEXT_MODIFIER_ERROR, stdout);
86+
87+
vprintf(message, arguments);
88+
89+
if(!instance->config.pipe)
90+
puts(FASTFETCH_TEXT_MODIFIER_RESET);
8391
}
92+
}
8493

85-
ffStrbufDestroy(&buffer);
94+
void ffPrintErrorString(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat, const FFstrbuf* customErrorFormat, const char* message, ...)
95+
{
96+
va_list arguments;
97+
va_start(arguments, message);
98+
printError(instance, moduleName, moduleIndex, customKeyFormat, customErrorFormat, message, arguments);
99+
va_end(arguments);
100+
}
101+
102+
void ffPrintError(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, const char* message, ...)
103+
{
104+
va_list arguments;
105+
va_start(arguments, message);
106+
printError(instance, moduleName, moduleIndex, &moduleArgs->key, &moduleArgs->errorFormat, message, arguments);
107+
va_end(arguments);
86108
}
87109

88110
void ffPrintColor(const FFstrbuf* colorValue)

0 commit comments

Comments
 (0)