aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/alarm-notify/config-data.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/alarm-notify/config-data.c')
-rw-r--r--calendar/gui/alarm-notify/config-data.c107
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;
+}