diff options
Diffstat (limited to 'calendar/gui/alarm-notify/config-data.c')
-rw-r--r-- | calendar/gui/alarm-notify/config-data.c | 107 |
1 files changed, 106 insertions, 1 deletions
diff --git a/calendar/gui/alarm-notify/config-data.c b/calendar/gui/alarm-notify/config-data.c index 3cad23d5cd..afa8a8f7f4 100644 --- a/calendar/gui/alarm-notify/config-data.c +++ b/calendar/gui/alarm-notify/config-data.c @@ -22,12 +22,15 @@ #include <config.h> #endif +#include <string.h> #include <libedataserver/e-source-list.h> #include "config-data.h" -#include "save.h" +#define KEY_LAST_NOTIFICATION_TIME "/apps/evolution/calendar/notify/last_notification_time" +#define KEY_PROGRAMS "/apps/evolution/calendar/notify/programs" + /* Whether we have initied ourselves by reading the data from the configuration engine */ static gboolean inited = FALSE; static GConfClient *conf_client = NULL; @@ -166,3 +169,105 @@ config_data_get_calendars_to_load (void) return cals; } + +/** + * config_data_set_last_notification_time: + * @t: A time value. + * + * Saves the last notification time so that it can be fetched the next time the + * alarm daemon is run. This way the daemon can show alarms that should have + * triggered while it was not running. + **/ +void +config_data_set_last_notification_time (time_t t) +{ + GConfClient *conf_client; + time_t current_t; + + g_return_if_fail (t != -1); + + if (!(conf_client = config_data_get_conf_client ())) + return; + + /* we only store the new notification time if it is bigger + than the already stored one */ + current_t = gconf_client_get_int (conf_client, KEY_LAST_NOTIFICATION_TIME, NULL); + if (t > current_t) + gconf_client_set_int (conf_client, KEY_LAST_NOTIFICATION_TIME, t, NULL); +} + +/** + * config_data_get_last_notification_time: + * + * Queries the last saved value for alarm notification times. + * + * Return value: The last saved value, or -1 if no value had been saved before. + **/ +time_t +config_data_get_last_notification_time (void) +{ + GConfClient *conf_client; + GConfValue *value; + + if (!(conf_client = config_data_get_conf_client ())) + return -1; + + value = gconf_client_get_without_default (conf_client, KEY_LAST_NOTIFICATION_TIME, NULL); + if (value) + return (time_t) gconf_value_get_int (value); + + return time (NULL); +} + +/** + * config_data_save_blessed_program: + * @program: a program name + * + * Saves a program name as "blessed" + **/ +void +config_data_save_blessed_program (const char *program) +{ + GConfClient *conf_client; + GSList *l; + + if (!(conf_client = config_data_get_conf_client ())) + return; + + l = gconf_client_get_list (conf_client, KEY_PROGRAMS, GCONF_VALUE_STRING, NULL); + l = g_slist_append (l, g_strdup (program)); + gconf_client_set_list (conf_client, KEY_PROGRAMS, GCONF_VALUE_STRING, l, NULL); + g_slist_foreach (l, (GFunc) g_free, NULL); + g_slist_free (l); +} + +/** + * config_data_is_blessed_program: + * @program: a program name + * + * Checks to see if a program is blessed + * + * Return value: TRUE if program is blessed, FALSE otherwise + **/ +gboolean +config_data_is_blessed_program (const char *program) +{ + GConfClient *conf_client; + GSList *l, *n; + gboolean found = FALSE; + + if (!(conf_client = config_data_get_conf_client ())) + return FALSE; + + l = gconf_client_get_list (conf_client, KEY_PROGRAMS, GCONF_VALUE_STRING, NULL); + while (l) { + n = l->next; + if (!found) + found = strcmp ((char *) l->data, program) == 0; + g_free (l->data); + g_slist_free_1 (l); + l = n; + } + + return found; +} |