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/utils.c (exit_calcurse): start daemon only if requested
* src/dmon.c (DMON_LOG): log daemon activity 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> 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 * Calcurse - text-based organizer
@ -190,8 +190,9 @@ dmon_start (int parent_exit_status)
if (!notify_get_next_bkgd ()) if (!notify_get_next_bkgd ())
DMON_ABRT (_("error loading next appointment\n")); DMON_ABRT (_("error loading next appointment\n"));
left = notify_time_left (); 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"), DMON_LOG (_("launching notification at %s for: \"%s\"\n"),
nowstr (), notify_app_txt ()); 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 * Calcurse - text-based organizer
@ -75,6 +75,18 @@ notify_time_left (void)
return left > 0 ? left : 0; 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. * This is used to update the notify_app structure.
* Note: the mutex associated with this structure must be locked by the * Note: the mutex associated with this structure must be locked by the
@ -164,6 +176,9 @@ notify_init_bar (void)
void void
notify_free_app (void) notify_free_app (void)
{ {
notify_app.time = 0;
notify_app.got_app = 0;
notify_app.state = APOINT_NULL;
if (notify_app.txt) if (notify_app.txt)
mem_free (notify_app.txt); mem_free (notify_app.txt);
notify_app.txt = 0; notify_app.txt = 0;
@ -363,19 +378,34 @@ notify_get_next (struct notify_app_s *a)
return 1; return 1;
} }
/*
* This is used for the daemon to check if we have an upcoming appointment or
* not.
*/
unsigned unsigned
notify_get_next_bkgd (void) notify_get_next_bkgd (void)
{ {
struct notify_app_s a; 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)) /* No next appointment, reset the previous notified one. */
return 0; notify_app.got_app = 0;
if (a.got_app) return 1;
}
else
{
if (!notify_same_item (a.time))
notify_update_app (a.time, a.state, a.txt); notify_update_app (a.time, a.state, a.txt);
} }
if (a.txt)
mem_free (a.txt);
return 1; 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 * Calcurse - text-based organizer
@ -64,6 +64,7 @@ struct notify_app_s
}; };
int notify_time_left (void); int notify_time_left (void);
unsigned notify_needs_reminder (void);
void notify_update_app (long, char, char *); void notify_update_app (long, char, char *);
int notify_bar (void); int notify_bar (void);
void notify_init_vars (void); void notify_init_vars (void);