aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog4
-rw-r--r--calendar/gui/alarm-notify/alarm-notify.c61
-rw-r--r--calendar/gui/alarm-notify/notify-main.c10
3 files changed, 66 insertions, 9 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index c5bbcfa5ee..88c68f538d 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,5 +1,9 @@
2002-05-20 Rodrigo Moya <rodrigo@ximian.com>
+ * gui/alarm-notify/alarm-notify.c:
+ * gui/alarm-notify/notify-main.c: ported changes from evolution-1-0
+ to make it work with reminders on remote backends.
+
* pcs/cal-backend-file.c (cal_backend_file_open): check the string
returned by gnome_vfs_uri_to_string, which can be empty. If so,
return an error.
diff --git a/calendar/gui/alarm-notify/alarm-notify.c b/calendar/gui/alarm-notify/alarm-notify.c
index 7dbb77ceeb..2f7889b4db 100644
--- a/calendar/gui/alarm-notify/alarm-notify.c
+++ b/calendar/gui/alarm-notify/alarm-notify.c
@@ -349,6 +349,52 @@ alarm_notify_new (void)
return an;
}
+typedef struct {
+ CalClient *client;
+ char *str_uri;
+} RetryData;
+
+static gboolean
+retry_timeout_cb (gpointer data)
+{
+ RetryData *retry_data = data;
+
+ if (cal_client_get_load_state (retry_data->client) != CAL_CLIENT_LOAD_LOADED) {
+ cal_client_open_calendar (retry_data->client, retry_data->str_uri, FALSE);
+ }
+
+ g_free (retry_data->str_uri);
+ g_free (retry_data);
+
+ return FALSE;
+}
+
+static void
+cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer data)
+{
+ EUri *uri = (EUri *) data;
+
+ if (status == CAL_CLIENT_OPEN_SUCCESS) {
+ add_uri_to_load (uri);
+ alarm_queue_add_client (client);
+
+ e_uri_free (uri);
+ }
+ else {
+ RetryData *retry_data;
+
+ remove_uri_to_load (uri);
+
+ /* retry opening this calendar */
+ retry_data = g_new0 (RetryData, 1);
+ retry_data->client = client;
+ retry_data->str_uri = e_uri_to_string (uri, FALSE);
+
+ /* we set a timeout of 5 mins before retrying */
+ g_timeout_add (300000, (GSourceFunc) retry_timeout_cb, retry_data);
+ }
+}
+
/**
* alarm_notify_add_calendar:
* @an: An alarm notification service.
@@ -385,12 +431,11 @@ alarm_notify_add_calendar (AlarmNotify *an, const char *str_uri, gboolean load_a
return;
}
- if (load_afterwards)
- add_uri_to_load (uri);
-
lc = g_hash_table_lookup (priv->uri_client_hash, str_uri);
if (lc) {
+ if (load_afterwards)
+ add_uri_to_load (uri);
e_uri_free (uri);
g_assert (lc->refcount > 0);
lc->refcount++;
@@ -400,6 +445,12 @@ alarm_notify_add_calendar (AlarmNotify *an, const char *str_uri, gboolean load_a
client = cal_client_new ();
if (client) {
+ /* we only add the URI to load_afterwards if we open it
+ correctly */
+ gtk_signal_connect (GTK_OBJECT (client), "cal_opened",
+ GTK_SIGNAL_FUNC (cal_opened_cb),
+ e_uri_copy (uri));
+
if (cal_client_open_calendar (client, str_uri, FALSE)) {
lc = g_new (LoadedClient, 1);
lc->client = client;
@@ -407,8 +458,6 @@ alarm_notify_add_calendar (AlarmNotify *an, const char *str_uri, gboolean load_a
lc->refcount = 1;
g_hash_table_insert (priv->uri_client_hash,
g_strdup (str_uri), lc);
-
- alarm_queue_add_client (client);
} else {
gtk_object_unref (GTK_OBJECT (client));
client = NULL;
@@ -423,4 +472,6 @@ alarm_notify_add_calendar (AlarmNotify *an, const char *str_uri, gboolean load_a
NULL);
return;
}
+
+ e_uri_free (uri);
}
diff --git a/calendar/gui/alarm-notify/notify-main.c b/calendar/gui/alarm-notify/notify-main.c
index 8b6daab254..06fe87b611 100644
--- a/calendar/gui/alarm-notify/notify-main.c
+++ b/calendar/gui/alarm-notify/notify-main.c
@@ -109,8 +109,8 @@ alarm_notify_factory_fn (BonoboGenericFactory *factory, void *data)
}
/* Loads the calendars that the alarm daemon has been told to load in the past */
-static void
-load_calendars (void)
+static gboolean
+load_calendars (gpointer user_data)
{
GPtrArray *uris;
int i;
@@ -118,7 +118,7 @@ load_calendars (void)
uris = get_calendars_to_load ();
if (!uris) {
g_message ("load_calendars(): Could not get the list of calendars to load");
- return;
+ return TRUE; /* should we continue retrying? */;
}
for (i = 0; i < uris->len; i++) {
@@ -151,6 +151,8 @@ load_calendars (void)
}
g_ptr_array_free (uris, TRUE);
+
+ return FALSE;
}
int
@@ -187,7 +189,7 @@ main (int argc, char **argv)
set_session_parameters (argv);
- load_calendars ();
+ g_idle_add ((GSourceFunc) load_calendars, NULL);
bonobo_main ();