aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-pub-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/e-pub-utils.c')
-rw-r--r--calendar/gui/e-pub-utils.c310
1 files changed, 0 insertions, 310 deletions
diff --git a/calendar/gui/e-pub-utils.c b/calendar/gui/e-pub-utils.c
deleted file mode 100644
index 2d6cce62ec..0000000000
--- a/calendar/gui/e-pub-utils.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* Evolution calendar Free/Busy utilities and types
- *
- * Copyright (C) 2004 Ximian, Inc.
- *
- * Author: Gary Ekker <gekker@novell.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <string.h>
-#include <glib.h>
-#include <gconf/gconf.h>
-#include <gconf/gconf-client.h>
-#include <libedataserver/e-source.h>
-#include <libedataserver/e-source-list.h>
-#include <libecal/e-cal-time-util.h>
-#include "calendar-config.h"
-#include "common/authentication.h"
-#include "itip-utils.h"
-#include "e-pub-utils.h"
-
-void
-e_pub_uri_from_xml (EPublishUri *uri, const gchar *xml)
-{
- xmlDocPtr doc;
- xmlNodePtr root, p;
- xmlChar *location, *enabled, *frequency;
- xmlChar *username, *password, *publish_time;
- GSList *l = NULL;
-
- uri->location = NULL;
- doc = xmlParseDoc ((char *)xml);
- if (doc == NULL) {
- uri->location = NULL;
- return;
- }
-
- root = doc->children;
- if (strcmp (root->name, "uri") != 0) {
- return;
- }
- location = xmlGetProp (root, "location");
- enabled = xmlGetProp (root, "enabled");
- frequency = xmlGetProp (root, "frequency");
- username = xmlGetProp (root, "username");
- password = xmlGetProp (root, "password");
- publish_time = xmlGetProp (root, "publish_time");
-
- if (location != NULL)
- uri->location = g_strdup (location);
- if (enabled != NULL)
- uri->enabled = atoi (enabled);
- if (frequency != NULL)
- uri->publish_freq = atoi (frequency);
- if (username != NULL)
- uri->username = g_strdup (username);
- if (password != NULL)
- uri->password = g_strdup (password);
- if (publish_time != NULL)
- uri->last_pub_time = g_strdup (publish_time);
-
- for (p = root->children; p != NULL; p = p->next) {
- xmlChar *uid = xmlGetProp (p, "uid");
-
- l = g_slist_append (l, uid);
- }
- uri->calendars = l;
-
- xmlFree(location);
- xmlFree(enabled);
- xmlFreeDoc(doc);
- return;
-}
-
-gchar *
-e_pub_uri_to_xml (EPublishUri *uri)
-{
- xmlDocPtr doc;
- xmlNodePtr root;
- gchar *enabled, *frequency;
- GSList *cals = NULL;
- xmlChar *xml_buffer;
- char *returned_buffer;
- int xml_buffer_size;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (uri->location != NULL, NULL);
-
- doc = xmlNewDoc ("1.0");
-
- root = xmlNewDocNode (doc, NULL, "uri", NULL);
- enabled = g_strdup_printf ("%d", uri->enabled);
- frequency = g_strdup_printf ("%d", uri->publish_freq);
- xmlSetProp (root, "location", uri->location);
- xmlSetProp (root, "enabled", enabled);
- xmlSetProp (root, "frequency", frequency);
- xmlSetProp (root, "username", uri->username);
- xmlSetProp (root, "password", uri->password);
- xmlSetProp (root, "publish_time", uri->last_pub_time);
-
- for (cals = uri->calendars; cals != NULL; cals = cals->next) {
- xmlNodePtr node;
-
- node = xmlNewChild (root, NULL, "source", NULL);
- xmlSetProp (node, "uid", cals->data);
- }
- xmlDocSetRootElement (doc, root);
-
- xmlDocDumpMemory (doc, &xml_buffer, &xml_buffer_size);
- xmlFreeDoc (doc);
-
- returned_buffer = g_malloc (xml_buffer_size + 1);
- memcpy (returned_buffer, xml_buffer, xml_buffer_size);
- returned_buffer [xml_buffer_size] = '\0';
- xmlFree (xml_buffer);
- g_free (enabled);
-
- return returned_buffer;
-}
-
-static gboolean
-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);
- 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);
-
- switch (uri->publish_freq) {
- case URI_PUBLISH_DAILY:
- icaltime_adjust (&adjust_itt, 1, 0, 0, 0);
- if (icaltime_compare_date_only (adjust_itt, current_itt ) < 0) {
- uri->last_pub_time = g_strdup (icaltime_as_ical_string (current_itt));
- return TRUE;
- }
- break;
- case URI_PUBLISH_WEEKLY:
- icaltime_adjust (&adjust_itt, 7, 0, 0, 0);
- if (icaltime_compare_date_only (adjust_itt, current_itt ) < 0) {
- uri->last_pub_time = g_strdup (icaltime_as_ical_string (current_itt));
- return TRUE;
- }
- break;
- }
- }
-
- return FALSE;
-}
-
-static gboolean
-just_published (gchar *last_pub_time) {
- icaltimezone *utc;
- struct icaltimetype pubtime_itt, adjust_itt;
-
- if (strlen (last_pub_time) != 0) {
- utc = icaltimezone_get_utc_timezone ();
- pubtime_itt = icaltime_from_string (last_pub_time);
- adjust_itt = icaltime_current_time_with_zone (utc);
- icaltime_adjust (&adjust_itt, 0, 0, 0, 3);
- if (icaltime_compare_date_only (pubtime_itt, adjust_itt) < 0)
- return TRUE;
- }
-
-
- return FALSE;
-}
-
-void
-e_pub_publish (gboolean publish) {
- icaltimezone *utc;
- time_t start = time (NULL), end;
- GSList *uri_config_list, *l, *uri_list = NULL;
- ESourceList *source_list;
- GConfClient *gconf_client;
- gboolean published = FALSE;
-
- gconf_client = gconf_client_get_default ();
- source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/calendar/sources");
-
- utc = icaltimezone_get_utc_timezone ();
- start = time_day_begin_with_zone (start, utc);
- end = time_add_week_with_zone (start, 6, utc);
-
- uri_config_list = calendar_config_get_free_busy ();
-
- for (l = uri_config_list; l != NULL; l = l->next) {
- GSList *p =NULL;
- EPublishUri *uri;
- ECalComponent *clone = NULL;
- gboolean cloned = FALSE;
- ECal *client = NULL;
- gchar *xml = (gchar *)uri_config_list->data;
-
- 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))
- return;
-
- /* TODO: make sure we're online */
- /* skip this url if it isn't enabled or if it is manual */
- if (!uri->enabled) {
- uri_config_list = g_slist_next (uri_config_list);
- continue;
- }
-
- if (!publish) {
- /* a g_idle publish, make sure we are not set to user only */
- if (uri->publish_freq == URI_PUBLISH_USER) {
- uri_config_list = g_slist_next (uri_config_list);
- continue;
- }
-
- /* If not is it time to publish again? */
- publish = is_publish_time (uri);
-
- }
-
- /* User published or config change */
- if (publish) {
- /* We still need to set the last_pub_time */
- uri->last_pub_time = 0;
- is_publish_time (uri);
-
- for (p = uri->calendars; p != NULL; p = p->next) {
- GList *comp_list = NULL;
- gchar *source_uid;
- ESource * source;
-
- source_uid = g_strdup (p->data);
- source = e_source_list_peek_source_by_uid (source_list, source_uid);
-
- client = auth_new_cal_from_uri (e_source_get_uri (source), E_CAL_SOURCE_TYPE_EVENT);
-
- if (!client) {
- g_warning (G_STRLOC ": Could not publish Free/Busy: Calendar backend no longer exists");
-
- continue;
- }
-
- e_cal_open (client, TRUE, NULL);
-
- if (e_cal_get_free_busy ((ECal *) client, NULL,
- start, end,
- &comp_list, NULL)) {
- GList *l;
-
- for (l = comp_list; l; l = l->next) {
- ECalComponent *comp = E_CAL_COMPONENT (l->data);
-
- cloned = itip_publish_begin (comp, (ECal *) client, cloned, &clone);
- g_object_unref (comp);
- }
- g_list_free (comp_list);
- }
-
- g_object_unref (client);
-
- g_free (source_uid);
- }
-
- published = itip_publish_comp ((ECal *) client,
- uri->location,
- uri->username,
- uri->password, &clone);
-
- g_slist_free (p);
- }
- xml = e_pub_uri_to_xml (uri);
- if (xml != NULL) {
- uri_list = g_slist_append (uri_list, xml);
- }
- g_free (uri);
- }
-
- if (published) {
- /* Update gconf so we have the last_pub_time */
- calendar_config_set_free_busy (uri_list);
- }
-
- g_slist_free (uri_config_list);
- g_slist_free (uri_list);
-}