Skip to content

Commit 970863e

Browse files
committed
Global: simplify code of module matching
1 parent 0b473e3 commit 970863e

File tree

2 files changed

+24
-457
lines changed

2 files changed

+24
-457
lines changed

src/common/commandoption.c

Lines changed: 14 additions & 303 deletions
Original file line numberDiff line numberDiff line change
@@ -3,319 +3,30 @@
33

44
#include <ctype.h>
55

6-
static inline bool tryModule(const char* type, void* options)
7-
{
8-
FFModuleBaseInfo* baseInfo = (FFModuleBaseInfo*) options;
9-
if (ffStrEqualsIgnCase(type, baseInfo->name))
10-
{
11-
baseInfo->printModule(options);
12-
return true;
13-
}
14-
return false;
15-
}
16-
176
bool ffParseModuleCommand(const char* type)
187
{
19-
FFconfig* cfg = &instance.config;
20-
switch (toupper(type[0]))
21-
{
22-
case 'B': {
23-
return
24-
tryModule(type, &cfg->battery) ||
25-
tryModule(type, &cfg->bios) ||
26-
tryModule(type, &cfg->bluetooth) ||
27-
tryModule(type, &cfg->board) ||
28-
tryModule(type, &cfg->break_) ||
29-
tryModule(type, &cfg->brightness) ||
30-
false;
31-
}
32-
33-
case 'C': {
34-
return
35-
tryModule(type, &cfg->chassis) ||
36-
tryModule(type, &cfg->command) ||
37-
tryModule(type, &cfg->colors) ||
38-
tryModule(type, &cfg->cpu) ||
39-
tryModule(type, &cfg->cpuUsage) ||
40-
tryModule(type, &cfg->cursor) ||
41-
tryModule(type, &cfg->custom) ||
42-
false;
43-
}
44-
45-
case 'D': {
46-
return
47-
tryModule(type, &cfg->dateTime) ||
48-
tryModule(type, &cfg->de) ||
49-
tryModule(type, &cfg->display) ||
50-
tryModule(type, &cfg->disk) ||
51-
false;
52-
}
53-
54-
case 'F': {
55-
return
56-
tryModule(type, &cfg->font) ||
57-
false;
58-
}
59-
60-
case 'G': {
61-
return
62-
tryModule(type, &cfg->gamepad) ||
63-
tryModule(type, &cfg->gpu) ||
64-
false;
65-
}
66-
67-
case 'H': {
68-
return
69-
tryModule(type, &cfg->host) ||
70-
false;
71-
}
72-
73-
case 'I': {
74-
return
75-
tryModule(type, &cfg->icons) ||
76-
false;
77-
}
8+
if(!isalpha(type[0])) return false;
789

79-
case 'K': {
80-
return
81-
tryModule(type, &cfg->kernel) ||
82-
false;
83-
}
84-
85-
case 'L': {
86-
return
87-
tryModule(type, &cfg->lm) ||
88-
tryModule(type, &cfg->locale) ||
89-
tryModule(type, &cfg->localIP) ||
90-
false;
91-
}
92-
93-
case 'M': {
94-
return
95-
tryModule(type, &cfg->media) ||
96-
tryModule(type, &cfg->memory) ||
97-
tryModule(type, &cfg->monitor) ||
98-
false;
99-
}
100-
101-
case 'O': {
102-
return
103-
tryModule(type, &cfg->openCL) ||
104-
tryModule(type, &cfg->openGL) ||
105-
tryModule(type, &cfg->os) ||
106-
false;
107-
}
108-
109-
case 'P': {
110-
return
111-
tryModule(type, &cfg->packages) ||
112-
tryModule(type, &cfg->player) ||
113-
tryModule(type, &cfg->powerAdapter) ||
114-
tryModule(type, &cfg->processes) ||
115-
tryModule(type, &cfg->publicIP) ||
116-
false;
117-
}
118-
119-
case 'S': {
120-
return
121-
tryModule(type, &cfg->separator) ||
122-
tryModule(type, &cfg->shell) ||
123-
tryModule(type, &cfg->sound) ||
124-
tryModule(type, &cfg->swap) ||
125-
false;
126-
}
127-
128-
case 'T': {
129-
return
130-
tryModule(type, &cfg->terminal) ||
131-
tryModule(type, &cfg->terminalFont) ||
132-
tryModule(type, &cfg->terminalSize) ||
133-
tryModule(type, &cfg->title) ||
134-
tryModule(type, &cfg->theme) ||
135-
false;
136-
}
137-
138-
case 'U': {
139-
return
140-
tryModule(type, &cfg->uptime) ||
141-
tryModule(type, &cfg->users) ||
142-
false;
143-
}
144-
145-
case 'V': {
146-
return
147-
tryModule(type, &cfg->vulkan) ||
148-
false;
149-
}
150-
151-
case 'W': {
152-
return
153-
tryModule(type, &cfg->wallpaper) ||
154-
tryModule(type, &cfg->weather) ||
155-
tryModule(type, &cfg->wm) ||
156-
tryModule(type, &cfg->wifi) ||
157-
tryModule(type, &cfg->wmTheme) ||
158-
false;
10+
for (FFModuleBaseInfo** modules = ffModuleInfos[toupper(type[0]) - 'A']; *modules; ++modules)
11+
{
12+
FFModuleBaseInfo* baseInfo = *modules;
13+
if (ffStrEqualsIgnCase(type, baseInfo->name))
14+
{
15+
baseInfo->printModule(baseInfo);
16+
return true;
15917
}
160-
161-
default:
162-
return false;
16318
}
164-
}
165-
166-
static inline bool tryModuleCommandOptions(const char* key, const char* value, void* options)
167-
{
168-
FFModuleBaseInfo* baseInfo = (FFModuleBaseInfo*) options;
169-
return baseInfo->parseCommandOptions(options, key, value);
19+
return false;
17020
}
17121

17222
bool ffParseModuleOptions(const char* key, const char* value)
17323
{
174-
if (!ffStrStartsWith(key, "--")) return false;
175-
FFconfig* cfg = &instance.config;
24+
if (!ffStrStartsWith(key, "--") || !isalpha(key[2])) return false;
17625

177-
switch (toupper(key[2]))
26+
for (FFModuleBaseInfo** modules = ffModuleInfos[toupper(key[2]) - 'A']; *modules; ++modules)
17827
{
179-
case 'B': {
180-
return
181-
tryModuleCommandOptions(key, value, &cfg->battery) ||
182-
tryModuleCommandOptions(key, value, &cfg->bios) ||
183-
tryModuleCommandOptions(key, value, &cfg->bluetooth) ||
184-
tryModuleCommandOptions(key, value, &cfg->board) ||
185-
tryModuleCommandOptions(key, value, &cfg->break_) ||
186-
tryModuleCommandOptions(key, value, &cfg->brightness) ||
187-
false;
188-
}
189-
190-
case 'C': {
191-
return
192-
tryModuleCommandOptions(key, value, &cfg->chassis) ||
193-
tryModuleCommandOptions(key, value, &cfg->command) ||
194-
tryModuleCommandOptions(key, value, &cfg->colors) ||
195-
tryModuleCommandOptions(key, value, &cfg->cpu) ||
196-
tryModuleCommandOptions(key, value, &cfg->cpuUsage) ||
197-
tryModuleCommandOptions(key, value, &cfg->cursor) ||
198-
tryModuleCommandOptions(key, value, &cfg->custom) ||
199-
false;
200-
}
201-
202-
case 'D': {
203-
return
204-
tryModuleCommandOptions(key, value, &cfg->dateTime) ||
205-
tryModuleCommandOptions(key, value, &cfg->de) ||
206-
tryModuleCommandOptions(key, value, &cfg->display) ||
207-
tryModuleCommandOptions(key, value, &cfg->disk) ||
208-
false;
209-
}
210-
211-
case 'F': {
212-
return
213-
tryModuleCommandOptions(key, value, &cfg->font) ||
214-
false;
215-
}
216-
217-
case 'G': {
218-
return
219-
tryModuleCommandOptions(key, value, &cfg->gamepad) ||
220-
tryModuleCommandOptions(key, value, &cfg->gpu) ||
221-
false;
222-
}
223-
224-
case 'H': {
225-
return
226-
tryModuleCommandOptions(key, value, &cfg->host) ||
227-
false;
228-
}
229-
230-
case 'I': {
231-
return
232-
tryModuleCommandOptions(key, value, &cfg->icons) ||
233-
false;
234-
}
235-
236-
case 'K': {
237-
return
238-
tryModuleCommandOptions(key, value, &cfg->kernel) ||
239-
false;
240-
}
241-
242-
case 'L': {
243-
return
244-
tryModuleCommandOptions(key, value, &cfg->lm) ||
245-
tryModuleCommandOptions(key, value, &cfg->locale) ||
246-
tryModuleCommandOptions(key, value, &cfg->localIP) ||
247-
false;
248-
}
249-
250-
case 'M': {
251-
return
252-
tryModuleCommandOptions(key, value, &cfg->media) ||
253-
tryModuleCommandOptions(key, value, &cfg->memory) ||
254-
tryModuleCommandOptions(key, value, &cfg->monitor) ||
255-
false;
256-
}
257-
258-
case 'O': {
259-
return
260-
tryModuleCommandOptions(key, value, &cfg->openCL) ||
261-
tryModuleCommandOptions(key, value, &cfg->openGL) ||
262-
tryModuleCommandOptions(key, value, &cfg->os) ||
263-
false;
264-
}
265-
266-
case 'P': {
267-
return
268-
tryModuleCommandOptions(key, value, &cfg->packages) ||
269-
tryModuleCommandOptions(key, value, &cfg->player) ||
270-
tryModuleCommandOptions(key, value, &cfg->powerAdapter) ||
271-
tryModuleCommandOptions(key, value, &cfg->processes) ||
272-
tryModuleCommandOptions(key, value, &cfg->publicIP) ||
273-
false;
274-
}
275-
276-
case 'S': {
277-
return
278-
tryModuleCommandOptions(key, value, &cfg->separator) ||
279-
tryModuleCommandOptions(key, value, &cfg->shell) ||
280-
tryModuleCommandOptions(key, value, &cfg->sound) ||
281-
tryModuleCommandOptions(key, value, &cfg->swap) ||
282-
false;
283-
}
284-
285-
case 'T': {
286-
return
287-
tryModuleCommandOptions(key, value, &cfg->terminal) ||
288-
tryModuleCommandOptions(key, value, &cfg->terminalFont) ||
289-
tryModuleCommandOptions(key, value, &cfg->terminalSize) ||
290-
tryModuleCommandOptions(key, value, &cfg->title) ||
291-
tryModuleCommandOptions(key, value, &cfg->theme) ||
292-
false;
293-
}
294-
295-
case 'U': {
296-
return
297-
tryModuleCommandOptions(key, value, &cfg->uptime) ||
298-
tryModuleCommandOptions(key, value, &cfg->users) ||
299-
false;
300-
}
301-
302-
case 'V': {
303-
return
304-
tryModuleCommandOptions(key, value, &cfg->vulkan) ||
305-
false;
306-
}
307-
308-
case 'W': {
309-
return
310-
tryModuleCommandOptions(key, value, &cfg->wallpaper) ||
311-
tryModuleCommandOptions(key, value, &cfg->weather) ||
312-
tryModuleCommandOptions(key, value, &cfg->wm) ||
313-
tryModuleCommandOptions(key, value, &cfg->wifi) ||
314-
tryModuleCommandOptions(key, value, &cfg->wmTheme) ||
315-
false;
316-
}
317-
318-
default:
319-
return false;
28+
FFModuleBaseInfo* baseInfo = *modules;
29+
if (baseInfo->parseCommandOptions(baseInfo, key, value)) return true;
32030
}
31+
return false;
32132
}

0 commit comments

Comments
 (0)