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.c361
1 files changed, 0 insertions, 361 deletions
diff --git a/calendar/gui/e-pub-utils.c b/calendar/gui/e-pub-utils.c
deleted file mode 100644
index 6133713ba2..0000000000
--- a/calendar/gui/e-pub-utils.c
+++ /dev/null
@@ -1,361 +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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 <libedataserverui/e-passwords.h>
-#include <libecal/e-cal-time-util.h>
-#include <glib/gi18n.h>
-#include "calendar-config.h"
-#include "common/authentication.h"
-#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)
-{
- xmlDocPtr doc;
- xmlNodePtr root, p;
- xmlChar *location, *enabled, *frequency;
- xmlChar *username, *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");
- 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 (publish_time != NULL)
- uri->last_pub_time = g_strdup (publish_time);
-
- uri->password = g_strdup ("");
-
- 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, "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;
-
- 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 {
- struct icaltimetype 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;
-}
-
-/* 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;
- 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");
- g_object_unref (gconf_client);
-
- 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, *q;
- EPublishUri *uri;
- ECalComponent *clone = NULL;
- gboolean cloned = FALSE;
- ECal *client = NULL;
- char *prompt;
- gboolean remember = FALSE;
- gchar *password;
-
- gchar *xml = (gchar *)l->data;
-
- uri = g_new0 (EPublishUri, 1);
- e_pub_uri_from_xml (uri, xml);
-
- /*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 */
- 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);
- q = NULL;
- for (p = uri->calendars; p != NULL; p = p->next) {
-
- 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);
-
- if (source)
- client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_EVENT);
-
- if (!client) {
- g_warning (G_STRLOC ": Could not publish Free/Busy: Calendar backend no longer exists");
- g_free (source_uid);
- g_free (p->data);
- q = g_slist_append (q, p);
-
- continue;
- }
-
- 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);
- client = NULL;
- g_free (source_uid);
- continue;
- }
-
- 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, &error)) {
- GList *list;
-
- for (list = comp_list; list; list = list->next) {
- ECalComponent *comp = E_CAL_COMPONENT (list->data);
-
- cloned = itip_publish_begin (comp, (ECal *) client, cloned, &clone);
- 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);
- client = NULL;
- g_free (source_uid);
- }
- }
-
- for(p = q; p!=NULL; p = p->next) {
- uri->calendars = g_slist_delete_link (uri->calendars, p->data);
- }
- g_slist_free (q);
-
- /* 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);
-
- g_free (prompt);
-
- if (!password) {
- g_slist_free (p);
- continue;
- }
- }
-
- 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);
- }
- g_free (uri);
- }
-
- 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);
- g_slist_free (uri_list);
-}