refactor rules code
This commit is contained in:
parent
a5103e88f5
commit
39b4dfb726
82
dunst.c
82
dunst.c
@ -96,15 +96,19 @@ GQueue *displayed = NULL; /* currently displayed notifications */
|
|||||||
GQueue *history = NULL; /* history of displayed notifications */
|
GQueue *history = NULL; /* history of displayed notifications */
|
||||||
GSList *rules = NULL;
|
GSList *rules = NULL;
|
||||||
|
|
||||||
|
/* rules */
|
||||||
|
void rule_apply(rule_t *r, notification *n);
|
||||||
|
void rule_apply_all(notification *n);
|
||||||
|
bool rule_matches_notification(rule_t *r, notification *n);
|
||||||
|
void rule_init(rule_t *r);
|
||||||
|
|
||||||
/* misc funtions */
|
/* misc funtions */
|
||||||
void apply_rules(notification * n);
|
|
||||||
int cmp_notification(const void *a, const void *b);
|
int cmp_notification(const void *a, const void *b);
|
||||||
int cmp_notification_data(const void *va, const void *vb, void *data);
|
int cmp_notification_data(const void *va, const void *vb, void *data);
|
||||||
void check_timeouts(void);
|
void check_timeouts(void);
|
||||||
char *fix_markup(char *str);
|
char *fix_markup(char *str);
|
||||||
void handle_mouse_click(XEvent ev);
|
void handle_mouse_click(XEvent ev);
|
||||||
void history_pop(void);
|
void history_pop(void);
|
||||||
void initrule(rule_t *r);
|
|
||||||
bool is_idle(void);
|
bool is_idle(void);
|
||||||
void setup(void);
|
void setup(void);
|
||||||
void update_screen_info();
|
void update_screen_info();
|
||||||
@ -541,27 +545,56 @@ void ungrab_key(keyboard_shortcut * ks)
|
|||||||
XUngrabKey(dc->dpy, ks->code, ks->mask, root);
|
XUngrabKey(dc->dpy, ks->code, ks->mask, root);
|
||||||
}
|
}
|
||||||
|
|
||||||
void apply_rules(notification * n)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
void rule_apply(rule_t *r, notification *n)
|
||||||
|
{
|
||||||
|
if (r->timeout != -1)
|
||||||
|
n->timeout = r->timeout;
|
||||||
|
if (r->urgency != -1)
|
||||||
|
n->urgency = r->urgency;
|
||||||
|
if (r->fg)
|
||||||
|
n->color_strings[ColFG] = r->fg;
|
||||||
|
if (r->bg)
|
||||||
|
n->color_strings[ColBG] = r->bg;
|
||||||
|
if (r->format)
|
||||||
|
n->format = r->format;
|
||||||
|
if (r->script)
|
||||||
|
n->script = r->script;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rule_apply_all(notification *n)
|
||||||
|
{
|
||||||
for (GSList *iter = rules; iter; iter = iter->next) {
|
for (GSList *iter = rules; iter; iter = iter->next) {
|
||||||
rule_t *r = iter->data;
|
rule_t *r = iter->data;
|
||||||
if ((!r->appname || !fnmatch(r->appname, n->appname, 0))
|
if (rule_matches_notification(r, n)) {
|
||||||
&& (!r->summary || !fnmatch(r->summary, n->summary, 0))
|
rule_apply(r, n);
|
||||||
&& (!r->body || !fnmatch(r->body, n->body, 0))
|
|
||||||
&& (!r->icon || !fnmatch(r->icon, n->icon, 0))) {
|
|
||||||
n->timeout = r->timeout != -1 ? r->timeout : n->timeout;
|
|
||||||
n->urgency = r->urgency != -1 ? r->urgency : n->urgency;
|
|
||||||
n->color_strings[ColFG] =
|
|
||||||
r->fg ? r->fg : n->color_strings[ColFG];
|
|
||||||
n->color_strings[ColBG] =
|
|
||||||
r->bg ? r->bg : n->color_strings[ColBG];
|
|
||||||
n->format = r->format ? r->format : n->format;
|
|
||||||
n->script = r->script ? r->script : n->script;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rule_init(rule_t *r)
|
||||||
|
{
|
||||||
|
r->name = NULL;
|
||||||
|
r->appname = NULL;
|
||||||
|
r->summary = NULL;
|
||||||
|
r->body = NULL;
|
||||||
|
r->icon = NULL;
|
||||||
|
r->timeout = -1;
|
||||||
|
r->urgency = -1;
|
||||||
|
r->fg = NULL;
|
||||||
|
r->bg = NULL;
|
||||||
|
r->format = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool rule_matches_notification(rule_t *r, notification *n)
|
||||||
|
{
|
||||||
|
|
||||||
|
return ((!r->appname || !fnmatch(r->appname, n->appname, 0))
|
||||||
|
&& (!r->summary || !fnmatch(r->summary, n->summary, 0))
|
||||||
|
&& (!r->body || !fnmatch(r->body, n->body, 0))
|
||||||
|
&& (!r->icon || !fnmatch(r->icon, n->icon, 0)));
|
||||||
|
}
|
||||||
|
|
||||||
void check_timeouts(void)
|
void check_timeouts(void)
|
||||||
{
|
{
|
||||||
/* nothing to do */
|
/* nothing to do */
|
||||||
@ -1159,7 +1192,7 @@ int init_notification(notification * n, int id)
|
|||||||
|
|
||||||
n->format = format;
|
n->format = format;
|
||||||
|
|
||||||
apply_rules(n);
|
rule_apply_all(n);
|
||||||
|
|
||||||
n->msg = string_replace("%a", n->appname, g_strdup(n->format));
|
n->msg = string_replace("%a", n->appname, g_strdup(n->format));
|
||||||
n->msg = string_replace("%s", n->summary, n->msg);
|
n->msg = string_replace("%s", n->summary, n->msg);
|
||||||
@ -1402,19 +1435,6 @@ void init_shortcut(keyboard_shortcut * ks)
|
|||||||
free(str_begin);
|
free(str_begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void initrule(rule_t *r)
|
|
||||||
{
|
|
||||||
r->name = NULL;
|
|
||||||
r->appname = NULL;
|
|
||||||
r->summary = NULL;
|
|
||||||
r->body = NULL;
|
|
||||||
r->icon = NULL;
|
|
||||||
r->timeout = -1;
|
|
||||||
r->urgency = -1;
|
|
||||||
r->fg = NULL;
|
|
||||||
r->bg = NULL;
|
|
||||||
r->format = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_idle(void)
|
bool is_idle(void)
|
||||||
{
|
{
|
||||||
@ -1942,7 +1962,7 @@ void load_options(char *cmdline_config_path)
|
|||||||
|
|
||||||
if (r == NULL) {
|
if (r == NULL) {
|
||||||
r = g_malloc(sizeof(rule_t));
|
r = g_malloc(sizeof(rule_t));
|
||||||
initrule(r);
|
rule_init(r);
|
||||||
rules = g_slist_insert(rules, r, 0);
|
rules = g_slist_insert(rules, r, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user