Merge pull request #439 from bebehei/duplicate-notifications
Duplicate notifications
This commit is contained in:
commit
6e9a805017
55
src/queues.c
55
src/queues.c
@ -19,7 +19,7 @@ unsigned int displayed_limit = 0;
|
|||||||
int next_notification_id = 1;
|
int next_notification_id = 1;
|
||||||
bool pause_displayed = false;
|
bool pause_displayed = false;
|
||||||
|
|
||||||
static int queues_stack_duplicate(notification *n);
|
static bool queues_stack_duplicate(notification *n);
|
||||||
|
|
||||||
void queues_init(void)
|
void queues_init(void)
|
||||||
{
|
{
|
||||||
@ -53,6 +53,7 @@ unsigned int queues_length_history()
|
|||||||
|
|
||||||
int queues_notification_insert(notification *n, int replaces_id)
|
int queues_notification_insert(notification *n, int replaces_id)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* do not display the message, if the message is empty */
|
/* do not display the message, if the message is empty */
|
||||||
if (strlen(n->msg) == 0) {
|
if (strlen(n->msg) == 0) {
|
||||||
if (settings.always_run_script) {
|
if (settings.always_run_script) {
|
||||||
@ -72,19 +73,9 @@ int queues_notification_insert(notification *n, int replaces_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (replaces_id == 0) {
|
if (replaces_id == 0) {
|
||||||
|
|
||||||
if (settings.stack_duplicates) {
|
|
||||||
int stacked = queues_stack_duplicate(n);
|
|
||||||
if (stacked > 0) {
|
|
||||||
// notification got stacked
|
|
||||||
return stacked;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
n->id = ++next_notification_id;
|
n->id = ++next_notification_id;
|
||||||
|
if (!settings.stack_duplicates || !queues_stack_duplicate(n))
|
||||||
g_queue_insert_sorted(waiting, n, notification_cmp_data, NULL);
|
g_queue_insert_sorted(waiting, n, notification_cmp_data, NULL);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
n->id = replaces_id;
|
n->id = replaces_id;
|
||||||
if (!queues_notification_replace_id(n))
|
if (!queues_notification_replace_id(n))
|
||||||
@ -100,10 +91,10 @@ int queues_notification_insert(notification *n, int replaces_id)
|
|||||||
/*
|
/*
|
||||||
* Replaces duplicate notification and stacks it
|
* Replaces duplicate notification and stacks it
|
||||||
*
|
*
|
||||||
* Returns the notification id of the stacked notification
|
* Returns %true, if notification got stacked
|
||||||
* Returns -1 if not notification could be stacked
|
* Returns %false, if notification did not get stacked
|
||||||
*/
|
*/
|
||||||
static int queues_stack_duplicate(notification *n)
|
static bool queues_stack_duplicate(notification *n)
|
||||||
{
|
{
|
||||||
for (GList *iter = g_queue_peek_head_link(displayed); iter;
|
for (GList *iter = g_queue_peek_head_link(displayed); iter;
|
||||||
iter = iter->next) {
|
iter = iter->next) {
|
||||||
@ -117,11 +108,17 @@ static int queues_stack_duplicate(notification *n)
|
|||||||
} else {
|
} else {
|
||||||
orig->progress = n->progress;
|
orig->progress = n->progress;
|
||||||
}
|
}
|
||||||
orig->start = g_get_monotonic_time();
|
|
||||||
g_free(orig->msg);
|
iter->data = n;
|
||||||
orig->msg = g_strdup(n->msg);
|
|
||||||
notification_free(n);
|
n->start = g_get_monotonic_time();
|
||||||
return orig->id;
|
|
||||||
|
n->dup_count = orig->dup_count;
|
||||||
|
|
||||||
|
notification_closed(orig, 1);
|
||||||
|
|
||||||
|
notification_free(orig);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,14 +134,18 @@ static int queues_stack_duplicate(notification *n)
|
|||||||
} else {
|
} else {
|
||||||
orig->progress = n->progress;
|
orig->progress = n->progress;
|
||||||
}
|
}
|
||||||
g_free(orig->msg);
|
iter->data = n;
|
||||||
orig->msg = g_strdup(n->msg);
|
|
||||||
notification_free(n);
|
n->dup_count = orig->dup_count;
|
||||||
return orig->id;
|
|
||||||
|
notification_closed(orig, 1);
|
||||||
|
|
||||||
|
notification_free(orig);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool queues_notification_replace_id(notification *new)
|
bool queues_notification_replace_id(notification *new)
|
||||||
@ -159,7 +160,7 @@ bool queues_notification_replace_id(notification *new)
|
|||||||
new->start = g_get_monotonic_time();
|
new->start = g_get_monotonic_time();
|
||||||
new->dup_count = old->dup_count;
|
new->dup_count = old->dup_count;
|
||||||
notification_run_script(new);
|
notification_run_script(new);
|
||||||
queues_history_push(old);
|
notification_free(old);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,7 +172,7 @@ bool queues_notification_replace_id(notification *new)
|
|||||||
if (old->id == new->id) {
|
if (old->id == new->id) {
|
||||||
iter->data = new;
|
iter->data = new;
|
||||||
new->dup_count = old->dup_count;
|
new->dup_count = old->dup_count;
|
||||||
queues_history_push(old);
|
notification_free(old);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user