aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog10
-rw-r--r--calendar/gui/e-pub-utils.c140
2 files changed, 86 insertions, 64 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index c9bee9ebdb..5aa68578e1 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,13 @@
+2005-09-30 Chenthill Palanisamy <pchenthill@novell.com>
+
+ Fixes #315095
+ * gui/e-pub-utils.c: Added a global variable to check
+ if the publish time is modified in gconf and removed
+ just_published function.
+ (is_publish_time): cleaned up the code.
+ (e_pub_publish): send the list of users in the get_freebusy
+ information.
+
2005-10-03 Chenthill Palanisamy <pchenthill@novell.com>
Fixes #271480
diff --git a/calendar/gui/e-pub-utils.c b/calendar/gui/e-pub-utils.c
index 90338dd1a6..7aad545314 100644
--- a/calendar/gui/e-pub-utils.c
+++ b/calendar/gui/e-pub-utils.c
@@ -34,6 +34,8 @@
#include "itip-utils.h"
#include "e-pub-utils.h"
+static gboolean updated_last_pub_time = FALSE;
+
void
e_pub_uri_from_xml (EPublishUri *uri, const gchar *xml)
{
@@ -136,21 +138,15 @@ is_publish_time (EPublishUri *uri) {
icaltimezone *utc;
struct icaltimetype current_itt, adjust_itt;
- if (!uri->last_pub_time) {
- utc = icaltimezone_get_utc_timezone ();
- current_itt = icaltime_current_time_with_zone (utc);
+ utc = icaltimezone_get_utc_timezone ();
+ current_itt = icaltime_current_time_with_zone (utc);
+
+ if (!uri->last_pub_time ||(strlen (uri->last_pub_time)== 0)) {
uri->last_pub_time = g_strdup (icaltime_as_ical_string (current_itt));
return TRUE;
} else {
- if (strlen (uri->last_pub_time) == 0) {
- uri->last_pub_time = g_strdup (icaltime_as_ical_string (current_itt));
- return TRUE;
- }
-
- utc = icaltimezone_get_utc_timezone ();
- current_itt = icaltime_current_time_with_zone (utc);
- adjust_itt = icaltime_from_string (uri->last_pub_time);
+ struct icaltimetype adjust_itt = icaltime_from_string (uri->last_pub_time);
switch (uri->publish_freq) {
case URI_PUBLISH_DAILY:
@@ -173,26 +169,9 @@ is_publish_time (EPublishUri *uri) {
return FALSE;
}
-static gboolean
-just_published (gchar *last_pub_time) {
- icaltimezone *utc;
- struct icaltimetype current_itt, adjust_itt;
-
- if (strlen (last_pub_time) != 0) {
- utc = icaltimezone_get_utc_timezone ();
- adjust_itt = icaltime_from_string (last_pub_time);
- current_itt = icaltime_current_time_with_zone (utc);
- icaltime_adjust (&adjust_itt, 0, 0, 0, 3);
- if (icaltime_compare (adjust_itt, current_itt) < 0)
- return TRUE;
- else
- return FALSE;
- }
-
-
- return TRUE;
-}
-
+/* FIXME we need to add a timeout function to check if the next publishing time is reached.
+ If the freqency is daily and evolution runs continuously for more than one day, the freebusy
+ will only be published for the first day */
void
e_pub_publish (gboolean publish) {
icaltimezone *utc;
@@ -225,10 +204,13 @@ e_pub_publish (gboolean publish) {
uri = g_new0 (EPublishUri, 1);
e_pub_uri_from_xml (uri, xml);
-
- /* kludge to safeguard against loop from gconf update */
- if (!just_published (uri->last_pub_time))
+
+ /*FIXME this is just a hack to avoid publishing again and again
+ ,we need to make the last publish time a seperate key */
+ if (updated_last_pub_time) {
+ updated_last_pub_time = FALSE;
return;
+ }
/* TODO: make sure we're online */
/* skip this url if it isn't enabled or if it is manual */
@@ -259,6 +241,9 @@ e_pub_publish (gboolean publish) {
GList *comp_list = NULL;
gchar *source_uid;
ESource * source;
+ char *email = NULL;
+ GError *error = NULL;
+ GList *users = NULL;
source_uid = g_strdup (p->data);
source = e_source_list_peek_source_by_uid (source_list, source_uid);
@@ -267,15 +252,33 @@ e_pub_publish (gboolean publish) {
if (!client) {
g_warning (G_STRLOC ": Could not publish Free/Busy: Calendar backend no longer exists");
+ g_free (source_uid);
continue;
}
- e_cal_open (client, TRUE, NULL);
+ if (!e_cal_open (client, TRUE, &error)) {
+ g_warning ("Could not open the calendar %s \n", error->message);
+ g_error_free (error);
+ error = NULL;
+
+ g_object_unref (client);
+ g_free (source_uid);
+ continue;
+ }
- if (e_cal_get_free_busy ((ECal *) client, NULL,
+ if (e_cal_get_cal_address (client, &email, &error)) {
+ if (email && *email)
+ users = g_list_append (users, email);
+ } else {
+ g_warning ("Could not get the email: %s \n", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+
+ if (e_cal_get_free_busy ((ECal *) client, users,
start, end,
- &comp_list, NULL)) {
+ &comp_list, &error)) {
GList *l;
for (l = comp_list; l; l = l->next) {
@@ -285,41 +288,49 @@ e_pub_publish (gboolean publish) {
g_object_unref (comp);
}
g_list_free (comp_list);
+ } else {
+ g_warning ("Could not get the free busy information %s \n", error->message);
+ g_error_free (error);
+ error = NULL;
}
+ if (users)
+ g_list_free (users);
+
+ g_free (email);
g_object_unref (client);
-
g_free (source_uid);
- }
+ }
+ }
- /* add password to the uri */
- password = e_passwords_get_password ("Calendar",
- (gchar *)uri->location);
-
- if (!password) {
- prompt = g_strdup_printf (_("Enter the password for %s"), (gchar *)uri->location);
- password = e_passwords_ask_password (_("Enter password"),
- "Calendar", (gchar *)uri->location,
- prompt,
- E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET|E_PASSWORDS_ONLINE,
- &remember, NULL);
+ /* add password to the uri */
+ password = e_passwords_get_password ("Calendar",
+ (gchar *)uri->location);
- g_free (prompt);
-
- if (!password) {
- g_slist_free (p);
- continue;
- }
+ if (!password) {
+ prompt = g_strdup_printf (_("Enter the password for %s"), (gchar *)uri->location);
+ password = e_passwords_ask_password (_("Enter password"),
+ "Calendar", (gchar *)uri->location,
+ prompt,
+ E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET|E_PASSWORDS_ONLINE,
+ &remember, NULL);
+
+ g_free (prompt);
+
+ if (!password) {
+ g_slist_free (p);
+ continue;
}
-
- if (cloned && clone)
- published = itip_publish_comp ((ECal *) client,
- uri->location,
- uri->username,
- password, &clone);
-
- g_slist_free (p);
}
+
+ g_slist_free (p);
+
+ if (cloned && clone)
+ published = itip_publish_comp ((ECal *) client,
+ uri->location,
+ uri->username,
+ password, &clone);
+
xml = e_pub_uri_to_xml (uri);
if (xml != NULL) {
uri_list = g_slist_append (uri_list, xml);
@@ -330,6 +341,7 @@ e_pub_publish (gboolean publish) {
if (published) {
/* Update gconf so we have the last_pub_time */
calendar_config_set_free_busy (uri_list);
+ updated_last_pub_time = TRUE;
}
g_slist_free (uri_config_list);