Merge branch 'maint'
This commit is contained in:
commit
0884d62b22
10
src/apoint.c
10
src/apoint.c
@ -516,7 +516,7 @@ apoint_delete_bynum (long start, unsigned num, enum eraseflg flag)
|
||||
erase_note (&apt->note, flag);
|
||||
mem_free (apt);
|
||||
if (need_check_notify)
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -657,13 +657,13 @@ apoint_switch_notify (void)
|
||||
need_chk_notify = 0;
|
||||
LLIST_TS_LOCK (&alist_p);
|
||||
|
||||
struct apoint *apt = apoint_get (apoint_nb, date);
|
||||
struct apoint *apt = apoint_get (date, apoint_nb);
|
||||
|
||||
apt->state ^= APOINT_NOTIFY;
|
||||
if (notify_bar ())
|
||||
notify_check_added (apt->mesg, apt->start, apt->state);
|
||||
if (need_chk_notify)
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
|
||||
LLIST_TS_UNLOCK (&alist_p);
|
||||
}
|
||||
@ -729,5 +729,9 @@ apoint_paste_item (void)
|
||||
(void)apoint_new (bkp_cut_apoint.mesg, bkp_cut_apoint.note,
|
||||
bkp_start, bkp_cut_apoint.dur,
|
||||
bkp_cut_apoint.state);
|
||||
|
||||
if (notify_bar ())
|
||||
notify_check_added (bkp_cut_apoint.mesg, bkp_start, bkp_cut_apoint.state);
|
||||
|
||||
apoint_free_bkp (ERASE_FORCE_KEEP_NOTE);
|
||||
}
|
||||
|
98
src/args.c
98
src/args.c
@ -345,7 +345,7 @@ static int
|
||||
app_arg (int add_line, struct date *day, long date, int print_note,
|
||||
struct conf *conf, regex_t *regex)
|
||||
{
|
||||
llist_item_t *i;
|
||||
llist_item_t *i, *j;
|
||||
long today;
|
||||
unsigned print_date = 1;
|
||||
int app_found = 0;
|
||||
@ -411,15 +411,67 @@ app_arg (int add_line, struct date *day, long date, int print_note,
|
||||
}
|
||||
|
||||
/* Same process is performed but this time on the appointments. */
|
||||
LLIST_TS_LOCK (&alist_p);
|
||||
LLIST_TS_LOCK (&recur_alist_p);
|
||||
LLIST_TS_FIND_FOREACH (&recur_alist_p, today, recur_apoint_inday, i)
|
||||
|
||||
/*
|
||||
* Iterate over regular appointments and recurrent ones simultaneously (fixes
|
||||
* http://lists.calcurse.org/bugs/msg00002.html).
|
||||
*/
|
||||
i = LLIST_TS_FIND_FIRST (&alist_p, today, apoint_inday);
|
||||
j = LLIST_TS_FIND_FIRST (&recur_alist_p, today, recur_apoint_inday);
|
||||
while (i || j)
|
||||
{
|
||||
struct recur_apoint *ra = LLIST_TS_GET_DATA (i);
|
||||
struct apoint *apt;
|
||||
struct apoint *apt = LLIST_TS_GET_DATA (i);
|
||||
struct recur_apoint *ra = LLIST_TS_GET_DATA (j);
|
||||
|
||||
if (regex && regexec (regex, ra->mesg, 0, 0, 0) != 0)
|
||||
continue;
|
||||
while (i && regex && regexec (regex, apt->mesg, 0, 0, 0) != 0)
|
||||
{
|
||||
i = LLIST_TS_FIND_NEXT (i, today, apoint_inday);
|
||||
apt = LLIST_TS_GET_DATA (i);
|
||||
}
|
||||
|
||||
while (j && regex && regexec (regex, ra->mesg, 0, 0, 0) != 0)
|
||||
{
|
||||
j = LLIST_TS_FIND_NEXT (j, today, recur_apoint_inday);
|
||||
ra = LLIST_TS_GET_DATA (j);
|
||||
}
|
||||
|
||||
if (apt && ra)
|
||||
{
|
||||
if (apt->start <= recur_apoint_inday (ra, today))
|
||||
ra = NULL;
|
||||
else
|
||||
apt = NULL;
|
||||
}
|
||||
|
||||
if (apt)
|
||||
{
|
||||
app_found = 1;
|
||||
if (add_line)
|
||||
{
|
||||
fputs ("\n", stdout);
|
||||
add_line = 0;
|
||||
}
|
||||
if (print_date)
|
||||
{
|
||||
arg_print_date (today, conf);
|
||||
print_date = 0;
|
||||
}
|
||||
apoint_sec2str (apt, APPT, today, apoint_start_time, apoint_end_time);
|
||||
fputs (" - ", stdout);
|
||||
fputs (apoint_start_time, stdout);
|
||||
fputs (" -> ", stdout);
|
||||
fputs (apoint_end_time, stdout);
|
||||
fputs ("\n\t", stdout);
|
||||
fputs (apt->mesg, stdout);
|
||||
fputs ("\n", stdout);
|
||||
if (print_note && apt->note)
|
||||
print_notefile (stdout, apt->note, 2);
|
||||
i = LLIST_TS_FIND_NEXT (i, today, apoint_inday);
|
||||
}
|
||||
else if (ra)
|
||||
{
|
||||
app_found = 1;
|
||||
if (add_line)
|
||||
{
|
||||
@ -445,38 +497,12 @@ app_arg (int add_line, struct date *day, long date, int print_note,
|
||||
fputs ("\n", stdout);
|
||||
if (print_note && ra->note)
|
||||
print_notefile (stdout, ra->note, 2);
|
||||
apt = NULL;
|
||||
j = LLIST_TS_FIND_NEXT (j, today, recur_apoint_inday);
|
||||
}
|
||||
}
|
||||
|
||||
LLIST_TS_UNLOCK (&recur_alist_p);
|
||||
|
||||
LLIST_TS_LOCK (&alist_p);
|
||||
LLIST_TS_FIND_FOREACH (&alist_p, today, apoint_inday, i)
|
||||
{
|
||||
struct apoint *apt = LLIST_TS_GET_DATA (i);
|
||||
if (regex && regexec (regex, apt->mesg, 0, 0, 0) != 0)
|
||||
continue;
|
||||
|
||||
app_found = 1;
|
||||
if (add_line)
|
||||
{
|
||||
fputs ("\n", stdout);
|
||||
add_line = 0;
|
||||
}
|
||||
if (print_date)
|
||||
{
|
||||
arg_print_date (today, conf);
|
||||
print_date = 0;
|
||||
}
|
||||
apoint_sec2str (apt, APPT, today, apoint_start_time, apoint_end_time);
|
||||
fputs (" - ", stdout);
|
||||
fputs (apoint_start_time, stdout);
|
||||
fputs (" -> ", stdout);
|
||||
fputs (apoint_end_time, stdout);
|
||||
fputs ("\n\t", stdout);
|
||||
fputs (apt->mesg, stdout);
|
||||
fputs ("\n", stdout);
|
||||
if (print_note && apt->note)
|
||||
print_notefile (stdout, apt->note, 2);
|
||||
}
|
||||
LLIST_TS_UNLOCK (&alist_p);
|
||||
|
||||
return (app_found);
|
||||
|
@ -768,7 +768,7 @@ void notify_update_bar (void);
|
||||
unsigned notify_get_next (struct notify_app *);
|
||||
unsigned notify_get_next_bkgd (void);
|
||||
char *notify_app_txt (void);
|
||||
void notify_check_next_app (void);
|
||||
void notify_check_next_app (int);
|
||||
void notify_check_added (char *, long, char);
|
||||
void notify_check_repeated (struct recur_apoint *);
|
||||
int notify_same_item (long);
|
||||
|
11
src/day.c
11
src/day.c
@ -781,6 +781,7 @@ day_edit_item (struct conf *conf)
|
||||
struct apoint *a;
|
||||
long date;
|
||||
int item_num, ch;
|
||||
int need_check_notify = 0;
|
||||
|
||||
item_num = apoint_hilt ();
|
||||
p = day_get_item (item_num);
|
||||
@ -820,15 +821,19 @@ day_edit_item (struct conf *conf)
|
||||
switch (ch)
|
||||
{
|
||||
case STRT:
|
||||
need_check_notify = 1;
|
||||
update_start_time (&ra->start, &ra->dur);
|
||||
break;
|
||||
case END:
|
||||
update_duration (&ra->start, &ra->dur);
|
||||
break;
|
||||
case DESC:
|
||||
if (notify_bar ())
|
||||
need_check_notify = notify_same_recur_item (ra);
|
||||
update_desc (&ra->mesg);
|
||||
break;
|
||||
case REPT:
|
||||
need_check_notify = 1;
|
||||
update_rept (&ra->rpt, ra->start, conf);
|
||||
break;
|
||||
case KEY_GENERIC_CANCEL:
|
||||
@ -844,12 +849,15 @@ day_edit_item (struct conf *conf)
|
||||
switch (ch)
|
||||
{
|
||||
case STRT:
|
||||
need_check_notify = 1;
|
||||
update_start_time (&a->start, &a->dur);
|
||||
break;
|
||||
case END:
|
||||
update_duration (&a->start, &a->dur);
|
||||
break;
|
||||
case DESC:
|
||||
if (notify_bar ())
|
||||
need_check_notify = notify_same_item (a->start);
|
||||
update_desc (&a->mesg);
|
||||
break;
|
||||
case KEY_GENERIC_CANCEL:
|
||||
@ -857,6 +865,9 @@ day_edit_item (struct conf *conf)
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (need_check_notify)
|
||||
notify_check_next_app (1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
16
src/notify.c
16
src/notify.c
@ -306,7 +306,7 @@ notify_update_bar (void)
|
||||
notify_app.got_app = 0;
|
||||
pthread_mutex_unlock (¬ify_app.mutex);
|
||||
pthread_mutex_unlock (¬ify.mutex);
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -353,7 +353,7 @@ notify_main_thread (void *arg)
|
||||
got_app = notify_app.got_app;
|
||||
pthread_mutex_unlock (¬ify_app.mutex);
|
||||
if (!got_app)
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
}
|
||||
}
|
||||
pthread_exit ((void *) 0);
|
||||
@ -427,6 +427,7 @@ static void *
|
||||
notify_thread_app (void *arg)
|
||||
{
|
||||
struct notify_app tmp_app;
|
||||
int force = (arg ? 1 : 0);
|
||||
|
||||
if (!notify_get_next (&tmp_app))
|
||||
pthread_exit ((void *)0);
|
||||
@ -439,7 +440,7 @@ notify_thread_app (void *arg)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!notify_same_item (tmp_app.time))
|
||||
if (force || !notify_same_item (tmp_app.time))
|
||||
{
|
||||
pthread_mutex_lock (¬ify_app.mutex);
|
||||
notify_update_app (tmp_app.time, tmp_app.state, tmp_app.txt);
|
||||
@ -456,12 +457,13 @@ notify_thread_app (void *arg)
|
||||
|
||||
/* Launch the thread notify_thread_app to look for next appointment. */
|
||||
void
|
||||
notify_check_next_app (void)
|
||||
notify_check_next_app (int force)
|
||||
{
|
||||
pthread_t notify_t_app;
|
||||
void *arg = (force ? (void *)1 : (void *)0);
|
||||
|
||||
pthread_create (¬ify_t_app, &detached_thread_attr, notify_thread_app,
|
||||
(void *)0);
|
||||
arg);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -508,7 +510,7 @@ notify_check_repeated (struct recur_apoint *i)
|
||||
pthread_mutex_lock (¬ify_app.mutex);
|
||||
if ((real_app_time = recur_item_inday (i->start, &i->exc, i->rpt->type,
|
||||
i->rpt->freq, i->rpt->until,
|
||||
get_today ()) > current_time))
|
||||
get_today ())))
|
||||
{
|
||||
if (!notify_app.got_app)
|
||||
{
|
||||
@ -566,7 +568,7 @@ void
|
||||
notify_start_main_thread (void)
|
||||
{
|
||||
pthread_create (¬ify_t_main, NULL, notify_main_thread, NULL);
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
17
src/recur.c
17
src/recur.c
@ -811,7 +811,7 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole,
|
||||
erase_note (&rapt->note, flag);
|
||||
mem_free (rapt);
|
||||
if (need_check_notify)
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -819,7 +819,7 @@ recur_apoint_erase (long start, unsigned num, unsigned delete_whole,
|
||||
{
|
||||
recur_add_exc (&rapt->exc, start);
|
||||
if (need_check_notify)
|
||||
notify_check_next_app ();
|
||||
notify_check_next_app (0);
|
||||
}
|
||||
LLIST_TS_UNLOCK (&recur_alist_p);
|
||||
}
|
||||
@ -1004,9 +1004,9 @@ recur_exc_scan (llist_t *lexc, FILE *data_file)
|
||||
}
|
||||
|
||||
static int
|
||||
recur_apoint_starts_after (struct recur_apoint *rapt, long time)
|
||||
recur_apoint_starts_before (struct recur_apoint *rapt, long time)
|
||||
{
|
||||
return (rapt->start > time);
|
||||
return (rapt->start < time);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1020,9 +1020,7 @@ recur_apoint_check_next (struct notify_app *app, long start, long day)
|
||||
long real_recur_start_time;
|
||||
|
||||
LLIST_TS_LOCK (&recur_alist_p);
|
||||
i = LLIST_TS_FIND_FIRST (&recur_alist_p, start, recur_apoint_starts_after);
|
||||
|
||||
if (i)
|
||||
LLIST_TS_FIND_FOREACH (&recur_alist_p, app->time, recur_apoint_starts_before, i)
|
||||
{
|
||||
struct recur_apoint *rapt = LLIST_TS_GET_DATA (i);
|
||||
|
||||
@ -1035,7 +1033,6 @@ recur_apoint_check_next (struct notify_app *app, long start, long day)
|
||||
app->got_app = 1;
|
||||
}
|
||||
}
|
||||
|
||||
LLIST_TS_UNLOCK (&recur_alist_p);
|
||||
|
||||
return (app);
|
||||
@ -1144,5 +1141,9 @@ recur_apoint_paste_item (void)
|
||||
bkp_cut_recur_apoint.rpt->freq,
|
||||
bkp_cut_recur_apoint.rpt->until,
|
||||
&bkp_cut_recur_apoint.exc);
|
||||
|
||||
if (notify_bar ())
|
||||
notify_check_repeated (&bkp_cut_recur_apoint);
|
||||
|
||||
recur_apoint_free_bkp (ERASE_FORCE_KEEP_NOTE);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user