use array for rules
This commit is contained in:
parent
034505c356
commit
843fbab958
94
dunst.c
94
dunst.c
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
int height_limit;
|
int height_limit;
|
||||||
|
|
||||||
list *rules = NULL;
|
rule_array rules;
|
||||||
/* index of colors fit to urgency level */
|
/* index of colors fit to urgency level */
|
||||||
static ColorSet *colors[3];
|
static ColorSet *colors[3];
|
||||||
static const char *color_strings[2][3];
|
static const char *color_strings[2][3];
|
||||||
@ -93,7 +93,7 @@ char *fix_markup(char *str);
|
|||||||
void handle_mouse_click(XEvent ev);
|
void handle_mouse_click(XEvent ev);
|
||||||
void handleXEvents(void);
|
void handleXEvents(void);
|
||||||
void history_pop(void);
|
void history_pop(void);
|
||||||
rule_t *initrule(void);
|
void initrule(rule_t *r);
|
||||||
bool is_idle(void);
|
bool is_idle(void);
|
||||||
void run(void);
|
void run(void);
|
||||||
void setup(void);
|
void setup(void);
|
||||||
@ -270,13 +270,9 @@ l_node *most_important(list * l)
|
|||||||
|
|
||||||
void apply_rules(notification * n)
|
void apply_rules(notification * n)
|
||||||
{
|
{
|
||||||
if (l_is_empty(rules) || n == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (l_node * iter = rules->head; iter; iter = iter->next) {
|
|
||||||
rule_t *r = (rule_t *) iter->data;
|
|
||||||
|
|
||||||
|
for (int i = 0; i < rules.count; i++) {
|
||||||
|
rule_t *r = &(rules.rules[i]);
|
||||||
if ((!r->appname || !fnmatch(r->appname, n->appname, 0))
|
if ((!r->appname || !fnmatch(r->appname, n->appname, 0))
|
||||||
&& (!r->summary || !fnmatch(r->summary, n->summary, 0))
|
&& (!r->summary || !fnmatch(r->summary, n->summary, 0))
|
||||||
&& (!r->body || !fnmatch(r->body, n->body, 0))
|
&& (!r->body || !fnmatch(r->body, n->body, 0))
|
||||||
@ -1154,9 +1150,8 @@ void init_shortcut(keyboard_shortcut * ks)
|
|||||||
free(str_begin);
|
free(str_begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
rule_t *initrule(void)
|
void initrule(rule_t *r)
|
||||||
{
|
{
|
||||||
rule_t *r = malloc(sizeof(rule_t));
|
|
||||||
r->name = NULL;
|
r->name = NULL;
|
||||||
r->appname = NULL;
|
r->appname = NULL;
|
||||||
r->summary = NULL;
|
r->summary = NULL;
|
||||||
@ -1167,8 +1162,6 @@ rule_t *initrule(void)
|
|||||||
r->fg = NULL;
|
r->fg = NULL;
|
||||||
r->bg = NULL;
|
r->bg = NULL;
|
||||||
r->format = NULL;
|
r->format = NULL;
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_idle(void)
|
bool is_idle(void)
|
||||||
@ -1436,27 +1429,6 @@ void parse_follow_mode(const char *mode)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static rule_t *dunst_rules_find_or_create(const char *section)
|
|
||||||
{
|
|
||||||
l_node *iter;
|
|
||||||
rule_t *rule;
|
|
||||||
|
|
||||||
/* find rule */
|
|
||||||
for (iter = rules->head; iter; iter = iter->next) {
|
|
||||||
rule_t *r = (rule_t *) iter->data;
|
|
||||||
if (strcmp(r->name, section) == 0) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rule = initrule();
|
|
||||||
rule->name = strdup(section);
|
|
||||||
|
|
||||||
l_push(rules, rule);
|
|
||||||
|
|
||||||
return rule;
|
|
||||||
}
|
|
||||||
|
|
||||||
void load_options(char *cmdline_config_path)
|
void load_options(char *cmdline_config_path)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -1658,28 +1630,35 @@ void load_options(char *cmdline_config_path)
|
|||||||
|| strcmp(cur_section, "urgency_critical") == 0)
|
|| strcmp(cur_section, "urgency_critical") == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rule_t *current_rule = dunst_rules_find_or_create(cur_section);
|
/* check for existing rule with same name */
|
||||||
current_rule->appname =
|
rule_t *r = NULL;
|
||||||
ini_get_string(cur_section, "appname",
|
for (int i = 0; i < rules.count; i++)
|
||||||
current_rule->appname);
|
if (rules.rules[i].name &&
|
||||||
current_rule->summary =
|
strcmp(rules.rules[i].name, cur_section) == 0)
|
||||||
ini_get_string(cur_section, "summary",
|
r = &(rules.rules[i]);
|
||||||
current_rule->summary);
|
|
||||||
current_rule->body =
|
if (r == NULL) {
|
||||||
ini_get_string(cur_section, "body", current_rule->body);
|
rules.count++;
|
||||||
current_rule->icon =
|
rules.rules = realloc(rules.rules,
|
||||||
ini_get_string(cur_section, "icon", current_rule->icon);
|
rules.count * sizeof(rule_t));
|
||||||
current_rule->timeout =
|
r = &(rules.rules[rules.count-1]);
|
||||||
ini_get_int(cur_section, "timeout", current_rule->timeout);
|
initrule(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
r->appname = ini_get_string(cur_section, "appname", r->appname);
|
||||||
|
r->summary = ini_get_string(cur_section, "summary", r->summary);
|
||||||
|
r->body = ini_get_string(cur_section, "body", r->body);
|
||||||
|
r->icon = ini_get_string(cur_section, "icon", r->icon);
|
||||||
|
r->timeout = ini_get_int(cur_section, "timeout", r->timeout);
|
||||||
{
|
{
|
||||||
char *urg = ini_get_string(cur_section, "urgency", "");
|
char *urg = ini_get_string(cur_section, "urgency", "");
|
||||||
if (strlen(urg) > 0) {
|
if (strlen(urg) > 0) {
|
||||||
if (strcmp(urg, "low") == 0)
|
if (strcmp(urg, "low") == 0)
|
||||||
current_rule->urgency = LOW;
|
r->urgency = LOW;
|
||||||
else if (strcmp(urg, "normal") == 0)
|
else if (strcmp(urg, "normal") == 0)
|
||||||
current_rule->urgency = NORM;
|
r->urgency = NORM;
|
||||||
else if (strcmp(urg, "critical") == 0)
|
else if (strcmp(urg, "critical") == 0)
|
||||||
current_rule->urgency = CRIT;
|
r->urgency = CRIT;
|
||||||
else
|
else
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"unknown urgency: %s, ignoring\n",
|
"unknown urgency: %s, ignoring\n",
|
||||||
@ -1687,12 +1666,9 @@ void load_options(char *cmdline_config_path)
|
|||||||
free(urg);
|
free(urg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
current_rule->fg =
|
r->fg = ini_get_string(cur_section, "foreground", r->fg);
|
||||||
ini_get_string(cur_section, "foreground", current_rule->fg);
|
r->bg = ini_get_string(cur_section, "background", r->bg);
|
||||||
current_rule->bg =
|
r->format = ini_get_string(cur_section, "format", r->format);
|
||||||
ini_get_string(cur_section, "background", current_rule->bg);
|
|
||||||
current_rule->format =
|
|
||||||
ini_get_string(cur_section, "format", current_rule->format);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef STATIC_CONFIG
|
#ifndef STATIC_CONFIG
|
||||||
@ -1709,12 +1685,12 @@ int main(int argc, char *argv[])
|
|||||||
notification_queue = l_init();
|
notification_queue = l_init();
|
||||||
notification_history = l_init();
|
notification_history = l_init();
|
||||||
displayed_notifications = l_init();
|
displayed_notifications = l_init();
|
||||||
rules = l_init();
|
|
||||||
r_line_cache_init(&line_cache);
|
r_line_cache_init(&line_cache);
|
||||||
|
|
||||||
for (int i = 0; i < LENGTH(default_rules); i++) {
|
|
||||||
l_push(rules, &default_rules[i]);
|
rules.count = LENGTH(default_rules);
|
||||||
}
|
rules.rules = calloc(rules.count, sizeof(rule_t));
|
||||||
|
memcpy(rules.rules, default_rules, sizeof(rule_t) * rules.count);
|
||||||
|
|
||||||
cmdline_load(argc, argv);
|
cmdline_load(argc, argv);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user