aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog6
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.c47
2 files changed, 38 insertions, 15 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 47f87e44ff..f36910bb57 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-27 Rodrigo Moya <rodrigo@novell.com>
+
+ * gui/alarm-notify/alarm-queue.c (load_alarms): use the
+ new 'has-alarms-in-range' query.
+ (alarm_queue_add_client): make sure we don't add twice the same alarm.
+
2004-08-27 JP Rosevear <jpr@novell.com>
Fixes #62911, #54101
diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c
index 08d3033dcb..433f121e55 100644
--- a/calendar/gui/alarm-notify/alarm-queue.c
+++ b/calendar/gui/alarm-notify/alarm-queue.c
@@ -390,20 +390,38 @@ load_alarms (ClientAlarms *ca, time_t start, time_t end)
{
/* create the live query */
if (!ca->query) {
- /* FIXME: handle errors */
- if (!e_cal_get_query (ca->client, "(has-alarms?)", &ca->query, NULL)) {
- g_warning (G_STRLOC ": Could not get query for client");
+ char *str_query, *iso_start, *iso_end;
+
+ iso_start = isodate_from_time_t (start);
+ if (!iso_start)
+ return;
+
+ iso_end = isodate_from_time_t (end);
+ if (!iso_end) {
+ g_free (iso_start);
return;
}
- g_signal_connect (G_OBJECT (ca->query), "objects_added",
- G_CALLBACK (query_objects_changed_cb), ca);
- g_signal_connect (G_OBJECT (ca->query), "objects_modified",
- G_CALLBACK (query_objects_changed_cb), ca);
- g_signal_connect (G_OBJECT (ca->query), "objects_removed",
- G_CALLBACK (query_objects_removed_cb), ca);
+ str_query = g_strdup_printf ("(has-alarms-in-range? (make-time \"%s\") (make-time \"%s\"))",
+ iso_start, iso_end);
+ g_free (iso_start);
+ g_free (iso_end);
+
+ /* FIXME: handle errors */
+ if (!e_cal_get_query (ca->client, str_query, &ca->query, NULL)) {
+ g_warning (G_STRLOC ": Could not get query for client");
+ } else {
+ g_signal_connect (G_OBJECT (ca->query), "objects_added",
+ G_CALLBACK (query_objects_changed_cb), ca);
+ g_signal_connect (G_OBJECT (ca->query), "objects_modified",
+ G_CALLBACK (query_objects_changed_cb), ca);
+ g_signal_connect (G_OBJECT (ca->query), "objects_removed",
+ G_CALLBACK (query_objects_removed_cb), ca);
+
+ e_cal_view_start (ca->query);
+ }
- e_cal_view_start (ca->query);
+ g_free (str_query);
}
}
@@ -1292,14 +1310,13 @@ alarm_queue_add_client (ECal *client)
ca->uid_alarms_hash = g_hash_table_new (g_str_hash, g_str_equal);
- if (e_cal_get_load_state (client) != E_CAL_LOAD_LOADED)
+ if (e_cal_get_load_state (client) != E_CAL_LOAD_LOADED) {
+ load_alarms_for_today (ca);
+ load_missed_alarms (ca);
+ } else {
g_signal_connect (client, "cal_opened",
G_CALLBACK (cal_opened_cb),
ca);
-
- if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) {
- load_alarms_for_today (ca);
- load_missed_alarms (ca);
}
}