Improved how the daemon checks for appointments to remind.

This commit is contained in:
Frederic Culot 2009-08-01 20:29:49 +00:00
parent 0cbeb9c38b
commit f1403e99bb
4 changed files with 47 additions and 9 deletions

View File

@ -14,6 +14,12 @@
* src/utils.c (exit_calcurse): start daemon only if requested
* src/dmon.c (DMON_LOG): log daemon activity only if requested
* src/notify.c (notify_needs_reminder): new function
* src/notify.c (notify_get_next_bkgd)
* src/dmon.c (dmon_start): improved how the daemon checks for
appointments to remind
2009-07-29 Frederic Culot <frederic@culot.org>

View File

@ -1,4 +1,4 @@
/* $calcurse: dmon.c,v 1.10 2009/08/01 17:53:11 culot Exp $ */
/* $calcurse: dmon.c,v 1.11 2009/08/01 20:29:49 culot Exp $ */
/*
* Calcurse - text-based organizer
@ -190,8 +190,9 @@ dmon_start (int parent_exit_status)
if (!notify_get_next_bkgd ())
DMON_ABRT (_("error loading next appointment\n"));
left = notify_time_left ();
if (left < nbar.cntdwn)
if (left > 0 && left < nbar.cntdwn && notify_needs_reminder ())
{
DMON_LOG (_("launching notification at %s for: \"%s\"\n"),
nowstr (), notify_app_txt ());

View File

@ -1,4 +1,4 @@
/* $calcurse: notify.c,v 1.42 2009/08/01 13:31:20 culot Exp $ */
/* $calcurse: notify.c,v 1.43 2009/08/01 20:29:49 culot Exp $ */
/*
* Calcurse - text-based organizer
@ -75,6 +75,18 @@ notify_time_left (void)
return left > 0 ? left : 0;
}
/*
* Return 1 if the reminder was not sent already for the upcoming
* appointment.
*/
unsigned
notify_needs_reminder (void)
{
if (notify_app.got_app & !(notify_app.state & APOINT_NOTIFIED))
return 1;
return 0;
}
/*
* This is used to update the notify_app structure.
* Note: the mutex associated with this structure must be locked by the
@ -164,6 +176,9 @@ notify_init_bar (void)
void
notify_free_app (void)
{
notify_app.time = 0;
notify_app.got_app = 0;
notify_app.state = APOINT_NULL;
if (notify_app.txt)
mem_free (notify_app.txt);
notify_app.txt = 0;
@ -363,19 +378,34 @@ notify_get_next (struct notify_app_s *a)
return 1;
}
/*
* This is used for the daemon to check if we have an upcoming appointment or
* not.
*/
unsigned
notify_get_next_bkgd (void)
{
struct notify_app_s a;
if (!notify_app.got_app)
a.txt = (char *)0;
if (!notify_get_next (&a))
return 0;
if (!a.got_app)
{
if (!notify_get_next (&a))
return 0;
if (a.got_app)
/* No next appointment, reset the previous notified one. */
notify_app.got_app = 0;
return 1;
}
else
{
if (!notify_same_item (a.time))
notify_update_app (a.time, a.state, a.txt);
}
if (a.txt)
mem_free (a.txt);
return 1;
}

View File

@ -1,4 +1,4 @@
/* $calcurse: notify.h,v 1.20 2009/08/01 13:31:21 culot Exp $ */
/* $calcurse: notify.h,v 1.21 2009/08/01 20:29:50 culot Exp $ */
/*
* Calcurse - text-based organizer
@ -64,6 +64,7 @@ struct notify_app_s
};
int notify_time_left (void);
unsigned notify_needs_reminder (void);
void notify_update_app (long, char, char *);
int notify_bar (void);
void notify_init_vars (void);