aboutsummaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2011-06-14 14:54:20 +0800
committerMilan Crha <mcrha@redhat.com>2011-06-14 14:54:20 +0800
commit38790d8478e906a5c59d0c4a5216f297f305bfeb (patch)
tree0f9a96db2765901f2a27b68c84815a491214ecc1 /calendar
parent08af0d1f81a4e983bb49d8fb8fe74e670adbb8f6 (diff)
downloadgsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.tar
gsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.tar.gz
gsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.tar.bz2
gsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.tar.lz
gsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.tar.xz
gsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.tar.zst
gsoc2013-evolution-38790d8478e906a5c59d0c4a5216f297f305bfeb.zip
Do not use deprecated EBook/ECal API
Diffstat (limited to 'calendar')
-rw-r--r--calendar/Makefile.am2
-rw-r--r--calendar/common/Makefile.am21
-rw-r--r--calendar/common/authentication.c455
-rw-r--r--calendar/common/authentication.h46
-rw-r--r--calendar/gui/Makefile.am1
-rw-r--r--calendar/gui/alarm-notify/Makefile.am1
-rw-r--r--calendar/gui/alarm-notify/alarm-notify.c85
-rw-r--r--calendar/gui/alarm-notify/alarm-notify.h7
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.c318
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.h6
-rw-r--r--calendar/gui/alarm-notify/config-data.c8
-rw-r--r--calendar/gui/alarm-notify/config-data.h6
-rw-r--r--calendar/gui/cal-editor-utils.c11
-rw-r--r--calendar/gui/cal-editor-utils.h4
-rw-r--r--calendar/gui/calendar-config.h2
-rw-r--r--calendar/gui/comp-util.c73
-rw-r--r--calendar/gui/comp-util.h22
-rw-r--r--calendar/gui/dialogs/alarm-dialog.c37
-rw-r--r--calendar/gui/dialogs/alarm-dialog.h4
-rw-r--r--calendar/gui/dialogs/alarm-list-dialog.c27
-rw-r--r--calendar/gui/dialogs/alarm-list-dialog.h8
-rw-r--r--calendar/gui/dialogs/calendar-setup.c22
-rw-r--r--calendar/gui/dialogs/cancel-comp.c4
-rw-r--r--calendar/gui/dialogs/cancel-comp.h4
-rw-r--r--calendar/gui/dialogs/comp-editor-page.h2
-rw-r--r--calendar/gui/dialogs/comp-editor.c230
-rw-r--r--calendar/gui/dialogs/comp-editor.h6
-rw-r--r--calendar/gui/dialogs/copy-source-dialog.c178
-rw-r--r--calendar/gui/dialogs/copy-source-dialog.h4
-rw-r--r--calendar/gui/dialogs/delete-error.c10
-rw-r--r--calendar/gui/dialogs/delete-error.h2
-rw-r--r--calendar/gui/dialogs/event-editor.c21
-rw-r--r--calendar/gui/dialogs/event-editor.h2
-rw-r--r--calendar/gui/dialogs/event-page.c103
-rw-r--r--calendar/gui/dialogs/goto-dialog.c2
-rw-r--r--calendar/gui/dialogs/memo-editor.c6
-rw-r--r--calendar/gui/dialogs/memo-editor.h2
-rw-r--r--calendar/gui/dialogs/memo-page.c85
-rw-r--r--calendar/gui/dialogs/recur-comp.c6
-rw-r--r--calendar/gui/dialogs/recur-comp.h4
-rw-r--r--calendar/gui/dialogs/recurrence-page.c41
-rw-r--r--calendar/gui/dialogs/schedule-page.c53
-rw-r--r--calendar/gui/dialogs/select-source-dialog.c14
-rw-r--r--calendar/gui/dialogs/select-source-dialog.h4
-rw-r--r--calendar/gui/dialogs/send-comp.c6
-rw-r--r--calendar/gui/dialogs/send-comp.h6
-rw-r--r--calendar/gui/dialogs/task-details-page.c5
-rw-r--r--calendar/gui/dialogs/task-editor.c17
-rw-r--r--calendar/gui/dialogs/task-editor.h2
-rw-r--r--calendar/gui/dialogs/task-page.c88
-rw-r--r--calendar/gui/dialogs/task-page.h2
-rw-r--r--calendar/gui/e-cal-component-preview.c24
-rw-r--r--calendar/gui/e-cal-component-preview.h4
-rw-r--r--calendar/gui/e-cal-config.h4
-rw-r--r--calendar/gui/e-cal-list-view.c8
-rw-r--r--calendar/gui/e-cal-list-view.h3
-rw-r--r--calendar/gui/e-cal-model-calendar.c11
-rw-r--r--calendar/gui/e-cal-model-memos.c7
-rw-r--r--calendar/gui/e-cal-model-tasks.c14
-rw-r--r--calendar/gui/e-cal-model.c323
-rw-r--r--calendar/gui/e-cal-model.h26
-rw-r--r--calendar/gui/e-calendar-selector.c73
-rw-r--r--calendar/gui/e-calendar-view.c114
-rw-r--r--calendar/gui/e-calendar-view.h14
-rw-r--r--calendar/gui/e-day-view.c64
-rw-r--r--calendar/gui/e-day-view.h3
-rw-r--r--calendar/gui/e-meeting-list-view.c65
-rw-r--r--calendar/gui/e-meeting-store.c50
-rw-r--r--calendar/gui/e-meeting-store.h6
-rw-r--r--calendar/gui/e-memo-list-selector.c189
-rw-r--r--calendar/gui/e-memo-table.c54
-rw-r--r--calendar/gui/e-task-list-selector.c190
-rw-r--r--calendar/gui/e-task-table.c105
-rw-r--r--calendar/gui/e-timezone-entry.h2
-rw-r--r--calendar/gui/e-week-view.c53
-rw-r--r--calendar/gui/e-week-view.h3
-rw-r--r--calendar/gui/gnome-cal.c113
-rw-r--r--calendar/gui/gnome-cal.h2
-rw-r--r--calendar/gui/itip-utils.c129
-rw-r--r--calendar/gui/itip-utils.h20
-rw-r--r--calendar/gui/print.c26
-rw-r--r--calendar/gui/print.h2
-rw-r--r--calendar/gui/tag-calendar.c28
-rw-r--r--calendar/gui/tag-calendar.h6
-rw-r--r--calendar/importers/Makefile.am1
-rw-r--r--calendar/importers/icalendar-importer.c385
86 files changed, 2071 insertions, 2125 deletions
diff --git a/calendar/Makefile.am b/calendar/Makefile.am
index dfed6e66c7..76bc20338d 100644
--- a/calendar/Makefile.am
+++ b/calendar/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = common importers gui
+SUBDIRS = importers gui
error_DATA = calendar.error
errordir = $(privdatadir)/errors
diff --git a/calendar/common/Makefile.am b/calendar/common/Makefile.am
deleted file mode 100644
index 5a6c18f417..0000000000
--- a/calendar/common/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-noinst_LTLIBRARIES = libevolution-calendarprivate.la
-
-ecalendarcommonincludedir = $(privincludedir)/calendar/common
-ecalendarcommoninclude_HEADERS = \
- authentication.h
-
-libevolution_calendarprivate_la_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -DG_LOG_DOMAIN=\"calendar-gui\" \
- -I$(top_builddir)/shell \
- -I$(top_srcdir)/shell \
- -I$(top_srcdir) \
- -I$(top_srcdir)/calendar \
- -I$(top_srcdir)/widgets \
- $(EVOLUTION_CALENDAR_CFLAGS)
-
-libevolution_calendarprivate_la_SOURCES = \
- authentication.c \
- authentication.h
-
--include $(top_srcdir)/git.mk
diff --git a/calendar/common/authentication.c b/calendar/common/authentication.c
deleted file mode 100644
index 7989107e64..0000000000
--- a/calendar/common/authentication.c
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * Rodrigo Moya <rodrigo@ximian.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <libedataserver/e-source.h>
-#include <libedataserverui/e-passwords.h>
-#include "authentication.h"
-#include <libedataserver/e-url.h>
-
-static gboolean
-get_remember_password (ESource *source)
-{
- const gchar *value;
-
- value = e_source_get_property (source, "remember_password");
- if (value && !g_ascii_strcasecmp (value, "true"))
- return TRUE;
-
- return FALSE;
-}
-
-static void
-set_remember_password (ESource *source, gboolean value)
-{
- e_source_set_property (source, "remember_password",
- value ? "true" : "false");
-}
-
-static gchar *
-auth_func_cb (ECal *ecal,
- const gchar *prompt,
- const gchar *key,
- gpointer user_data)
-{
- gchar *password, *auth_domain;
- ESource *source;
- const gchar *component_name;
-
- source = e_cal_get_source (ecal);
- auth_domain = e_source_get_duped_property (source, "auth-domain");
- component_name = auth_domain ? auth_domain : "Calendar";
- password = e_passwords_get_password (component_name, key);
-
- if (!password) {
- gboolean remember;
-
- remember = get_remember_password (source);
-
- password = e_passwords_ask_password (
- _("Enter password"),
- component_name, key, prompt,
- E_PASSWORDS_REMEMBER_FOREVER |
- E_PASSWORDS_SECRET |
- E_PASSWORDS_ONLINE,
- &remember, NULL);
-
- if (password)
- set_remember_password (source, remember);
- }
-
- g_free (auth_domain);
-
- return password;
-}
-
-static gchar *
-build_pass_key (ECal *ecal)
-{
- gchar *euri_str;
- const gchar *uri;
- EUri *euri;
-
- uri = e_cal_get_uri (ecal);
-
- euri = e_uri_new (uri);
- euri_str = e_uri_to_string (euri, FALSE);
-
- e_uri_free (euri);
- return euri_str;
-}
-
-void
-e_auth_cal_forget_password (ECal *ecal)
-{
- ESource *source = NULL;
- const gchar *auth_domain = NULL, *component_name = NULL, *auth_type = NULL;
-
- source = e_cal_get_source (ecal);
- auth_domain = e_source_get_property (source, "auth-domain");
- component_name = auth_domain ? auth_domain : "Calendar";
-
- auth_type = e_source_get_property (source, "auth-type");
- if (auth_type) {
- gchar *key = NULL;
-
- key = build_pass_key (ecal);
- e_passwords_forget_password (component_name, key);
- g_free (key);
- }
-
- e_passwords_forget_password (component_name, e_source_get_uri (source));
-}
-
-ECal *
-e_auth_new_cal_from_default (ECalSourceType type)
-{
- ECal *ecal = NULL;
-
- if (!e_cal_open_default (&ecal, type, auth_func_cb, NULL, NULL))
- return NULL;
-
- return ecal;
-}
-
-ECal *
-e_auth_new_cal_from_source (ESource *source, ECalSourceType type)
-{
- ECal *cal;
-
- cal = e_cal_new (source, type);
- if (cal)
- e_cal_set_auth_func (cal, (ECalAuthFunc) auth_func_cb, NULL);
-
- return cal;
-}
-
-typedef struct {
- ECal *cal;
- GtkWindow *parent;
- GCancellable *cancellable;
- ECalSourceType source_type;
- icaltimezone *default_zone;
-
- /* Authentication Details */
- gchar *auth_component;
-} LoadContext;
-
-static void
-load_cal_source_context_free (LoadContext *context)
-{
- if (context->cal != NULL)
- g_object_unref (context->cal);
-
- if (context->parent != NULL)
- g_object_unref (context->parent);
-
- if (context->cancellable != NULL)
- g_object_unref (context->cancellable);
-
- g_free (context->auth_component);
-
- g_slice_free (LoadContext, context);
-}
-
-static void
-load_cal_source_get_auth_details (ESource *source,
- LoadContext *context)
-{
- const gchar *property;
-
- /* ECal figures out most of the details before invoking the
- * authentication callback, but we still need a component name
- * for e_passwords_ask_password(). */
-
- /* auth_component */
-
- property = e_source_get_property (source, "auth-domain");
-
- if (property == NULL)
- property = "Calendar";
-
- context->auth_component = g_strdup (property);
-}
-
-static gchar *
-load_cal_source_authenticate (ECal *cal,
- const gchar *prompt,
- const gchar *uri,
- gpointer not_used)
-{
- const gchar *auth_component;
- const gchar *title;
- GtkWindow *parent;
- gchar *password;
-
- /* XXX Dig up authentication info embedded in the ECal instance.
- * (See load_cal_source_thread() for an explanation of why.) */
- auth_component = g_object_get_data (G_OBJECT (cal), "auth-component");
- g_return_val_if_fail (auth_component != NULL, NULL);
-
- parent = g_object_get_data (G_OBJECT (cal), "parent-window");
-
- /* Remember the URI so we don't have to reconstruct it if
- * authentication fails and we have to forget the password. */
- g_object_set_data_full (
- G_OBJECT (cal),
- "auth-uri", g_strdup (uri),
- (GDestroyNotify) g_free);
-
- /* XXX Dialog windows should not have titles. */
- title = "";
-
- password = e_passwords_get_password (auth_component, uri);
-
- if (password == NULL) {
- gboolean remember;
- ESource *source = e_cal_get_source (cal);
-
- remember = get_remember_password (source);
-
- password = e_passwords_ask_password (
- title, auth_component, uri,
- prompt, E_PASSWORDS_REMEMBER_FOREVER |
- E_PASSWORDS_SECRET | E_PASSWORDS_ONLINE,
- &remember, parent);
-
- if (password)
- set_remember_password (source, remember);
- }
-
- return password;
-}
-
-static void
-load_cal_source_thread (GSimpleAsyncResult *simple,
- ESource *source,
- GCancellable *cancellable)
-{
- ECal *cal;
- LoadContext *context;
- GError *error = NULL;
-
- context = g_simple_async_result_get_op_res_gpointer (simple);
-
- /* XXX This doesn't take a GError, it just dumps
- * error messages to the terminal... so broken. */
- cal = e_cal_new (source, context->source_type);
- g_return_if_fail (cal != NULL);
-
- if (g_cancellable_set_error_if_cancelled (cancellable, &error)) {
- g_simple_async_result_set_from_error (simple, error);
- g_object_unref (cal);
- g_error_free (error);
- return;
- }
-
- if (!e_cal_set_default_timezone (cal, context->default_zone, &error)) {
- g_simple_async_result_set_from_error (simple, error);
- g_object_unref (cal);
- g_error_free (error);
- return;
- }
-
- /* XXX e_cal_set_auth_func() does not take a GDestroyNotify callback
- * for the 'user_data' argument, which makes the argument rather
- * useless. So instead, we'll embed the information needed by
- * the authentication callback directly into the ECal instance
- * using g_object_set_data_full(). */
- g_object_set_data_full (
- G_OBJECT (cal), "auth-component",
- g_strdup (context->auth_component),
- (GDestroyNotify) g_free);
- if (context->parent != NULL)
- g_object_set_data_full (
- G_OBJECT (cal), "parent-window",
- g_object_ref (context->parent),
- (GDestroyNotify) g_object_unref);
-
- e_cal_set_auth_func (
- cal, (ECalAuthFunc) load_cal_source_authenticate, NULL);
-
-try_again:
- if (!e_cal_open (cal, FALSE, &error))
- goto fail;
-
- if (g_cancellable_set_error_if_cancelled (cancellable, &error)) {
- g_simple_async_result_set_from_error (simple, error);
- g_object_unref (cal);
- g_error_free (error);
- return;
- }
-
- context->cal = cal;
-
- return;
-
-fail:
- g_return_if_fail (error != NULL);
-
- /* If authentication failed, forget the password and reprompt. */
- if (g_error_matches (
- error, E_CALENDAR_ERROR,
- E_CALENDAR_STATUS_AUTHENTICATION_FAILED)) {
- const gchar *auth_uri;
-
- /* Retrieve the URI set by the authentication function. */
- auth_uri = g_object_get_data (G_OBJECT (cal), "auth-uri");
-
- e_passwords_forget_password (
- context->auth_component, auth_uri);
- g_clear_error (&error);
- goto try_again;
-
- /* XXX Might this cause a busy loop? */
- } else if (g_error_matches (
- error, E_CALENDAR_ERROR, E_CALENDAR_STATUS_BUSY)) {
- g_clear_error (&error);
- g_usleep (250000);
- goto try_again;
-
- } else {
- g_simple_async_result_set_from_error (simple, error);
- g_object_unref (cal);
- g_error_free (error);
- }
-}
-
-/**
- * e_load_cal_source_async:
- * @source: an #ESource
- * @source_type: the type of #ECal to load
- * @default_zone: default time zone, or %NULL to use UTC
- * @parent: parent window for password dialogs, or %NULL
- * @cancellable: optional #GCancellable object, %NULL to ignore
- * @callback: a #GAsyncReadyCallback to call when the request is satisfied
- * @user_data: the data to pass to @callback
- *
- * Creates a new #ECal specified by @source and opens it, prompting the
- * user for authentication if necessary.
- *
- * When the operation is finished, @callback will be called. You can
- * then call e_load_cal_source_finish() to obtain the resulting #ECal.
- **/
-void
-e_load_cal_source_async (ESource *source,
- ECalSourceType source_type,
- icaltimezone *default_zone,
- GtkWindow *parent,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
- LoadContext *context;
-
- g_return_if_fail (E_IS_SOURCE (source));
-
- /* Source must have a group so we can obtain its URI. */
- g_return_if_fail (e_source_peek_group (source) != NULL);
-
- if (parent != NULL) {
- g_return_if_fail (GTK_IS_WINDOW (parent));
- g_object_ref (parent);
- }
-
- if (cancellable != NULL) {
- g_return_if_fail (G_IS_CANCELLABLE (cancellable));
- g_object_ref (cancellable);
- } else {
- /* always provide cancellable, because the code depends on it */
- cancellable = g_cancellable_new ();
- }
-
- if (default_zone == NULL)
- default_zone = icaltimezone_get_utc_timezone ();
-
- context = g_slice_new0 (LoadContext);
- context->parent = parent;
- context->cancellable = cancellable;
- context->source_type = source_type;
- context->default_zone = default_zone;
-
- /* Extract authentication details from the ESource before
- * spawning the thread, since ESource is not thread-safe. */
- load_cal_source_get_auth_details (source, context);
-
- simple = g_simple_async_result_new (
- G_OBJECT (source), callback,
- user_data, e_load_cal_source_async);
-
- g_simple_async_result_set_op_res_gpointer (
- simple, context, (GDestroyNotify)
- load_cal_source_context_free);
-
- g_simple_async_result_run_in_thread (
- simple, (GSimpleAsyncThreadFunc) load_cal_source_thread,
- G_PRIORITY_DEFAULT, context->cancellable);
-
- g_object_unref (simple);
-}
-
-/**
- * e_load_cal_source_finish:
- * @source: an #ESource
- * @result: a #GAsyncResult
- * @error: return location for a #GError, or %NULL
- *
- * Finishes an asynchronous #ECal open operation started with
- * e_load_cal_source_async(). If an error occurred, or the user
- * declined to authenticate, the function will return %NULL and
- * set @error.
- *
- * Returns: a ready-to-use #ECal, or %NULL on error
- **/
-ECal *
-e_load_cal_source_finish (ESource *source,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
- LoadContext *context;
-
- g_return_val_if_fail (E_IS_SOURCE (source), NULL);
- g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
-
- g_return_val_if_fail (
- g_simple_async_result_is_valid (
- result, G_OBJECT (source),
- e_load_cal_source_async), NULL);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- context = g_simple_async_result_get_op_res_gpointer (simple);
- g_return_val_if_fail (context != NULL, NULL);
-
- return g_object_ref (context->cal);
-}
diff --git a/calendar/common/authentication.h b/calendar/common/authentication.h
deleted file mode 100644
index 11b2dc1dfc..0000000000
--- a/calendar/common/authentication.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * Rodrigo Moya <rodrigo@ximian.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifndef AUTHENTICATION_H
-#define AUTHENTICATION_H
-
-#include <gtk/gtk.h>
-#include <libedataserver/e-source.h>
-#include <libecal/e-cal.h>
-
-ECal *e_auth_new_cal_from_default (ECalSourceType type);
-ECal *e_auth_new_cal_from_source (ESource *source, ECalSourceType type);
-void e_auth_cal_forget_password (ECal *ecal);
-
-void e_load_cal_source_async (ESource *source,
- ECalSourceType source_type,
- icaltimezone *default_zone,
- GtkWindow *parent,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-ECal * e_load_cal_source_finish (ESource *source,
- GAsyncResult *result,
- GError **error);
-
-#endif /* AUTHENTICATION_H */
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am
index 0a404d429c..09cc0559b0 100644
--- a/calendar/gui/Makefile.am
+++ b/calendar/gui/Makefile.am
@@ -209,7 +209,6 @@ libevolution_calendar_la_LIBADD = \
$(top_builddir)/addressbook/gui/contact-list-editor/libecontactlisteditor.la \
$(top_builddir)/widgets/menus/libmenus.la \
$(top_builddir)/shell/libeshell.la \
- $(top_builddir)/calendar/common/libevolution-calendarprivate.la \
$(top_builddir)/calendar/gui/dialogs/libcal-dialogs.la \
$(top_builddir)/calendar/importers/libevolution-calendar-importers.la \
$(top_builddir)/widgets/e-timezone-dialog/libetimezonedialog.la \
diff --git a/calendar/gui/alarm-notify/Makefile.am b/calendar/gui/alarm-notify/Makefile.am
index 5296f95f19..c15181ad9c 100644
--- a/calendar/gui/alarm-notify/Makefile.am
+++ b/calendar/gui/alarm-notify/Makefile.am
@@ -44,7 +44,6 @@ evolution_alarm_notify_SOURCES = \
evolution_alarm_notify_LDADD = \
$(top_builddir)/e-util/libeutil.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
- $(top_builddir)/calendar/common/libevolution-calendarprivate.la \
$(CAMEL_LIBS) \
$(EVOLUTION_CALENDAR_LIBS) \
$(CANBERRA_LIBS) \
diff --git a/calendar/gui/alarm-notify/alarm-notify.c b/calendar/gui/alarm-notify/alarm-notify.c
index 96e8a177aa..28b10ff602 100644
--- a/calendar/gui/alarm-notify/alarm-notify.c
+++ b/calendar/gui/alarm-notify/alarm-notify.c
@@ -26,16 +26,16 @@
#include <string.h>
#include <camel/camel.h>
+#include <libecal/e-cal-client.h>
#include <libedataserver/e-url.h>
#include <libedataserver/e-data-server-util.h>
#include <libedataserverui/e-passwords.h>
-#include <libecal/e-cal.h>
+#include <libedataserverui/e-client-utils.h>
#include "alarm.h"
#include "alarm-notify.h"
#include "alarm-queue.h"
#include "config-data.h"
-#include "common/authentication.h"
#define APPLICATION_ID "org.gnome.EvolutionAlarmNotify"
@@ -43,8 +43,8 @@ struct _AlarmNotifyPrivate {
/* Mapping from EUri's to LoadedClient structures */
/* FIXME do we need per source type uri hashes? or perhaps we
just need to hash based on source */
- GHashTable *uri_client_hash[E_CAL_SOURCE_TYPE_LAST];
- ESourceList *source_lists[E_CAL_SOURCE_TYPE_LAST];
+ GHashTable *uri_client_hash[E_CAL_CLIENT_SOURCE_TYPE_LAST];
+ ESourceList *source_lists[E_CAL_CLIENT_SOURCE_TYPE_LAST];
ESourceList *selected_calendars;
GMutex *mutex;
};
@@ -97,7 +97,7 @@ alarm_notify_list_changed_cb (ESourceList *source_list,
AlarmNotify *an)
{
GSList *groups, *sources, *p, *q;
- ECalSourceType source_type = E_CAL_SOURCE_TYPE_LAST;
+ ECalClientSourceType source_type = E_CAL_CLIENT_SOURCE_TYPE_LAST;
ProcessRemovalsData prd;
GList *l;
gint i;
@@ -106,13 +106,13 @@ alarm_notify_list_changed_cb (ESourceList *source_list,
source_list, alarm_notify_list_changed_cb, an);
/* Figure out the source type */
- for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++) {
+ for (i = 0; i < E_CAL_CLIENT_SOURCE_TYPE_LAST; i++) {
if (source_list == an->priv->source_lists[i]) {
source_type = i;
break;
}
}
- if (source_type == E_CAL_SOURCE_TYPE_LAST)
+ if (source_type == E_CAL_CLIENT_SOURCE_TYPE_LAST)
return;
/* process the additions */
@@ -156,12 +156,12 @@ alarm_notify_list_changed_cb (ESourceList *source_list,
static void
alarm_notify_load_calendars (AlarmNotify *an,
- ECalSourceType source_type)
+ ECalClientSourceType source_type)
{
ESourceList *source_list;
GSList *groups, *sources, *p, *q;
- if (!e_cal_get_sources (&source_list, source_type, NULL)) {
+ if (!e_cal_client_get_sources (&source_list, source_type, NULL)) {
debug (("Cannont get sources"));
an->priv->source_lists[source_type] = NULL;
@@ -198,7 +198,7 @@ alarm_notify_load_calendars (AlarmNotify *an,
static void
alarm_notify_dequeue_client (gpointer key,
- ECal *client)
+ ECalClient *client)
{
alarm_queue_remove_client (client, TRUE);
}
@@ -211,7 +211,7 @@ alarm_notify_finalize (GObject *object)
priv = ALARM_NOTIFY (object)->priv;
- for (ii = 0; ii < E_CAL_SOURCE_TYPE_LAST; ii++) {
+ for (ii = 0; ii < E_CAL_CLIENT_SOURCE_TYPE_LAST; ii++) {
g_hash_table_foreach (
priv->uri_client_hash[ii],
(GHFunc) alarm_notify_dequeue_client, NULL);
@@ -279,7 +279,7 @@ alarm_notify_init (AlarmNotify *an)
an->priv->selected_calendars = config_data_get_calendars (
"/apps/evolution/calendar/sources");
- for (ii = 0; ii < E_CAL_SOURCE_TYPE_LAST; ii++)
+ for (ii = 0; ii < E_CAL_CLIENT_SOURCE_TYPE_LAST; ii++)
an->priv->uri_client_hash[ii] = g_hash_table_new_full (
g_str_hash, g_str_equal,
(GDestroyNotify) g_free,
@@ -287,7 +287,7 @@ alarm_notify_init (AlarmNotify *an)
alarm_queue_init (an);
- for (ii = 0; ii < E_CAL_SOURCE_TYPE_LAST; ii++)
+ for (ii = 0; ii < E_CAL_CLIENT_SOURCE_TYPE_LAST; ii++)
alarm_notify_load_calendars (an, ii);
}
@@ -313,22 +313,30 @@ alarm_notify_new (void)
}
static void
-cal_opened_cb (ECal *client, const GError *error, gpointer user_data)
+client_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
{
AlarmNotifyPrivate *priv;
AlarmNotify *an = ALARM_NOTIFY (user_data);
+ EClient *client = NULL;
+ GError *error = NULL;
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
priv = an->priv;
- debug (("%s - Calendar Status %d%s%s%s", e_cal_get_uri (client), error ? error->code : 0, error ? " (" : "", error ? error->message : "", error ? ")" : ""));
+ debug (("%s - Calendar Status %d%s%s%s", e_client_get_uri (client), error ? error->code : 0, error ? " (" : "", error ? error->message : "", error ? ")" : ""));
+
+ if (!error) {
+ ECalClient *cal_client = E_CAL_CLIENT (client);
+
+ g_hash_table_insert (priv->uri_client_hash[e_cal_client_get_source_type (cal_client)], g_strdup (e_client_get_uri (client)), cal_client);
+ /* to resolve floating DATE-TIME properly */
+ e_cal_client_set_default_timezone (cal_client, config_data_get_timezone ());
- if (!error)
- alarm_queue_add_client (client);
- else {
- g_hash_table_remove (priv->uri_client_hash[e_cal_get_source_type (client)],
- e_cal_get_uri (client));
- g_signal_handlers_disconnect_matched (G_OBJECT (client), G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, an);
+ alarm_queue_add_client (cal_client);
+ } else {
+ g_error_free (error);
}
}
@@ -344,10 +352,9 @@ cal_opened_cb (ECal *client, const GError *error, gpointer user_data)
* that it can be loaded in the future when the alarm daemon starts up.
**/
void
-alarm_notify_add_calendar (AlarmNotify *an, ECalSourceType source_type, ESource *source, gboolean load_afterwards)
+alarm_notify_add_calendar (AlarmNotify *an, ECalClientSourceType source_type, ESource *source, gboolean load_afterwards)
{
AlarmNotifyPrivate *priv;
- ECal *client;
EUri *e_uri;
gchar *str_uri;
gchar *pass_key;
@@ -390,16 +397,16 @@ alarm_notify_add_calendar (AlarmNotify *an, ECalSourceType source_type, ESource
}
}
- client = e_auth_new_cal_from_source (source, source_type);
+ debug (("%s - Calendar Open Async... %p", str_uri, source));
- if (client) {
- debug (("%s - Calendar Open Async... %p", str_uri, client));
- g_hash_table_insert (priv->uri_client_hash[source_type], g_strdup (str_uri), client);
- g_signal_connect (G_OBJECT (client), "cal_opened_ex", G_CALLBACK (cal_opened_cb), an);
- /* to resolve floating DATE-TIME properly */
- e_cal_set_default_timezone (client, config_data_get_timezone (), NULL);
- e_cal_open_async (client, FALSE);
- }
+ e_client_utils_open_new (source,
+ source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS ? E_CLIENT_SOURCE_TYPE_EVENTS :
+ source_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS ? E_CLIENT_SOURCE_TYPE_TASKS :
+ source_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS ? E_CLIENT_SOURCE_TYPE_MEMOS :
+ E_CLIENT_SOURCE_TYPE_LAST,
+ TRUE, NULL,
+ e_client_utils_authenticate_handler, NULL,
+ client_opened_cb, an);
g_free (str_uri);
g_free (pass_key);
@@ -407,17 +414,17 @@ alarm_notify_add_calendar (AlarmNotify *an, ECalSourceType source_type, ESource
}
void
-alarm_notify_remove_calendar (AlarmNotify *an, ECalSourceType source_type, const gchar *str_uri)
+alarm_notify_remove_calendar (AlarmNotify *an, ECalClientSourceType source_type, const gchar *str_uri)
{
AlarmNotifyPrivate *priv;
- ECal *client;
+ ECalClient *cal_client;
priv = an->priv;
- client = g_hash_table_lookup (priv->uri_client_hash[source_type], str_uri);
- if (client) {
- debug (("Removing Client %p", client));
- alarm_queue_remove_client (client, FALSE);
+ cal_client = g_hash_table_lookup (priv->uri_client_hash[source_type], str_uri);
+ if (cal_client) {
+ debug (("Removing Client %p", cal_client));
+ alarm_queue_remove_client (cal_client, FALSE);
g_hash_table_remove (priv->uri_client_hash[source_type], str_uri);
}
}
diff --git a/calendar/gui/alarm-notify/alarm-notify.h b/calendar/gui/alarm-notify/alarm-notify.h
index de7e0398a6..51837d21d5 100644
--- a/calendar/gui/alarm-notify/alarm-notify.h
+++ b/calendar/gui/alarm-notify/alarm-notify.h
@@ -27,7 +27,8 @@
#define ALARM_NOTIFY_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
+#include <libedataserverui/e-client-utils.h>
/* Standard GObject macros */
#define TYPE_ALARM_NOTIFY \
@@ -66,11 +67,11 @@ struct _AlarmNotifyClass {
GType alarm_notify_get_type (void);
AlarmNotify * alarm_notify_new (void);
void alarm_notify_add_calendar (AlarmNotify *an,
- ECalSourceType source_type,
+ ECalClientSourceType source_type,
ESource *source,
gboolean load_afterwards);
void alarm_notify_remove_calendar (AlarmNotify *an,
- ECalSourceType source_type,
+ ECalClientSourceType source_type,
const gchar *str_uri);
ESourceList * alarm_notify_get_selected_calendars
(AlarmNotify *an);
diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c
index e8e5485e45..fde985f8be 100644
--- a/calendar/gui/alarm-notify/alarm-queue.c
+++ b/calendar/gui/alarm-notify/alarm-queue.c
@@ -34,6 +34,7 @@
#include <canberra-gtk.h>
#endif
+#include <libecal/e-cal-client-view.h>
#include <libecal/e-cal-time-util.h>
#include <libecal/e-cal-component.h>
@@ -69,10 +70,10 @@ static AlarmNotify *an;
/* Structure that stores a client we are monitoring */
typedef struct {
/* Monitored client */
- ECal *client;
+ ECalClient *cal_client;
- /* The live query to the calendar */
- ECalView *query;
+ /* The live view to the calendar */
+ ECalClientView *view;
/* Hash table of component UID -> CompQueuedAlarms. If an element is
* present here, then it means its cqa->queued_alarms contains at least
@@ -142,17 +143,17 @@ static void popup_notification (time_t trigger,
gpointer alarm_id,
gboolean use_description);
#endif
-static void query_objects_changed_cb (ECal *client,
- GList *objects,
+static void query_objects_modified_cb (ECalClientView *view,
+ const GSList *objects,
gpointer data);
-static void query_objects_removed_cb (ECal *client,
- GList *objects,
+static void query_objects_removed_cb (ECalClientView *view,
+ const GSList *uids,
gpointer data);
static void update_cqa (CompQueuedAlarms *cqa, ECalComponent *comp);
static void update_qa (ECalComponentAlarms *alarms, QueuedAlarm *qa);
static void tray_list_remove_cqa (CompQueuedAlarms *cqa);
-static void on_dialog_objs_removed_cb (ECal *client, GList *objects, gpointer data);
+static void on_dialog_objs_removed_cb (ECalClientView *view, const GSList *uids, gpointer data);
/* Alarm queue engine */
@@ -299,9 +300,9 @@ midnight_refresh_cb (gpointer alarm_id, time_t trigger, gpointer data)
/* Looks up a client in the client alarms hash table */
static ClientAlarms *
-lookup_client (ECal *client)
+lookup_client (ECalClient *cal_client)
{
- return g_hash_table_lookup (client_alarms_hash, client);
+ return g_hash_table_lookup (client_alarms_hash, cal_client);
}
/* Looks up a queued alarm based on its alarm ID */
@@ -347,10 +348,21 @@ remove_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id,
cqa->queued_alarms = g_slist_delete_link (cqa->queued_alarms, l);
if (remove_alarm) {
- cqa->expecting_update = TRUE;
- e_cal_discard_alarm (cqa->parent_client->client, cqa->alarms->comp,
- qa->instance->auid, NULL);
- cqa->expecting_update = FALSE;
+ GError *error = NULL;
+ ECalComponentId *id = e_cal_component_get_id (cqa->alarms->comp);
+ if (id) {
+ cqa->expecting_update = TRUE;
+ e_cal_client_discard_alarm_sync (cqa->parent_client->cal_client, id->uid, id->rid,
+ qa->instance->auid, NULL, &error);
+ cqa->expecting_update = FALSE;
+
+ if (error) {
+ if (!g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_NOT_SUPPORTED))
+ g_debug ("%s: Failed to discard alarm: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+ e_cal_component_free_id (id);
+ }
}
g_free (qa);
@@ -425,7 +437,7 @@ alarm_trigger_cb (gpointer alarm_id, time_t trigger, gpointer data)
cqa = data;
comp = cqa->alarms->comp;
- config_data_set_last_notification_time (cqa->parent_client->client, trigger);
+ config_data_set_last_notification_time (cqa->parent_client->cal_client, trigger);
debug (("Setting Last notification time to %s", e_ctime (&trigger)));
qa = lookup_queued_alarm (cqa, alarm_id);
@@ -543,6 +555,7 @@ static void
load_alarms (ClientAlarms *ca, time_t start, time_t end)
{
gchar *str_query, *iso_start, *iso_end;
+ GError *error = NULL;
debug (("..."));
@@ -563,31 +576,36 @@ load_alarms (ClientAlarms *ca, time_t start, time_t end)
g_free (iso_end);
/* create the live query */
- if (ca->query) {
+ if (ca->view) {
debug (("Disconnecting old queries"));
g_signal_handlers_disconnect_matched (
- ca->query, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, ca);
- g_object_unref (ca->query);
- ca->query = NULL;
+ ca->view, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, ca);
+ g_object_unref (ca->view);
+ ca->view = NULL;
}
- /* 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");
+ if (!e_cal_client_get_view_sync (ca->cal_client, str_query, &ca->view, NULL, &error)) {
+ g_debug ("%s: Could not get query for client: %s", error ? error->message : "Unknown error", G_STRFUNC);
+ if (error)
+ g_error_free (error);
} else {
debug (("Setting Call backs"));
g_signal_connect (
- ca->query, "objects_added",
- G_CALLBACK (query_objects_changed_cb), ca);
+ ca->view, "objects-added",
+ G_CALLBACK (query_objects_modified_cb), ca);
g_signal_connect (
- ca->query, "objects_modified",
- G_CALLBACK (query_objects_changed_cb), ca);
+ ca->view, "objects-modified",
+ G_CALLBACK (query_objects_modified_cb), ca);
g_signal_connect (
- ca->query, "objects_removed",
+ ca->view, "objects-removed",
G_CALLBACK (query_objects_removed_cb), ca);
- e_cal_view_start (ca->query);
+ e_cal_client_view_start (ca->view, &error);
+ if (error) {
+ g_debug ("%s: Failed to start view: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
}
g_free (str_query);
@@ -609,7 +627,7 @@ load_alarms_for_today (ClientAlarms *ca)
* half-open; we do not want to display the "last" displayed alarm
* twice, once when it occurs and once when the alarm daemon restarts.
*/
- from = config_data_get_last_notification_time (ca->client) + 1;
+ from = config_data_get_last_notification_time (ca->cal_client) + 1;
if (from <= 0)
from = MAX (from, day_start);
@@ -618,20 +636,6 @@ load_alarms_for_today (ClientAlarms *ca)
load_alarms (ca, from, day_end);
}
-/* Called when a calendar client finished loading; we load its alarms */
-static void
-cal_opened_cb (ECal *client, const GError *error, gpointer data)
-{
- ClientAlarms *ca;
-
- ca = data;
-
- if (error)
- return;
-
- load_alarms_for_today (ca);
-}
-
/* Looks up a component's queued alarm structure in a client alarms structure */
static CompQueuedAlarms *
lookup_comp_queued_alarms (ClientAlarms *ca, const ECalComponentId *id)
@@ -693,35 +697,71 @@ remove_comp (ClientAlarms *ca, ECalComponentId *id)
*/
struct _query_msg {
Message header;
- GList *objects;
+ GSList *objects;
gpointer data;
};
-static GList *
-duplicate_ical (GList *in_list)
+static GSList *
+duplicate_ical (const GSList *in_list)
{
- GList *l, *out_list = NULL;
+ const GSList *l;
+ GSList *out_list = NULL;
for (l = in_list; l; l = l->next) {
- out_list = g_list_prepend (out_list, icalcomponent_new_clone (l->data));
+ out_list = g_slist_prepend (out_list, icalcomponent_new_clone (l->data));
}
- return g_list_reverse (out_list);
+ return g_slist_reverse (out_list);
}
-static GList *
-duplicate_ecal (GList *in_list)
+static GSList *
+duplicate_ecal (const GSList *in_list)
{
- GList *l, *out_list = NULL;
+ const GSList *l;
+ GSList *out_list = NULL;
for (l = in_list; l; l = l->next) {
ECalComponentId *id, *old;
old = l->data;
id = g_new0 (ECalComponentId, 1);
id->uid = g_strdup (old->uid);
id->rid = g_strdup (old->rid);
- out_list = g_list_prepend (out_list, id);
+ out_list = g_slist_prepend (out_list, id);
+ }
+
+ return g_slist_reverse (out_list);
+}
+
+static gboolean
+get_alarms_for_object (ECalClient *cal_client, const ECalComponentId *id, time_t start, time_t end, ECalComponentAlarms **alarms)
+{
+ icalcomponent *icalcomp;
+ ECalComponent *comp;
+ ECalComponentAlarmAction omit[] = {-1};
+
+ g_return_val_if_fail (cal_client != NULL, FALSE);
+ g_return_val_if_fail (id != NULL, FALSE);
+ g_return_val_if_fail (alarms != NULL, FALSE);
+ g_return_val_if_fail (start >= 0 && end >= 0, FALSE);
+ g_return_val_if_fail (start <= end, FALSE);
+
+ if (!e_cal_client_get_object_sync (cal_client, id->uid, id->rid, &icalcomp, NULL, NULL))
+ return FALSE;
+
+ if (!icalcomp)
+ return FALSE;
+
+ comp = e_cal_component_new ();
+ if (!e_cal_component_set_icalcomponent (comp, icalcomp)) {
+ icalcomponent_free (icalcomp);
+ g_object_unref (comp);
+ return FALSE;
}
- return g_list_reverse (out_list);
+ *alarms = e_cal_util_generate_alarms_for_comp (comp, start, end, omit, e_cal_client_resolve_tzid_cb,
+ cal_client, e_cal_client_get_default_timezone (cal_client));
+
+ g_object_unref (comp);
+
+ return TRUE;
}
static void
@@ -733,13 +773,13 @@ query_objects_changed_async (struct _query_msg *msg)
gboolean found;
icaltimezone *zone;
CompQueuedAlarms *cqa;
- GList *l;
- GList *objects;
+ GSList *l;
+ GSList *objects;
ca = msg->data;
objects = msg->objects;
- from = config_data_get_last_notification_time (ca->client);
+ from = config_data_get_last_notification_time (ca->cal_client);
if (from == -1)
from = time (NULL);
else
@@ -757,10 +797,10 @@ query_objects_changed_async (struct _query_msg *msg)
e_cal_component_set_icalcomponent (comp, l->data);
id = e_cal_component_get_id (comp);
- found = e_cal_get_alarms_for_object (ca->client, id, from, day_end, &alarms);
+ found = get_alarms_for_object (ca->cal_client, id, from, day_end, &alarms);
if (!found) {
- debug (("No Alarm found for client %p", ca->client));
+ debug (("No Alarm found for client %p", ca->cal_client));
tray_list_remove_cqa (lookup_comp_queued_alarms (ca, id));
remove_comp (ca, id);
g_hash_table_remove (ca->uid_alarms_hash, id);
@@ -826,13 +866,13 @@ query_objects_changed_async (struct _query_msg *msg)
g_object_unref (comp);
comp = NULL;
}
- g_list_free (objects);
+ g_slist_free (objects);
g_slice_free (struct _query_msg, msg);
}
static void
-query_objects_changed_cb (ECal *client, GList *objects, gpointer data)
+query_objects_modified_cb (ECalClientView *view, const GSList *objects, gpointer data)
{
struct _query_msg *msg;
@@ -851,13 +891,13 @@ static void
query_objects_removed_async (struct _query_msg *msg)
{
ClientAlarms *ca;
- GList *l;
- GList *objects;
+ GSList *l;
+ GSList *objects;
ca = msg->data;
objects = msg->objects;
- debug (("Removing %d objects", g_list_length (objects)));
+ debug (("Removing %d objects", g_slist_length (objects)));
for (l = objects; l != NULL; l = l->next) {
/* If the alarm is already triggered remove it. */
@@ -867,19 +907,19 @@ query_objects_removed_async (struct _query_msg *msg)
e_cal_component_free_id (l->data);
}
- g_list_free (objects);
+ g_slist_free (objects);
g_slice_free (struct _query_msg, msg);
}
static void
-query_objects_removed_cb (ECal *client, GList *objects, gpointer data)
+query_objects_removed_cb (ECalClientView *view, const GSList *uids, gpointer data)
{
struct _query_msg *msg;
msg = g_slice_new0 (struct _query_msg);
msg->header.func = (MessageFunc) query_objects_removed_async;
- msg->objects = duplicate_ecal (objects);
+ msg->objects = duplicate_ecal (uids);
msg->data = data;
message_push ((Message *) msg);
@@ -919,7 +959,7 @@ create_snooze (CompQueuedAlarms *cqa, gpointer alarm_id, gint snooze_mins)
/* Launches a component editor for a component */
static void
-edit_component (ECal *client, ECalComponent *comp)
+edit_component (ECalClient *cal_client, ECalComponent *comp)
{
ESource *source;
gchar *command_line;
@@ -931,19 +971,19 @@ edit_component (ECal *client, ECalComponent *comp)
/* XXX Don't we have a function to construct these URIs?
* How are other apps expected to know this stuff? */
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (cal_client));
source_uid = e_source_peek_uid (source);
e_cal_component_get_uid (comp, &comp_uid);
- switch (e_cal_get_source_type (client)) {
- case E_CAL_SOURCE_TYPE_EVENT:
+ switch (e_cal_client_get_source_type (cal_client)) {
+ case E_CAL_CLIENT_SOURCE_TYPE_EVENTS:
scheme = "calendar:";
break;
- case E_CAL_SOURCE_TYPE_TODO:
+ case E_CAL_CLIENT_SOURCE_TYPE_TASKS:
scheme = "task:";
break;
- case E_CAL_SOURCE_TYPE_JOURNAL:
+ case E_CAL_CLIENT_SOURCE_TYPE_MEMOS:
scheme = "memo:";
break;
default:
@@ -973,8 +1013,8 @@ typedef struct {
CompQueuedAlarms *cqa;
gpointer alarm_id;
ECalComponent *comp;
- ECal *client;
- ECalView *query;
+ ECalClient *cal_client;
+ ECalClientView *view;
GdkPixbuf *image;
GtkTreeIter iter;
} TrayIconData;
@@ -999,13 +1039,13 @@ free_tray_icon_data (TrayIconData *tray_data)
tray_data->location = NULL;
}
- g_object_unref (tray_data->client);
- tray_data->client = NULL;
+ g_object_unref (tray_data->cal_client);
+ tray_data->cal_client = NULL;
- g_signal_handlers_disconnect_matched (tray_data->query, G_SIGNAL_MATCH_FUNC,
+ g_signal_handlers_disconnect_matched (tray_data->view, G_SIGNAL_MATCH_FUNC,
0, 0, NULL, on_dialog_objs_removed_cb, NULL);
- g_object_unref (tray_data->query);
- tray_data->query = NULL;
+ g_object_unref (tray_data->view);
+ tray_data->view = NULL;
g_object_unref (tray_data->comp);
tray_data->comp = NULL;
@@ -1020,44 +1060,47 @@ free_tray_icon_data (TrayIconData *tray_data)
static void
on_dialog_objs_removed_async (struct _query_msg *msg)
{
- const gchar *our_uid;
- GList *l;
TrayIconData *tray_data;
- GList *objects;
+ GSList *l, *objects;
+ ECalComponentId *our_id;
debug (("..."));
tray_data = msg->data;
objects = msg->objects;
- e_cal_component_get_uid (tray_data->comp, &our_uid);
- g_return_if_fail (our_uid && *our_uid);
+ our_id = e_cal_component_get_id (tray_data->comp);
+ g_return_if_fail (our_id);
for (l = objects; l != NULL; l = l->next) {
- const gchar *uid = l->data;
+ ECalComponentId *id = l->data;
- if (!uid)
+ if (!id)
continue;
- if (!strcmp (uid, our_uid)) {
+ if (g_strcmp0 (id->uid, our_id->uid) == 0&& g_strcmp0 (id->rid, our_id->rid) == 0) {
tray_data->cqa = NULL;
tray_data->alarm_id = NULL;
tray_icons_list = g_list_remove (tray_icons_list, tray_data);
tray_data = NULL;
}
+
+ e_cal_component_free_id (id);
}
+ e_cal_component_free_id (our_id);
+ g_slist_free (objects);
g_slice_free (struct _query_msg, msg);
}
static void
-on_dialog_objs_removed_cb (ECal *client, GList *objects, gpointer data)
+on_dialog_objs_removed_cb (ECalClientView *view, const GSList *uids, gpointer data)
{
struct _query_msg *msg;
msg = g_slice_new0 (struct _query_msg);
msg->header.func = (MessageFunc) on_dialog_objs_removed_async;
- msg->objects = objects;
+ msg->objects = duplicate_ecal (uids);
msg->data = data;
message_push ((Message *) msg);
@@ -1219,7 +1262,7 @@ notify_dialog_cb (AlarmNotifyResult result, gint snooze_mins, gpointer data)
debug (("Received from dialog"));
- g_signal_handlers_disconnect_matched (tray_data->query, G_SIGNAL_MATCH_FUNC,
+ g_signal_handlers_disconnect_matched (tray_data->view, G_SIGNAL_MATCH_FUNC,
0, 0, NULL, on_dialog_objs_removed_cb, NULL);
switch (result) {
@@ -1254,7 +1297,7 @@ notify_dialog_cb (AlarmNotifyResult result, gint snooze_mins, gpointer data)
break;
case ALARM_NOTIFY_EDIT:
- edit_component (tray_data->client, tray_data->comp);
+ edit_component (tray_data->cal_client, tray_data->comp);
break;
@@ -1530,11 +1573,11 @@ display_notification (time_t trigger, CompQueuedAlarms *cqa,
tray_data->cqa = cqa;
tray_data->alarm_id = alarm_id;
tray_data->comp = g_object_ref (e_cal_component_clone (comp));
- tray_data->client = cqa->parent_client->client;
- tray_data->query = g_object_ref (cqa->parent_client->query);
+ tray_data->cal_client = cqa->parent_client->cal_client;
+ tray_data->view = g_object_ref (cqa->parent_client->view);
tray_data->blink_state = FALSE;
tray_data->snooze_set = FALSE;
- g_object_ref (tray_data->client);
+ g_object_ref (tray_data->cal_client);
/* Task to add tray_data to the global tray_icon_list */
tray_list_add_new (tray_data);
@@ -1558,7 +1601,7 @@ display_notification (time_t trigger, CompQueuedAlarms *cqa,
g_free (time_str);
g_free (str);
- g_signal_connect (G_OBJECT (tray_data->query), "objects_removed",
+ g_signal_connect (G_OBJECT (tray_data->view), "objects_removed",
G_CALLBACK (on_dialog_objs_removed_cb), tray_data);
/* FIXME: We should remove this check */
@@ -1731,8 +1774,7 @@ mail_notification (time_t trigger, CompQueuedAlarms *cqa, gpointer alarm_id)
debug (("..."));
- if (!e_cal_get_static_capability (cqa->parent_client->client,
- CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS))
+ if (!e_client_check_capability (E_CLIENT (cqa->parent_client->cal_client), CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS))
return;
dialog = gtk_dialog_new_with_buttons (_("Warning"),
@@ -1932,20 +1974,20 @@ free_client_alarms_cb (gpointer key, gpointer value, gpointer user_data)
if (ca) {
remove_client_alarms (ca);
- if (ca->client) {
+ if (ca->cal_client) {
debug (("Disconnecting Client"));
- g_signal_handlers_disconnect_matched (ca->client, G_SIGNAL_MATCH_DATA,
+ g_signal_handlers_disconnect_matched (ca->cal_client, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, ca);
- g_object_unref (ca->client);
+ g_object_unref (ca->cal_client);
}
- if (ca->query) {
+ if (ca->view) {
debug (("Disconnecting Query"));
- g_signal_handlers_disconnect_matched (ca->query, G_SIGNAL_MATCH_DATA,
+ g_signal_handlers_disconnect_matched (ca->view, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, ca);
- g_object_unref (ca->query);
+ g_object_unref (ca->view);
}
g_hash_table_destroy (ca->uid_alarms_hash);
@@ -2016,52 +2058,46 @@ hash_ids (gpointer a)
struct _alarm_client_msg {
Message header;
- ECal *client;
+ ECalClient *cal_client;
};
static void
alarm_queue_add_async (struct _alarm_client_msg *msg)
{
ClientAlarms *ca;
- ECal *client = msg->client;
+ ECalClient *cal_client = msg->cal_client;
g_return_if_fail (alarm_queue_inited);
- g_return_if_fail (client != NULL);
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (cal_client != NULL);
+ g_return_if_fail (E_IS_CAL_CLIENT (cal_client));
- ca = lookup_client (client);
+ ca = lookup_client (cal_client);
if (ca) {
/* We already have it. Unref the passed one*/
- g_object_unref (client);
+ g_object_unref (cal_client);
return;
}
- debug (("client=%p", client));
+ debug (("client=%p", cal_client));
ca = g_new (ClientAlarms, 1);
- ca->client = client;
- ca->query = NULL;
+ ca->cal_client = cal_client;
+ ca->view = NULL;
- g_hash_table_insert (client_alarms_hash, client, ca);
+ g_hash_table_insert (client_alarms_hash, cal_client, ca);
ca->uid_alarms_hash = g_hash_table_new (
(GHashFunc) hash_ids, (GEqualFunc) compare_ids);
- if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) {
- load_alarms_for_today (ca);
- } else {
- g_signal_connect (client, "cal_opened_ex",
- G_CALLBACK (cal_opened_cb),
- ca);
- }
+ load_alarms_for_today (ca);
g_slice_free (struct _alarm_client_msg, msg);
}
/**
* alarm_queue_add_client:
- * @client: A calendar client.
+ * @cal_client: A calendar client.
*
* Adds a calendar client to the alarm queueing system. Alarm trigger
* notifications will be presented at the appropriate times. The client should
@@ -2074,13 +2110,13 @@ alarm_queue_add_async (struct _alarm_client_msg *msg)
* queueing system when it is no longer wanted.
**/
void
-alarm_queue_add_client (ECal *client)
+alarm_queue_add_client (ECalClient *cal_client)
{
struct _alarm_client_msg *msg;
msg = g_slice_new0 (struct _alarm_client_msg);
msg->header.func = (MessageFunc) alarm_queue_add_async;
- msg->client = g_object_ref (client);
+ msg->cal_client = g_object_ref (cal_client);
message_push ((Message *) msg);
}
@@ -2137,35 +2173,35 @@ static void
alarm_queue_remove_async (struct _alarm_client_msg *msg)
{
ClientAlarms *ca;
- ECal *client = msg->client;
+ ECalClient *cal_client = msg->cal_client;
g_return_if_fail (alarm_queue_inited);
- g_return_if_fail (client != NULL);
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (cal_client != NULL);
+ g_return_if_fail (E_IS_CAL_CLIENT (cal_client));
- ca = lookup_client (client);
+ ca = lookup_client (cal_client);
g_return_if_fail (ca != NULL);
debug (("..."));
remove_client_alarms (ca);
/* Clean up */
- if (ca->client) {
+ if (ca->cal_client) {
debug (("Disconnecting Client"));
- g_signal_handlers_disconnect_matched (ca->client, G_SIGNAL_MATCH_DATA,
+ g_signal_handlers_disconnect_matched (ca->cal_client, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, ca);
- g_object_unref (ca->client);
- ca->client = NULL;
+ g_object_unref (ca->cal_client);
+ ca->cal_client = NULL;
}
- if (ca->query) {
+ if (ca->view) {
debug (("Disconnecting Query"));
- g_signal_handlers_disconnect_matched (ca->query, G_SIGNAL_MATCH_DATA,
+ g_signal_handlers_disconnect_matched (ca->view, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, ca);
- g_object_unref (ca->query);
- ca->query = NULL;
+ g_object_unref (ca->view);
+ ca->view = NULL;
}
g_hash_table_destroy (ca->uid_alarms_hash);
@@ -2173,7 +2209,7 @@ alarm_queue_remove_async (struct _alarm_client_msg *msg)
g_free (ca);
- g_hash_table_remove (client_alarms_hash, client);
+ g_hash_table_remove (client_alarms_hash, cal_client);
g_slice_free (struct _alarm_client_msg, msg);
}
@@ -2181,18 +2217,18 @@ alarm_queue_remove_async (struct _alarm_client_msg *msg)
/** alarm_queue_remove_client
*
* asynchronously remove client from alarm queue.
- * @client: Client to remove.
+ * @cal_client: Client to remove.
* @immediately: Indicates whether use thread or do it right now.
*/
void
-alarm_queue_remove_client (ECal *client, gboolean immediately)
+alarm_queue_remove_client (ECalClient *cal_client, gboolean immediately)
{
struct _alarm_client_msg *msg;
msg = g_slice_new0 (struct _alarm_client_msg);
msg->header.func = (MessageFunc) alarm_queue_remove_async;
- msg->client = client;
+ msg->cal_client = cal_client;
if (immediately) {
alarm_queue_remove_async (msg);
@@ -2220,7 +2256,7 @@ update_cqa (CompQueuedAlarms *cqa, ECalComponent *newcomp)
debug (("Generating alarms between %s and %s", e_ctime (&from), e_ctime (&to)));
alarms = e_cal_util_generate_alarms_for_comp (newcomp, from, to, omit,
- e_cal_resolve_tzid_cb, cqa->parent_client->client, zone);
+ e_cal_client_resolve_tzid_cb, cqa->parent_client->cal_client, zone);
/* Update auids in Queued Alarms*/
for (qa_list = cqa->queued_alarms; qa_list; qa_list = qa_list->next) {
diff --git a/calendar/gui/alarm-notify/alarm-queue.h b/calendar/gui/alarm-notify/alarm-queue.h
index c594e12a6b..e43027bd60 100644
--- a/calendar/gui/alarm-notify/alarm-queue.h
+++ b/calendar/gui/alarm-notify/alarm-queue.h
@@ -26,12 +26,12 @@
#ifndef ALARM_QUEUE_H
#define ALARM_QUEUE_H
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
void alarm_queue_init (gpointer);
void alarm_queue_done (void);
-void alarm_queue_add_client (ECal *client);
-void alarm_queue_remove_client (ECal *client, gboolean immediately);
+void alarm_queue_add_client (ECalClient *cal_client);
+void alarm_queue_remove_client (ECalClient *cal_client, gboolean immediately);
#endif
diff --git a/calendar/gui/alarm-notify/config-data.c b/calendar/gui/alarm-notify/config-data.c
index 41207d48fb..b5e6faa923 100644
--- a/calendar/gui/alarm-notify/config-data.c
+++ b/calendar/gui/alarm-notify/config-data.c
@@ -259,7 +259,7 @@ config_data_get_notify_with_tray (void)
* triggered while it was not running.
**/
void
-config_data_set_last_notification_time (ECal *cal, time_t t)
+config_data_set_last_notification_time (ECalClient *cal, time_t t)
{
GConfClient *client;
time_t current_t, now = time (NULL);
@@ -267,7 +267,7 @@ config_data_set_last_notification_time (ECal *cal, time_t t)
g_return_if_fail (t != -1);
if (cal) {
- ESource *source = e_cal_get_source (cal);
+ ESource *source = e_client_get_source (E_CLIENT (cal));
if (source) {
GTimeVal tmval = {0};
gchar *as_text;
@@ -301,13 +301,13 @@ config_data_set_last_notification_time (ECal *cal, time_t t)
* Return value: The last saved value, or -1 if no value had been saved before.
**/
time_t
-config_data_get_last_notification_time (ECal *cal)
+config_data_get_last_notification_time (ECalClient *cal)
{
GConfValue *value;
GConfClient *client;
if (cal) {
- ESource *source = e_cal_get_source (cal);
+ ESource *source = e_client_get_source (E_CLIENT (cal));
if (source) {
const gchar *last_notified;
diff --git a/calendar/gui/alarm-notify/config-data.h b/calendar/gui/alarm-notify/config-data.h
index 85b2593a8b..1023609d6a 100644
--- a/calendar/gui/alarm-notify/config-data.h
+++ b/calendar/gui/alarm-notify/config-data.h
@@ -27,7 +27,7 @@
#define CONFIG_DATA_H
#include <libical/ical.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <gconf/gconf-client.h>
#include <libedataserver/e-source-list.h>
@@ -37,10 +37,10 @@ gboolean config_data_get_24_hour_format (void);
gboolean config_data_get_notify_with_tray
(void);
void config_data_set_last_notification_time
- (ECal *cal,
+ (ECalClient *cal,
time_t t);
time_t config_data_get_last_notification_time
- (ECal *cal);
+ (ECalClient *cal);
void config_data_save_blessed_program
(const gchar *program);
gboolean config_data_is_blessed_program (const gchar *program);
diff --git a/calendar/gui/cal-editor-utils.c b/calendar/gui/cal-editor-utils.c
index c49e648883..4ddc3899b9 100644
--- a/calendar/gui/cal-editor-utils.c
+++ b/calendar/gui/cal-editor-utils.c
@@ -32,7 +32,7 @@
/**
* open_component_editor:
- * @client: Already opened #ECal, where to store the component
+ * @client: Already opened #ECalClient, where to store the component
* @comp: #ECalComponent component to be stored
* @is_new: Whether the @comp is a new component or an existing
* @error: #GError for possible error reporting
@@ -45,7 +45,7 @@
**/
void
open_component_editor (EShell *shell,
- ECal *client,
+ ECalClient *client,
ECalComponent *comp,
gboolean is_new,
GError **error)
@@ -55,7 +55,7 @@ open_component_editor (EShell *shell,
CompEditor *editor = NULL;
g_return_if_fail (E_IS_SHELL (shell));
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
g_return_if_fail (E_IS_CAL_COMPONENT (comp));
id = e_cal_component_get_id (comp);
@@ -99,10 +99,7 @@ open_component_editor (EShell *shell,
break;
default:
if (error)
- *error = g_error_new (
- E_CALENDAR_ERROR,
- E_CALENDAR_STATUS_INVALID_OBJECT,
- "%s", _("Invalid object"));
+ *error = e_client_error_create (E_CLIENT_ERROR_INVALID_ARG, NULL);
break;
}
diff --git a/calendar/gui/cal-editor-utils.h b/calendar/gui/cal-editor-utils.h
index 00f24a5b33..26b2104ea4 100644
--- a/calendar/gui/cal-editor-utils.h
+++ b/calendar/gui/cal-editor-utils.h
@@ -20,14 +20,14 @@
#ifndef CAL_EDITOR_UTILS_H
#define CAL_EDITOR_UTILS_H
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
#include <shell/e-shell.h>
G_BEGIN_DECLS
void open_component_editor (EShell *shell,
- ECal *client,
+ ECalClient *client,
ECalComponent *comp,
gboolean is_new,
GError **error);
diff --git a/calendar/gui/calendar-config.h b/calendar/gui/calendar-config.h
index f905af4d40..61e92efae4 100644
--- a/calendar/gui/calendar-config.h
+++ b/calendar/gui/calendar-config.h
@@ -29,7 +29,7 @@
#define _CALENDAR_CONFIG_H_
#include <gdk/gdk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <gconf/gconf-client.h>
#include <e-util/e-util-enums.h>
diff --git a/calendar/gui/comp-util.c b/calendar/gui/comp-util.c
index fbf9e7dc82..a6095d0bcc 100644
--- a/calendar/gui/comp-util.c
+++ b/calendar/gui/comp-util.c
@@ -32,8 +32,8 @@
#include "comp-util.h"
#include "dialogs/delete-comp.h"
#include <libecal/e-cal-component.h>
+#include <libedataserverui/e-client-utils.h>
#include "e-util/e-categories-config.h"
-#include "common/authentication.h"
#include "gnome-cal.h"
#include "shell/e-shell-window.h"
@@ -90,7 +90,7 @@ e_cal_component_compare_tzid (const gchar *tzid1, const gchar *tzid2)
/**
* cal_comp_util_compare_event_timezones:
* @comp: A calendar component object.
- * @client: A #ECal.
+ * @client: A #ECalClient.
*
* Checks if the component uses the given timezone for both the start and
* the end time, or if the UTC offsets of the start and end times are the same
@@ -101,7 +101,7 @@ e_cal_component_compare_tzid (const gchar *tzid1, const gchar *tzid2)
**/
gboolean
cal_comp_util_compare_event_timezones (ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
icaltimezone *zone)
{
ECalComponentDateTime start_datetime, end_datetime;
@@ -151,8 +151,8 @@ cal_comp_util_compare_event_timezones (ECalComponent *comp,
/* If the TZIDs differ, we have to compare the UTC offsets
of the start and end times, using their own timezones and
the given timezone. */
- if (!e_cal_get_timezone (client, start_datetime.tzid,
- &start_zone, NULL))
+ if (!e_cal_client_get_timezone_sync (client, start_datetime.tzid,
+ &start_zone, NULL, NULL))
goto out;
if (start_datetime.value) {
@@ -166,8 +166,8 @@ cal_comp_util_compare_event_timezones (ECalComponent *comp,
goto out;
}
- if (!e_cal_get_timezone (client, end_datetime.tzid,
- &end_zone, NULL))
+ if (!e_cal_client_get_timezone_sync (client, end_datetime.tzid,
+ &end_zone, NULL, NULL))
goto out;
if (end_datetime.value) {
@@ -211,7 +211,7 @@ cal_comp_util_compare_event_timezones (ECalComponent *comp,
* user cancelled the deletion.
**/
gboolean
-cal_comp_is_on_server (ECalComponent *comp, ECal *client)
+cal_comp_is_on_server (ECalComponent *comp, ECalClient *client)
{
const gchar *uid;
gchar *rid = NULL;
@@ -221,7 +221,7 @@ cal_comp_is_on_server (ECalComponent *comp, ECal *client)
g_return_val_if_fail (comp != NULL, FALSE);
g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), FALSE);
g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (E_IS_CAL (client), FALSE);
+ g_return_val_if_fail (E_IS_CAL_CLIENT (client), FALSE);
/* See if the component is on the server. If it is not, then it likely
* means that the appointment is new, only in the day view, and we
@@ -234,19 +234,18 @@ cal_comp_is_on_server (ECalComponent *comp, ECal *client)
/* TODO We should not be checking for this here. But since
* e_cal_util_construct_instance does not create the instances
* of all day events, so we default to old behaviour. */
- if (e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_RECURRENCES_NO_MASTER)) {
+ if (e_cal_client_check_recurrences_no_master (client)) {
rid = e_cal_component_get_recurid_as_string (comp);
}
- if (e_cal_get_object (client, uid, rid, &icalcomp, &error)) {
+ if (e_cal_client_get_object_sync (client, uid, rid, &icalcomp, NULL, &error)) {
icalcomponent_free (icalcomp);
g_free (rid);
return TRUE;
}
- if (error->code != E_CALENDAR_STATUS_OBJECT_NOT_FOUND)
+ if (!g_error_matches (error, E_CAL_CLIENT_ERROR, E_CAL_CLIENT_ERROR_OBJECT_NOT_FOUND))
g_warning (G_STRLOC ": %s", error->message);
g_clear_error (&error);
@@ -261,7 +260,7 @@ cal_comp_is_on_server (ECalComponent *comp, ECal *client)
* icalcomponent, not the ECalComponent.
**/
gboolean
-is_icalcomp_on_the_server (icalcomponent *icalcomp, ECal *client)
+is_icalcomp_on_the_server (icalcomponent *icalcomp, ECalClient *client)
{
gboolean on_server;
ECalComponent *comp;
@@ -288,7 +287,7 @@ is_icalcomp_on_the_server (icalcomponent *icalcomp, ECal *client)
* Return value: A newly-created calendar component.
**/
ECalComponent *
-cal_comp_event_new_with_defaults (ECal *client,
+cal_comp_event_new_with_defaults (ECalClient *client,
gboolean all_day,
gboolean use_default_reminder,
gint default_reminder_interval,
@@ -300,7 +299,7 @@ cal_comp_event_new_with_defaults (ECal *client,
icalproperty *icalprop;
ECalComponentAlarmTrigger trigger;
- if (!e_cal_get_default_object (client, &icalcomp, NULL))
+ if (!e_cal_client_get_default_object_sync (client, &icalcomp, NULL, NULL))
icalcomp = icalcomponent_new (ICAL_VEVENT_COMPONENT);
comp = e_cal_component_new ();
@@ -358,7 +357,7 @@ cal_comp_event_new_with_defaults (ECal *client,
}
ECalComponent *
-cal_comp_event_new_with_current_time (ECal *client,
+cal_comp_event_new_with_current_time (ECalClient *client,
gboolean all_day,
icaltimezone *zone,
gboolean use_default_reminder,
@@ -398,12 +397,12 @@ cal_comp_event_new_with_current_time (ECal *client,
}
ECalComponent *
-cal_comp_task_new_with_defaults (ECal *client)
+cal_comp_task_new_with_defaults (ECalClient *client)
{
ECalComponent *comp;
icalcomponent *icalcomp;
- if (!e_cal_get_default_object (client, &icalcomp, NULL))
+ if (!e_cal_client_get_default_object_sync (client, &icalcomp, NULL, NULL))
icalcomp = icalcomponent_new (ICAL_VTODO_COMPONENT);
comp = e_cal_component_new ();
@@ -417,12 +416,12 @@ cal_comp_task_new_with_defaults (ECal *client)
}
ECalComponent *
-cal_comp_memo_new_with_defaults (ECal *client)
+cal_comp_memo_new_with_defaults (ECalClient *client)
{
ECalComponent *comp;
icalcomponent *icalcomp;
- if (!e_cal_get_default_object (client, &icalcomp, NULL))
+ if (!e_cal_client_get_default_object_sync (client, &icalcomp, NULL, NULL))
icalcomp = icalcomponent_new (ICAL_VJOURNAL_COMPONENT);
comp = e_cal_component_new ();
@@ -613,7 +612,7 @@ cal_comp_selection_get_string_list (GtkSelectionData *selection_data)
}
static void
-datetime_to_zone (ECal *client, ECalComponentDateTime *date, const gchar *tzid)
+datetime_to_zone (ECalClient *client, ECalComponentDateTime *date, const gchar *tzid)
{
icaltimezone *from, *to;
@@ -625,16 +624,21 @@ datetime_to_zone (ECal *client, ECalComponentDateTime *date, const gchar *tzid)
from = icaltimezone_get_builtin_timezone_from_tzid (date->tzid);
if (!from) {
- if (!e_cal_get_timezone (client, date->tzid, &from, NULL))
+ GError *error = NULL;
+
+ if (!e_cal_client_get_timezone_sync (client, date->tzid, &from, NULL, &error))
g_warning (
- "%s: Could not get timezone from server: %s",
- G_STRFUNC, date->tzid ? date->tzid : "");
+ "%s: Could not get timezone '%s' from server: %s",
+ G_STRFUNC, date->tzid ? date->tzid : "", error ? error->message : "Unknown error");
+
+ if (error)
+ g_error_free (error);
}
to = icaltimezone_get_builtin_timezone_from_tzid (tzid);
if (!to) {
/* do not check failure here, maybe the zone is not available there */
- e_cal_get_timezone (client, tzid, &to, NULL);
+ e_cal_client_get_timezone_sync (client, tzid, &to, NULL, NULL);
}
icaltimezone_convert_time (date->value, from, to);
@@ -643,14 +647,14 @@ datetime_to_zone (ECal *client, ECalComponentDateTime *date, const gchar *tzid)
/**
* cal_comp_set_dtstart_with_oldzone:
- * @client: ECal structure, to retrieve timezone from, when required.
+ * @client: ECalClient structure, to retrieve timezone from, when required.
* @comp: Component, where make the change.
* @pdate: Value, to change to.
*
* Changes 'dtstart' of the component, but converts time to the old timezone.
**/
void
-cal_comp_set_dtstart_with_oldzone (ECal *client,
+cal_comp_set_dtstart_with_oldzone (ECalClient *client,
ECalComponent *comp,
const ECalComponentDateTime *pdate)
{
@@ -671,14 +675,14 @@ cal_comp_set_dtstart_with_oldzone (ECal *client,
/**
* cal_comp_set_dtend_with_oldzone:
- * @client: ECal structure, to retrieve timezone from, when required.
+ * @client: ECalClient structure, to retrieve timezone from, when required.
* @comp: Component, where make the change.
* @pdate: Value, to change to.
*
* Changes 'dtend' of the component, but converts time to the old timezone.
**/
void
-cal_comp_set_dtend_with_oldzone (ECal *client,
+cal_comp_set_dtend_with_oldzone (ECalClient *client,
ECalComponent *comp,
const ECalComponentDateTime *pdate)
{
@@ -699,18 +703,21 @@ cal_comp_set_dtend_with_oldzone (ECal *client,
void
comp_util_sanitize_recurrence_master (ECalComponent *comp,
- ECal *client)
+ ECalClient *client)
{
ECalComponent *master = NULL;
icalcomponent *icalcomp = NULL;
ECalComponentRange rid;
ECalComponentDateTime sdt;
const gchar *uid;
+ GError *error = NULL;
/* Get the master component */
e_cal_component_get_uid (comp, &uid);
- if (!e_cal_get_object (client, uid, NULL, &icalcomp, NULL)) {
- g_warning ("Unable to get the master component \n");
+ if (!e_cal_client_get_object_sync (client, uid, NULL, &icalcomp, NULL, &error)) {
+ g_warning ("Unable to get the master component: %s", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
return;
}
diff --git a/calendar/gui/comp-util.h b/calendar/gui/comp-util.h
index c99e1d0c3f..1f69ddb107 100644
--- a/calendar/gui/comp-util.h
+++ b/calendar/gui/comp-util.h
@@ -27,7 +27,7 @@
#include <gtk/gtk.h>
#include <libecal/e-cal-component.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <e-util/e-util-enums.h>
struct _EShell;
@@ -38,41 +38,41 @@ void cal_comp_util_add_exdate (ECalComponent *comp, time_t t, icaltimezone *zone
and DTEND, or if the UTC offsets of the start and end times are the same
as in the given zone. */
gboolean cal_comp_util_compare_event_timezones (ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
icaltimezone *zone);
/* Returns the number of icons owned by the ECalComponent */
gint cal_comp_util_get_n_icons (ECalComponent *comp, GSList **pixbufs);
gboolean cal_comp_is_on_server (ECalComponent *comp,
- ECal *client);
-gboolean is_icalcomp_on_the_server (icalcomponent *icalcomp, ECal *client);
+ ECalClient *client);
+gboolean is_icalcomp_on_the_server (icalcomponent *icalcomp, ECalClient *client);
ECalComponent * cal_comp_event_new_with_defaults
- (ECal *client,
+ (ECalClient *client,
gboolean all_day,
gboolean use_default_reminder,
gint default_reminder_interval,
EDurationType default_reminder_units);
ECalComponent * cal_comp_event_new_with_current_time
- (ECal *client,
+ (ECalClient *client,
gboolean all_day,
icaltimezone *zone,
gboolean use_default_reminder,
gint default_reminder_interval,
EDurationType default_reminder_units);
-ECalComponent *cal_comp_task_new_with_defaults (ECal *client);
-ECalComponent *cal_comp_memo_new_with_defaults (ECal *client);
+ECalComponent *cal_comp_task_new_with_defaults (ECalClient *client);
+ECalComponent *cal_comp_memo_new_with_defaults (ECalClient *client);
void cal_comp_update_time_by_active_window (ECalComponent *comp, struct _EShell *shell);
void cal_comp_selection_set_string_list (GtkSelectionData *data, GSList *str_list);
GSList *cal_comp_selection_get_string_list (GtkSelectionData *data);
-void cal_comp_set_dtstart_with_oldzone (ECal *client, ECalComponent *comp, const ECalComponentDateTime *pdate);
-void cal_comp_set_dtend_with_oldzone (ECal *client, ECalComponent *comp, const ECalComponentDateTime *pdate);
+void cal_comp_set_dtstart_with_oldzone (ECalClient *client, ECalComponent *comp, const ECalComponentDateTime *pdate);
+void cal_comp_set_dtend_with_oldzone (ECalClient *client, ECalComponent *comp, const ECalComponentDateTime *pdate);
-void comp_util_sanitize_recurrence_master (ECalComponent *comp, ECal *client);
+void comp_util_sanitize_recurrence_master (ECalComponent *comp, ECalClient *client);
gchar *icalcomp_suggest_filename (icalcomponent *icalcomp, const gchar *default_name);
diff --git a/calendar/gui/dialogs/alarm-dialog.c b/calendar/gui/dialogs/alarm-dialog.c
index 6b234f6cce..564c4dd1f4 100644
--- a/calendar/gui/dialogs/alarm-dialog.c
+++ b/calendar/gui/dialogs/alarm-dialog.c
@@ -54,7 +54,7 @@ typedef struct {
ECalComponentAlarm *alarm;
/* The client */
- ECal *ecal;
+ ECalClient *cal_client;
/* Toplevel */
GtkWidget *toplevel;
@@ -209,16 +209,16 @@ alarm_to_dialog (Dialog *dialog)
for (i = 0; valid && action_map[i] != -1; i++) {
gtk_list_store_set (
GTK_LIST_STORE (model), &iter,
- 1, !e_cal_get_static_capability (dialog->ecal, action_map_cap[i]),
+ 1, !e_client_check_capability (E_CLIENT (dialog->cal_client), action_map_cap[i]),
-1);
valid = gtk_tree_model_iter_next (model, &iter);
}
/* Set a default address if possible */
- if (!e_cal_get_static_capability (dialog->ecal, CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS)
- && !e_cal_component_alarm_has_attendees (dialog->alarm)
- && e_cal_get_alarm_email_address (dialog->ecal, &email, NULL)) {
+ if (!e_client_check_capability (E_CLIENT (dialog->cal_client), CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS)
+ && !e_cal_component_alarm_has_attendees (dialog->alarm)
+ && e_client_get_backend_property_sync (E_CLIENT (dialog->cal_client), CAL_BACKEND_PROPERTY_ALARM_EMAIL_ADDRESS, &email, NULL, NULL)) {
ECalComponentAttendee *a;
GSList attendee_list;
@@ -235,7 +235,7 @@ alarm_to_dialog (Dialog *dialog)
}
/* If we can repeat */
- repeat = !e_cal_get_static_capability (dialog->ecal, CAL_STATIC_CAPABILITY_NO_ALARM_REPEAT);
+ repeat = !e_client_check_capability (E_CLIENT (dialog->cal_client), CAL_STATIC_CAPABILITY_NO_ALARM_REPEAT);
gtk_widget_set_sensitive (dialog->repeat_toggle, repeat);
/* if we are editing a exiting alarm */
@@ -880,27 +880,6 @@ get_widgets (Dialog *dialog)
&& dialog->palarm_args);
}
-#if 0
-/* Callback used when the alarm options button is clicked */
-static void
-show_options (Dialog *dialog)
-{
- gboolean repeat;
- gchar *email;
-
- e_cal_component_alarm_set_action (dialog->alarm,
- e_dialog_combo_box_get (dialog->action_combo, action_map));
-
- repeat = !e_cal_get_static_capability (dialog->ecal, CAL_STATIC_CAPABILITY_NO_ALARM_REPEAT);
-
- if (e_cal_get_static_capability (dialog->ecal, CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS)
- || e_cal_get_alarm_email_address (dialog->ecal, &email, NULL)) {
- if (!alarm_options_dialog_run (dialog->toplevel, dialog->alarm, email, repeat))
- g_message (G_STRLOC ": not create the alarm options dialog");
- }
-}
-#endif
-
static void
addressbook_clicked_cb (GtkWidget *widget, Dialog *dialog)
{
@@ -1202,7 +1181,7 @@ init_widgets (Dialog *dialog)
}
gboolean
-alarm_dialog_run (GtkWidget *parent, ECal *ecal, ECalComponentAlarm *alarm)
+alarm_dialog_run (GtkWidget *parent, ECalClient *cal_client, ECalComponentAlarm *alarm)
{
Dialog dialog;
GtkWidget *container;
@@ -1211,7 +1190,7 @@ alarm_dialog_run (GtkWidget *parent, ECal *ecal, ECalComponentAlarm *alarm)
g_return_val_if_fail (alarm != NULL, FALSE);
dialog.alarm = alarm;
- dialog.ecal = ecal;
+ dialog.cal_client = cal_client;
dialog.builder = gtk_builder_new ();
e_load_ui_builder_definition (dialog.builder, "alarm-dialog.ui");
diff --git a/calendar/gui/dialogs/alarm-dialog.h b/calendar/gui/dialogs/alarm-dialog.h
index b5560f9ff4..d99d47f15f 100644
--- a/calendar/gui/dialogs/alarm-dialog.h
+++ b/calendar/gui/dialogs/alarm-dialog.h
@@ -30,12 +30,12 @@
#ifndef ALARM_DIALOG_H
#define ALARM_DIALOG_H
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
G_BEGIN_DECLS
-gboolean alarm_dialog_run (GtkWidget *parent, ECal *ecal, ECalComponentAlarm *alarm);
+gboolean alarm_dialog_run (GtkWidget *parent, ECalClient *cal_client, ECalComponentAlarm *alarm);
G_END_DECLS
diff --git a/calendar/gui/dialogs/alarm-list-dialog.c b/calendar/gui/dialogs/alarm-list-dialog.c
index 1990e076df..3e854da751 100644
--- a/calendar/gui/dialogs/alarm-list-dialog.c
+++ b/calendar/gui/dialogs/alarm-list-dialog.c
@@ -48,7 +48,7 @@ typedef struct {
GtkBuilder *builder;
/* The client */
- ECal *ecal;
+ ECalClient *cal_client;
/* The list store */
EAlarmList *list_store;
@@ -94,18 +94,13 @@ sensitize_buttons (Dialog *dialog)
GtkTreeSelection *selection;
GtkTreeIter iter;
gboolean have_selected, read_only = FALSE;
- GError *error = NULL;
- if (!e_cal_is_read_only (dialog->ecal, &read_only, &error)) {
- if (error->code != E_CALENDAR_STATUS_BUSY)
- read_only = TRUE;
- g_error_free (error);
- }
+ read_only = e_client_is_readonly (E_CLIENT (dialog->cal_client));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->list));
have_selected = gtk_tree_selection_get_selected (selection, NULL, &iter);
- if ((e_cal_get_one_alarm_only (dialog->ecal) && have_selected) || read_only)
+ if ((e_cal_client_check_one_alarm_only (dialog->cal_client) && have_selected) || read_only)
gtk_widget_set_sensitive (dialog->add, FALSE);
else
gtk_widget_set_sensitive (dialog->add, TRUE);
@@ -133,7 +128,7 @@ add_clicked_cb (GtkButton *button, gpointer data)
icalproperty_set_x_name (icalprop, "X-EVOLUTION-NEEDS-DESCRIPTION");
icalcomponent_add_property (icalcomp, icalprop);
- if (alarm_dialog_run (dialog->toplevel, dialog->ecal, alarm)) {
+ if (alarm_dialog_run (dialog->toplevel, dialog->cal_client, alarm)) {
e_alarm_list_append (dialog->list_store, &iter, alarm);
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter);
} else {
@@ -165,7 +160,7 @@ edit_clicked_cb (GtkButton *button, gpointer data)
alarm = (ECalComponentAlarm *) e_alarm_list_get_alarm (dialog->list_store, &iter);
path = gtk_tree_model_get_path (GTK_TREE_MODEL (dialog->list_store), &iter);
- if (alarm_dialog_run (dialog->toplevel, dialog->ecal, alarm)) {
+ if (alarm_dialog_run (dialog->toplevel, dialog->cal_client, alarm)) {
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter);
gtk_tree_model_row_changed (GTK_TREE_MODEL (dialog->list_store), path, &iter);
}
@@ -216,7 +211,7 @@ selection_changed_cb (GtkTreeSelection *selection, gpointer data)
}
void
-alarm_list_dialog_set_client (GtkWidget *dlg_box, ECal *client)
+alarm_list_dialog_set_client (GtkWidget *dlg_box, ECalClient *cal_client)
{
Dialog *dialog;
@@ -224,7 +219,7 @@ alarm_list_dialog_set_client (GtkWidget *dlg_box, ECal *client)
dialog = g_object_get_data (G_OBJECT (dlg_box), "dialog");
if (dialog) {
- dialog->ecal = client;
+ dialog->cal_client = cal_client;
sensitize_buttons (dialog);
}
}
@@ -267,13 +262,13 @@ init_widgets (Dialog *dialog)
}
gboolean
-alarm_list_dialog_run (GtkWidget *parent, ECal *ecal, EAlarmList *list_store)
+alarm_list_dialog_run (GtkWidget *parent, ECalClient *cal_client, EAlarmList *list_store)
{
Dialog dialog;
GtkWidget *container;
gint response_id;
- dialog.ecal = ecal;
+ dialog.cal_client = cal_client;
dialog.list_store = list_store;
dialog.builder = gtk_builder_new ();
@@ -313,12 +308,12 @@ alarm_list_dialog_run (GtkWidget *parent, ECal *ecal, EAlarmList *list_store)
}
GtkWidget *
-alarm_list_dialog_peek (ECal *ecal, EAlarmList *list_store)
+alarm_list_dialog_peek (ECalClient *cal_client, EAlarmList *list_store)
{
Dialog *dialog;
dialog = (Dialog *) g_new (Dialog, 1);
- dialog->ecal = ecal;
+ dialog->cal_client = cal_client;
dialog->list_store = list_store;
dialog->builder = gtk_builder_new ();
diff --git a/calendar/gui/dialogs/alarm-list-dialog.h b/calendar/gui/dialogs/alarm-list-dialog.h
index 7d58fcb0af..163582c556 100644
--- a/calendar/gui/dialogs/alarm-list-dialog.h
+++ b/calendar/gui/dialogs/alarm-list-dialog.h
@@ -30,15 +30,15 @@
#ifndef ALARM_LIST_DIALOG_H
#define ALARM_LIST_DIALOG_H
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
#include "../e-alarm-list.h"
G_BEGIN_DECLS
-gboolean alarm_list_dialog_run (GtkWidget *parent, ECal *ecal, EAlarmList *list_store);
-GtkWidget *alarm_list_dialog_peek (ECal *ecal, EAlarmList *list_store);
-void alarm_list_dialog_set_client (GtkWidget *dlg_box, ECal *client);
+gboolean alarm_list_dialog_run (GtkWidget *parent, ECalClient *cal_client, EAlarmList *list_store);
+GtkWidget *alarm_list_dialog_peek (ECalClient *cal_client, EAlarmList *list_store);
+void alarm_list_dialog_set_client (GtkWidget *dlg_box, ECalClient *cal_client);
G_END_DECLS
diff --git a/calendar/gui/dialogs/calendar-setup.c b/calendar/gui/dialogs/calendar-setup.c
index 5981076ee6..231cd0dd34 100644
--- a/calendar/gui/dialogs/calendar-setup.c
+++ b/calendar/gui/dialogs/calendar-setup.c
@@ -32,7 +32,7 @@
#include <libedataserver/e-source-list.h>
#include <shell/e-shell.h>
#include <glib/gi18n.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include "calendar-setup.h"
#include "../e-cal-config.h"
@@ -55,7 +55,7 @@ struct _CalendarSourceDialog {
/* Source group we're creating/editing a source in */
ESourceGroup *source_group;
- ECalSourceType source_type;
+ ECalClientSourceType source_type;
};
static gboolean
@@ -272,11 +272,11 @@ eccp_general_offline (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidg
else {
g_object_get (parent, "n-rows", &row, NULL);
- if (sdialog->source_type == E_CAL_SOURCE_TYPE_EVENT)
+ if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y calendar contents locally for offline operation"));
- else if (sdialog->source_type == E_CAL_SOURCE_TYPE_TODO)
+ else if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y task list contents locally for offline operation"));
- else if (sdialog->source_type == E_CAL_SOURCE_TYPE_JOURNAL)
+ else if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y memo list contents locally for offline operation"));
gtk_widget_show (offline_setting);
@@ -469,7 +469,7 @@ calendar_setup_edit_calendar (GtkWindow *parent, ESource *source, ESourceGroup *
e_source_set_absolute_uri (sdialog->source, NULL);
e_source_set_group (sdialog->source, sdialog->source_group);
- sdialog->source_type = E_CAL_SOURCE_TYPE_EVENT;
+ sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_EVENTS;
sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties");
for (i = 0; eccp_items[i].path; i++)
items = g_slist_prepend (items, &eccp_items[i]);
@@ -477,7 +477,7 @@ calendar_setup_edit_calendar (GtkWindow *parent, ESource *source, ESourceGroup *
e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog);
target = e_cal_config_target_new_source (ec, sdialog->source);
- target->source_type = E_CAL_SOURCE_TYPE_EVENT;
+ target->source_type = E_CAL_CLIENT_SOURCE_TYPE_EVENTS;
e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Calendar Properties") : _("New Calendar"));
@@ -525,7 +525,7 @@ calendar_setup_edit_task_list (GtkWindow *parent, ESource *source)
e_source_set_absolute_uri (sdialog->source, NULL);
e_source_set_group (sdialog->source, sdialog->source_group);
- sdialog->source_type = E_CAL_SOURCE_TYPE_TODO;
+ sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_TASKS;
sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties");
for (i = 0; ectp_items[i].path; i++)
items = g_slist_prepend (items, &ectp_items[i]);
@@ -533,7 +533,7 @@ calendar_setup_edit_task_list (GtkWindow *parent, ESource *source)
e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog);
target = e_cal_config_target_new_source (ec, sdialog->source);
- target->source_type = E_CAL_SOURCE_TYPE_TODO;
+ target->source_type = E_CAL_CLIENT_SOURCE_TYPE_TASKS;
e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Task List Properties") : _("New Task List"));
@@ -581,7 +581,7 @@ calendar_setup_edit_memo_list (GtkWindow *parent, ESource *source)
e_source_set_absolute_uri (sdialog->source, NULL);
e_source_set_group (sdialog->source, sdialog->source_group);
- sdialog->source_type = E_CAL_SOURCE_TYPE_JOURNAL;
+ sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS;
sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties");
for (i = 0; ecmp_items[i].path; i++)
items = g_slist_prepend (items, &ecmp_items[i]);
@@ -589,7 +589,7 @@ calendar_setup_edit_memo_list (GtkWindow *parent, ESource *source)
e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog);
target = e_cal_config_target_new_source (ec, sdialog->source);
- target->source_type = E_CAL_SOURCE_TYPE_JOURNAL;
+ target->source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS;
e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Memo List Properties") : _("New Memo List"));
diff --git a/calendar/gui/dialogs/cancel-comp.c b/calendar/gui/dialogs/cancel-comp.c
index 4482d4d7ab..86663eda97 100644
--- a/calendar/gui/dialogs/cancel-comp.c
+++ b/calendar/gui/dialogs/cancel-comp.c
@@ -66,14 +66,14 @@ is_past_event (ECalComponent *comp)
**/
gboolean
cancel_component_dialog (GtkWindow *parent,
- ECal *client,
+ ECalClient *cal_client,
ECalComponent *comp,
gboolean deleting)
{
ECalComponentVType vtype;
const gchar *id;
- if (deleting && e_cal_get_save_schedules (client))
+ if (deleting && e_cal_client_check_save_schedules (cal_client))
return TRUE;
vtype = e_cal_component_get_vtype (comp);
diff --git a/calendar/gui/dialogs/cancel-comp.h b/calendar/gui/dialogs/cancel-comp.h
index db455b06d7..3514cf19f5 100644
--- a/calendar/gui/dialogs/cancel-comp.h
+++ b/calendar/gui/dialogs/cancel-comp.h
@@ -26,9 +26,9 @@
#ifndef CANCEL_COMP_H
#define CANCEL_COMP_H
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
-gboolean cancel_component_dialog (GtkWindow *parent, ECal *client, ECalComponent *comp, gboolean deleting);
+gboolean cancel_component_dialog (GtkWindow *parent, ECalClient *cal_client, ECalComponent *comp, gboolean deleting);
#endif
diff --git a/calendar/gui/dialogs/comp-editor-page.h b/calendar/gui/dialogs/comp-editor-page.h
index 2b9f7a4467..a33d83810d 100644
--- a/calendar/gui/dialogs/comp-editor-page.h
+++ b/calendar/gui/dialogs/comp-editor-page.h
@@ -28,7 +28,7 @@
#include <time.h>
#include <gtk/gtk.h>
#include <libecal/e-cal-component.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <calendar/gui/e-meeting-attendee.h>
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
index cc794ae3f5..21ac86e9c3 100644
--- a/calendar/gui/dialogs/comp-editor.c
+++ b/calendar/gui/dialogs/comp-editor.c
@@ -43,6 +43,9 @@
#include <e-util/gconf-bridge.h>
#include <shell/e-shell.h>
+#include <libecal/e-cal-client.h>
+#include <libecal/e-cal-client-view.h>
+
#include "../print.h"
#include "../comp-util.h"
#include "save-comp.h"
@@ -75,13 +78,14 @@ struct _CompEditorPrivate {
GtkWindowGroup *window_group;
/* Client to use */
- ECal *client;
+ ECalClient *cal_client;
/* Source client (where comp lives currently) */
- ECal *source_client;
+ ECalClient *source_client;
/* View to listen for changes */
- ECalView *view;
+ ECalClientView *view;
+ GCancellable *view_cancellable;
/* Calendar object/uid we are editing; this is an internal copy */
ECalComponent *comp;
@@ -198,8 +202,8 @@ static void page_dates_changed_cb (CompEditor *editor,
CompEditorPageDates *dates,
CompEditorPage *page);
-static void obj_modified_cb (ECal *client, GList *objs, CompEditor *editor);
-static void obj_removed_cb (ECal *client, GList *uids, CompEditor *editor);
+static void obj_modified_cb (ECalClientView *view, const GSList *objs, CompEditor *editor);
+static void obj_removed_cb (ECalClientView *view, const GSList *uids, CompEditor *editor);
G_DEFINE_TYPE_WITH_CODE (
CompEditor, comp_editor, GTK_TYPE_WINDOW,
@@ -303,7 +307,7 @@ get_attachment_list (CompEditor *editor)
view = E_ATTACHMENT_VIEW (editor->priv->attachment_view);
store = e_attachment_view_get_store (view);
- local_store = e_cal_get_local_attachment_store (editor->priv->client);
+ local_store = e_cal_client_get_local_attachment_store (editor->priv->cal_client);
e_cal_component_get_uid (editor->priv->comp, &comp_uid);
path = g_build_path ("/", local_store, comp_uid, NULL);
destination = g_file_new_for_path (path);
@@ -344,6 +348,40 @@ commit_all_fields (CompEditor *editor)
}
static void
+changes_view_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ CompEditor *editor = user_data;
+ ECalClientView *view = NULL;
+ GError *error = NULL;
+
+ g_return_if_fail (editor != NULL);
+
+ if (!e_cal_client_get_view_finish (E_CAL_CLIENT (source_object), result, &view, &error))
+ view = NULL;
+
+ if (view) {
+ editor->priv->view = view;
+ g_signal_connect (
+ view, "objects_modified",
+ G_CALLBACK (obj_modified_cb), editor);
+ g_signal_connect (
+ view, "objects_removed",
+ G_CALLBACK (obj_removed_cb), editor);
+
+ e_cal_client_view_start (view, &error);
+
+ if (error) {
+ g_debug ("%s: Failed to stat view: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+ } else if (error) {
+ if (!g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED))
+ g_debug ("%s: Failed to get view: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+}
+
+static void
listen_for_changes (CompEditor *editor)
{
CompEditorPrivate *priv;
@@ -352,6 +390,12 @@ listen_for_changes (CompEditor *editor)
priv = editor->priv;
/* Discard change listener */
+ if (priv->view_cancellable) {
+ g_cancellable_cancel (priv->view_cancellable);
+ g_object_unref (priv->view_cancellable);
+ priv->view_cancellable = NULL;
+ }
+
if (priv->view) {
g_signal_handlers_disconnect_matched (G_OBJECT (priv->view),
G_SIGNAL_MATCH_DATA,
@@ -369,21 +413,11 @@ listen_for_changes (CompEditor *editor)
if (uid) {
gchar *query;
+ priv->view_cancellable = g_cancellable_new ();
query = g_strdup_printf ("(uid? \"%s\")", uid);
- e_cal_get_query (priv->source_client, query, &priv->view, NULL);
+ e_cal_client_get_view (priv->source_client, query, priv->view_cancellable, changes_view_ready_cb, editor);
g_free (query);
}
-
- if (priv->view) {
- g_signal_connect (
- priv->view, "objects_modified",
- G_CALLBACK (obj_modified_cb), editor);
- g_signal_connect (
- priv->view, "objects_removed",
- G_CALLBACK (obj_removed_cb), editor);
-
- e_cal_view_start (priv->view);
- }
}
static void
@@ -391,8 +425,14 @@ send_timezone (gpointer key, gpointer value, gpointer user_data)
{
icaltimezone *zone = value;
CompEditor *editor = user_data;
+ GError *error = NULL;
+
+ e_cal_client_add_timezone_sync (editor->priv->cal_client, zone, NULL, &error);
- e_cal_add_timezone (editor->priv->client, zone, NULL);
+ if (error) {
+ g_debug ("%s: Failed to add timezone: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
}
static gboolean
@@ -448,8 +488,8 @@ save_comp (CompEditor *editor)
/* If we are not the organizer, we don't update the sequence number */
if (!e_cal_component_has_organizer (clone) ||
- itip_organizer_is_user (clone, priv->client) ||
- itip_sentby_is_user (clone, priv->client))
+ itip_organizer_is_user (clone, priv->cal_client) ||
+ itip_sentby_is_user (clone, priv->cal_client))
e_cal_component_commit_sequence (clone);
else
e_cal_component_abort_sequence (clone);
@@ -472,10 +512,14 @@ save_comp (CompEditor *editor)
priv->comp, get_attachment_list (editor));
icalcomp = e_cal_component_get_icalcomponent (priv->comp);
/* send the component to the server */
- if (!cal_comp_is_on_server (priv->comp, priv->client)) {
- result = e_cal_create_object (priv->client, icalcomp, NULL, &error);
- if (result)
+ if (!cal_comp_is_on_server (priv->comp, priv->cal_client)) {
+ gchar *uid = NULL;
+ result = e_cal_client_create_object_sync (priv->cal_client, icalcomp, &uid, NULL, &error);
+ if (result) {
+ icalcomponent_set_uid (icalcomp, uid);
+ g_free (uid);
g_signal_emit_by_name (editor, "object_created");
+ }
} else {
gboolean has_recurrences;
@@ -484,7 +528,7 @@ save_comp (CompEditor *editor)
if (has_recurrences && priv->mod == CALOBJ_MOD_ALL)
comp_util_sanitize_recurrence_master (
- priv->comp, priv->client);
+ priv->comp, priv->cal_client);
if (priv->mod == CALOBJ_MOD_THIS) {
e_cal_component_set_rdate_list (priv->comp, NULL);
@@ -492,13 +536,13 @@ save_comp (CompEditor *editor)
e_cal_component_set_exdate_list (priv->comp, NULL);
e_cal_component_set_exrule_list (priv->comp, NULL);
}
- result = e_cal_modify_object (priv->client, icalcomp, priv->mod, &error);
+ result = e_cal_client_modify_object_sync (priv->cal_client, icalcomp, priv->mod, NULL, &error);
if (priv->mod == CALOBJ_MOD_THIS) {
if (result && ((flags & COMP_EDITOR_DELEGATE) ||
!e_cal_component_has_organizer (clone) ||
- itip_organizer_is_user (clone, priv->client) ||
- itip_sentby_is_user (clone, priv->client)))
+ itip_organizer_is_user (clone, priv->cal_client) ||
+ itip_sentby_is_user (clone, priv->cal_client)))
e_cal_component_commit_sequence (clone);
else
e_cal_component_abort_sequence (clone);
@@ -550,25 +594,31 @@ save_comp (CompEditor *editor)
return FALSE;
} else {
if (priv->source_client &&
- !e_source_equal (e_cal_get_source (priv->client),
- e_cal_get_source (priv->source_client)) &&
+ !e_source_equal (e_client_get_source (E_CLIENT (priv->cal_client)),
+ e_client_get_source (E_CLIENT (priv->source_client))) &&
cal_comp_is_on_server (priv->comp, priv->source_client)) {
/* Comp found a new home. Remove it from old one. */
+ GError *error = NULL;
if (e_cal_component_is_instance (priv->comp) ||
e_cal_component_has_recurrences (priv->comp))
- e_cal_remove_object_with_mod (
+ e_cal_client_remove_object_sync (
priv->source_client, orig_uid_copy,
- NULL, CALOBJ_MOD_ALL, NULL);
+ NULL, CALOBJ_MOD_ALL, NULL, &error);
else
- e_cal_remove_object (
+ e_cal_client_remove_object_sync (
priv->source_client,
- orig_uid_copy, NULL);
+ orig_uid_copy, NULL, CALOBJ_MOD_THIS, NULL, &error);
+
+ if (error) {
+ g_debug ("%s: Failed to remove object: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
/* Let priv->source_client point to new home,
* so we can move it again this session. */
g_object_unref (priv->source_client);
- priv->source_client = g_object_ref (priv->client);
+ priv->source_client = g_object_ref (priv->cal_client);
listen_for_changes (editor);
}
@@ -608,9 +658,9 @@ save_comp_with_send (CompEditor *editor)
if (!save_comp (editor))
return FALSE;
- delegated = delegate && !e_cal_get_save_schedules (priv->client);
+ delegated = delegate && !e_cal_client_check_save_schedules (priv->cal_client);
if (delegated || (send && send_component_dialog (
- (GtkWindow *) editor, priv->client, priv->comp,
+ (GtkWindow *) editor, priv->cal_client, priv->comp,
!priv->existing_org, &strip_alarms, !priv->existing_org ?
NULL : &only_new_attendees))) {
if (delegated)
@@ -622,8 +672,8 @@ save_comp_with_send (CompEditor *editor)
(only_new_attendees ?
COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY : 0));
- if ((itip_organizer_is_user (priv->comp, priv->client) ||
- itip_sentby_is_user (priv->comp, priv->client))) {
+ if ((itip_organizer_is_user (priv->comp, priv->cal_client) ||
+ itip_sentby_is_user (priv->comp, priv->cal_client))) {
if (e_cal_component_get_vtype (priv->comp) == E_CAL_COMPONENT_JOURNAL)
return comp_editor_send_comp (
editor, E_CAL_COMPONENT_METHOD_PUBLISH,
@@ -768,7 +818,7 @@ action_print_cb (GtkAction *action,
use_24_hour_format = comp_editor_get_use_24_hour_format (editor);
print_comp (
- comp, priv->client, zone, use_24_hour_format,
+ comp, priv->cal_client, zone, use_24_hour_format,
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG);
g_object_unref (comp);
@@ -798,14 +848,14 @@ action_print_preview_cb (GtkAction *action,
use_24_hour_format = comp_editor_get_use_24_hour_format (editor);
print_comp (
- comp, priv->client, zone, use_24_hour_format,
+ comp, priv->cal_client, zone, use_24_hour_format,
GTK_PRINT_OPERATION_ACTION_PREVIEW);
g_object_unref (comp);
}
static gboolean
-remove_event_dialog (ECal *client,
+remove_event_dialog (ECalClient *client,
ECalComponent *comp,
GtkWindow *parent)
{
@@ -833,7 +883,7 @@ action_save_cb (GtkAction *action,
EAttachmentView *view;
ECalComponentText text;
gboolean delegated = FALSE;
- gboolean read_only, correct = FALSE;
+ gboolean correct = FALSE;
ECalComponent *comp;
view = E_ATTACHMENT_VIEW (priv->attachment_view);
@@ -860,12 +910,12 @@ action_save_cb (GtkAction *action,
return;
}
- if (!e_cal_is_read_only (priv->client, &read_only, NULL) || read_only) {
+ if (e_client_is_readonly (E_CLIENT (priv->cal_client))) {
e_alert_submit (
E_ALERT_SINK (editor),
"calendar:prompt-read-only-cal-editor",
e_source_peek_name (
- e_cal_get_source (priv->client)),
+ e_client_get_source (E_CLIENT (priv->cal_client))),
NULL);
return;
}
@@ -873,7 +923,7 @@ action_save_cb (GtkAction *action,
commit_all_fields (editor);
if (e_cal_component_has_recurrences (priv->comp)) {
if (!recur_component_dialog (
- priv->client, priv->comp, &priv->mod,
+ priv->cal_client, priv->comp, &priv->mod,
GTK_WINDOW (editor), delegated))
return;
} else if (e_cal_component_is_instance (priv->comp))
@@ -888,7 +938,7 @@ action_save_cb (GtkAction *action,
if (!text.value)
if (!send_component_prompt_subject (
- (GtkWindow *) editor, priv->client, priv->comp))
+ (GtkWindow *) editor, priv->cal_client, priv->comp))
return;
if (save_comp_with_send (editor)) {
@@ -899,7 +949,7 @@ action_save_cb (GtkAction *action,
delegate = flags & COMP_EDITOR_DELEGATE;
if (delegate && !remove_event_dialog (
- priv->client, priv->comp, GTK_WINDOW (editor))) {
+ priv->cal_client, priv->comp, GTK_WINDOW (editor))) {
const gchar *uid = NULL;
GError *error = NULL;
@@ -909,12 +959,10 @@ action_save_cb (GtkAction *action,
e_cal_component_has_recurrences (priv->comp)) {
gchar *rid;
rid = e_cal_component_get_recurid_as_string (priv->comp);
- e_cal_remove_object_with_mod (
- priv->client, uid, rid,
- priv->mod, &error);
+ e_cal_client_remove_object_sync (priv->cal_client, uid, rid, priv->mod, NULL, &error);
g_free (rid);
} else
- e_cal_remove_object (priv->client, uid, &error);
+ e_cal_client_remove_object_sync (priv->cal_client, uid, NULL, CALOBJ_MOD_THIS, NULL, &error);
g_clear_error (&error);
}
@@ -1470,9 +1518,9 @@ comp_editor_dispose (GObject *object)
priv->window_group = NULL;
}
- if (priv->client) {
- g_object_unref (priv->client);
- priv->client = NULL;
+ if (priv->cal_client) {
+ g_object_unref (priv->cal_client);
+ priv->cal_client = NULL;
}
if (priv->source_client) {
@@ -1480,6 +1528,12 @@ comp_editor_dispose (GObject *object)
priv->source_client = NULL;
}
+ if (priv->view_cancellable) {
+ g_cancellable_cancel (priv->view_cancellable);
+ g_object_unref (priv->view_cancellable);
+ priv->view_cancellable = NULL;
+ }
+
if (priv->view) {
g_signal_handlers_disconnect_matched (G_OBJECT (priv->view),
G_SIGNAL_MATCH_DATA,
@@ -1690,7 +1744,7 @@ comp_editor_class_init (CompEditorClass *class)
"client",
NULL,
NULL,
- E_TYPE_CAL,
+ E_TYPE_CAL_CLIENT,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
@@ -2074,7 +2128,7 @@ static gboolean
prompt_and_save_changes (CompEditor *editor, gboolean send)
{
CompEditorPrivate *priv;
- gboolean read_only, correct = FALSE;
+ gboolean correct = FALSE;
ECalComponent *comp;
ECalComponentText text;
@@ -2085,12 +2139,12 @@ prompt_and_save_changes (CompEditor *editor, gboolean send)
switch (save_component_dialog (GTK_WINDOW (editor), priv->comp)) {
case GTK_RESPONSE_YES: /* Save */
- if (!e_cal_is_read_only (priv->client, &read_only, NULL) || read_only) {
+ if (e_client_is_readonly (E_CLIENT (priv->cal_client))) {
e_alert_submit (
E_ALERT_SINK (editor),
"calendar:prompt-read-only-cal-editor",
e_source_peek_name (
- e_cal_get_source (priv->client)),
+ e_client_get_source (E_CLIENT (priv->cal_client))),
NULL);
/* don't discard changes when selected readonly calendar */
return FALSE;
@@ -2105,12 +2159,12 @@ prompt_and_save_changes (CompEditor *editor, gboolean send)
if (!text.value)
if (!send_component_prompt_subject (
- (GtkWindow *) editor, priv->client, priv->comp))
+ (GtkWindow *) editor, priv->cal_client, priv->comp))
return FALSE;
if (e_cal_component_is_instance (priv->comp))
if (!recur_component_dialog (
- priv->client, priv->comp, &priv->mod,
+ priv->cal_client, priv->comp, &priv->mod,
GTK_WINDOW (editor), FALSE))
return FALSE;
@@ -2815,27 +2869,27 @@ comp_editor_show_page (CompEditor *editor, CompEditorPage *page)
/**
* comp_editor_set_client:
* @editor: A component editor
- * @client: The calendar client to use
+ * @cal_client: The calendar client to use
*
* Sets the calendar client used by the editor to update components
**/
void
comp_editor_set_client (CompEditor *editor,
- ECal *client)
+ ECalClient *cal_client)
{
g_return_if_fail (IS_COMP_EDITOR (editor));
- g_return_if_fail (client == NULL || E_IS_CAL (client));
+ g_return_if_fail (cal_client == NULL || E_IS_CAL_CLIENT (cal_client));
- if (client != NULL)
- g_object_ref (client);
+ if (cal_client != NULL)
+ g_object_ref (cal_client);
- if (editor->priv->client != NULL)
- g_object_unref (editor->priv->client);
+ if (editor->priv->cal_client != NULL)
+ g_object_unref (editor->priv->cal_client);
- editor->priv->client = client;
+ editor->priv->cal_client = cal_client;
- if (editor->priv->source_client == NULL && client != NULL)
- editor->priv->source_client = g_object_ref (client);
+ if (editor->priv->source_client == NULL && cal_client != NULL)
+ editor->priv->source_client = g_object_ref (cal_client);
g_object_notify (G_OBJECT (editor), "client");
}
@@ -2848,12 +2902,12 @@ comp_editor_set_client (CompEditor *editor,
*
* Return value: The calendar client of the editor
**/
-ECal *
+ECalClient *
comp_editor_get_client (CompEditor *editor)
{
g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL);
- return editor->priv->client;
+ return editor->priv->cal_client;
}
static void
@@ -3046,7 +3100,7 @@ set_attendees_for_delegation (ECalComponent *comp,
}
static void
-get_users_from_memo_comp (ECalComponent *comp, GList **users)
+get_users_from_memo_comp (ECalComponent *comp, GSList **users)
{
icalcomponent *icalcomp;
icalproperty *icalprop;
@@ -3072,7 +3126,7 @@ get_users_from_memo_comp (ECalComponent *comp, GList **users)
iter = emails;
while (*iter) {
- *users = g_list_append (*users, g_strdup (*iter));
+ *users = g_slist_append (*users, g_strdup (*iter));
iter++;
}
g_strfreev (emails);
@@ -3088,7 +3142,7 @@ real_send_comp (CompEditor *editor,
CompEditorFlags flags;
ECalComponent *send_comp = NULL;
gchar *address = NULL;
- GList *users = NULL;
+ GSList *users = NULL;
g_return_val_if_fail (IS_COMP_EDITOR (editor), FALSE);
@@ -3101,7 +3155,7 @@ real_send_comp (CompEditor *editor,
const gchar *uid = NULL;
e_cal_component_get_uid (priv->comp, &uid);
- if (e_cal_get_object (priv->client, uid, NULL, &icalcomp, NULL) && icalcomp) {
+ if (e_cal_client_get_object_sync (priv->cal_client, uid, NULL, &icalcomp, NULL, NULL) && icalcomp) {
send_comp = e_cal_component_new ();
if (!e_cal_component_set_icalcomponent (send_comp, icalcomp)) {
icalcomponent_free (icalcomp);
@@ -3122,17 +3176,17 @@ real_send_comp (CompEditor *editor,
/* The user updates the delegated status to the Organizer,
* so remove all other attendees. */
if (flags & COMP_EDITOR_DELEGATE) {
- address = itip_get_comp_attendee (send_comp, priv->client);
+ address = itip_get_comp_attendee (send_comp, priv->cal_client);
if (address)
set_attendees_for_delegation (send_comp, address, method);
}
if (!e_cal_component_has_attachments (priv->comp) ||
- e_cal_get_static_capability (priv->client,
+ e_client_check_capability (E_CLIENT (priv->cal_client),
CAL_STATIC_CAPABILITY_CREATE_MESSAGES)) {
if (itip_send_comp (
- method, send_comp, priv->client,
+ method, send_comp, priv->cal_client,
NULL, NULL, users, strip_alarms,
priv->flags & COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY)) {
g_object_unref (send_comp);
@@ -3162,7 +3216,7 @@ real_send_comp (CompEditor *editor,
}
if (itip_send_comp (
- method, send_comp, priv->client,
+ method, send_comp, priv->cal_client,
NULL, mime_attach_list, users, strip_alarms,
priv->flags & COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY)) {
gboolean saved = save_comp (editor);
@@ -3279,10 +3333,10 @@ comp_editor_delete_comp (CompEditor *editor)
e_cal_component_get_uid (priv->comp, &uid);
if (e_cal_component_is_instance (priv->comp) ||
e_cal_component_has_recurrences (priv->comp))
- e_cal_remove_object_with_mod (priv->client, uid, NULL,
- CALOBJ_MOD_ALL, NULL);
+ e_cal_client_remove_object_sync (priv->cal_client, uid, NULL,
+ CALOBJ_MOD_ALL, NULL, NULL);
else
- e_cal_remove_object (priv->client, uid, NULL);
+ e_cal_client_remove_object_sync (priv->cal_client, uid, NULL, CALOBJ_MOD_THIS, NULL, NULL);
close_dialog (editor);
}
@@ -3428,8 +3482,8 @@ page_dates_changed_cb (CompEditor *editor,
}
static void
-obj_modified_cb (ECal *client,
- GList *objects,
+obj_modified_cb (ECalClientView *view,
+ const GSList *objects,
CompEditor *editor)
{
CompEditorPrivate *priv;
@@ -3465,8 +3519,8 @@ obj_modified_cb (ECal *client,
}
static void
-obj_removed_cb (ECal *client,
- GList *uids,
+obj_removed_cb (ECalClientView *view,
+ const GSList *uids,
CompEditor *editor)
{
CompEditorPrivate *priv = editor->priv;
diff --git a/calendar/gui/dialogs/comp-editor.h b/calendar/gui/dialogs/comp-editor.h
index 591300ffd2..3f1ddbb673 100644
--- a/calendar/gui/dialogs/comp-editor.h
+++ b/calendar/gui/dialogs/comp-editor.h
@@ -26,7 +26,7 @@
#define COMP_EDITOR_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include "../itip-utils.h"
#include "comp-editor-page.h"
#include <shell/e-shell.h>
@@ -165,8 +165,8 @@ void comp_editor_remove_page (CompEditor *editor,
void comp_editor_show_page (CompEditor *editor,
CompEditorPage *page);
void comp_editor_set_client (CompEditor *editor,
- ECal *client);
-ECal * comp_editor_get_client (CompEditor *editor);
+ ECalClient *cal_client);
+ECalClient * comp_editor_get_client (CompEditor *editor);
void comp_editor_edit_comp (CompEditor *ee,
ECalComponent *comp);
ECalComponent * comp_editor_get_comp (CompEditor *editor);
diff --git a/calendar/gui/dialogs/copy-source-dialog.c b/calendar/gui/dialogs/copy-source-dialog.c
index 547a91069c..7b75624a56 100644
--- a/calendar/gui/dialogs/copy-source-dialog.c
+++ b/calendar/gui/dialogs/copy-source-dialog.c
@@ -27,33 +27,35 @@
#endif
#include <glib/gi18n.h>
+#include <libedataserverui/e-client-utils.h>
+
#include "copy-source-dialog.h"
#include "select-source-dialog.h"
-#include "common/authentication.h"
typedef struct {
GtkWindow *parent;
ESource *orig_source;
- ECalSourceType obj_type;
+ EClientSourceType obj_type;
ESource *selected_source;
+ ECalClient *source_client, *dest_client;
} CopySourceDialogData;
static void
-show_error (CopySourceDialogData *csdd, const gchar *msg)
+show_error (CopySourceDialogData *csdd, const gchar *msg, const GError *error)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (
csdd->parent, 0, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE, "%s", msg);
+ GTK_BUTTONS_CLOSE, error ? "%s\n%s" : "%s", msg, error ? error->message : "");
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
struct ForeachTzidData
{
- ECal *source_client;
- ECal *dest_client;
+ ECalClient *source_client;
+ ECalClient *dest_client;
};
static void
@@ -71,61 +73,70 @@ add_timezone_to_cal_cb (icalparameter *param, gpointer data)
if (!tzid || !*tzid)
return;
- if (e_cal_get_timezone (ftd->source_client, tzid, &tz, NULL) && tz)
- e_cal_add_timezone (ftd->dest_client, tz, NULL);
+ if (e_cal_client_get_timezone_sync (ftd->source_client, tzid, &tz, NULL, NULL) && tz)
+ e_cal_client_add_timezone_sync (ftd->dest_client, tz, NULL, NULL);
}
-static gboolean
-copy_source (CopySourceDialogData *csdd)
+static void
+free_copy_data (CopySourceDialogData *csdd)
{
- ECal *source_client, *dest_client;
- gboolean read_only = TRUE;
- GList *obj_list = NULL;
- gboolean result = FALSE;
-
- if (!csdd->selected_source)
- return FALSE;
-
- /* open the source */
- source_client = e_auth_new_cal_from_source (csdd->orig_source, csdd->obj_type);
- if (!e_cal_open (source_client, TRUE, NULL)) {
- show_error (csdd, _("Could not open source"));
- g_object_unref (source_client);
- return FALSE;
- }
+ if (!csdd)
+ return;
- /* open the destination */
- dest_client = e_auth_new_cal_from_source (csdd->selected_source, csdd->obj_type);
- if (!e_cal_open (dest_client, FALSE, NULL)) {
- show_error (csdd, _("Could not open destination"));
- g_object_unref (dest_client);
- g_object_unref (source_client);
- return FALSE;
+ if (csdd->orig_source)
+ g_object_unref (csdd->orig_source);
+ if (csdd->selected_source)
+ g_object_unref (csdd->selected_source);
+ if (csdd->source_client)
+ g_object_unref (csdd->source_client);
+ if (csdd->dest_client)
+ g_object_unref (csdd->dest_client);
+ g_free (csdd);
+}
+
+static void
+dest_source_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ CopySourceDialogData *csdd = user_data;
+ EClient *client = NULL;
+ GError *error = NULL;
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ if (!client) {
+ show_error (csdd, _("Could not open destination"), error);
+ if (error)
+ g_error_free (error);
+ free_copy_data (csdd);
+ return;
}
+ csdd->dest_client = E_CAL_CLIENT (client);
+
+ e_client_utils_open_new (csdd->selected_source, csdd->obj_type, FALSE, NULL,
+ e_client_utils_authenticate_handler, csdd->parent,
+ dest_source_opened_cb, csdd);
+
/* check if the destination is read only */
- e_cal_is_read_only (dest_client, &read_only, NULL);
- if (read_only) {
- show_error (csdd, _("Destination is read only"));
+ if (e_client_is_readonly (E_CLIENT (csdd->dest_client))) {
+ show_error (csdd, _("Destination is read only"), NULL);
} else {
- if (e_cal_get_object_list (source_client, "#t", &obj_list, NULL)) {
- GList *l;
+ GSList *obj_list = NULL;
+ if (e_cal_client_get_object_list_sync (csdd->source_client, "#t", &obj_list, NULL, NULL)) {
+ GSList *l;
icalcomponent *icalcomp;
struct ForeachTzidData ftd;
- ftd.source_client = source_client;
- ftd.dest_client = dest_client;
+ ftd.source_client = csdd->source_client;
+ ftd.dest_client = csdd->dest_client;
for (l = obj_list; l != NULL; l = l->next) {
/* FIXME: process recurrences */
/* FIXME: process errors */
- if (e_cal_get_object (
- dest_client,
- icalcomponent_get_uid (l->data),
- NULL, &icalcomp, NULL)) {
- e_cal_modify_object (
- dest_client, l->data,
- CALOBJ_MOD_ALL, NULL);
+ if (e_cal_client_get_object_sync (csdd->dest_client, icalcomponent_get_uid (l->data), NULL,
+ &icalcomp, NULL, NULL)) {
+ e_cal_client_modify_object_sync (csdd->dest_client, l->data, CALOBJ_MOD_ALL, NULL, NULL);
icalcomponent_free (icalcomp);
} else {
gchar *uid = NULL;
@@ -139,11 +150,11 @@ copy_source (CopySourceDialogData *csdd)
icalcomp,
add_timezone_to_cal_cb, &ftd);
- if (e_cal_create_object (dest_client, icalcomp, &uid, &error)) {
+ if (e_cal_client_create_object_sync (csdd->dest_client, icalcomp, &uid, NULL, &error)) {
g_free (uid);
} else {
if (error) {
- show_error (csdd, error->message);
+ show_error (csdd, _("Cannot create object"), error);
g_error_free (error);
}
break;
@@ -151,15 +162,57 @@ copy_source (CopySourceDialogData *csdd)
}
}
- e_cal_free_object_list (obj_list);
+ e_cal_client_free_icalcomp_slist (obj_list);
}
}
- /* free memory */
- g_object_unref (dest_client);
- g_object_unref (source_client);
+ free_copy_data (csdd);
+}
+
+static void
+orig_source_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ CopySourceDialogData *csdd = user_data;
+ EClient *client = NULL;
+ GError *error = NULL;
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ if (!client) {
+ show_error (csdd, _("Could not open source"), error);
+ if (error)
+ g_error_free (error);
+ free_copy_data (csdd);
+ return;
+ }
+
+ csdd->source_client = E_CAL_CLIENT (client);
+
+ e_client_utils_open_new (csdd->selected_source, csdd->obj_type, FALSE, NULL,
+ e_client_utils_authenticate_handler, csdd->parent,
+ dest_source_opened_cb, csdd);
+}
+
+static void
+copy_source (const CopySourceDialogData *const_csdd)
+{
+ CopySourceDialogData *csdd;
+
+ if (!const_csdd->selected_source)
+ return;
- return result;
+ g_return_if_fail (const_csdd->obj_type != E_CLIENT_SOURCE_TYPE_LAST);
+
+ csdd = g_new0 (CopySourceDialogData, 1);
+ csdd->parent = const_csdd->parent;
+ csdd->orig_source = g_object_ref (const_csdd->orig_source);
+ csdd->obj_type = const_csdd->obj_type;
+ csdd->selected_source = g_object_ref (const_csdd->selected_source);
+
+ e_client_utils_open_new (csdd->orig_source, csdd->obj_type, FALSE, NULL,
+ e_client_utils_authenticate_handler, csdd->parent,
+ orig_source_opened_cb, csdd);
}
/**
@@ -168,26 +221,29 @@ copy_source (CopySourceDialogData *csdd)
* Implements the Copy command for sources, allowing the user to select a target
* source to copy to.
*/
-gboolean
-copy_source_dialog (GtkWindow *parent, ESource *source, ECalSourceType obj_type)
+void
+copy_source_dialog (GtkWindow *parent, ESource *source, ECalClientSourceType obj_type)
{
CopySourceDialogData csdd;
- gboolean result = FALSE;
- g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
+ g_return_if_fail (E_IS_SOURCE (source));
+ g_return_if_fail (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS ||
+ obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS ||
+ obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS);
csdd.parent = parent;
csdd.orig_source = source;
csdd.selected_source = NULL;
- csdd.obj_type = obj_type;
+ csdd.obj_type = obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS ? E_CLIENT_SOURCE_TYPE_EVENTS :
+ obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS ? E_CLIENT_SOURCE_TYPE_TASKS :
+ obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS ? E_CLIENT_SOURCE_TYPE_MEMOS :
+ E_CLIENT_SOURCE_TYPE_LAST;
csdd.selected_source = select_source_dialog (parent, obj_type, source);
if (csdd.selected_source) {
- result = copy_source (&csdd);
+ copy_source (&csdd);
/* free memory */
g_object_unref (csdd.selected_source);
}
-
- return result;
}
diff --git a/calendar/gui/dialogs/copy-source-dialog.h b/calendar/gui/dialogs/copy-source-dialog.h
index 4c6f5b19c8..d9475f742c 100644
--- a/calendar/gui/dialogs/copy-source-dialog.h
+++ b/calendar/gui/dialogs/copy-source-dialog.h
@@ -28,9 +28,9 @@
#include <gtk/gtk.h>
#include <libedataserver/e-source.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-util.h>
-gboolean copy_source_dialog (GtkWindow *parent, ESource *source, ECalSourceType type);
+void copy_source_dialog (GtkWindow *parent, ESource *source, ECalClientSourceType type);
#endif
diff --git a/calendar/gui/dialogs/delete-error.c b/calendar/gui/dialogs/delete-error.c
index 9b9d22ae4c..cd461c7858 100644
--- a/calendar/gui/dialogs/delete-error.c
+++ b/calendar/gui/dialogs/delete-error.c
@@ -45,11 +45,11 @@ delete_error_dialog (const GError *error, ECalComponentVType vtype)
const gchar *str;
const gchar *icon_name = NULL;
- if (!error)
+ if (!error || error->domain != E_CLIENT_ERROR)
return;
switch (error->code) {
- case E_CALENDAR_STATUS_DBUS_EXCEPTION:
+ case E_CLIENT_ERROR_DBUS_ERROR:
switch (vtype) {
case E_CAL_COMPONENT_EVENT:
/* Translators: The '%s' is replaced with a detailed error message */
@@ -69,7 +69,7 @@ delete_error_dialog (const GError *error, ECalComponentVType vtype)
break;
}
break;
- case E_CALENDAR_STATUS_PERMISSION_DENIED:
+ case E_CLIENT_ERROR_PERMISSION_DENIED:
switch (vtype) {
case E_CAL_COMPONENT_EVENT:
str = _("The event could not be deleted because permission was denied");
@@ -85,7 +85,7 @@ delete_error_dialog (const GError *error, ECalComponentVType vtype)
break;
}
break;
- case E_CALENDAR_STATUS_OTHER_ERROR:
+ case E_CLIENT_ERROR_OTHER_ERROR:
switch (vtype) {
case E_CAL_COMPONENT_EVENT:
/* Translators: The '%s' is replaced with a detailed error message */
@@ -105,8 +105,6 @@ delete_error_dialog (const GError *error, ECalComponentVType vtype)
break;
}
break;
- case E_CALENDAR_STATUS_OK:
- case E_CALENDAR_STATUS_OBJECT_NOT_FOUND:
default:
/* If not found, we don't care - its gone anyhow */
return;
diff --git a/calendar/gui/dialogs/delete-error.h b/calendar/gui/dialogs/delete-error.h
index 480edcbd42..91e38c146f 100644
--- a/calendar/gui/dialogs/delete-error.h
+++ b/calendar/gui/dialogs/delete-error.h
@@ -26,7 +26,7 @@
#ifndef DELETE_ERROR_H
#define DELETE_ERROR_H
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
void delete_error_dialog (const GError *error, ECalComponentVType vtype);
diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c
index 64d3b67891..f4c798bfd1 100644
--- a/calendar/gui/dialogs/event-editor.c
+++ b/calendar/gui/dialogs/event-editor.c
@@ -286,7 +286,7 @@ event_editor_constructor (GType type,
GtkActionGroup *action_group;
GtkWidget *content_area;
EShell *shell;
- ECal *client;
+ ECalClient *client;
gboolean is_meeting;
GtkWidget *alarm_page;
GtkWidget *attendee_page;
@@ -363,8 +363,7 @@ event_editor_constructor (GType type,
if (is_meeting) {
- if (e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
event_page_show_options (priv->event_page);
comp_editor_set_group_item (editor, TRUE);
@@ -604,7 +603,7 @@ event_editor_edit_comp (CompEditor *editor, ECalComponent *comp)
ECalComponentOrganizer organizer;
gboolean delegate;
ECalComponentDateTime dtstart, dtend;
- ECal *client;
+ ECalClient *client;
GSList *attendees = NULL;
priv = EVENT_EDITOR (editor)->priv;
@@ -645,8 +644,8 @@ event_editor_edit_comp (CompEditor *editor, ECalComponent *comp)
gtk_action_set_visible (action, TRUE);
}
- if (!(delegate && e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY))) {
+ if (!(delegate && e_client_check_capability (
+ E_CLIENT (client), CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY))) {
event_page_remove_all_attendees (priv->event_page);
for (l = attendees; l != NULL; l = l->next) {
@@ -685,7 +684,7 @@ event_editor_edit_comp (CompEditor *editor, ECalComponent *comp)
if (ia != NULL)
e_meeting_attendee_set_edit_level (
ia, E_MEETING_ATTENDEE_EDIT_STATUS);
- } else if (e_cal_get_organizer_must_attend (client)) {
+ } else if (e_cal_client_check_organizer_must_attend (client)) {
EMeetingAttendee *ia;
ia = e_meeting_store_find_attendee (
@@ -726,7 +725,7 @@ event_editor_send_comp (CompEditor *editor,
comp = event_page_get_cancel_comp (priv->event_page);
if (comp != NULL) {
- ECal *client;
+ ECalClient *client;
gboolean result;
client = e_meeting_store_get_client (priv->model);
@@ -748,7 +747,7 @@ event_editor_send_comp (CompEditor *editor,
/**
* event_editor_new:
- * @client: a ECal
+ * @client: a ECalClient
*
* Creates a new event editor dialog.
*
@@ -756,11 +755,11 @@ event_editor_send_comp (CompEditor *editor,
* editor could not be created.
**/
CompEditor *
-event_editor_new (ECal *client,
+event_editor_new (ECalClient *client,
EShell *shell,
CompEditorFlags flags)
{
- g_return_val_if_fail (E_IS_CAL (client), NULL);
+ g_return_val_if_fail (E_IS_CAL_CLIENT (client), NULL);
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
return g_object_new (
diff --git a/calendar/gui/dialogs/event-editor.h b/calendar/gui/dialogs/event-editor.h
index abb8f0e659..eaa2c49057 100644
--- a/calendar/gui/dialogs/event-editor.h
+++ b/calendar/gui/dialogs/event-editor.h
@@ -65,7 +65,7 @@ struct _EventEditorClass {
};
GType event_editor_get_type (void);
-CompEditor * event_editor_new (ECal *client,
+CompEditor * event_editor_new (ECalClient *client,
EShell *shell,
CompEditorFlags flags);
void event_editor_show_meeting (EventEditor *ee);
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index b6d7c2630b..68210d1090 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -35,8 +35,8 @@
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
#include <libedataserverui/e-category-completion.h>
+#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
-#include "common/authentication.h"
#include "misc/e-dateedit.h"
#include "misc/e-send-options.h"
#include "misc/e-buffer-tagger.h"
@@ -604,7 +604,7 @@ create_alarm_image_button (const gchar *image_text,
static void
sensitize_widgets (EventPage *epage)
{
- ECal *client;
+ ECalClient *client;
EShell *shell;
CompEditor *editor;
CompEditorFlags flags;
@@ -623,8 +623,7 @@ sensitize_widgets (EventPage *epage)
if (flags & COMP_EDITOR_MEETING)
sens = flags & COMP_EDITOR_USER_ORG;
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
+ read_only = e_client_is_readonly (E_CLIENT (client));
delegate = flags & COMP_EDITOR_DELEGATE;
@@ -724,7 +723,7 @@ update_time (EventPage *epage,
ECalComponentDateTime *end_date)
{
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
GtkAction *action;
struct icaltimetype *start_tt, *end_tt, implied_tt;
icaltimezone *start_zone = NULL, *def_zone = NULL;
@@ -734,15 +733,20 @@ update_time (EventPage *epage,
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
client = comp_editor_get_client (editor);
- /* Note that if we are creating a new event, the timezones may not be
- on the server, so we try to get the builtin timezone with the TZID
- first. */
- start_zone = icaltimezone_get_builtin_timezone_from_tzid (start_date->tzid);
- if (!start_zone) {
- /* FIXME: Handle error better. */
- if (!e_cal_get_timezone (client, start_date->tzid, &start_zone, NULL)) {
- g_warning ("Couldn't get timezone from server: %s",
- start_date->tzid ? start_date->tzid : "");
+ if (start_date->tzid) {
+ /* Note that if we are creating a new event, the timezones may not be
+ on the server, so we try to get the builtin timezone with the TZID
+ first. */
+ start_zone = icaltimezone_get_builtin_timezone_from_tzid (start_date->tzid);
+ if (!start_zone) {
+ /* FIXME: Handle error better. */
+ GError *error = NULL;
+ if (!e_cal_client_get_timezone_sync (client, start_date->tzid, &start_zone, NULL, &error)) {
+ g_warning ("Couldn't get timezone '%s' from server: %s",
+ start_date->tzid ? start_date->tzid : "", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
+ }
}
}
@@ -1068,7 +1072,7 @@ static gboolean
event_page_fill_widgets (CompEditorPage *page,
ECalComponent *comp)
{
- ECal *client;
+ ECalClient *client;
CompEditor *editor;
CompEditorFlags flags;
EventPage *epage;
@@ -1135,7 +1139,7 @@ event_page_fill_widgets (CompEditorPage *page,
e_cal_component_free_text_list (l);
e_buffer_tagger_update_tags (GTK_TEXT_VIEW (priv->description));
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
set_subscriber_info_string (epage, backend_addr);
if (priv->is_meeting) {
@@ -1156,13 +1160,13 @@ event_page_fill_widgets (CompEditorPage *page,
gchar *string;
if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
- if (e_cal_get_static_capability (
- client,
+ if (e_client_check_capability (
+ E_CLIENT (client),
CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
priv->user_org = TRUE;
} else {
- if (e_cal_get_static_capability (
- client,
+ if (e_client_check_capability (
+ E_CLIENT (client),
CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
gtk_widget_set_sensitive (priv->invite, FALSE);
gtk_widget_set_sensitive (priv->add, FALSE);
@@ -1171,7 +1175,7 @@ event_page_fill_widgets (CompEditorPage *page,
priv->user_org = FALSE;
}
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_ORGANIZER) && (flags & COMP_EDITOR_DELEGATE))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_ORGANIZER) && (flags & COMP_EDITOR_DELEGATE))
string = g_strdup (backend_addr);
else if ( organizer.cn != NULL)
string = g_strdup_printf ("%s <%s>", organizer.cn, strip);
@@ -1224,7 +1228,7 @@ event_page_fill_widgets (CompEditorPage *page,
backend_mailto = mailto = NULL;
}
- if (client && e_cal_get_organizer_must_accept (client))
+ if (client && e_cal_client_check_organizer_must_accept (client))
e_meeting_attendee_set_status (
attendee, ICAL_PARTSTAT_NEEDSACTION);
else
@@ -1277,7 +1281,7 @@ event_page_fill_widgets (CompEditorPage *page,
break;
}
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_TRANSPARENCY))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_TRANSPARENCY))
enable_busy_time_menu (epage, FALSE);
else
enable_busy_time_menu (epage, TRUE);
@@ -1318,7 +1322,7 @@ event_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (client));
+ e_client_get_source (E_CLIENT (client)));
e_cal_component_get_uid (comp, &uid);
if (!(flags & COMP_EDITOR_DELEGATE)
@@ -1337,7 +1341,7 @@ event_page_fill_component (CompEditorPage *page,
{
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
EventPage *epage;
EventPagePrivate *priv;
ECalComponentClassification classification;
@@ -1622,7 +1626,7 @@ event_page_fill_component (CompEditorPage *page,
gchar *name;
gchar *mailto;
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
/* Find the identity for the organizer or sentby field */
if (!get_current_identity (epage, &name, &mailto)) {
@@ -2172,7 +2176,7 @@ attendee_added_cb (EMeetingListView *emlv,
EventPagePrivate *priv = epage->priv;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
client = comp_editor_get_client (editor);
@@ -2186,7 +2190,7 @@ attendee_added_cb (EMeetingListView *emlv,
/* do not remove here, it did EMeetingListView already */
e_meeting_attendee_set_delfrom (ia, g_strdup_printf ("MAILTO:%s", priv->user_add ? priv->user_add : ""));
- if (!e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY)) {
+ if (!e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY)) {
EMeetingAttendee *delegator;
gtk_widget_set_sensitive (priv->invite, FALSE);
@@ -2822,7 +2826,7 @@ event_page_send_options_clicked_cb (EventPage *epage)
CompEditor *editor;
GtkWidget *toplevel;
ESource *source;
- ECal *client;
+ ECalClient *client;
priv = epage->priv;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
@@ -2836,7 +2840,7 @@ event_page_send_options_clicked_cb (EventPage *epage)
priv->sod->data->initialized = TRUE;
}
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_GEN_OPTIONS)) {
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_GEN_OPTIONS)) {
e_send_options_set_need_general_options (priv->sod, FALSE);
}
@@ -2850,25 +2854,28 @@ source_changed_cb (ESourceComboBox *source_combo_box, EventPage *epage)
EventPagePrivate *priv = epage->priv;
CompEditor *editor;
ESource *source;
- ECal *client;
+ ECalClient *client;
+ GError *error = NULL;
if (comp_editor_page_get_updating (COMP_EDITOR_PAGE (epage)))
return;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
source = e_source_combo_box_get_active (source_combo_box);
- client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_EVENT);
+ client = e_cal_client_new (source, E_CAL_CLIENT_SOURCE_TYPE_EVENTS, &error);
if (client) {
icaltimezone *zone;
zone = e_meeting_store_get_timezone (epage->priv->meeting_store);
- e_cal_set_default_timezone (client, zone, NULL);
+ e_cal_client_set_default_timezone (client, zone);
+
+ g_signal_connect (client, "authenticate", G_CALLBACK (e_client_utils_authenticate_handler), NULL);
}
- if (!client || !e_cal_open (client, FALSE, NULL)) {
+ if (!client || !e_client_open_sync (E_CLIENT (client), FALSE, NULL, &error)) {
GtkWidget *dialog;
- ECal *old_client;
+ ECalClient *old_client;
old_client = comp_editor_get_client (editor);
@@ -2877,17 +2884,21 @@ source_changed_cb (ESourceComboBox *source_combo_box, EventPage *epage)
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (old_client));
+ e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
- _("Unable to open the calendar '%s'."),
- e_source_peek_name (source));
+ _("Unable to open the calendar '%s': %s"),
+ e_source_peek_name (source),
+ error ? error->message : _("Unknown error"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
+
+ if (error)
+ g_error_free (error);
} else {
comp_editor_set_client (editor, client);
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS) && priv->is_meeting)
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS) && priv->is_meeting)
event_page_show_options (epage);
else
event_page_hide_options (epage);
@@ -2895,7 +2906,7 @@ source_changed_cb (ESourceComboBox *source_combo_box, EventPage *epage)
if (client) {
gchar *backend_addr = NULL;
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
if (priv->is_meeting)
event_page_select_organizer (epage, backend_addr);
@@ -2914,12 +2925,12 @@ static void
set_subscriber_info_string (EventPage *epage, const gchar *backend_address)
{
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
ESource *source;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
client = comp_editor_get_client (editor);
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (client));
if (e_source_get_property (source, "subscriber")) {
g_free (epage->priv->subscriber_info_text);
@@ -3033,7 +3044,7 @@ alarm_custom_clicked_cb (GtkWidget *widget,
GtkTreeIter iter;
gboolean valid_iter;
GtkWidget *toplevel;
- ECal *client;
+ ECalClient *client;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
client = comp_editor_get_client (editor);
@@ -3084,7 +3095,7 @@ init_widgets (EventPage *epage)
GtkAction *action;
GtkTreeSelection *selection;
gboolean active;
- ECal *client;
+ ECalClient *client;
GtkTreeIter iter;
GtkListStore *store;
@@ -3328,7 +3339,7 @@ event_page_select_organizer (EventPage *epage, const gchar *backend_address)
{
EventPagePrivate *priv = epage->priv;
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
const gchar *default_address;
gboolean subscribed_cal = FALSE;
ESource *source = NULL;
@@ -3339,7 +3350,7 @@ event_page_select_organizer (EventPage *epage, const gchar *backend_address)
client = comp_editor_get_client (editor);
if (client)
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (client));
if (source)
user_addr = e_source_get_property (source, "subscriber");
diff --git a/calendar/gui/dialogs/goto-dialog.c b/calendar/gui/dialogs/goto-dialog.c
index bc20baa7c2..3ef0db31bf 100644
--- a/calendar/gui/dialogs/goto-dialog.c
+++ b/calendar/gui/dialogs/goto-dialog.c
@@ -89,7 +89,7 @@ ecal_date_range_changed (ECalendarItem *calitem, gpointer user_data)
{
GoToDialog *dlg = user_data;
ECalModel *model;
- ECal *client;
+ ECalClient *client;
model = gnome_calendar_get_model (dlg->gcal);
client = e_cal_model_get_default_client (model);
diff --git a/calendar/gui/dialogs/memo-editor.c b/calendar/gui/dialogs/memo-editor.c
index 2f64910cab..e7dd1e7f93 100644
--- a/calendar/gui/dialogs/memo-editor.c
+++ b/calendar/gui/dialogs/memo-editor.c
@@ -158,7 +158,7 @@ memo_editor_init (MemoEditor *me)
/**
* memo_editor_new:
- * @client: an ECal
+ * @client: an #ECalClient
*
* Creates a new event editor dialog.
*
@@ -166,11 +166,11 @@ memo_editor_init (MemoEditor *me)
* editor could not be created.
**/
CompEditor *
-memo_editor_new (ECal *client,
+memo_editor_new (ECalClient *client,
EShell *shell,
CompEditorFlags flags)
{
- g_return_val_if_fail (E_IS_CAL (client), NULL);
+ g_return_val_if_fail (E_IS_CAL_CLIENT (client), NULL);
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
return g_object_new (
diff --git a/calendar/gui/dialogs/memo-editor.h b/calendar/gui/dialogs/memo-editor.h
index cd4bc194ac..a5d32c07eb 100644
--- a/calendar/gui/dialogs/memo-editor.h
+++ b/calendar/gui/dialogs/memo-editor.h
@@ -67,7 +67,7 @@ struct _MemoEditorClass {
};
GType memo_editor_get_type (void);
-CompEditor * memo_editor_new (ECal *client,
+CompEditor * memo_editor_new (ECalClient *client,
EShell *shell,
CompEditorFlags flags);
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index e055072959..d720e91b1d 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -34,6 +34,7 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <libedataserverui/e-category-completion.h>
+#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
#include <libedataserverui/e-name-selector.h>
#include <libedataserverui/e-name-selector-entry.h>
@@ -48,7 +49,6 @@
#include "e-util/e-dialog-widgets.h"
#include "e-util/e-util-private.h"
-#include "common/authentication.h"
#include "../calendar-config.h"
#include "comp-editor.h"
#include "comp-editor-util.h"
@@ -242,7 +242,7 @@ memo_page_fill_widgets (CompEditorPage *page,
MemoPagePrivate *priv;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
ECalComponentClassification cl;
ECalComponentText text;
ECalComponentDateTime d;
@@ -297,7 +297,7 @@ memo_page_fill_widgets (CompEditorPage *page,
e_cal_component_get_categories (comp, &categories);
e_dialog_editable_set (priv->categories, categories);
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
set_subscriber_info_string (mpage, backend_addr);
if (e_cal_component_has_organizer (comp)) {
@@ -333,7 +333,7 @@ memo_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (client));
+ e_client_get_source (E_CLIENT (client)));
if (priv->to_entry && (flags & COMP_EDITOR_IS_SHARED) && !(flags & COMP_EDITOR_NEW_ITEM))
gtk_entry_set_text (GTK_ENTRY (priv->to_entry), get_recipients (comp));
@@ -403,7 +403,7 @@ sensitize_widgets (MemoPage *mpage)
CompEditor *editor;
CompEditorFlags flags;
MemoPagePrivate *priv;
- ECal *client;
+ ECalClient *client;
priv = mpage->priv;
@@ -411,8 +411,7 @@ sensitize_widgets (MemoPage *mpage)
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
+ read_only = e_client_is_readonly (E_CLIENT (client));
if (flags & COMP_EDITOR_IS_SHARED)
sens = flags & COMP_EDITOR_USER_ORG;
@@ -511,53 +510,51 @@ fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
/* check if the contact is contact list which is not expanded yet */
/* we expand it by getting the list again from the server forming the query */
if (contact && e_contact_get (contact , E_CONTACT_IS_LIST)) {
- EBook *book = NULL;
+ EBookClient *book_client = NULL;
ENameSelectorDialog *dialog;
ENameSelectorModel *model;
EContactStore *c_store;
- GList *books, *l;
+ GSList *clients, *l;
gchar *uri = e_contact_get (contact, E_CONTACT_BOOK_URI);
dialog = e_name_selector_peek_dialog (name_selector);
model = e_name_selector_dialog_peek_model (dialog);
c_store = e_name_selector_model_peek_contact_store (model);
- books = e_contact_store_get_books (c_store);
+ clients = e_contact_store_get_clients (c_store);
- for (l = books; l; l = l->next) {
- EBook *b = l->data;
- if (g_str_equal (uri, e_book_get_uri (b))) {
- book = b;
+ for (l = clients; l; l = l->next) {
+ EBookClient *b = l->data;
+ if (g_str_equal (uri, e_client_get_uri (E_CLIENT (b)))) {
+ book_client = b;
break;
}
}
- if (book) {
- GList *contacts = NULL;
+ if (book_client) {
+ GSList *contacts = NULL;
EContact *n_con = NULL;
- gchar *qu;
- EBookQuery *query;
+ gchar *query;
- qu = g_strdup_printf ("(is \"full_name\" \"%s\")",
+ query = g_strdup_printf ("(is \"full_name\" \"%s\")",
(gchar *) e_contact_get (contact, E_CONTACT_FULL_NAME));
- query = e_book_query_from_string (qu);
- if (!e_book_get_contacts (book, query, &contacts, NULL)) {
+ if (!e_book_client_get_contacts_sync (book_client, query, &contacts, NULL, NULL)) {
g_warning ("Could not get contact from the book \n");
} else {
des = e_destination_new ();
n_con = contacts->data;
e_destination_set_contact (des, n_con, 0);
+ e_destination_set_client (des, book_client);
list_dests = e_destination_list_get_dests (des);
- g_list_foreach (contacts, (GFunc) g_object_unref, NULL);
- g_list_free (contacts);
+ g_slist_foreach (contacts, (GFunc) g_object_unref, NULL);
+ g_slist_free (contacts);
}
- e_book_query_unref (query);
- g_free (qu);
+ g_free (query);
}
- g_list_free (books);
+ g_slist_free (clients);
} else {
card_dest.next = NULL;
card_dest.prev = NULL;
@@ -611,7 +608,7 @@ memo_page_fill_component (CompEditorPage *page,
MemoPagePrivate *priv;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
ECalComponentClassification classification;
ECalComponentDateTime start_date;
struct icaltimetype start_tt;
@@ -724,7 +721,7 @@ memo_page_fill_component (CompEditorPage *page,
gchar *name;
gchar *mailto;
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
/* Find the identity for the organizer or sentby field */
if (!get_current_identity (mpage, &name, &mailto)) {
@@ -888,7 +885,8 @@ source_changed_cb (ESourceComboBox *source_combo_box,
CompEditor *editor;
CompEditorFlags flags;
ESource *source;
- ECal *client;
+ ECalClient *client;
+ GError *error = NULL;
if (comp_editor_page_get_updating (COMP_EDITOR_PAGE (mpage)))
return;
@@ -897,11 +895,14 @@ source_changed_cb (ESourceComboBox *source_combo_box,
flags = comp_editor_get_flags (editor);
source = e_source_combo_box_get_active (source_combo_box);
- client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_JOURNAL);
+ client = e_cal_client_new (source, E_CAL_CLIENT_SOURCE_TYPE_MEMOS, &error);
- if (!client || !e_cal_open (client, FALSE, NULL)) {
+ if (client)
+ g_signal_connect (client, "authenticate", G_CALLBACK (e_client_utils_authenticate_handler), NULL);
+
+ if (!client || !e_client_open_sync (E_CLIENT (client), FALSE, NULL, &error)) {
GtkWidget *dialog;
- ECal *old_client;
+ ECalClient *old_client;
old_client = comp_editor_get_client (editor);
@@ -910,21 +911,25 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (old_client));
+ e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
- _("Unable to open memos in '%s'."),
- e_source_peek_name (source));
+ _("Unable to open memos in '%s': %s"),
+ e_source_peek_name (source),
+ error ? error->message : _("Unknown error"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
+
+ if (error)
+ g_error_free (error);
} else {
comp_editor_set_client (editor, client);
if (client) {
gchar *backend_addr = NULL;
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
if (flags & COMP_EDITOR_IS_SHARED)
memo_page_select_organizer (mpage, backend_addr);
@@ -942,12 +947,12 @@ set_subscriber_info_string (MemoPage *mpage,
const gchar *backend_address)
{
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
ESource *source;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
client = comp_editor_get_client (editor);
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (client));
if (e_source_get_property (source, "subscriber")) {
g_free (mpage->priv->subscriber_info_text);
@@ -1097,7 +1102,7 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
MemoPagePrivate *priv;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
const gchar *default_address;
gboolean subscribed_cal = FALSE;
ESource *source = NULL;
@@ -1110,7 +1115,7 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
flags = comp_editor_get_flags (editor);
if (client)
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (client));
if (source)
user_addr = e_source_get_property (source, "subscriber");
diff --git a/calendar/gui/dialogs/recur-comp.c b/calendar/gui/dialogs/recur-comp.c
index 7793647723..3514c03dbf 100644
--- a/calendar/gui/dialogs/recur-comp.c
+++ b/calendar/gui/dialogs/recur-comp.c
@@ -32,7 +32,7 @@
gboolean
-recur_component_dialog (ECal *client,
+recur_component_dialog (ECalClient *client,
ECalComponent *comp,
CalObjModType *mod,
GtkWindow *parent, gboolean delegated)
@@ -90,13 +90,13 @@ recur_component_dialog (ECal *client,
rb_this = gtk_radio_button_new_with_label (NULL, _("This Instance Only"));
gtk_container_add (GTK_CONTAINER (vbox), rb_this);
- if (!e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_THISANDPRIOR)) {
+ if (!e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_THISANDPRIOR)) {
rb_prior = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rb_this), _("This and Prior Instances"));
gtk_container_add (GTK_CONTAINER (vbox), rb_prior);
} else
rb_prior = NULL;
- if (!e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_THISANDFUTURE)) {
+ if (!e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_THISANDFUTURE)) {
rb_future = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rb_this), _("This and Future Instances"));
gtk_container_add (GTK_CONTAINER (vbox), rb_future);
} else
diff --git a/calendar/gui/dialogs/recur-comp.h b/calendar/gui/dialogs/recur-comp.h
index 47236ef8cd..7087daa166 100644
--- a/calendar/gui/dialogs/recur-comp.h
+++ b/calendar/gui/dialogs/recur-comp.h
@@ -26,11 +26,11 @@
#define RECUR_COMP_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
#include <libecal/e-cal-util.h>
-gboolean recur_component_dialog (ECal *client,
+gboolean recur_component_dialog (ECalClient *client,
ECalComponent *comp,
CalObjModType *mod,
GtkWindow *parent,
diff --git a/calendar/gui/dialogs/recurrence-page.c b/calendar/gui/dialogs/recurrence-page.c
index 8d2701fab2..bf8f1c191c 100644
--- a/calendar/gui/dialogs/recurrence-page.c
+++ b/calendar/gui/dialogs/recurrence-page.c
@@ -212,7 +212,7 @@ preview_recur (RecurrencePage *rpage)
{
RecurrencePagePrivate *priv = rpage->priv;
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
ECalComponent *comp;
ECalComponentDateTime cdt;
GSList *l;
@@ -236,8 +236,8 @@ preview_recur (RecurrencePage *rpage)
e_cal_component_get_dtstart (priv->comp, &cdt);
if (cdt.tzid != NULL) {
- /* FIXME Will e_cal_get_timezone really not return builtin zones? */
- if (!e_cal_get_timezone (client, cdt.tzid, &zone, NULL))
+ /* FIXME Will e_cal_client_get_timezone_sync really not return builtin zones? */
+ if (!e_cal_client_get_timezone_sync (client, cdt.tzid, &zone, NULL, NULL))
zone = icaltimezone_get_builtin_timezone_from_tzid (cdt.tzid);
}
e_cal_component_set_dtstart (comp, &cdt);
@@ -586,7 +586,7 @@ sensitize_buttons (RecurrencePage *rpage)
gboolean read_only, sensitize = TRUE;
gint selected_rows;
icalcomponent *icalcomp;
- ECal *client;
+ ECalClient *client;
const gchar *uid;
if (priv->comp == NULL)
@@ -602,27 +602,26 @@ sensitize_buttons (RecurrencePage *rpage)
selected_rows = gtk_tree_selection_count_selected_rows (
gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->exception_list)));
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
+ read_only = e_client_is_readonly (E_CLIENT (client));
if (!read_only) {
e_cal_component_get_uid (priv->comp, &uid);
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_CONV_TO_RECUR) && e_cal_get_object (client, uid, NULL, &icalcomp, NULL)) {
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_CONV_TO_RECUR) && e_cal_client_get_object_sync (client, uid, NULL, &icalcomp, NULL, NULL)) {
read_only = TRUE;
icalcomponent_free (icalcomp);
}
if (!read_only) {
- GList *list;
+ GSList *list = NULL;
/* see if we have detached instances */
- if (e_cal_get_objects_for_uid (client, uid, &list, NULL)) {
- if (list && g_list_length (list) > 1)
+ if (e_cal_client_get_objects_for_uid_sync (client, uid, &list, NULL, NULL)) {
+ if (list && g_slist_length (list) > 1)
read_only = TRUE;
- g_list_foreach (list, (GFunc) g_object_unref, NULL);
- g_list_free (list);
+ g_slist_foreach (list, (GFunc) g_object_unref, NULL);
+ g_slist_free (list);
}
}
}
@@ -1485,7 +1484,7 @@ fill_ending_date (RecurrencePage *rpage, struct icalrecurrencetype *r)
{
RecurrencePagePrivate *priv = rpage->priv;
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (rpage));
client = comp_editor_get_client (editor);
@@ -1512,9 +1511,16 @@ fill_ending_date (RecurrencePage *rpage, struct icalrecurrencetype *r)
to_zone = e_meeting_store_get_timezone (priv->meeting_store);
else if (dt.tzid == NULL)
to_zone = icaltimezone_get_utc_timezone ();
- else
+ else {
+ GError *error = NULL;
/* FIXME Error checking? */
- e_cal_get_timezone (client, dt.tzid, &to_zone, NULL);
+ e_cal_client_get_timezone_sync (client, dt.tzid, &to_zone, NULL, &error);
+
+ if (error) {
+ g_debug ("%s: Failed to get timezone: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+ }
from_zone = icaltimezone_get_utc_timezone ();
icaltimezone_convert_time (&r->until, from_zone, to_zone);
@@ -2069,7 +2075,7 @@ type_toggled_cb (GtkToggleButton *toggle,
{
RecurrencePagePrivate *priv = rpage->priv;
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
gboolean read_only;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (rpage));
@@ -2079,8 +2085,7 @@ type_toggled_cb (GtkToggleButton *toggle,
sensitize_buttons (rpage);
/* enable/disable the 'Add' button */
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
+ read_only = e_client_is_readonly (E_CLIENT (client));
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->recurs)) || read_only)
gtk_widget_set_sensitive (priv->exception_add, FALSE);
diff --git a/calendar/gui/dialogs/schedule-page.c b/calendar/gui/dialogs/schedule-page.c
index 26ea1cdf5c..c4191e68dc 100644
--- a/calendar/gui/dialogs/schedule-page.c
+++ b/calendar/gui/dialogs/schedule-page.c
@@ -68,16 +68,12 @@ sensitize_widgets (SchedulePage *spage)
{
SchedulePagePrivate *priv = spage->priv;
CompEditor *editor;
- ECal *client;
- gboolean read_only;
+ ECalClient *client;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (spage));
client = comp_editor_get_client (editor);
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
-
- e_meeting_time_selector_set_read_only (priv->sel, read_only);
+ e_meeting_time_selector_set_read_only (priv->sel, e_client_is_readonly (E_CLIENT (client)));
}
/* Set date/time */
@@ -90,30 +86,43 @@ update_time (SchedulePage *spage,
CompEditor *editor;
struct icaltimetype start_tt, end_tt;
icaltimezone *start_zone = NULL, *end_zone = NULL;
- ECal *client;
+ ECalClient *client;
gboolean all_day;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (spage));
client = comp_editor_get_client (editor);
- /* Note that if we are creating a new event, the timezones may not be
- on the server, so we try to get the builtin timezone with the TZID
- first. */
- start_zone = icaltimezone_get_builtin_timezone_from_tzid (start_date->tzid);
- if (!start_zone) {
- if (!e_cal_get_timezone (client, start_date->tzid, &start_zone, NULL)) {
- /* FIXME: Handle error better. */
- g_warning ("Couldn't get timezone from server: %s",
- start_date->tzid ? start_date->tzid : "");
+ if (start_date->tzid) {
+ /* Note that if we are creating a new event, the timezones may not be
+ on the server, so we try to get the builtin timezone with the TZID
+ first. */
+ start_zone = icaltimezone_get_builtin_timezone_from_tzid (start_date->tzid);
+ if (!start_zone) {
+ GError *error = NULL;
+
+ if (!e_cal_client_get_timezone_sync (client, start_date->tzid, &start_zone, NULL, &error)) {
+ /* FIXME: Handle error better. */
+ g_warning ("Couldn't get timezone '%s' from server: %s",
+ start_date->tzid ? start_date->tzid : "",
+ error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
+ }
}
}
- end_zone = icaltimezone_get_builtin_timezone_from_tzid (end_date->tzid);
- if (!end_zone) {
- if (!e_cal_get_timezone (client, end_date->tzid, &end_zone, NULL)) {
- /* FIXME: Handle error better. */
- g_warning ("Couldn't get timezone from server: %s",
- end_date->tzid ? end_date->tzid : "");
+ if (end_date->tzid) {
+ end_zone = icaltimezone_get_builtin_timezone_from_tzid (end_date->tzid);
+ if (!end_zone) {
+ GError *error = NULL;
+ if (!e_cal_client_get_timezone_sync (client, end_date->tzid, &end_zone, NULL, &error)) {
+ /* FIXME: Handle error better. */
+ g_warning ("Couldn't get timezone '%s' from server: %s",
+ end_date->tzid ? end_date->tzid : "",
+ error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
+ }
}
}
diff --git a/calendar/gui/dialogs/select-source-dialog.c b/calendar/gui/dialogs/select-source-dialog.c
index 79905d5f01..4ae9f0a0d8 100644
--- a/calendar/gui/dialogs/select-source-dialog.c
+++ b/calendar/gui/dialogs/select-source-dialog.c
@@ -35,7 +35,7 @@
* Implements dialog for allowing user to select a destination source.
*/
ESource *
-select_source_dialog (GtkWindow *parent, ECalSourceType obj_type, ESource *except_source)
+select_source_dialog (GtkWindow *parent, ECalClientSourceType obj_type, ESource *except_source)
{
GtkWidget *dialog;
ESourceList *source_list;
@@ -44,11 +44,11 @@ select_source_dialog (GtkWindow *parent, ECalSourceType obj_type, ESource *excep
GConfClient *conf_client;
const gchar *icon_name = NULL;
- if (obj_type == E_CAL_SOURCE_TYPE_EVENT)
+ if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
gconf_key = "/apps/evolution/calendar/sources";
- else if (obj_type == E_CAL_SOURCE_TYPE_TODO)
+ else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
gconf_key = "/apps/evolution/tasks/sources";
- else if (obj_type == E_CAL_SOURCE_TYPE_JOURNAL)
+ else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
gconf_key = "/apps/evolution/memos/sources";
else
return NULL;
@@ -59,11 +59,11 @@ select_source_dialog (GtkWindow *parent, ECalSourceType obj_type, ESource *excep
/* create the dialog */
dialog = e_source_selector_dialog_new (parent, source_list);
- if (obj_type == E_CAL_SOURCE_TYPE_EVENT)
+ if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
icon_name = "x-office-calendar";
- else if (obj_type == E_CAL_SOURCE_TYPE_TODO)
+ else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
icon_name = "stock_todo";
- else if (obj_type == E_CAL_SOURCE_TYPE_JOURNAL)
+ else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
icon_name = "stock_journal";
if (icon_name)
diff --git a/calendar/gui/dialogs/select-source-dialog.h b/calendar/gui/dialogs/select-source-dialog.h
index 902ac3fc03..6d64fb825a 100644
--- a/calendar/gui/dialogs/select-source-dialog.h
+++ b/calendar/gui/dialogs/select-source-dialog.h
@@ -28,8 +28,8 @@
#include <gtk/gtk.h>
#include <libedataserver/e-source.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
-ESource *select_source_dialog (GtkWindow *parent, ECalSourceType type, ESource *except_source);
+ESource *select_source_dialog (GtkWindow *parent, ECalClientSourceType type, ESource *except_source);
#endif
diff --git a/calendar/gui/dialogs/send-comp.c b/calendar/gui/dialogs/send-comp.c
index 070fb6b735..d67d9fb626 100644
--- a/calendar/gui/dialogs/send-comp.c
+++ b/calendar/gui/dialogs/send-comp.c
@@ -133,7 +133,7 @@ add_checkbox (GtkBox *where, const gchar *caption)
* Return value: TRUE if the user clicked Yes, FALSE otherwise.
**/
gboolean
-send_component_dialog (GtkWindow *parent, ECal *client, ECalComponent *comp, gboolean new, gboolean *strip_alarms, gboolean *only_new_attendees)
+send_component_dialog (GtkWindow *parent, ECalClient *client, ECalComponent *comp, gboolean new, gboolean *strip_alarms, gboolean *only_new_attendees)
{
ECalComponentVType vtype;
const gchar *id;
@@ -144,7 +144,7 @@ send_component_dialog (GtkWindow *parent, ECal *client, ECalComponent *comp, gbo
if (strip_alarms)
*strip_alarms = TRUE;
- if (e_cal_get_save_schedules (client) || !component_has_recipients (comp))
+ if (e_cal_client_check_save_schedules (client) || !component_has_recipients (comp))
return FALSE;
vtype = e_cal_component_get_vtype (comp);
@@ -206,7 +206,7 @@ send_component_dialog (GtkWindow *parent, ECal *client, ECalComponent *comp, gbo
}
gboolean
-send_component_prompt_subject (GtkWindow *parent, ECal *client, ECalComponent *comp)
+send_component_prompt_subject (GtkWindow *parent, ECalClient *client, ECalComponent *comp)
{
ECalComponentVType vtype;
const gchar *id;
diff --git a/calendar/gui/dialogs/send-comp.h b/calendar/gui/dialogs/send-comp.h
index 83f356b142..91584a7f4b 100644
--- a/calendar/gui/dialogs/send-comp.h
+++ b/calendar/gui/dialogs/send-comp.h
@@ -25,10 +25,10 @@
#define SEND_COMP_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
-gboolean send_component_dialog (GtkWindow *parent, ECal *client, ECalComponent *comp, gboolean new, gboolean *strip_alarms, gboolean *only_new_attendees);
-gboolean send_component_prompt_subject (GtkWindow *parent, ECal *client, ECalComponent *comp);
+gboolean send_component_dialog (GtkWindow *parent, ECalClient *client, ECalComponent *comp, gboolean new, gboolean *strip_alarms, gboolean *only_new_attendees);
+gboolean send_component_prompt_subject (GtkWindow *parent, ECalClient *client, ECalComponent *comp);
#endif
diff --git a/calendar/gui/dialogs/task-details-page.c b/calendar/gui/dialogs/task-details-page.c
index 7f72dd3e38..bc828cf431 100644
--- a/calendar/gui/dialogs/task-details-page.c
+++ b/calendar/gui/dialogs/task-details-page.c
@@ -149,14 +149,13 @@ sensitize_widgets (TaskDetailsPage *tdpage)
TaskDetailsPagePrivate *priv = tdpage->priv;
CompEditor *editor;
GtkWidget *entry;
- ECal *client;
+ ECalClient *client;
gboolean read_only;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tdpage));
client = comp_editor_get_client (editor);
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
+ read_only = e_client_is_readonly (E_CLIENT (client));
gtk_widget_set_sensitive (priv->status_combo, !read_only);
gtk_widget_set_sensitive (priv->priority_combo, !read_only);
diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c
index f24db192b2..1e859cb293 100644
--- a/calendar/gui/dialogs/task-editor.c
+++ b/calendar/gui/dialogs/task-editor.c
@@ -148,7 +148,7 @@ task_editor_constructor (GType type,
CompEditorFlags flags;
TaskEditorPrivate *priv;
GtkActionGroup *action_group;
- ECal *client;
+ ECalClient *client;
gboolean is_assigned;
/* Chain up to parent's constructor() method. */
@@ -168,8 +168,7 @@ task_editor_constructor (GType type,
gtk_action_group_set_visible (action_group, is_assigned);
if (is_assigned) {
- if (e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
task_page_show_options (priv->task_page);
comp_editor_set_group_item (editor, TRUE);
}
@@ -380,7 +379,7 @@ task_editor_edit_comp (CompEditor *editor, ECalComponent *comp)
{
TaskEditorPrivate *priv;
ECalComponentOrganizer organizer;
- ECal *client;
+ ECalClient *client;
GSList *attendees = NULL;
priv = TASK_EDITOR_GET_PRIVATE (editor);
@@ -429,7 +428,7 @@ task_editor_edit_comp (CompEditor *editor, ECalComponent *comp)
if (ia != NULL)
e_meeting_attendee_set_edit_level (ia, E_MEETING_ATTENDEE_EDIT_STATUS);
- } else if (e_cal_get_organizer_must_attend (client)) {
+ } else if (e_cal_client_check_organizer_must_attend (client)) {
EMeetingAttendee *ia;
ia = e_meeting_store_find_attendee (priv->model, organizer.value, &row);
@@ -466,7 +465,7 @@ task_editor_send_comp (CompEditor *editor,
comp = task_page_get_cancel_comp (priv->task_page);
if (comp != NULL) {
- ECal *client;
+ ECalClient *client;
gboolean result;
client = e_meeting_store_get_client (priv->model);
@@ -488,7 +487,7 @@ task_editor_send_comp (CompEditor *editor,
/**
* task_editor_new:
- * @client: a ECal
+ * @client: a ECalClient
*
* Creates a new event editor dialog.
*
@@ -496,11 +495,11 @@ task_editor_send_comp (CompEditor *editor,
* editor could not be created.
**/
CompEditor *
-task_editor_new (ECal *client,
+task_editor_new (ECalClient *client,
EShell *shell,
CompEditorFlags flags)
{
- g_return_val_if_fail (E_IS_CAL (client), NULL);
+ g_return_val_if_fail (E_IS_CAL_CLIENT (client), NULL);
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
return g_object_new (
diff --git a/calendar/gui/dialogs/task-editor.h b/calendar/gui/dialogs/task-editor.h
index f026acae0c..0808cd547d 100644
--- a/calendar/gui/dialogs/task-editor.h
+++ b/calendar/gui/dialogs/task-editor.h
@@ -65,7 +65,7 @@ struct _TaskEditorClass {
};
GType task_editor_get_type (void);
-CompEditor * task_editor_new (ECal *client,
+CompEditor * task_editor_new (ECalClient *client,
EShell *shell,
CompEditorFlags flags);
void task_editor_show_assignment (TaskEditor *te);
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index bb18780250..12902ff6d4 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -34,11 +34,11 @@
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
#include <libedataserverui/e-category-completion.h>
+#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
#include <misc/e-dateedit.h>
#include "misc/e-buffer-tagger.h"
#include <e-util/e-dialog-utils.h>
-#include "common/authentication.h"
#include "../e-timezone-entry.h"
#include "comp-editor.h"
#include "comp-editor-util.h"
@@ -111,7 +111,7 @@ struct _TaskPagePrivate {
GtkWidget *attendees_label;
/* ListView stuff */
- ECal *client;
+ ECalClient *client;
EMeetingStore *meeting_store;
EMeetingListView *list_view;
gint row;
@@ -264,7 +264,7 @@ sensitize_widgets (TaskPage *tpage)
TaskPagePrivate *priv = tpage->priv;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
GtkActionGroup *action_group;
GtkAction *action;
gboolean read_only, sens = TRUE, sensitize;
@@ -273,8 +273,7 @@ sensitize_widgets (TaskPage *tpage)
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
- if (!e_cal_is_read_only (client, &read_only, NULL))
- read_only = TRUE;
+ read_only = e_client_is_readonly (E_CLIENT (client));
if (flags & COMP_EDITOR_IS_ASSIGNED)
sens = flags & COMP_EDITOR_USER_ORG;
@@ -473,7 +472,7 @@ task_page_fill_widgets (CompEditorPage *page,
CompEditor *editor;
CompEditorFlags flags;
GtkAction *action;
- ECal *client;
+ ECalClient *client;
GSList *l;
icalcomponent *icalcomp;
const gchar *categories, *uid;
@@ -555,10 +554,13 @@ task_page_fill_widgets (CompEditorPage *page,
on the server, so we try to get the builtin timezone with the TZID
first. */
if (!zone && d.tzid) {
- if (!e_cal_get_timezone (client, d.tzid, &zone, NULL))
+ GError *error = NULL;
+ if (!e_cal_client_get_timezone_sync (client, d.tzid, &zone, NULL, &error))
/* FIXME: Handle error better. */
- g_warning ("Couldn't get timezone from server: %s",
- d.tzid ? d.tzid : "");
+ g_warning ("Couldn't get timezone '%s' from server: %s",
+ d.tzid ? d.tzid : "", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
}
e_timezone_entry_set_timezone (E_TIMEZONE_ENTRY (priv->timezone),
@@ -611,7 +613,7 @@ task_page_fill_widgets (CompEditorPage *page,
comp_editor_set_classification (editor, cl);
e_cal_component_get_uid (comp, &uid);
- if (e_cal_get_object (client, uid, NULL, &icalcomp, NULL)) {
+ if (e_cal_client_get_object_sync (client, uid, NULL, &icalcomp, NULL, NULL)) {
icalcomponent_free (icalcomp);
task_page_hide_options (tpage);
}
@@ -623,9 +625,9 @@ task_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (client));
+ e_client_get_source (E_CLIENT (client)));
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
set_subscriber_info_string (tpage, backend_addr);
if (priv->is_assignment) {
@@ -646,14 +648,10 @@ task_page_fill_widgets (CompEditorPage *page,
gchar *string;
if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
- if (e_cal_get_static_capability (
- client,
- CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
priv->user_org = TRUE;
} else {
- if (e_cal_get_static_capability (
- client,
- CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
gtk_widget_set_sensitive (priv->invite, FALSE);
gtk_widget_set_sensitive (priv->add, FALSE);
gtk_widget_set_sensitive (priv->edit, FALSE);
@@ -661,7 +659,7 @@ task_page_fill_widgets (CompEditorPage *page,
priv->user_org = FALSE;
}
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_ORGANIZER) && (flags & COMP_EDITOR_DELEGATE))
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_ORGANIZER) && (flags & COMP_EDITOR_DELEGATE))
string = g_strdup (priv->user_add);
else if ( organizer.cn != NULL)
string = g_strdup_printf ("%s <%s>", organizer.cn, strip);
@@ -714,7 +712,7 @@ task_page_fill_widgets (CompEditorPage *page,
backend_mailto = mailto = NULL;
}
- if (client && e_cal_get_organizer_must_accept (client))
+ if (client && e_cal_client_check_organizer_must_accept (client))
e_meeting_attendee_set_status (
attendee, ICAL_PARTSTAT_NEEDSACTION);
else
@@ -748,7 +746,7 @@ task_page_fill_component (CompEditorPage *page,
ECalComponentDateTime date;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
struct icaltimetype start_tt, due_tt;
gchar *cat, *str;
gboolean start_date_set, due_date_set, time_set;
@@ -898,7 +896,7 @@ task_page_fill_component (CompEditorPage *page,
gchar *name;
gchar *mailto;
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
/* Find the identity for the organizer or sentby field */
if (!get_current_identity (tpage, &name, &mailto)) {
@@ -1314,7 +1312,7 @@ attendee_added_cb (EMeetingListView *emlv,
TaskPagePrivate *priv = page->priv;
CompEditor *editor;
CompEditorFlags flags;
- ECal *client;
+ ECalClient *client;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
client = comp_editor_get_client (editor);
@@ -1328,7 +1326,7 @@ attendee_added_cb (EMeetingListView *emlv,
/* do not remove here, it did EMeetingListView already */
e_meeting_attendee_set_delfrom (ia, g_strdup_printf ("MAILTO:%s", priv->user_add ? priv->user_add : ""));
- if (!e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY)) {
+ if (!e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY)) {
EMeetingAttendee *delegator;
gtk_widget_set_sensitive (priv->invite, FALSE);
@@ -1773,7 +1771,8 @@ source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage)
TaskPagePrivate *priv = tpage->priv;
CompEditor *editor;
ESource *source;
- ECal *client;
+ ECalClient *client;
+ GError *error = NULL;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
source = e_source_combo_box_get_active (source_combo_box);
@@ -1781,15 +1780,18 @@ source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage)
if (comp_editor_page_get_updating (COMP_EDITOR_PAGE (tpage)))
return;
- client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_TODO);
+ client = e_cal_client_new (source, E_CAL_CLIENT_SOURCE_TYPE_TASKS, &error);
if (client) {
icaltimezone *zone;
zone = comp_editor_get_timezone (editor);
- e_cal_set_default_timezone (client, zone, NULL);
+ e_cal_client_set_default_timezone (client, zone);
}
- if (!client || !e_cal_open (client, FALSE, NULL)) {
+ if (client)
+ g_signal_connect (client, "authenticate", G_CALLBACK (e_client_utils_authenticate_handler), NULL);
+
+ if (!client || !e_client_open_sync (E_CLIENT (client), FALSE, NULL, &error)) {
GtkWidget *dialog;
if (client)
@@ -1799,18 +1801,22 @@ source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage)
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (priv->source_selector),
- e_cal_get_source (client));
+ e_client_get_source (E_CLIENT (client)));
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
- _("Unable to open tasks in '%s'."),
- e_source_peek_name (source));
+ _("Unable to open tasks in '%s': %s"),
+ e_source_peek_name (source),
+ error ? error->message : _("Unknown error"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
+
+ if (error)
+ g_error_free (error);
} else {
comp_editor_set_client (editor, client);
comp_editor_page_changed (COMP_EDITOR_PAGE (tpage));
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS) && priv->is_assignment)
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS) && priv->is_assignment)
task_page_show_options (tpage);
else
task_page_hide_options (tpage);
@@ -1818,7 +1824,7 @@ source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage)
if (client) {
gchar *backend_addr = NULL;
- e_cal_get_cal_address (client, &backend_addr, NULL);
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
if (priv->is_assignment)
task_page_select_organizer (tpage, backend_addr);
@@ -1835,12 +1841,12 @@ static void
set_subscriber_info_string (TaskPage *tpage, const gchar *backend_address)
{
CompEditor *editor;
- ECal *client;
+ ECalClient *client;
ESource *source;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
client = comp_editor_get_client (editor);
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (client));
if (e_source_get_property (source, "subscriber")) {
g_free (tpage->priv->subscriber_info_text);
@@ -1863,7 +1869,7 @@ task_page_send_options_clicked_cb (TaskPage *tpage)
CompEditor *editor;
GtkWidget *toplevel;
ESource *source;
- ECal *client;
+ ECalClient *client;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
client = comp_editor_get_client (editor);
@@ -1876,7 +1882,7 @@ task_page_send_options_clicked_cb (TaskPage *tpage)
e_send_options_utils_set_default_data (priv->sod, source, "task");
}
- if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_GEN_OPTIONS)) {
+ if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_NO_GEN_OPTIONS)) {
e_send_options_set_need_general_options (priv->sod, FALSE);
}
@@ -2041,7 +2047,7 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
const gchar *default_address;
gboolean subscribed_cal = FALSE;
ESource *source = NULL;
- ECal *client;
+ ECalClient *client;
const gchar *user_addr = NULL;
gint ii;
@@ -2049,7 +2055,7 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
client = comp_editor_get_client (editor);
if (client)
- source = e_cal_get_source (client);
+ source = e_client_get_source (E_CLIENT (client));
if (source)
user_addr = e_source_get_property (source, "subscriber");
@@ -2094,7 +2100,7 @@ task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
TaskPage *
task_page_construct (TaskPage *tpage,
EMeetingStore *meeting_store,
- ECal *client)
+ ECalClient *client)
{
TaskPagePrivate *priv;
GtkTreeModel *model;
@@ -2155,7 +2161,7 @@ TaskPage *
task_page_new (EMeetingStore *model, CompEditor *editor)
{
TaskPage *tpage;
- ECal *client;
+ ECalClient *client;
tpage = g_object_new (TYPE_TASK_PAGE, "editor", editor, NULL);
client = comp_editor_get_client (editor);
diff --git a/calendar/gui/dialogs/task-page.h b/calendar/gui/dialogs/task-page.h
index 007dcdeec4..9d713deaef 100644
--- a/calendar/gui/dialogs/task-page.h
+++ b/calendar/gui/dialogs/task-page.h
@@ -72,7 +72,7 @@ struct _TaskPageClass {
GType task_page_get_type (void);
TaskPage * task_page_construct (TaskPage *epage,
EMeetingStore *model,
- ECal *client);
+ ECalClient *client);
TaskPage * task_page_new (EMeetingStore *model,
CompEditor *editor);
ECalComponent * task_page_get_cancel_comp (TaskPage *page);
diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c
index c964a6f1ed..d2c979151f 100644
--- a/calendar/gui/e-cal-component-preview.c
+++ b/calendar/gui/e-cal-component-preview.c
@@ -70,7 +70,7 @@ clear_comp_info (ECalComponentPreview *preview)
returns whether component in the preview changed */
static gboolean
update_comp_info (ECalComponentPreview *preview,
- ECal *ecal,
+ ECalClient *client,
ECalComponent *comp)
{
ECalComponentPreviewPrivate *priv;
@@ -81,7 +81,7 @@ update_comp_info (ECalComponentPreview *preview,
priv = preview->priv;
- if (!E_IS_CAL_COMPONENT (comp) || !E_IS_CAL (ecal)) {
+ if (!E_IS_CAL_COMPONENT (comp) || !E_IS_CAL_CLIENT (client)) {
changed = !priv->cal_uid;
clear_comp_info (preview);
} else {
@@ -92,7 +92,7 @@ update_comp_info (ECalComponentPreview *preview,
gint *sequence = NULL;
gint comp_sequence;
- cal_uid = g_strdup (e_source_peek_uid (e_cal_get_source (ecal)));
+ cal_uid = g_strdup (e_source_peek_uid (e_client_get_source (E_CLIENT (client))));
e_cal_component_get_uid (comp, &uid);
comp_uid = g_strdup (uid);
e_cal_component_get_last_modified (comp, &itm);
@@ -128,7 +128,7 @@ update_comp_info (ECalComponentPreview *preview,
/* Converts a time_t to a string, relative to the specified timezone */
static gchar *
timet_to_str_with_zone (ECalComponentDateTime *dt,
- ECal *ecal,
+ ECalClient *client,
icaltimezone *default_zone,
gboolean use_24_hour_format)
{
@@ -139,7 +139,7 @@ timet_to_str_with_zone (ECalComponentDateTime *dt,
if (dt->tzid) {
/* If we can't find the zone, we'll guess its "local" */
- if (!e_cal_get_timezone (ecal, dt->tzid, &zone, NULL))
+ if (!e_cal_client_get_timezone_sync (client, dt->tzid, &zone, NULL, NULL))
zone = NULL;
} else if (dt->value->is_utc) {
zone = icaltimezone_get_utc_timezone ();
@@ -161,7 +161,7 @@ timet_to_str_with_zone (ECalComponentDateTime *dt,
static void
cal_component_preview_write_html (GString *buffer,
- ECal *ecal,
+ ECalClient *client,
ECalComponent *comp,
icaltimezone *default_zone,
gboolean use_24_hour_format)
@@ -240,7 +240,7 @@ cal_component_preview_write_html (GString *buffer,
e_cal_component_get_dtstart (comp, &dt);
if (dt.value != NULL) {
str = timet_to_str_with_zone (
- &dt, ecal, default_zone, use_24_hour_format);
+ &dt, client, default_zone, use_24_hour_format);
g_string_append_printf (
buffer, "<TR><TD VALIGN=\"TOP\" ALIGN=\"RIGHT\">"
"<B>%s</B></TD><TD>%s</TD></TR>",
@@ -254,7 +254,7 @@ cal_component_preview_write_html (GString *buffer,
e_cal_component_get_dtend (comp, &dt);
if (dt.value != NULL) {
str = timet_to_str_with_zone (
- &dt, ecal, default_zone, use_24_hour_format);
+ &dt, client, default_zone, use_24_hour_format);
g_string_append_printf (
buffer, "<TR><TD VALIGN=\"TOP\" ALIGN=\"RIGHT\">"
"<B>%s</B></TD><TD>%s</TD></TR>",
@@ -268,7 +268,7 @@ cal_component_preview_write_html (GString *buffer,
e_cal_component_get_due (comp, &dt);
if (dt.value != NULL) {
str = timet_to_str_with_zone (
- &dt, ecal, default_zone, use_24_hour_format);
+ &dt, client, default_zone, use_24_hour_format);
g_string_append_printf (
buffer, "<TR><TD VALIGN=\"TOP\" ALIGN=\"RIGHT\">"
"<B>%s</B></TD><TD>%s</TD></TR>",
@@ -444,7 +444,7 @@ e_cal_component_preview_new (void)
void
e_cal_component_preview_display (ECalComponentPreview *preview,
- ECal *ecal,
+ ECalClient *client,
ECalComponent *comp,
icaltimezone *zone,
gboolean use_24_hour_format)
@@ -456,14 +456,14 @@ e_cal_component_preview_display (ECalComponentPreview *preview,
/* do not update preview when setting the same component as last time,
which even didn't change */
- if (!update_comp_info (preview, ecal, comp))
+ if (!update_comp_info (preview, client, comp))
return;
/* XXX The initial buffer size is arbitrary. Tune it. */
buffer = g_string_sized_new (4096);
cal_component_preview_write_html (
- buffer, ecal, comp, zone, use_24_hour_format);
+ buffer, client, comp, zone, use_24_hour_format);
e_web_view_load_string (E_WEB_VIEW (preview), buffer->str);
g_string_free (buffer, TRUE);
}
diff --git a/calendar/gui/e-cal-component-preview.h b/calendar/gui/e-cal-component-preview.h
index f713df7321..091f66c252 100644
--- a/calendar/gui/e-cal-component-preview.h
+++ b/calendar/gui/e-cal-component-preview.h
@@ -25,7 +25,7 @@
#define E_CAL_COMPONENT_PREVIEW_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <misc/e-web-view.h>
/* Standard GObject macros */
@@ -69,7 +69,7 @@ struct _ECalComponentPreviewClass {
GType e_cal_component_preview_get_type (void);
GtkWidget * e_cal_component_preview_new (void);
void e_cal_component_preview_display (ECalComponentPreview *preview,
- ECal *ecal,
+ ECalClient *client,
ECalComponent *comp,
icaltimezone *zone,
gboolean use_24_hour_format);
diff --git a/calendar/gui/e-cal-config.h b/calendar/gui/e-cal-config.h
index 7751c3e42f..f803e99285 100644
--- a/calendar/gui/e-cal-config.h
+++ b/calendar/gui/e-cal-config.h
@@ -24,7 +24,7 @@
#ifndef __E_CAL_CONFIG_H__
#define __E_CAL_CONFIG_H__
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include "e-util/e-config.h"
/* Standard GObject macros */
@@ -74,7 +74,7 @@ struct _ECalConfigTargetSource {
EConfigTarget target;
struct _ESource *source;
- ECalSourceType source_type;
+ ECalClientSourceType source_type;
};
struct _ECalConfigTargetPrefs {
diff --git a/calendar/gui/e-cal-list-view.c b/calendar/gui/e-cal-list-view.c
index 7893dae0e8..c287b7a6ca 100644
--- a/calendar/gui/e-cal-list-view.c
+++ b/calendar/gui/e-cal-list-view.c
@@ -102,7 +102,6 @@ e_cal_list_view_class_init (ECalListViewClass *class)
static void
e_cal_list_view_init (ECalListView *cal_list_view)
{
- cal_list_view->query = NULL;
cal_list_view->table = NULL;
cal_list_view->cursor_event = NULL;
cal_list_view->set_table_id = 0;
@@ -330,13 +329,6 @@ e_cal_list_view_dispose (GObject *object)
cal_list_view = E_CAL_LIST_VIEW (object);
- if (cal_list_view->query) {
- g_signal_handlers_disconnect_matched (cal_list_view->query, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, cal_list_view);
- g_object_unref (cal_list_view->query);
- cal_list_view->query = NULL;
- }
-
if (cal_list_view->set_table_id) {
g_source_remove (cal_list_view->set_table_id);
cal_list_view->set_table_id = 0;
diff --git a/calendar/gui/e-cal-list-view.h b/calendar/gui/e-cal-list-view.h
index faf37bbc9f..ed4636f753 100644
--- a/calendar/gui/e-cal-list-view.h
+++ b/calendar/gui/e-cal-list-view.h
@@ -67,9 +67,6 @@ struct _ECalListView {
/* The main display table */
ETable *table;
- /* S-expression for query and the query object */
- ECalView *query;
-
/* The default category for new events */
gchar *default_category;
diff --git a/calendar/gui/e-cal-model-calendar.c b/calendar/gui/e-cal-model-calendar.c
index 4ac73089bb..ea8dd7bba7 100644
--- a/calendar/gui/e-cal-model-calendar.c
+++ b/calendar/gui/e-cal-model-calendar.c
@@ -130,7 +130,7 @@ get_dtend (ECalModelCalendar *model, ECalModelComponent *comp_data)
tt_end = icalproperty_get_dtend (prop);
if (icaltime_get_tzid (tt_end)
- && e_cal_get_timezone (comp_data->client, icaltime_get_tzid (tt_end), &zone, NULL))
+ && e_cal_client_get_timezone_sync (comp_data->client, icaltime_get_tzid (tt_end), &zone, NULL, NULL))
got_zone = TRUE;
model_zone = e_cal_model_get_timezone (E_CAL_MODEL (model));
@@ -295,6 +295,7 @@ ecmc_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
CalObjModType mod = CALOBJ_MOD_ALL;
ECalComponent *comp;
ECalModelCalendar *model = (ECalModelCalendar *) etm;
+ GError *error = NULL;
g_return_if_fail (E_IS_CAL_MODEL_CALENDAR (model));
g_return_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST);
@@ -335,7 +336,7 @@ ecmc_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
break;
}
- if (e_cal_modify_object (comp_data->client, comp_data->icalcomp, mod, NULL)) {
+ if (e_cal_client_modify_object_sync (comp_data->client, comp_data->icalcomp, mod, NULL, &error)) {
gboolean strip_alarms = TRUE;
if (itip_organizer_is_user (comp, comp_data->client) &&
@@ -348,7 +349,7 @@ ecmc_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
const gchar *uid = NULL;
e_cal_component_get_uid (comp, &uid);
- if (e_cal_get_object (comp_data->client, uid, NULL, &icalcomp, NULL) && icalcomp) {
+ if (e_cal_client_get_object_sync (comp_data->client, uid, NULL, &icalcomp, NULL, NULL) && icalcomp) {
send_comp = e_cal_component_new ();
if (!e_cal_component_set_icalcomponent (send_comp, icalcomp)) {
icalcomponent_free (icalcomp);
@@ -365,9 +366,11 @@ ecmc_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
g_object_unref (send_comp);
}
} else {
- g_warning (G_STRLOC ": Could not modify the object!");
+ g_warning (G_STRLOC ": Could not modify the object! %s", error ? error->message : "Unknown error");
/* FIXME Show error dialog */
+ if (error)
+ g_error_free (error);
}
g_object_unref (comp);
diff --git a/calendar/gui/e-cal-model-memos.c b/calendar/gui/e-cal-model-memos.c
index 0356dacf0c..59a48d031c 100644
--- a/calendar/gui/e-cal-model-memos.c
+++ b/calendar/gui/e-cal-model-memos.c
@@ -140,6 +140,7 @@ ecmm_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
{
ECalModelComponent *comp_data;
ECalModelMemos *model = (ECalModelMemos *) etm;
+ GError *error = NULL;
g_return_if_fail (E_IS_CAL_MODEL_MEMOS (model));
g_return_if_fail (col >= 0 && col < E_CAL_MODEL_MEMOS_FIELD_LAST);
@@ -157,10 +158,12 @@ ecmm_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
}
/* TODO ask about mod type */
- if (!e_cal_modify_object (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL)) {
- g_warning (G_STRLOC ": Could not modify the object!");
+ if (!e_cal_client_modify_object_sync (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL, &error)) {
+ g_warning (G_STRLOC ": Could not modify the object! %s", error ? error->message : "Unknown error");
/* TODO Show error dialog */
+ if (error)
+ g_error_free (error);
}
}
diff --git a/calendar/gui/e-cal-model-tasks.c b/calendar/gui/e-cal-model-tasks.c
index ff829e319f..51811c783f 100644
--- a/calendar/gui/e-cal-model-tasks.c
+++ b/calendar/gui/e-cal-model-tasks.c
@@ -325,7 +325,7 @@ get_completed (ECalModelComponent *comp_data)
comp_data->completed->tt = tt_completed;
if (icaltime_get_tzid (tt_completed)
- && e_cal_get_timezone (comp_data->client, icaltime_get_tzid (tt_completed), &zone, NULL))
+ && e_cal_client_get_timezone_sync (comp_data->client, icaltime_get_tzid (tt_completed), &zone, NULL, NULL))
comp_data->completed->zone = zone;
else
comp_data->completed->zone = NULL;
@@ -355,7 +355,7 @@ get_due (ECalModelComponent *comp_data)
comp_data->due->tt = tt_due;
if (icaltime_get_tzid (tt_due)
- && e_cal_get_timezone (comp_data->client, icaltime_get_tzid (tt_due), &zone, NULL))
+ && e_cal_client_get_timezone_sync (comp_data->client, icaltime_get_tzid (tt_due), &zone, NULL, NULL))
comp_data->due->zone = zone;
else
comp_data->due->zone = NULL;
@@ -525,7 +525,7 @@ get_due_status (ECalModelTasks *model, ECalModelComponent *comp_data)
/* Get the current time in the same timezone as the DUE date.*/
tzid = icalparameter_get_tzid (param);
- if (!e_cal_get_timezone (comp_data->client, tzid, &zone, NULL))
+ if (!e_cal_client_get_timezone_sync (comp_data->client, tzid, &zone, NULL, NULL))
return E_CAL_MODEL_TASKS_DUE_FUTURE;
now_tt = icaltime_current_time_with_zone (zone);
@@ -1252,13 +1252,17 @@ void e_cal_model_tasks_mark_comp_incomplete (ECalModelTasks *model, ECalModelCom
static void
commit_component_changes (ECalModelComponent *comp_data)
{
+ GError *error = NULL;
+
g_return_if_fail (comp_data != NULL);
/* FIXME ask about mod type */
- if (!e_cal_modify_object (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL)) {
- g_warning (G_STRLOC ": Could not modify the object!");
+ if (!e_cal_client_modify_object_sync (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL, &error)) {
+ g_warning (G_STRLOC ": Could not modify the object! %s", error ? error->message : "Unknown error");
/* FIXME Show error dialog */
+ if (error)
+ g_error_free (error);
}
}
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index a2e0418cbc..5e0c9cc337 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -30,6 +30,7 @@
#include <glib/gi18n.h>
#include <libedataserver/e-flag.h>
#include <libedataserver/e-time-utils.h>
+#include <libecal/e-cal-client-view.h>
#include <libecal/e-cal-time-util.h>
#include "comp-util.h"
#include "e-cal-model.h"
@@ -41,8 +42,8 @@
#include "e-util/e-util-enumtypes.h"
typedef struct {
- ECal *client;
- ECalView *query;
+ ECalClient *client;
+ ECalClientView *view;
gboolean do_query;
} ECalModelClient;
@@ -52,7 +53,7 @@ struct _ECalModelPrivate {
GList *clients;
/* The default client in the list */
- ECal *default_client;
+ ECalClient *default_client;
/* Array for storing the objects. Each element is of type ECalModelComponent */
GPtrArray *objects;
@@ -108,9 +109,9 @@ struct _ECalModelPrivate {
gboolean in_modified;
gboolean in_removed;
- GList *notify_added;
- GList *notify_modified;
- GList *notify_removed;
+ GSList *notify_added;
+ GSList *notify_modified;
+ GSList *notify_removed;
GMutex *notify_lock;
};
@@ -129,8 +130,8 @@ static gchar *ecm_value_to_string (ETableModel *etm, gint col, gconstpointer val
static const gchar *ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data);
-static ECalModelClient *add_new_client (ECalModel *model, ECal *client, gboolean do_query);
-static ECalModelClient *find_client_data (ECalModel *model, ECal *client);
+static ECalModelClient *add_new_client (ECalModel *model, ECalClient *client, gboolean do_query);
+static ECalModelClient *find_client_data (ECalModel *model, ECalClient *client);
static void remove_client_objects (ECalModel *model, ECalModelClient *client_data);
static void remove_client (ECalModel *model, ECalModelClient *client_data);
@@ -156,9 +157,6 @@ enum {
ROW_APPENDED,
COMPS_DELETED,
CAL_VIEW_PROGRESS,
- #ifndef E_CAL_DISABLE_DEPRECATED
- CAL_VIEW_DONE,
- #endif
CAL_VIEW_COMPLETE,
STATUS_MESSAGE,
TIMEZONE_CHANGED,
@@ -385,15 +383,15 @@ cal_model_dispose (GObject *object)
g_signal_handlers_disconnect_matched (client_data->client, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, object);
- if (client_data->query)
- g_signal_handlers_disconnect_matched (client_data->query, G_SIGNAL_MATCH_DATA,
+ if (client_data->view)
+ g_signal_handlers_disconnect_matched (client_data->view, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, object);
priv->clients = g_list_remove (priv->clients, client_data);
g_object_unref (client_data->client);
- if (client_data->query)
- g_object_unref (client_data->query);
+ if (client_data->view)
+ g_object_unref (client_data->view);
g_free (client_data);
}
@@ -493,9 +491,9 @@ e_cal_model_class_init (ECalModelClass *class)
PROP_DEFAULT_CLIENT,
g_param_spec_object (
"default-client",
- "Default Client",
+ "Default ECalClient",
NULL,
- E_TYPE_CAL,
+ E_TYPE_CAL_CLIENT,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -646,25 +644,14 @@ e_cal_model_class_init (ECalModelClass *class)
e_marshal_VOID__STRING_INT_INT,
G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
- #ifndef E_CAL_DISABLE_DEPRECATED
- signals[CAL_VIEW_DONE] =
- g_signal_new ("cal_view_done",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalModelClass, cal_view_done),
- NULL, NULL,
- e_marshal_VOID__INT_INT,
- G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
- #endif
-
signals[CAL_VIEW_COMPLETE] =
g_signal_new ("cal_view_complete",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalModelClass, cal_view_complete),
NULL, NULL,
- e_marshal_VOID__INT_STRING_INT,
- G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT);
+ e_marshal_VOID__BOXED_INT,
+ G_TYPE_NONE, 2, G_TYPE_ERROR, G_TYPE_INT);
signals[STATUS_MESSAGE] = g_signal_new (
"status-message",
@@ -827,7 +814,7 @@ get_dtstart (ECalModel *model, ECalModelComponent *comp_data)
tt_start = icalproperty_get_dtstart (prop);
if (icaltime_get_tzid (tt_start)
- && e_cal_get_timezone (comp_data->client, icaltime_get_tzid (tt_start), &zone, NULL))
+ && e_cal_client_get_timezone_sync (comp_data->client, icaltime_get_tzid (tt_start), &zone, NULL, NULL))
got_zone = TRUE;
if (e_cal_model_get_flags (model) & E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES) {
@@ -1080,7 +1067,7 @@ set_description (ECalModelComponent *comp_data, const gchar *value)
}
static void
-datetime_to_zone (ECal *client, struct icaltimetype *tt, icaltimezone *tt_zone, const gchar *tzid)
+datetime_to_zone (ECalClient *client, struct icaltimetype *tt, icaltimezone *tt_zone, const gchar *tzid)
{
icaltimezone *from, *to;
const gchar *tt_tzid = NULL;
@@ -1098,7 +1085,7 @@ datetime_to_zone (ECal *client, struct icaltimetype *tt, icaltimezone *tt_zone,
to = icaltimezone_get_builtin_timezone_from_tzid (tzid);
if (!to) {
/* do not check failure here, maybe the zone is not available there */
- e_cal_get_timezone (client, tzid, &to, NULL);
+ e_cal_client_get_timezone_sync (client, tzid, &to, NULL, NULL);
}
icaltimezone_convert_time (tt, from, to);
@@ -1196,6 +1183,7 @@ ecm_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
ECalModelPrivate *priv;
ECalModelComponent *comp_data;
ECalModel *model = (ECalModel *) etm;
+ GError *error = NULL;
g_return_if_fail (E_IS_CAL_MODEL (model));
@@ -1226,10 +1214,12 @@ ecm_set_value_at (ETableModel *etm, gint col, gint row, gconstpointer value)
}
/* FIXME ask about mod type */
- if (!e_cal_modify_object (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL)) {
- g_warning (G_STRLOC ": Could not modify the object!");
+ if (!e_cal_client_modify_object_sync (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL, &error)) {
+ g_warning (G_STRLOC ": Could not modify the object! %s", error ? error->message : "Unknown error");
/* FIXME Show error dialog */
+ if (error)
+ g_error_free (error);
}
}
@@ -1248,7 +1238,7 @@ gboolean
e_cal_model_test_row_editable (ECalModel *model, gint row)
{
gboolean readonly;
- ECal *cal = NULL;
+ ECalClient *client = NULL;
if (row != -1) {
ECalModelComponent *comp_data;
@@ -1256,17 +1246,16 @@ e_cal_model_test_row_editable (ECalModel *model, gint row)
comp_data = e_cal_model_get_component_at (model, row);
if (comp_data)
- cal = comp_data->client;
+ client = comp_data->client;
} else {
- cal = e_cal_model_get_default_client (model);
+ client = e_cal_model_get_default_client (model);
}
- readonly = cal == NULL;
+ readonly = client == NULL;
if (!readonly)
- if (!e_cal_is_read_only (cal, &readonly, NULL))
- readonly = TRUE;
+ readonly = e_client_is_readonly (E_CLIENT (client));
return !readonly;
}
@@ -1305,6 +1294,8 @@ ecm_append_row (ETableModel *etm, ETableModel *source, gint row)
ECalModelClass *model_class;
ECalModelComponent *comp_data;
ECalModel *model = (ECalModel *) etm;
+ gchar *uid = NULL;
+ GError *error = NULL;
g_return_if_fail (E_IS_CAL_MODEL (model));
g_return_if_fail (E_IS_TABLE_MODEL (source));
@@ -1316,7 +1307,7 @@ ecm_append_row (ETableModel *etm, ETableModel *source, gint row)
g_object_ref (comp_data->client);
/* guard against saving before the calendar is open */
- if (!(comp_data->client && e_cal_get_load_state (comp_data->client) == E_CAL_LOAD_LOADED)) {
+ if (!comp_data->client || !e_client_is_opened (E_CLIENT (comp_data->client))) {
g_object_unref (comp_data);
return;
}
@@ -1353,14 +1344,20 @@ ecm_append_row (ETableModel *etm, ETableModel *source, gint row)
model_class->fill_component_from_model (model, comp_data, source, row);
}
- if (!e_cal_create_object (comp_data->client, comp_data->icalcomp, NULL, NULL)) {
- g_warning (G_STRLOC ": Could not create the object!");
+ if (!e_cal_client_create_object_sync (comp_data->client, comp_data->icalcomp, &uid, NULL, &error)) {
+ g_warning (G_STRLOC ": Could not create the object! %s", error ? error->message : "Unknown error");
/* FIXME: show error dialog */
+ if (error)
+ g_error_free (error);
} else {
+ if (uid)
+ icalcomponent_set_uid (comp_data->icalcomp, uid);
+
g_signal_emit (G_OBJECT (model), signals[ROW_APPENDED], 0);
}
+ g_free (uid);
g_object_unref (comp_data);
}
@@ -1561,7 +1558,7 @@ ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
- source = e_cal_get_source (comp_data->client);
+ source = e_client_get_source (E_CLIENT (comp_data->client));
color_spec = e_source_peek_color_spec (source);
if (color_spec != NULL) {
g_free (comp_data->color);
@@ -1579,7 +1576,7 @@ ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
for (l = assigned_colors[i].uris; l != NULL; l = l->next) {
if (!strcmp ((const gchar *) l->data,
- e_cal_get_uri (comp_data->client)))
+ e_client_get_uri (E_CLIENT (comp_data->client))))
{
return assigned_colors[i].color;
}
@@ -1588,7 +1585,7 @@ ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
/* return the first unused color */
assigned_colors[first_empty].uris = g_list_append (assigned_colors[first_empty].uris,
- g_strdup (e_cal_get_uri (comp_data->client)));
+ g_strdup (e_client_get_uri (E_CLIENT (comp_data->client))));
return assigned_colors[first_empty].color;
}
@@ -1887,7 +1884,7 @@ e_cal_model_set_work_day_start_minute (ECalModel *model,
g_object_notify (G_OBJECT (model), "work-day-start-minute");
}
-ECal *
+ECalClient *
e_cal_model_get_default_client (ECalModel *model)
{
ECalModelPrivate *priv;
@@ -1913,7 +1910,7 @@ e_cal_model_get_default_client (ECalModel *model)
}
void
-e_cal_model_set_default_client (ECalModel *model, ECal *client)
+e_cal_model_set_default_client (ECalModel *model, ECalClient *client)
{
ECalModelPrivate *priv;
ECalModelClient *client_data;
@@ -1921,7 +1918,7 @@ e_cal_model_set_default_client (ECalModel *model, ECal *client)
g_return_if_fail (E_IS_CAL_MODEL (model));
if (client != NULL)
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
priv = model->priv;
@@ -1951,7 +1948,7 @@ GList *
e_cal_model_get_client_list (ECalModel *model)
{
GList *list = NULL, *l;
- ECal *default_client;
+ ECalClient *default_client;
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
@@ -1975,7 +1972,7 @@ e_cal_model_get_client_list (ECalModel *model)
* @model: A calendar model.
* @uri: Uri for the client to get.
*/
-ECal *
+ECalClient *
e_cal_model_get_client_for_uri (ECalModel *model, const gchar *uri)
{
GList *l;
@@ -1986,7 +1983,7 @@ e_cal_model_get_client_for_uri (ECalModel *model, const gchar *uri)
for (l = model->priv->clients; l != NULL; l = l->next) {
ECalModelClient *client_data = (ECalModelClient *) l->data;
- if (!strcmp (uri, e_cal_get_uri (client_data->client)))
+ if (!strcmp (uri, e_client_get_uri (E_CLIENT (client_data->client))))
return client_data->client;
}
@@ -1994,7 +1991,7 @@ e_cal_model_get_client_for_uri (ECalModel *model, const gchar *uri)
}
static ECalModelClient *
-find_client_data (ECalModel *model, ECal *client)
+find_client_data (ECalModel *model, ECalClient *client)
{
ECalModelPrivate *priv;
GList *l;
@@ -2012,7 +2009,7 @@ find_client_data (ECalModel *model, ECal *client)
}
static ECalModelComponent *
-search_by_id_and_client (ECalModelPrivate *priv, ECal *client, const ECalComponentId *id)
+search_by_id_and_client (ECalModelPrivate *priv, ECalClient *client, const ECalComponentId *id)
{
gint i;
@@ -2051,8 +2048,8 @@ search_by_id_and_client (ECalModelPrivate *priv, ECal *client, const ECalCompone
}
typedef struct {
- ECal *client;
- ECalView *query;
+ ECalClient *client;
+ ECalClientView *view;
ECalModel *model;
icalcomponent *icalcomp;
} RecurrenceExpansionData;
@@ -2075,7 +2072,8 @@ add_instance_cb (ECalComponent *comp, time_t instance_start, time_t instance_end
/* set the right instance start date to component */
e_cal_component_get_dtstart (comp, &datetime);
- e_cal_get_timezone (rdata->client, datetime.tzid, &zone, NULL);
+ if (datetime.tzid)
+ e_cal_client_get_timezone_sync (rdata->client, datetime.tzid, &zone, NULL, NULL);
time = icaltime_from_timet_with_zone (instance_start, FALSE, zone ? zone : priv->zone);
to_set.value = &time;
to_set.tzid = datetime.tzid;
@@ -2084,7 +2082,9 @@ add_instance_cb (ECalComponent *comp, time_t instance_start, time_t instance_end
/* set the right instance end date to component*/
e_cal_component_get_dtend (comp, &datetime);
- e_cal_get_timezone (rdata->client, datetime.tzid, &zone, NULL);
+ zone = NULL;
+ if (datetime.tzid)
+ e_cal_client_get_timezone_sync (rdata->client, datetime.tzid, &zone, NULL, NULL);
time = icaltime_from_timet_with_zone (instance_end, FALSE, zone ? zone : priv->zone);
to_set.value = &time;
to_set.tzid = datetime.tzid;
@@ -2162,24 +2162,25 @@ place_master_object_first_cb (gconstpointer p1, gconstpointer p2)
return res;
}
-static void e_cal_view_objects_added_cb (ECalView *query, GList *objects, ECalModel *model);
+static void client_view_objects_added_cb (ECalClientView *view, const GSList *objects, ECalModel *model);
static void
-process_added (ECalView *query, GList *objects, ECalModel *model)
+process_added (ECalClientView *view, const GSList *objects, ECalModel *model)
{
ECalModelPrivate *priv;
- GList *l, *copy;
+ const GSList *l;
+ GSList *copy;
priv = model->priv;
/* order matters, process master object first, then detached instances */
- copy = g_list_sort (g_list_copy (objects), place_master_object_first_cb);
+ copy = g_slist_sort (g_slist_copy ((GSList *) objects), place_master_object_first_cb);
for (l = copy; l; l = l->next) {
ECalModelComponent *comp_data;
ECalComponentId *id;
ECalComponent *comp = e_cal_component_new ();
- ECal *client = e_cal_view_get_client (query);
+ ECalClient *client = e_cal_client_view_get_client (view);
/* This will fail for alarm or VCalendar component */
if (!e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (l->data))) {
@@ -2217,19 +2218,17 @@ process_added (ECalView *query, GList *objects, ECalModel *model)
if (e_cal_util_component_has_recurrences (l->data) && (priv->flags & E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES)) {
RecurrenceExpansionData rdata;
- rdata.client = e_cal_view_get_client (query);
- rdata.query = query;
+ rdata.client = client;
+ rdata.view = view;
rdata.model = model;
rdata.icalcomp = l->data;
- e_cal_generate_instances_for_object (rdata.client, l->data,
- priv->start, priv->end,
- (ECalRecurInstanceFn) add_instance_cb,
- &rdata);
+ e_cal_client_generate_instances_for_object (rdata.client, l->data, priv->start, priv->end,
+ (ECalRecurInstanceFn) add_instance_cb, &rdata);
} else {
e_table_model_pre_change (E_TABLE_MODEL (model));
comp_data = g_object_new (E_TYPE_CAL_MODEL_COMPONENT, NULL);
- comp_data->client = g_object_ref (e_cal_view_get_client (query));
+ comp_data->client = g_object_ref (client);
comp_data->icalcomp = icalcomponent_new_clone (l->data);
e_cal_model_set_instance_times (comp_data, priv->zone);
@@ -2238,27 +2237,28 @@ process_added (ECalView *query, GList *objects, ECalModel *model)
}
}
- g_list_free (copy);
+ g_slist_free (copy);
}
static void
-process_modified (ECalView *query, GList *objects, ECalModel *model)
+process_modified (ECalClientView *view, const GSList *objects, ECalModel *model)
{
ECalModelPrivate *priv;
- GList *l, *list = NULL;
+ const GSList *l;
+ GSList *list = NULL;
priv = model->priv;
/* re-add only the recurrence objects */
- for (l = objects; l != NULL; l = g_list_next (l)) {
+ for (l = objects; l != NULL; l = g_slist_next (l)) {
if (!e_cal_util_component_is_instance (l->data) && e_cal_util_component_has_recurrences (l->data) && (priv->flags & E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES))
- list = g_list_prepend (list, l->data);
+ list = g_slist_prepend (list, l->data);
else {
gint pos;
ECalModelComponent *comp_data;
ECalComponentId *id;
ECalComponent *comp = e_cal_component_new ();
- ECal *client = e_cal_view_get_client (query);
+ ECalClient *client = e_cal_client_view_get_client (view);
if (!e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (l->data))) {
g_object_unref (comp);
@@ -2319,15 +2319,15 @@ process_modified (ECalView *query, GList *objects, ECalModel *model)
}
}
- e_cal_view_objects_added_cb (query, list, model);
- g_list_free (list);
+ client_view_objects_added_cb (view, list, model);
+ g_slist_free (list);
}
static void
-process_removed (ECalView *query, GList *ids, ECalModel *model)
+process_removed (ECalClientView *view, const GSList *ids, ECalModel *model)
{
ECalModelPrivate *priv;
- GList *l;
+ const GSList *l;
priv = model->priv;
@@ -2337,7 +2337,7 @@ process_removed (ECalView *query, GList *ids, ECalModel *model)
gint pos;
/* make sure we remove all objects with this UID */
- while ((comp_data = search_by_id_and_client (priv, e_cal_view_get_client (query), id))) {
+ while ((comp_data = search_by_id_and_client (priv, e_cal_client_view_get_client (view), id))) {
GSList *l = NULL;
pos = get_position_in_array (priv->objects, comp_data);
@@ -2387,19 +2387,19 @@ free_comp_id (gpointer id)
}
static void
-process_event (ECalView *query, GList *objects, ECalModel *model,
- void (*process_fn) (ECalView *query, GList *objects, ECalModel *model),
- gboolean *in, GList **save_list, gpointer (*copy_fn) (gpointer data), void (*free_fn)(gpointer data))
+process_event (ECalClientView *view, const GSList *objects, ECalModel *model,
+ void (*process_fn) (ECalClientView *view, const GSList *objects, ECalModel *model),
+ gboolean *in, GSList **save_list, gpointer (*copy_fn) (gpointer data), void (*free_fn)(gpointer data))
{
gboolean skip = FALSE;
- GList *l;
+ const GSList *l;
g_mutex_lock (model->priv->notify_lock);
if (*in) {
skip = TRUE;
for (l = objects; l; l = l->next) {
if (l->data)
- *save_list = g_list_append (*save_list, copy_fn (l->data));
+ *save_list = g_slist_append (*save_list, copy_fn (l->data));
}
} else {
*in = TRUE;
@@ -2411,23 +2411,23 @@ process_event (ECalView *query, GList *objects, ECalModel *model,
return;
/* do it */
- process_fn (query, objects, model);
+ process_fn (view, objects, model);
g_mutex_lock (model->priv->notify_lock);
while (*save_list) {
- GList *copy = *save_list;
+ GSList *copy = *save_list;
*save_list = NULL;
g_mutex_unlock (model->priv->notify_lock);
/* do it */
- process_fn (query, copy, model);
+ process_fn (view, copy, model);
for (l = copy; l; l = l->next) {
if (l->data) {
free_fn (l->data);
}
}
- g_list_free (copy);
+ g_slist_free (copy);
g_mutex_lock (model->priv->notify_lock);
}
@@ -2437,56 +2437,51 @@ process_event (ECalView *query, GList *objects, ECalModel *model,
}
static void
-e_cal_view_objects_added_cb (ECalView *query, GList *objects, ECalModel *model)
+client_view_objects_added_cb (ECalClientView *view, const GSList *objects, ECalModel *model)
{
- process_event (query, objects, model,
+ process_event (view, objects, model,
process_added, &model->priv->in_added, &model->priv->notify_added,
(gpointer (*)(gpointer)) icalcomponent_new_clone, (void (*)(gpointer)) icalcomponent_free);
}
static void
-e_cal_view_objects_modified_cb (ECalView *query, GList *objects, ECalModel *model)
+client_view_objects_modified_cb (ECalClientView *view, const GSList *objects, ECalModel *model)
{
- process_event (query, objects, model,
+ process_event (view, objects, model,
process_modified, &model->priv->in_modified, &model->priv->notify_modified,
(gpointer (*)(gpointer)) icalcomponent_new_clone, (void (*)(gpointer)) icalcomponent_free);
}
static void
-e_cal_view_objects_removed_cb (ECalView *query, GList *ids, ECalModel *model)
+client_view_objects_removed_cb (ECalClientView *view, const GSList *ids, ECalModel *model)
{
- process_event (query, ids, model,
+ process_event (view, ids, model,
process_removed, &model->priv->in_removed, &model->priv->notify_removed,
copy_comp_id, free_comp_id);
}
static void
-e_cal_view_progress_cb (ECalView *query, const gchar *message, gint percent, gpointer user_data)
+client_view_progress_cb (ECalClientView *view, gint percent, const gchar *message, gpointer user_data)
{
ECalModel *model = (ECalModel *) user_data;
- ECal *client = e_cal_view_get_client (query);
+ ECalClient *client = e_cal_client_view_get_client (view);
g_return_if_fail (E_IS_CAL_MODEL (model));
g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_PROGRESS], 0, message,
- percent, e_cal_get_source_type (client));
+ percent, e_cal_client_get_source_type (client));
}
static void
-e_cal_view_complete_cb (ECalView *query, ECalendarStatus status, const gchar *error_msg, gpointer user_data)
+client_view_complete_cb (ECalClientView *view, const GError *error, gpointer user_data)
{
ECalModel *model = (ECalModel *) user_data;
- ECal *client = e_cal_view_get_client (query);
+ ECalClient *client = e_cal_client_view_get_client (view);
g_return_if_fail (E_IS_CAL_MODEL (model));
- #ifndef E_CAL_DISABLE_DEPRECATED
- /* emit the signal on the model and let the view catch it to display */
- g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_DONE], 0, status,
- e_cal_get_source_type (client));
- #endif
- g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_COMPLETE], 0, status, error_msg,
- e_cal_get_source_type (client));
+ g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_COMPLETE], 0, error,
+ e_cal_client_get_source_type (client));
}
static void
@@ -2499,27 +2494,27 @@ update_e_cal_view_for_client (ECalModel *model, ECalModelClient *client_data)
priv = model->priv;
/* Skip if this client has not finished loading yet */
- if (e_cal_get_load_state (client_data->client) != E_CAL_LOAD_LOADED)
+ if (!e_client_is_opened (E_CLIENT (client_data->client)))
return;
- /* free the previous query, if any */
- if (client_data->query) {
- g_signal_handlers_disconnect_matched (client_data->query, G_SIGNAL_MATCH_DATA,
+ /* free the previous view, if any */
+ if (client_data->view) {
+ g_signal_handlers_disconnect_matched (client_data->view, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, model);
- g_object_unref (client_data->query);
- client_data->query = NULL;
+ g_object_unref (client_data->view);
+ client_data->view = NULL;
}
- /* prepare the query */
+ /* prepare the view */
g_return_if_fail (priv->full_sexp != NULL);
/* Don't create the new query if we won't use it */
if (!client_data->do_query)
return;
-try_again:
- if (!e_cal_get_query (client_data->client, priv->full_sexp, &client_data->query, &error)) {
- if (error->code == E_CALENDAR_STATUS_BUSY && tries != 10) {
+ try_again:
+ if (!e_cal_client_get_view_sync (client_data->client, priv->full_sexp, &client_data->view, NULL, &error)) {
+ if (g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_BUSY) && tries != 10) {
tries++;
/*TODO chose an optimal value */
g_usleep (500);
@@ -2527,18 +2522,24 @@ try_again:
goto try_again;
}
- g_warning (G_STRLOC ": Unable to get query, %s", error->message);
+ g_warning (G_STRLOC ": Unable to get query, %s", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
return;
}
- g_signal_connect (client_data->query, "objects_added", G_CALLBACK (e_cal_view_objects_added_cb), model);
- g_signal_connect (client_data->query, "objects_modified", G_CALLBACK (e_cal_view_objects_modified_cb), model);
- g_signal_connect (client_data->query, "objects_removed", G_CALLBACK (e_cal_view_objects_removed_cb), model);
- g_signal_connect (client_data->query, "view_progress", G_CALLBACK (e_cal_view_progress_cb), model);
- g_signal_connect (client_data->query, "view_complete", G_CALLBACK (e_cal_view_complete_cb), model);
+ g_signal_connect (client_data->view, "objects-added", G_CALLBACK (client_view_objects_added_cb), model);
+ g_signal_connect (client_data->view, "objects-modified", G_CALLBACK (client_view_objects_modified_cb), model);
+ g_signal_connect (client_data->view, "objects-removed", G_CALLBACK (client_view_objects_removed_cb), model);
+ g_signal_connect (client_data->view, "progress", G_CALLBACK (client_view_progress_cb), model);
+ g_signal_connect (client_data->view, "complete", G_CALLBACK (client_view_complete_cb), model);
- e_cal_view_start (client_data->query);
+ e_cal_client_view_start (client_data->view, &error);
+ if (error) {
+ g_debug ("%s: Failed to start view: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
}
void
@@ -2550,7 +2551,7 @@ e_cal_model_update_status_message (ECalModel *model, const gchar *message, gdoub
}
static void
-backend_died_cb (ECal *client, gpointer user_data)
+backend_died_cb (ECalClient *client, gpointer user_data)
{
ECalModel *model;
@@ -2559,35 +2560,20 @@ backend_died_cb (ECal *client, gpointer user_data)
e_cal_model_remove_client (model, client);
}
-static gboolean
-wait_open_cb (gpointer data)
-{
- ECal *client = data;
-
- g_return_val_if_fail (client != NULL, FALSE);
- g_return_val_if_fail (E_IS_CAL (client), FALSE);
-
- e_cal_open_async (client, FALSE);
-
- return FALSE;
-}
-
static void
-cal_opened_cb (ECal *client, const GError *error, gpointer user_data)
+client_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
{
+ ECalClient *client = E_CAL_CLIENT (source_object);
ECalModel *model = (ECalModel *) user_data;
ECalModelClient *client_data;
+ GError *error = NULL;
- if (g_error_matches (error, E_CALENDAR_ERROR, E_CALENDAR_STATUS_BUSY)) {
- g_timeout_add (250, wait_open_cb, client);
- return;
- }
-
- /* Stop listening for this calendar to be opened */
- g_signal_handlers_disconnect_matched (client, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0, NULL, cal_opened_cb, model);
+ e_client_open_finish (E_CLIENT (client), result, &error);
if (error) {
e_cal_model_remove_client (model, client);
+ g_debug ("%s: Failed to open '%s': %s", G_STRFUNC, e_client_get_uri (E_CLIENT (client)), error->message);
+ g_error_free (error);
e_cal_model_update_status_message (model, NULL, -1.0);
return;
}
@@ -2601,7 +2587,7 @@ cal_opened_cb (ECal *client, const GError *error, gpointer user_data)
}
static ECalModelClient *
-add_new_client (ECalModel *model, ECal *client, gboolean do_query)
+add_new_client (ECalModel *model, ECalClient *client, gboolean do_query)
{
ECalModelPrivate *priv;
ECalModelClient *client_data;
@@ -2626,7 +2612,7 @@ add_new_client (ECalModel *model, ECal *client, gboolean do_query)
client_data = g_new0 (ECalModelClient, 1);
client_data->client = g_object_ref (client);
- client_data->query = NULL;
+ client_data->view = NULL;
client_data->do_query = do_query;
priv->clients = g_list_append (priv->clients, client_data);
@@ -2635,19 +2621,18 @@ add_new_client (ECalModel *model, ECal *client, gboolean do_query)
G_CALLBACK (backend_died_cb), model);
load:
- if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) {
+ if (e_client_is_opened (E_CLIENT (client))) {
update_e_cal_view_for_client (model, client_data);
} else {
gchar *msg;
- msg = g_strdup_printf (_("Opening %s"), e_cal_get_uri (client));
+ msg = g_strdup_printf (_("Opening %s"), e_client_get_uri (E_CLIENT (client)));
e_cal_model_update_status_message (model, msg, -1.0);
g_free (msg);
- e_cal_set_default_timezone (client, e_cal_model_get_timezone (model), NULL);
+ e_cal_client_set_default_timezone (client, e_cal_model_get_timezone (model));
- g_signal_connect (client, "cal_opened_ex", G_CALLBACK (cal_opened_cb), model);
- e_cal_open_async (client, TRUE);
+ e_client_open (E_CLIENT (client), TRUE, NULL, client_opened_cb, model);
}
return client_data;
@@ -2657,10 +2642,10 @@ add_new_client (ECalModel *model, ECal *client, gboolean do_query)
* e_cal_model_add_client
*/
void
-e_cal_model_add_client (ECalModel *model, ECal *client)
+e_cal_model_add_client (ECalModel *model, ECalClient *client)
{
g_return_if_fail (E_IS_CAL_MODEL (model));
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
add_new_client (model, client, TRUE);
}
@@ -2701,8 +2686,8 @@ remove_client (ECalModel *model, ECalModelClient *client_data)
{
/* FIXME We might not want to disconnect the open signal for the default client */
g_signal_handlers_disconnect_matched (client_data->client, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, model);
- if (client_data->query)
- g_signal_handlers_disconnect_matched (client_data->query, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, model);
+ if (client_data->view)
+ g_signal_handlers_disconnect_matched (client_data->view, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, model);
remove_client_objects (model, client_data);
@@ -2722,8 +2707,8 @@ remove_client (ECalModel *model, ECalModelClient *client_data)
/* free all remaining memory */
g_object_unref (client_data->client);
- if (client_data->query)
- g_object_unref (client_data->query);
+ if (client_data->view)
+ g_object_unref (client_data->view);
g_free (client_data);
}
@@ -2731,12 +2716,12 @@ remove_client (ECalModel *model, ECalModelClient *client_data)
* e_cal_model_remove_client
*/
void
-e_cal_model_remove_client (ECalModel *model, ECal *client)
+e_cal_model_remove_client (ECalModel *model, ECalClient *client)
{
ECalModelClient *client_data;
g_return_if_fail (E_IS_CAL_MODEL (model));
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
client_data = find_client_data (model, client);
if (client_data)
@@ -2876,7 +2861,7 @@ redo_queries (ECalModel *model)
e_flag_free (data.eflag);
- /* update the query for all clients */
+ /* update the view for all clients */
for (l = priv->clients; l != NULL; l = l->next) {
ECalModelClient *client_data;
@@ -3002,7 +2987,7 @@ e_cal_model_create_component_with_defaults (ECalModel *model, gboolean all_day)
ECalModelPrivate *priv;
ECalComponent *comp;
icalcomponent *icalcomp;
- ECal *client;
+ ECalClient *client;
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
@@ -3302,7 +3287,7 @@ e_cal_model_generate_instances (ECalModel *model, time_t start, time_t end,
mdata.cb_data = cb_data;
if (comp_data->instance_start < end && comp_data->instance_end > start)
- e_cal_generate_instances_for_object (comp_data->client, comp_data->icalcomp, start, end, cb, &mdata);
+ e_cal_client_generate_instances_for_object (comp_data->client, comp_data->icalcomp, start, end, cb, &mdata);
}
}
@@ -3361,7 +3346,8 @@ e_cal_model_set_instance_times (ECalModelComponent *comp_data, const icaltimezon
icaltimezone *st_zone = NULL;
tzid = icalparameter_get_tzid (param);
- e_cal_get_timezone (comp_data->client, tzid, &st_zone, NULL);
+ if (tzid)
+ e_cal_client_get_timezone_sync (comp_data->client, tzid, &st_zone, NULL, NULL);
if (st_zone)
zone = st_zone;
@@ -3385,7 +3371,8 @@ e_cal_model_set_instance_times (ECalModelComponent *comp_data, const icaltimezon
icaltimezone *end_zone = NULL;
tzid = icalparameter_get_tzid (param);
- e_cal_get_timezone (comp_data->client, tzid, &end_zone, NULL);
+ if (tzid)
+ e_cal_client_get_timezone_sync (comp_data->client, tzid, &end_zone, NULL, NULL);
if (end_zone)
zone = end_zone;
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index db744d3d32..766fd6286f 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -28,7 +28,7 @@
#include <e-util/e-util-enums.h>
#include <table/e-table-model.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include "e-cell-date-edit-text.h"
/* Standard GObject macros */
@@ -105,7 +105,7 @@ typedef struct _ECalModelComponentPrivate ECalModelComponentPrivate;
struct _ECalModelComponent {
GObject object;
- ECal *client;
+ ECalClient *client;
icalcomponent *icalcomp;
time_t instance_start;
time_t instance_end;
@@ -160,16 +160,10 @@ struct _ECalModelClass {
void (*cal_view_progress) (ECalModel *model,
const gchar *message,
gint progress,
- ECalSourceType type);
- #ifndef E_CAL_DISABLE_DEPRECATED
- void (*cal_view_done) (ECalModel *model,
- ECalendarStatus status,
- ECalSourceType type);
- #endif
+ ECalClientSourceType type);
void (*cal_view_complete) (ECalModel *model,
- ECalendarStatus status,
- const gchar *error_msg,
- ECalSourceType type);
+ const GError *error,
+ ECalClientSourceType type);
void (*status_message) (ECalModel *model,
const gchar *message,
gdouble percent);
@@ -246,16 +240,16 @@ gint e_cal_model_get_work_day_start_minute
void e_cal_model_set_work_day_start_minute
(ECalModel *model,
gint work_day_start_minute);
-ECal * e_cal_model_get_default_client (ECalModel *model);
+ECalClient * e_cal_model_get_default_client (ECalModel *model);
void e_cal_model_set_default_client (ECalModel *model,
- ECal *client);
+ ECalClient *client);
GList * e_cal_model_get_client_list (ECalModel *model);
-ECal * e_cal_model_get_client_for_uri (ECalModel *model,
+ECalClient * e_cal_model_get_client_for_uri (ECalModel *model,
const gchar *uri);
void e_cal_model_add_client (ECalModel *model,
- ECal *client);
+ ECalClient *cal_client);
void e_cal_model_remove_client (ECalModel *model,
- ECal *client);
+ ECalClient *cal_client);
void e_cal_model_remove_all_clients (ECalModel *model);
void e_cal_model_get_time_range (ECalModel *model,
time_t *start,
diff --git a/calendar/gui/e-calendar-selector.c b/calendar/gui/e-calendar-selector.c
index 86d42aedb1..d31578cbd0 100644
--- a/calendar/gui/e-calendar-selector.c
+++ b/calendar/gui/e-calendar-selector.c
@@ -24,9 +24,9 @@
#include "e-calendar-selector.h"
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
+#include <libedataserverui/e-client-utils.h>
#include "e-util/e-selection.h"
-#include "common/authentication.h"
struct _ECalendarSelectorPrivate {
gint dummy_value;
@@ -35,7 +35,7 @@ struct _ECalendarSelectorPrivate {
static gpointer parent_class;
static gboolean
-calendar_selector_update_single_object (ECal *client,
+calendar_selector_update_single_object (ECalClient *client,
icalcomponent *icalcomp)
{
gchar *uid;
@@ -43,15 +43,23 @@ calendar_selector_update_single_object (ECal *client,
uid = (gchar *) icalcomponent_get_uid (icalcomp);
- if (e_cal_get_object (client, uid, NULL, &tmp_icalcomp, NULL))
- return e_cal_modify_object (
- client, icalcomp, CALOBJ_MOD_ALL, NULL);
+ if (e_cal_client_get_object_sync (client, uid, NULL, &tmp_icalcomp, NULL, NULL))
+ return e_cal_client_modify_object_sync (
+ client, icalcomp, CALOBJ_MOD_ALL, NULL, NULL);
- return e_cal_create_object (client, icalcomp, &uid, NULL);
+ uid = NULL;
+ if (!e_cal_client_create_object_sync (client, icalcomp, &uid, NULL, NULL))
+ return FALSE;
+
+ if (uid)
+ icalcomponent_set_uid (icalcomp, uid);
+ g_free (uid);
+
+ return TRUE;
}
static gboolean
-calendar_selector_update_objects (ECal *client,
+calendar_selector_update_objects (ECalClient *client,
icalcomponent *icalcomp)
{
icalcomponent *subcomp;
@@ -72,14 +80,19 @@ calendar_selector_update_objects (ECal *client,
kind = icalcomponent_isa (subcomp);
if (kind == ICAL_VTIMEZONE_COMPONENT) {
icaltimezone *zone;
+ GError *error = NULL;
zone = icaltimezone_new ();
icaltimezone_set_component (zone, subcomp);
- success = e_cal_add_timezone (client, zone, NULL);
+ success = e_cal_client_add_timezone_sync (client, zone, NULL, &error);
icaltimezone_free (zone, 1);
- if (!success)
+ if (!success) {
+ g_debug ("%s: Failed to ass timezone: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
return FALSE;
+ }
} else if (kind == ICAL_VTODO_COMPONENT ||
kind == ICAL_VEVENT_COMPONENT) {
success = calendar_selector_update_single_object (
@@ -95,6 +108,31 @@ calendar_selector_update_objects (ECal *client,
return TRUE;
}
+static void
+client_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ EClient *client = NULL;
+ icalcomponent *icalcomp = user_data;
+ GError *error = NULL;
+
+ g_return_if_fail (icalcomp != NULL);
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ if (client) {
+ calendar_selector_update_objects (E_CAL_CLIENT (client), icalcomp);
+ g_object_unref (client);
+ }
+
+ if (error) {
+ g_debug ("%s: Failed to open client: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+
+ icalcomponent_free (icalcomp);
+}
+
static gboolean
calendar_selector_data_dropped (ESourceSelector *selector,
GtkSelectionData *selection_data,
@@ -103,7 +141,6 @@ calendar_selector_data_dropped (ESourceSelector *selector,
guint info)
{
GtkTreePath *path = NULL;
- ECal *client;
icalcomponent *icalcomp;
const guchar *data;
gboolean success = FALSE;
@@ -123,17 +160,9 @@ calendar_selector_data_dropped (ESourceSelector *selector,
icalcomponent_set_uid (icalcomp, uid);
}
- client = e_auth_new_cal_from_source (
- destination, E_CAL_SOURCE_TYPE_EVENT);
-
- if (client != NULL) {
- if (e_cal_open (client, TRUE, NULL))
- calendar_selector_update_objects (client, icalcomp);
-
- g_object_unref (client);
- }
-
- icalcomponent_free (icalcomp);
+ e_client_utils_open_new (destination, E_CLIENT_SOURCE_TYPE_EVENTS, FALSE, NULL,
+ e_client_utils_authenticate_handler, NULL,
+ client_opened_cb, icalcomp);
success = TRUE;
diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c
index 34f6eae6b0..32c5301fe1 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -31,6 +31,7 @@
#include <glib/gstdio.h>
#include <gdk/gdkkeysyms.h>
#include <libedataserver/e-time-utils.h>
+#include <libedataserverui/e-client-utils.h>
#include <e-util/e-util.h>
#include <e-util/e-alert-dialog.h>
#include <e-util/e-extensible.h>
@@ -43,7 +44,6 @@
#include <misc/e-selectable.h>
#include <shell/e-shell.h>
-#include "common/authentication.h"
#include "comp-util.h"
#include "ea-calendar.h"
#include "e-cal-model-calendar.h"
@@ -132,7 +132,7 @@ calendar_view_add_retract_data (ECalComponent *comp,
static gboolean
calendar_view_check_for_retract (ECalComponent *comp,
- ECal *client)
+ ECalClient *client)
{
ECalComponentOrganizer organizer;
const gchar *strip;
@@ -142,14 +142,14 @@ calendar_view_check_for_retract (ECalComponent *comp,
if (!e_cal_component_has_attendees (comp))
return FALSE;
- if (!e_cal_get_save_schedules (client))
+ if (!e_cal_client_check_save_schedules (client))
return FALSE;
e_cal_component_get_organizer (comp, &organizer);
strip = itip_strip_mailto (organizer.value);
ret_val =
- e_cal_get_cal_address (client, &email, NULL) &&
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &email, NULL, NULL) &&
(g_ascii_strcasecmp (email, strip) == 0);
g_free (email);
@@ -177,7 +177,7 @@ calendar_view_delete_event (ECalendarView *cal_view,
vtype = e_cal_component_get_vtype (comp);
/*FIXME remove it once the we dont set the recurrence id for all the generated instances */
- if (!e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_RECURRENCES_NO_MASTER))
+ if (!e_cal_client_check_recurrences_no_master (event->comp_data->client))
e_cal_component_set_recurid (comp, NULL);
/*FIXME Retract should be moved to Groupwise features plugin */
@@ -187,15 +187,15 @@ calendar_view_delete_event (ECalendarView *cal_view,
delete = prompt_retract_dialog (comp, &retract_comment, GTK_WIDGET (cal_view), &retract);
if (retract) {
- GList *users = NULL;
+ GSList *users = NULL;
icalcomponent *icalcomp = NULL, *mod_comp = NULL;
calendar_view_add_retract_data (
comp, retract_comment, CALOBJ_MOD_ALL);
icalcomp = e_cal_component_get_icalcomponent (comp);
icalcomponent_set_method (icalcomp, ICAL_METHOD_CANCEL);
- if (!e_cal_send_objects (event->comp_data->client, icalcomp, &users,
- &mod_comp, &error)) {
+ if (!e_cal_client_send_objects_sync (event->comp_data->client, icalcomp, &users,
+ &mod_comp, NULL, &error)) {
delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
g_clear_error (&error);
error = NULL;
@@ -205,8 +205,8 @@ calendar_view_delete_event (ECalendarView *cal_view,
icalcomponent_free (mod_comp);
if (users) {
- g_list_foreach (users, (GFunc) g_free, NULL);
- g_list_free (users);
+ g_slist_foreach (users, (GFunc) g_free, NULL);
+ g_slist_free (users);
}
}
}
@@ -232,10 +232,10 @@ calendar_view_delete_event (ECalendarView *cal_view,
}
rid = e_cal_component_get_recurid_as_string (comp);
if (e_cal_util_component_is_instance (event->comp_data->icalcomp) || e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
- e_cal_remove_object_with_mod (event->comp_data->client, uid,
- rid, CALOBJ_MOD_ALL, &error);
+ e_cal_client_remove_object_sync (event->comp_data->client, uid,
+ rid, CALOBJ_MOD_ALL, NULL, &error);
else
- e_cal_remove_object (event->comp_data->client, uid, &error);
+ e_cal_client_remove_object_sync (event->comp_data->client, uid, NULL, CALOBJ_MOD_THIS, NULL, &error);
delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
g_clear_error (&error);
@@ -392,9 +392,8 @@ calendar_view_update_actions (ESelectable *selectable,
for (iter = list; iter != NULL; iter = iter->next) {
ECalendarViewEvent *event = iter->data;
- ECal *client;
+ ECalClient *client;
icalcomponent *icalcomp;
- gboolean read_only;
if (event == NULL || event->comp_data == NULL)
continue;
@@ -402,8 +401,7 @@ calendar_view_update_actions (ESelectable *selectable,
client = event->comp_data->client;
icalcomp = event->comp_data->icalcomp;
- e_cal_is_read_only (client, &read_only, NULL);
- sources_are_editable &= !read_only;
+ sources_are_editable = sources_are_editable && !e_client_is_readonly (E_CLIENT (client));
recurring |=
e_cal_util_component_is_instance (icalcomp) ||
@@ -488,17 +486,14 @@ calendar_view_cut_clipboard (ESelectable *selectable)
/* when cutting detached instances, only cut that instance */
rid = e_cal_component_get_recurid_as_string (comp);
- if (e_cal_get_object (event->comp_data->client, uid, rid, &icalcomp, NULL)) {
- e_cal_remove_object_with_mod (event->comp_data->client, uid,
- rid, CALOBJ_MOD_THIS,
- &error);
+ if (e_cal_client_get_object_sync (event->comp_data->client, uid, rid, &icalcomp, NULL, NULL)) {
+ e_cal_client_remove_object_sync (event->comp_data->client, uid, rid, CALOBJ_MOD_THIS, NULL, &error);
icalcomponent_free (icalcomp);
} else
- e_cal_remove_object_with_mod (event->comp_data->client, uid, NULL,
- CALOBJ_MOD_ALL, &error);
+ e_cal_client_remove_object_sync (event->comp_data->client, uid, NULL, CALOBJ_MOD_ALL, NULL, &error);
g_free (rid);
} else
- e_cal_remove_object (event->comp_data->client, uid, &error);
+ e_cal_client_remove_object_sync (event->comp_data->client, uid, NULL, CALOBJ_MOD_ALL, NULL, &error);
delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
g_clear_error (&error);
@@ -514,7 +509,7 @@ calendar_view_cut_clipboard (ESelectable *selectable)
}
static void
-add_related_timezones (icalcomponent *des_icalcomp, icalcomponent *src_icalcomp, ECal *client)
+add_related_timezones (icalcomponent *des_icalcomp, icalcomponent *src_icalcomp, ECalClient *client)
{
icalproperty_kind look_in[] = {
ICAL_DTSTART_PROPERTY,
@@ -540,7 +535,7 @@ add_related_timezones (icalcomponent *des_icalcomp, icalcomponent *src_icalcomp,
GError *error = NULL;
icaltimezone *zone = NULL;
- if (!e_cal_get_timezone (client, tzid, &zone, &error)) {
+ if (!e_cal_client_get_timezone_sync (client, tzid, &zone, NULL, &error)) {
g_warning ("%s: Cannot get timezone for '%s'. %s", G_STRFUNC, tzid, error ? error->message : "");
if (error)
g_error_free (error);
@@ -628,7 +623,7 @@ clipboard_get_calendar_data (ECalendarView *cal_view,
icalcomponent_kind kind;
time_t selected_time_start, selected_time_end;
icaltimezone *default_zone;
- ECal *client;
+ ECalClient *client;
gboolean in_top_canvas;
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
@@ -671,7 +666,7 @@ clipboard_get_calendar_data (ECalendarView *cal_view,
zone = icaltimezone_new ();
icaltimezone_set_component (zone, subcomp);
- if (!e_cal_add_timezone (client, zone, &error)) {
+ if (!e_cal_client_add_timezone_sync (client, zone, NULL, &error)) {
icalproperty *tzidprop = icalcomponent_get_first_property (subcomp, ICAL_TZID_PROPERTY);
g_warning ("%s: Add zone '%s' failed. %s", G_STRFUNC, tzidprop ? icalproperty_get_tzid (tzidprop) : "???", error ? error->message : "");
@@ -949,7 +944,7 @@ e_calendar_view_popup_event (ECalendarView *calendar_view,
}
void
-e_calendar_view_add_event (ECalendarView *cal_view, ECal *client, time_t dtstart,
+e_calendar_view_add_event (ECalendarView *cal_view, ECalClient *client, time_t dtstart,
icaltimezone *default_zone, icalcomponent *icalcomp, gboolean in_top_canvas)
{
ECalComponent *comp;
@@ -1049,7 +1044,7 @@ e_calendar_view_add_event (ECalendarView *cal_view, ECal *client, time_t dtstart
e_cal_component_commit_sequence (comp);
uid = NULL;
- if (e_cal_create_object (client, e_cal_component_get_icalcomponent (comp), &uid, &error)) {
+ if (e_cal_client_create_object_sync (client, e_cal_component_get_icalcomponent (comp), &uid, NULL, &error)) {
gboolean strip_alarms = TRUE;
if (uid) {
@@ -1284,15 +1279,15 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
delete = prompt_retract_dialog (comp, &retract_comment, GTK_WIDGET (cal_view), &retract);
if (retract) {
- GList *users = NULL;
+ GSList *users = NULL;
icalcomponent *icalcomp = NULL, *mod_comp = NULL;
calendar_view_add_retract_data (
comp, retract_comment, CALOBJ_MOD_THIS);
icalcomp = e_cal_component_get_icalcomponent (comp);
icalcomponent_set_method (icalcomp, ICAL_METHOD_CANCEL);
- if (!e_cal_send_objects (event->comp_data->client, icalcomp, &users,
- &mod_comp, &error)) {
+ if (!e_cal_client_send_objects_sync (event->comp_data->client, icalcomp, &users,
+ &mod_comp, NULL, &error)) {
delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
g_clear_error (&error);
error = NULL;
@@ -1300,8 +1295,8 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
if (mod_comp)
icalcomponent_free (mod_comp);
if (users) {
- g_list_foreach (users, (GFunc) g_free, NULL);
- g_list_free (users);
+ g_slist_foreach (users, (GFunc) g_free, NULL);
+ g_slist_free (users);
}
}
}
@@ -1323,7 +1318,7 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
if (dt.tzid) {
GError *error = NULL;
- e_cal_get_timezone (event->comp_data->client, dt.tzid, &zone, &error);
+ e_cal_client_get_timezone_sync (event->comp_data->client, dt.tzid, &zone, NULL, &error);
if (error) {
zone = e_calendar_view_get_timezone (cal_view);
g_clear_error (&error);
@@ -1339,7 +1334,7 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
if ((itip_organizer_is_user (comp, event->comp_data->client) || itip_sentby_is_user (comp, event->comp_data->client))
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client,
- comp, TRUE) && !e_cal_get_save_schedules (event->comp_data->client)) {
+ comp, TRUE) && !e_cal_client_check_save_schedules (event->comp_data->client)) {
if (!e_cal_component_is_instance (comp)) {
ECalComponentRange range;
@@ -1355,15 +1350,14 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
}
if (is_instance)
- e_cal_remove_object_with_mod (event->comp_data->client, uid, rid, CALOBJ_MOD_THIS, &error);
+ e_cal_client_remove_object_sync (event->comp_data->client, uid, rid, CALOBJ_MOD_THIS, NULL, &error);
else {
struct icaltimetype instance_rid;
instance_rid = icaltime_from_timet_with_zone (event->comp_data->instance_start,
TRUE, zone ? zone : icaltimezone_get_utc_timezone ());
e_cal_util_remove_instances (event->comp_data->icalcomp, instance_rid, CALOBJ_MOD_THIS);
- e_cal_modify_object (event->comp_data->client, event->comp_data->icalcomp, CALOBJ_MOD_THIS,
- &error);
+ e_cal_client_modify_object_sync (event->comp_data->client, event->comp_data->icalcomp, CALOBJ_MOD_THIS, NULL, &error);
}
delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
@@ -1414,10 +1408,9 @@ e_calendar_view_new_appointment_for (ECalendarView *cal_view,
ECalComponent *comp;
icalcomponent *icalcomp;
ECalComponentTransparency transparency;
- ECal *default_client = NULL;
+ ECalClient *default_client = NULL;
gpointer parent;
guint32 flags = 0;
- gboolean readonly = FALSE;
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
@@ -1428,15 +1421,15 @@ e_calendar_view_new_appointment_for (ECalendarView *cal_view,
default_client = e_cal_model_get_default_client (priv->model);
- if (!default_client || e_cal_get_load_state (default_client) != E_CAL_LOAD_LOADED) {
+ if (!default_client || !e_client_is_opened (E_CLIENT (default_client))) {
g_warning ("Default client not loaded \n");
return;
}
- if (e_cal_is_read_only (default_client, &readonly, NULL) && readonly) {
+ if (e_client_is_readonly (E_CLIENT (default_client))) {
GtkWidget *widget;
- widget = e_alert_dialog_new_for_args (parent, "calendar:prompt-read-only-cal", e_source_peek_name (e_cal_get_source (default_client)), NULL);
+ widget = e_alert_dialog_new_for_args (parent, "calendar:prompt-read-only-cal", e_source_peek_name (e_client_get_source (E_CLIENT (default_client))), NULL);
g_signal_connect ((GtkDialog *)widget, "response", G_CALLBACK (gtk_widget_destroy),
widget);
@@ -1588,7 +1581,7 @@ object_created_cb (CompEditor *ce, ECalendarView *cal_view)
}
CompEditor *
-e_calendar_view_open_event_with_flags (ECalendarView *cal_view, ECal *client, icalcomponent *icalcomp, guint32 flags)
+e_calendar_view_open_event_with_flags (ECalendarView *cal_view, ECalClient *client, icalcomponent *icalcomp, guint32 flags)
{
CompEditor *ce;
const gchar *uid;
@@ -1631,12 +1624,12 @@ e_calendar_view_open_event_with_flags (ECalendarView *cal_view, ECal *client, ic
* object.
*/
void
-e_calendar_view_edit_appointment (ECalendarView *cal_view, ECal *client, icalcomponent *icalcomp, EEditEventMode mode)
+e_calendar_view_edit_appointment (ECalendarView *cal_view, ECalClient *client, icalcomponent *icalcomp, EEditEventMode mode)
{
guint32 flags = 0;
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
g_return_if_fail (icalcomp != NULL);
if ((mode == EDIT_EVENT_AUTODETECT && icalcomponent_get_first_property (icalcomp, ICAL_ATTENDEE_PROPERTY) != NULL)
@@ -1654,15 +1647,17 @@ e_calendar_view_edit_appointment (ECalendarView *cal_view, ECal *client, icalcom
void
e_calendar_view_modify_and_send (ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
CalObjModType mod,
GtkWindow *toplevel,
gboolean new)
{
gboolean only_new_attendees = FALSE;
+ GError *error = NULL;
+
e_cal_component_commit_sequence (comp);
- if (e_cal_modify_object (client, e_cal_component_get_icalcomponent (comp), mod, NULL)) {
+ if (e_cal_client_modify_object_sync (client, e_cal_component_get_icalcomponent (comp), mod, NULL, &error)) {
gboolean strip_alarms = TRUE;
if ((itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) &&
@@ -1675,7 +1670,7 @@ e_calendar_view_modify_and_send (ECalComponent *comp,
const gchar *uid = NULL;
e_cal_component_get_uid (comp, &uid);
- if (e_cal_get_object (client, uid, NULL, &icalcomp, NULL) && icalcomp) {
+ if (e_cal_client_get_object_sync (client, uid, NULL, &icalcomp, NULL, NULL) && icalcomp) {
send_comp = e_cal_component_new ();
if (!e_cal_component_set_icalcomponent (send_comp, icalcomp)) {
icalcomponent_free (icalcomp);
@@ -1694,7 +1689,10 @@ e_calendar_view_modify_and_send (ECalComponent *comp,
g_object_unref (send_comp);
}
} else {
- g_message (G_STRLOC ": Could not update the object!");
+ g_message (G_STRLOC ": Could not update the object! %s", error ? error->message : "Unknown error");
+
+ if (error)
+ g_error_free (error);
}
}
@@ -1770,7 +1768,7 @@ e_calendar_view_move_tip (GtkWidget *widget, gint x, gint y)
* Free returned pointer with g_free.
**/
gchar *
-e_calendar_view_get_attendees_status_info (ECalComponent *comp, ECal *client)
+e_calendar_view_get_attendees_status_info (ECalComponent *comp, ECalClient *client)
{
struct _values {
icalparameter_partstat status;
@@ -1867,7 +1865,7 @@ e_calendar_view_get_tooltips (const ECalendarViewEventData *data)
GdkWindow *window;
ECalComponent *newcomp = e_cal_component_new ();
icaltimezone *zone, *default_zone;
- ECal *client = NULL;
+ ECalClient *client = NULL;
gboolean free_text = FALSE;
/* Delete any stray tooltip if left */
@@ -1961,7 +1959,7 @@ e_calendar_view_get_tooltips (const ECalendarViewEventData *data)
if (dtstart.tzid) {
zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (newcomp), dtstart.tzid);
if (!zone)
- e_cal_get_timezone (client, dtstart.tzid, &zone, NULL);
+ e_cal_client_get_timezone_sync (client, dtstart.tzid, &zone, NULL, NULL);
if (!zone)
zone = default_zone;
@@ -2067,7 +2065,7 @@ icalcomp_contains_category (icalcomponent *icalcomp, const gchar *category)
*/
const gchar *
-e_calendar_view_get_icalcomponent_summary (ECal *ecal, icalcomponent *icalcomp, gboolean *free_text)
+e_calendar_view_get_icalcomponent_summary (ECalClient *client, icalcomponent *icalcomp, gboolean *free_text)
{
const gchar *summary;
@@ -2081,11 +2079,11 @@ e_calendar_view_get_icalcomponent_summary (ECal *ecal, icalcomponent *icalcomp,
struct icaltimetype dtstart, dtnow;
icalcomponent *item_icalcomp = NULL;
- if (e_cal_get_object (ecal,
+ if (e_cal_client_get_object_sync (client,
icalcomponent_get_uid (icalcomp),
icalcomponent_get_relcalid (icalcomp),
&item_icalcomp,
- NULL)) {
+ NULL, NULL)) {
dtstart = icalcomponent_get_dtstart (item_icalcomp);
dtnow = icalcomponent_get_dtstart (icalcomp);
diff --git a/calendar/gui/e-calendar-view.h b/calendar/gui/e-calendar-view.h
index 88ebbeea66..decfdfffbf 100644
--- a/calendar/gui/e-calendar-view.h
+++ b/calendar/gui/e-calendar-view.h
@@ -24,7 +24,7 @@
#define E_CALENDAR_VIEW_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include "e-cal-model.h"
#include "gnome-cal.h"
#include "dialogs/comp-editor.h"
@@ -210,7 +210,7 @@ void e_calendar_view_delete_selected_occurrence
(ECalendarView *cal_view);
CompEditor * e_calendar_view_open_event_with_flags
(ECalendarView *cal_view,
- ECal *client,
+ ECalClient *client,
icalcomponent *icalcomp,
guint32 flags);
@@ -218,7 +218,7 @@ void e_calendar_view_popup_event (ECalendarView *cal_view,
GdkEventButton *event);
void e_calendar_view_add_event (ECalendarView *cal_view,
- ECal *client,
+ ECalClient *client,
time_t dtstart,
icaltimezone *default_zone,
icalcomponent *icalcomp,
@@ -236,12 +236,12 @@ void e_calendar_view_new_appointment_full
gboolean no_past_date);
void e_calendar_view_new_appointment (ECalendarView *cal_view);
void e_calendar_view_edit_appointment (ECalendarView *cal_view,
- ECal *client,
+ ECalClient *client,
icalcomponent *icalcomp,
EEditEventMode mode);
void e_calendar_view_open_event (ECalendarView *cal_view);
void e_calendar_view_modify_and_send (ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
CalObjModType mod,
GtkWindow *toplevel,
gboolean new);
@@ -253,12 +253,12 @@ void e_calendar_view_move_tip (GtkWidget *widget,
gint y);
const gchar * e_calendar_view_get_icalcomponent_summary
- (ECal *ecal,
+ (ECalClient *ecal,
icalcomponent *icalcomp,
gboolean *free_text);
gchar * e_calendar_view_get_attendees_status_info
(ECalComponent *comp,
- ECal *client);
+ ECalClient *client);
void e_calendar_view_emit_user_created
(ECalendarView *cal_view);
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 4aa87719fe..e7e44bab46 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -273,7 +273,7 @@ static ECalendarViewPosition e_day_view_convert_position_in_main_canvas (EDayVie
gint *row_return,
gint *event_num_return);
static gboolean e_day_view_find_event_from_uid (EDayView *day_view,
- ECal *client,
+ ECalClient *client,
const gchar *uid,
const gchar *rid,
gint *day_return,
@@ -2137,7 +2137,7 @@ e_day_view_update_event_label (EDayView *day_view,
"text", text,
NULL);
- if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
+ if (e_client_check_capability (E_CLIENT (event->comp_data->client), CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
set_text_as_bold (event);
@@ -2172,7 +2172,7 @@ e_day_view_update_long_event_label (EDayView *day_view,
if (free_text)
g_free ((gchar *) summary);
- if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
+ if (e_client_check_capability (E_CLIENT (event->comp_data->client), CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
set_text_as_bold (event);
}
@@ -2225,7 +2225,7 @@ e_day_view_find_event_from_item (EDayView *day_view,
see if any events with the uid exist. */
static gboolean
e_day_view_find_event_from_uid (EDayView *day_view,
- ECal *client,
+ ECalClient *client,
const gchar *uid,
const gchar *rid,
gint *day_return,
@@ -3475,9 +3475,7 @@ e_day_view_on_event_click (EDayView *day_view,
!e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
&& (pos == E_CALENDAR_VIEW_POS_TOP_EDGE
|| pos == E_CALENDAR_VIEW_POS_BOTTOM_EDGE)) {
- gboolean read_only = FALSE;
-
- if (event && (!event->is_editable || (e_cal_is_read_only (event->comp_data->client, &read_only, NULL) && read_only))) {
+ if (event && (!event->is_editable || e_client_is_readonly (E_CLIENT (event->comp_data->client)))) {
return;
}
@@ -3936,11 +3934,10 @@ e_day_view_on_main_canvas_motion (GtkWidget *widget,
gtk_target_list_unref (target_list);
}
} else {
- gboolean read_only = FALSE;
cursor = day_view->normal_cursor;
/* Check if the event is editable and client is not readonly while changing the cursor */
- if (event && event->is_editable && is_comp_data_valid (event) && e_cal_is_read_only (event->comp_data->client, &read_only, NULL) && !read_only) {
+ if (event && event->is_editable && is_comp_data_valid (event) && !e_client_is_readonly (E_CLIENT (event->comp_data->client))) {
switch (pos) {
case E_CALENDAR_VIEW_POS_LEFT_EDGE:
@@ -4119,7 +4116,6 @@ e_day_view_update_resize (EDayView *day_view,
EDayViewEvent *event;
gint day, event_num;
gboolean need_reshape = FALSE;
- gboolean read_only = FALSE;
#if 0
g_print ("Updating resize Row:%i\n", row);
@@ -4137,7 +4133,7 @@ e_day_view_update_resize (EDayView *day_view,
event = &g_array_index (day_view->events[day], EDayViewEvent,
event_num);
- if (event && (!event->is_editable || !is_comp_data_valid (event) || (e_cal_is_read_only (event->comp_data->client, &read_only, NULL) && read_only))) {
+ if (event && (!event->is_editable || !is_comp_data_valid (event) || e_client_is_readonly (E_CLIENT (event->comp_data->client)))) {
return;
}
@@ -4175,7 +4171,7 @@ e_day_view_finish_long_event_resize (EDayView *day_view)
ECalComponentDateTime date;
struct icaltimetype itt;
time_t dt;
- ECal *client;
+ ECalClient *client;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
gint is_date;
@@ -4290,7 +4286,7 @@ e_day_view_finish_resize (EDayView *day_view)
ECalComponentDateTime date;
struct icaltimetype itt;
time_t dt;
- ECal *client;
+ ECalClient *client;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
@@ -5062,7 +5058,7 @@ static gboolean
e_day_view_add_new_event_in_selected_range (EDayView *day_view, GdkEventKey *key_event)
{
icalcomponent *icalcomp;
- ECal *ecal;
+ ECalClient *client;
ECalModel *model;
ECalComponent *comp;
gint day, event_num;
@@ -5071,12 +5067,11 @@ e_day_view_add_new_event_in_selected_range (EDayView *day_view, GdkEventKey *key
struct icaltimetype start_tt, end_tt;
const gchar *uid;
AddEventData add_event_data;
- gboolean read_only = TRUE;
/* Check if the client is read only */
model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
- ecal = e_cal_model_get_default_client (model);
- if (!e_cal_is_read_only (ecal, &read_only, NULL) || read_only)
+ client = e_cal_model_get_default_client (model);
+ if (e_client_is_readonly (E_CLIENT (client)))
return FALSE;
icalcomp = e_cal_model_create_component_with_defaults (model, day_view->selection_in_top_canvas);
@@ -5128,7 +5123,7 @@ e_day_view_add_new_event_in_selected_range (EDayView *day_view, GdkEventKey *key
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->main_canvas);
- if (!e_day_view_find_event_from_uid (day_view, ecal, uid, NULL, &day, &event_num)) {
+ if (!e_day_view_find_event_from_uid (day_view, client, uid, NULL, &day, &event_num)) {
g_warning ("Couldn't find event to start editing.\n");
g_object_unref (comp);
return FALSE;
@@ -5980,7 +5975,6 @@ e_day_view_start_editing_event (EDayView *day_view,
EDayViewEvent *event;
ETextEventProcessor *event_processor = NULL;
ETextEventProcessorCommand command;
- gboolean read_only;
#if 0
g_print ("In e_day_view_start_editing_event\n");
@@ -6008,7 +6002,7 @@ e_day_view_start_editing_event (EDayView *day_view,
if (!is_comp_data_valid (event))
return;
- if (!e_cal_is_read_only (event->comp_data->client, &read_only, NULL) || read_only)
+ if (e_client_is_readonly (E_CLIENT (event->comp_data->client)))
return;
/* If the event is not shown, don't try to edit it. */
@@ -6416,7 +6410,7 @@ e_day_view_change_event_time (EDayView *day_view, time_t start_dt, time_t end_dt
ECalComponent *comp;
ECalComponentDateTime date;
struct icaltimetype itt;
- ECal *client;
+ ECalClient *client;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
@@ -6643,7 +6637,7 @@ e_day_view_on_editing_stopped (EDayView *day_view,
gchar *text = NULL;
ECalComponentText summary;
ECalComponent *comp;
- ECal *client;
+ ECalClient *client;
gboolean on_server;
/* Note: the item we are passed here isn't reliable, so we just stop
@@ -6728,11 +6722,21 @@ e_day_view_on_editing_stopped (EDayView *day_view,
e_cal_component_commit_sequence (comp);
if (!on_server) {
- if (!e_cal_create_object (client, icalcomp, NULL, NULL))
- g_message (G_STRLOC ": Could not create the object!");
- else
+ gchar *uid = NULL;
+ GError *error = NULL;
+
+ if (!e_cal_client_create_object_sync (client, icalcomp, &uid, NULL, &error)) {
+ uid = NULL;
+ g_debug (G_STRLOC ": Could not create the object! %s", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
+ } else {
+ icalcomponent_set_uid (icalcomp, uid);
e_calendar_view_emit_user_created (
E_CALENDAR_VIEW (day_view));
+ }
+
+ g_free (uid);
/* we remove the object since we either got the update from the server or failed */
e_day_view_remove_event_cb (day_view, day, event_num, NULL);
@@ -7801,7 +7805,7 @@ e_day_view_on_drag_data_get (GtkWidget *widget,
comp_str = icalcomponent_as_ical_string_r (vcal);
if (comp_str) {
- ESource *source = e_cal_get_source (event->comp_data->client);
+ ESource *source = e_client_get_source (E_CLIENT (event->comp_data->client));
const gchar *source_uid = e_source_peek_uid (source);
GdkAtom target;
gchar *tmp;
@@ -7841,7 +7845,7 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
struct icaltimetype itt;
time_t dt;
gboolean all_day_event;
- ECal *client;
+ ECalClient *client;
ECalModel *model;
ECalendarView *cal_view;
gboolean drag_from_same_window;
@@ -8043,7 +8047,7 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
zone = icaltimezone_new ();
icaltimezone_set_component (zone, subcomp);
- e_cal_add_timezone (client, zone, NULL);
+ e_cal_client_add_timezone_sync (client, zone, NULL, NULL);
icaltimezone_free (zone, 1);
}
@@ -8087,7 +8091,7 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget,
ECalComponentDateTime date;
struct icaltimetype itt;
time_t dt;
- ECal *client;
+ ECalClient *client;
gboolean drag_from_same_window;
const guchar *data;
gint format, length;
@@ -8270,7 +8274,7 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget,
zone = icaltimezone_new ();
icaltimezone_set_component (zone, subcomp);
- e_cal_add_timezone (client, zone, NULL);
+ e_cal_client_add_timezone_sync (client, zone, NULL, NULL);
icaltimezone_free (zone, 1);
}
diff --git a/calendar/gui/e-day-view.h b/calendar/gui/e-day-view.h
index 8728b24283..ae1cf79d56 100644
--- a/calendar/gui/e-day-view.h
+++ b/calendar/gui/e-day-view.h
@@ -235,9 +235,6 @@ struct _EDayView {
/* label showing week number in upper-left corner */
GtkWidget *week_number_label;
- /* S-expression for query and the query object */
- ECalView *query;
-
/* The start and end of the days shown. */
time_t lower;
time_t upper;
diff --git a/calendar/gui/e-meeting-list-view.c b/calendar/gui/e-meeting-list-view.c
index c702bdfd77..11f47e6030 100644
--- a/calendar/gui/e-meeting-list-view.c
+++ b/calendar/gui/e-meeting-list-view.c
@@ -28,7 +28,7 @@
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
-#include <libebook/e-book.h>
+#include <libebook/e-book-client.h>
#include <libebook/e-vcard.h>
#include <libecal/e-cal-component.h>
#include <libecal/e-cal-util.h>
@@ -762,54 +762,54 @@ process_section (EMeetingListView *view, GList *destinations, icalparameter_role
/* check if the contact is contact list which is not expanded yet */
/* we expand it by getting the list again from the server forming the query */
if (contact && e_contact_get (contact , E_CONTACT_IS_LIST)) {
- EBook *book = NULL;
+ EBookClient *book_client = NULL;
ENameSelectorDialog *dialog;
ENameSelectorModel *model;
EContactStore *c_store;
- GList *books, *l;
+ GSList *clients, *l;
gchar *uri = e_contact_get (contact, E_CONTACT_BOOK_URI);
dialog = e_name_selector_peek_dialog (view->priv->name_selector);
model = e_name_selector_dialog_peek_model (dialog);
c_store = e_name_selector_model_peek_contact_store (model);
- books = e_contact_store_get_books (c_store);
+ clients = e_contact_store_get_clients (c_store);
- for (l = books; l; l = l->next) {
- EBook *b = l->data;
- if (g_str_equal (uri, e_book_get_uri (b))) {
- book = b;
+ for (l = clients; l; l = l->next) {
+ EBookClient *b = l->data;
+ if (g_str_equal (uri, e_client_get_uri (E_CLIENT (b)))) {
+ book_client = b;
break;
}
}
- if (book) {
- GList *contacts;
+ if (book_client) {
+ GSList *contacts;
EContact *n_con = NULL;
- gchar *qu;
- EBookQuery *query;
+ gchar *query;
- qu = g_strdup_printf ("(is \"full_name\" \"%s\")",
+ query = g_strdup_printf ("(is \"full_name\" \"%s\")",
(gchar *) e_contact_get (contact, E_CONTACT_FULL_NAME));
- query = e_book_query_from_string (qu);
- if (!e_book_get_contacts (book, query, &contacts, NULL)) {
+ if (!e_book_client_get_contacts_sync (book_client, query, &contacts, NULL, NULL)) {
g_warning ("Could not get contact from the book \n");
+ g_free (query);
+ g_slist_free (clients);
return;
} else {
des = e_destination_new ();
n_con = contacts->data;
e_destination_set_contact (des, n_con, 0);
+ e_destination_set_client (des, book_client);
list_dests = e_destination_list_get_dests (des);
- g_list_foreach (contacts, (GFunc) g_object_unref, NULL);
- g_list_free (contacts);
+ g_slist_foreach (contacts, (GFunc) g_object_unref, NULL);
+ g_slist_free (contacts);
}
- e_book_query_unref (query);
- g_free (qu);
+ g_free (query);
}
- g_list_free (books);
+ g_slist_free (clients);
} else {
card_dest.next = NULL;
card_dest.prev = NULL;
@@ -822,31 +822,10 @@ process_section (EMeetingListView *view, GList *destinations, icalparameter_role
EDestination *dest = l->data;
EContact *contact;
const gchar *name, *attendee = NULL;
- gchar *attr = NULL, *fburi = NULL;
+ gchar *fburi = NULL;
name = e_destination_get_name (dest);
-
- /* Get the field as attendee from the backend */
- if (e_cal_get_ldap_attribute (e_meeting_store_get_client (priv->store),
- &attr, NULL)) {
- /* FIXME this should be more general */
- if (!g_ascii_strcasecmp (attr, "icscalendar")) {
-
- /* FIXME: this does not work, have to use first
- e_destination_use_contact () */
- contact = e_destination_get_contact (dest);
- if (contact) {
- attendee = e_contact_get (contact, E_CONTACT_FREEBUSY_URL);
- if (!attendee)
- attendee = e_contact_get (contact, E_CONTACT_CALENDAR_URI);
- }
- }
- }
-
- /* If we couldn't get the attendee prior, get the email address as the default */
- if (attendee == NULL || *attendee == '\0') {
- attendee = e_destination_get_email (dest);
- }
+ attendee = e_destination_get_email (dest);
if (attendee == NULL || *attendee == '\0')
continue;
diff --git a/calendar/gui/e-meeting-store.c b/calendar/gui/e-meeting-store.c
index e18c259f65..ca4df0b854 100644
--- a/calendar/gui/e-meeting-store.c
+++ b/calendar/gui/e-meeting-store.c
@@ -49,7 +49,7 @@ struct _EMeetingStorePrivate {
GPtrArray *attendees;
gint stamp;
- ECal *client;
+ ECalClient *client;
icaltimezone *zone;
gint default_reminder_interval;
@@ -756,9 +756,9 @@ e_meeting_store_class_init (EMeetingStoreClass *class)
PROP_CLIENT,
g_param_spec_object (
"client",
- "Client",
+ "ECalClient",
NULL,
- E_TYPE_CAL,
+ E_TYPE_CAL_CLIENT,
G_PARAM_READWRITE));
g_object_class_install_property (
@@ -840,7 +840,7 @@ e_meeting_store_new (void)
return g_object_new (E_TYPE_MEETING_STORE, NULL);
}
-ECal *
+ECalClient *
e_meeting_store_get_client (EMeetingStore *store)
{
g_return_val_if_fail (E_IS_MEETING_STORE (store), NULL);
@@ -850,12 +850,12 @@ e_meeting_store_get_client (EMeetingStore *store)
void
e_meeting_store_set_client (EMeetingStore *store,
- ECal *client)
+ ECalClient *client)
{
g_return_if_fail (E_IS_MEETING_STORE (store));
if (client != NULL) {
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
g_object_ref (client);
}
@@ -1454,11 +1454,11 @@ replace_string (gchar *string, const gchar *from_value, gchar *to_value)
static void start_async_read (const gchar *uri, gpointer data);
typedef struct {
- ECal *client;
+ ECalClient *client;
time_t startt;
time_t endt;
- GList *users;
- GList *fb_data;
+ GSList *users;
+ GSList *fb_data;
gchar *fb_uri;
gchar *email;
EMeetingAttendee *attendee;
@@ -1469,6 +1469,21 @@ typedef struct {
#define USER_SUB "%u"
#define DOMAIN_SUB "%d"
+static void
+client_free_busy_data_cb (ECalClient *client, const GSList *ecalcomps, FreeBusyAsyncData *fbd)
+{
+ const GSList *iter;
+
+ g_return_if_fail (fbd != NULL);
+
+ for (iter = ecalcomps; iter != NULL; iter = iter->next) {
+ ECalComponent *comp = iter->data;
+
+ if (comp)
+ fbd->fb_data = g_slist_prepend (fbd->fb_data, g_object_ref (comp));
+ }
+}
+
static gboolean
freebusy_async (gpointer data)
{
@@ -1480,19 +1495,20 @@ freebusy_async (gpointer data)
EMeetingStorePrivate *priv = fbd->store->priv;
if (fbd->client) {
+ guint sigid;
/* FIXME This a workaround for getting all the free busy
* information for the users. We should be able to
* get free busy asynchronously. */
g_static_mutex_lock (&mutex);
priv->num_queries++;
- e_cal_get_free_busy (
- fbd->client, fbd->users, fbd->startt,
- fbd->endt, &(fbd->fb_data), NULL);
+ sigid = g_signal_connect (fbd->client, "free-busy-data", G_CALLBACK (client_free_busy_data_cb), fbd);
+ e_cal_client_get_free_busy_sync (fbd->client, fbd->startt, fbd->endt, fbd->users, NULL, NULL);
+ g_signal_handler_disconnect (fbd->client, sigid);
priv->num_queries--;
g_static_mutex_unlock (&mutex);
- g_list_foreach (fbd->users, (GFunc) g_free, NULL);
- g_list_free (fbd->users);
+ g_slist_foreach (fbd->users, (GFunc) g_free, NULL);
+ g_slist_free (fbd->users);
if (fbd->fb_data != NULL) {
ECalComponent *comp = fbd->fb_data->data;
@@ -1623,7 +1639,7 @@ refresh_busy_periods (gpointer data)
fbd->endt = icaltime_as_timet_with_zone (itt, priv->zone);
fbd->qdata = qdata;
- fbd->users = g_list_append (fbd->users, g_strdup (fbd->email));
+ fbd->users = g_slist_append (fbd->users, g_strdup (fbd->email));
}
@@ -1634,8 +1650,8 @@ refresh_busy_periods (gpointer data)
thread = g_thread_create ((GThreadFunc) freebusy_async, fbd, FALSE, &error);
if (!thread) {
/* do clean up stuff here */
- g_list_foreach (fbd->users, (GFunc) g_free, NULL);
- g_list_free (fbd->users);
+ g_slist_foreach (fbd->users, (GFunc) g_free, NULL);
+ g_slist_free (fbd->users);
g_free (fbd->email);
priv->refresh_idle_id = 0;
diff --git a/calendar/gui/e-meeting-store.h b/calendar/gui/e-meeting-store.h
index 2c863ef506..ec98bae554 100644
--- a/calendar/gui/e-meeting-store.h
+++ b/calendar/gui/e-meeting-store.h
@@ -24,7 +24,7 @@
#define E_MEETING_STORE_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <e-util/e-util-enums.h>
#include "e-meeting-attendee.h"
@@ -86,9 +86,9 @@ void e_meeting_store_set_value (EMeetingStore *meeting_store,
gint row,
gint col,
const gchar *val);
-ECal * e_meeting_store_get_client (EMeetingStore *meeting_store);
+ECalClient * e_meeting_store_get_client (EMeetingStore *meeting_store);
void e_meeting_store_set_client (EMeetingStore *meeting_store,
- ECal *client);
+ ECalClient *client);
gint e_meeting_store_get_default_reminder_interval
(EMeetingStore *meeting_store);
void e_meeting_store_set_default_reminder_interval
diff --git a/calendar/gui/e-memo-list-selector.c b/calendar/gui/e-memo-list-selector.c
index bb41412417..abc4bf9bf3 100644
--- a/calendar/gui/e-memo-list-selector.c
+++ b/calendar/gui/e-memo-list-selector.c
@@ -25,9 +25,9 @@
#include "e-memo-list-selector.h"
#include <string.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
+#include <libedataserverui/e-client-utils.h>
#include "e-util/e-selection.h"
-#include "calendar/common/authentication.h"
#include "calendar/gui/comp-util.h"
struct _EMemoListSelectorPrivate {
@@ -37,23 +37,31 @@ struct _EMemoListSelectorPrivate {
static gpointer parent_class;
static gboolean
-memo_list_selector_update_single_object (ECal *client,
+memo_list_selector_update_single_object (ECalClient *client,
icalcomponent *icalcomp)
{
- gchar *uid;
+ gchar *uid = NULL;
icalcomponent *tmp_icalcomp;
uid = (gchar *) icalcomponent_get_uid (icalcomp);
- if (e_cal_get_object (client, uid, NULL, &tmp_icalcomp, NULL))
- return e_cal_modify_object (
- client, icalcomp, CALOBJ_MOD_ALL, NULL);
+ if (e_cal_client_get_object_sync (client, uid, NULL, &tmp_icalcomp, NULL, NULL))
+ return e_cal_client_modify_object_sync (
+ client, icalcomp, CALOBJ_MOD_ALL, NULL, NULL);
- return e_cal_create_object (client, icalcomp, &uid, NULL);
+ if (!e_cal_client_create_object_sync (client, icalcomp, &uid, NULL, NULL))
+ return FALSE;
+
+ if (uid)
+ icalcomponent_set_uid (icalcomp, uid);
+
+ g_free (uid);
+
+ return TRUE;
}
static gboolean
-memo_list_selector_update_objects (ECal *client,
+memo_list_selector_update_objects (ECalClient *client,
icalcomponent *icalcomp)
{
icalcomponent *subcomp;
@@ -74,14 +82,19 @@ memo_list_selector_update_objects (ECal *client,
kind = icalcomponent_isa (subcomp);
if (kind == ICAL_VTIMEZONE_COMPONENT) {
icaltimezone *zone;
+ GError *error = NULL;
zone = icaltimezone_new ();
icaltimezone_set_component (zone, subcomp);
- success = e_cal_add_timezone (client, zone, NULL);
+ success = e_cal_client_add_timezone_sync (client, zone, NULL, &error);
icaltimezone_free (zone, 1);
- if (!success)
+ if (!success) {
+ g_debug ("%s: Failed to add timezone: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
return FALSE;
+ }
} else if (kind == ICAL_VJOURNAL_COMPONENT) {
success = memo_list_selector_update_single_object (
client, subcomp);
@@ -96,9 +109,36 @@ memo_list_selector_update_objects (ECal *client,
return TRUE;
}
+static void
+client_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ gchar *uid = user_data;
+ EClient *client = NULL;
+ GError *error = NULL;
+
+ g_return_if_fail (uid != NULL);
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ if (error) {
+ g_debug ("%s: Failed to open memo list: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+
+ if (client) {
+ if (!e_client_is_readonly (client))
+ e_cal_client_remove_object_sync (E_CAL_CLIENT (client), uid, NULL, CALOBJ_MOD_THIS, NULL, NULL);
+
+ g_object_unref (client);
+ }
+
+ g_free (uid);
+}
+
static gboolean
memo_list_selector_process_data (ESourceSelector *selector,
- ECal *client,
+ ECalClient *client,
const gchar *source_uid,
icalcomponent *icalcomp,
GdkDragAction action)
@@ -109,7 +149,6 @@ memo_list_selector_process_data (ESourceSelector *selector,
const gchar *uid;
gchar *old_uid = NULL;
gboolean success = FALSE;
- gboolean read_only = TRUE;
GError *error = NULL;
/* FIXME Deal with GDK_ACTION_ASK. */
@@ -123,13 +162,13 @@ memo_list_selector_process_data (ESourceSelector *selector,
if (old_uid == NULL)
old_uid = g_strdup (uid);
- if (e_cal_get_object (client, uid, NULL, &tmp_icalcomp, &error)) {
+ if (e_cal_client_get_object_sync (client, uid, NULL, &tmp_icalcomp, NULL, &error)) {
icalcomponent_free (tmp_icalcomp);
success = TRUE;
goto exit;
}
- if (error != NULL && error->code != E_CALENDAR_STATUS_OBJECT_NOT_FOUND) {
+ if (error != NULL && !g_error_matches (error, E_CAL_CLIENT_ERROR, E_CAL_CLIENT_ERROR_OBJECT_NOT_FOUND)) {
g_message (
"Failed to search the object in destination "
"task list: %s", error->message);
@@ -137,6 +176,9 @@ memo_list_selector_process_data (ESourceSelector *selector,
goto exit;
}
+ if (error)
+ g_error_free (error);
+
success = memo_list_selector_update_objects (client, icalcomp);
if (!success || action != GDK_ACTION_MOVE)
@@ -148,74 +190,93 @@ memo_list_selector_process_data (ESourceSelector *selector,
if (!E_IS_SOURCE (source) || e_source_get_readonly (source))
goto exit;
- client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_JOURNAL);
- if (client == NULL) {
- g_message ("Cannot create source client to remove old memo");
- goto exit;
- }
-
- e_cal_is_read_only (client, &read_only, NULL);
- if (!read_only && e_cal_open (client, TRUE, NULL))
- e_cal_remove_object (client, old_uid, NULL);
- else if (!read_only)
- g_message ("Cannot open source client to remove old memo");
+ e_client_utils_open_new (source, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
+ e_client_utils_authenticate_handler, NULL,
+ client_opened_cb, g_strdup (old_uid));
- g_object_unref (client);
-
-exit:
+ exit:
g_free (old_uid);
return success;
}
-static gboolean
-memo_list_selector_data_dropped (ESourceSelector *selector,
- GtkSelectionData *selection_data,
- ESource *destination,
- GdkDragAction action,
- guint info)
+struct DropData
{
- ECal *client;
- GSList *list, *iter;
- gboolean success = FALSE;
+ ESourceSelector *selector;
+ GdkDragAction action;
+ GSList *list;
+};
- client = e_auth_new_cal_from_source (
- destination, E_CAL_SOURCE_TYPE_JOURNAL);
+static void
+client_opened_for_drop_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ struct DropData *dd = user_data;
+ EClient *client = NULL;
+ GError *error = NULL;
- if (client == NULL || !e_cal_open (client, TRUE, NULL))
- goto exit;
+ g_return_if_fail (dd != NULL);
- list = cal_comp_selection_get_string_list (selection_data);
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
- for (iter = list; iter != NULL; iter = iter->next) {
- gchar *source_uid = iter->data;
- icalcomponent *icalcomp;
- gchar *component_string;
+ if (error) {
+ g_debug ("%s: Failed to open memo list: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
- /* Each string is "source_uid\ncomponent_string". */
- component_string = strchr (source_uid, '\n');
- if (component_string == NULL)
- continue;
+ if (client) {
+ ECalClient *cal_client = E_CAL_CLIENT (client);
+ GSList *iter;
- *component_string++ = '\0';
- icalcomp = icalparser_parse_string (component_string);
- if (icalcomp == NULL)
- continue;
+ for (iter = dd->list; iter != NULL; iter = iter->next) {
+ gchar *source_uid = iter->data;
+ icalcomponent *icalcomp;
+ gchar *component_string;
- success = memo_list_selector_process_data (
- selector, client, source_uid, icalcomp, action);
+ /* Each string is "source_uid\ncomponent_string". */
+ component_string = strchr (source_uid, '\n');
+ if (component_string == NULL)
+ continue;
- icalcomponent_free (icalcomp);
- }
+ *component_string++ = '\0';
+ icalcomp = icalparser_parse_string (component_string);
+ if (icalcomp == NULL)
+ continue;
+
+ memo_list_selector_process_data (
+ dd->selector, cal_client, source_uid, icalcomp, dd->action);
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
+ icalcomponent_free (icalcomp);
+ }
-exit:
- if (client != NULL)
g_object_unref (client);
+ }
- return success;
+ g_slist_foreach (dd->list, (GFunc) g_free, NULL);
+ g_slist_free (dd->list);
+ g_object_unref (dd->selector);
+ g_free (dd);
+}
+
+static gboolean
+memo_list_selector_data_dropped (ESourceSelector *selector,
+ GtkSelectionData *selection_data,
+ ESource *destination,
+ GdkDragAction action,
+ guint info)
+{
+ struct DropData *dd;
+
+ dd = g_new0 (struct DropData, 1);
+ dd->selector = g_object_ref (selector);
+ dd->action = action;
+ dd->list = cal_comp_selection_get_string_list (selection_data);
+
+ e_client_utils_open_new (destination, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
+ e_client_utils_authenticate_handler, NULL,
+ client_opened_for_drop_cb, dd);
+
+ return TRUE;
}
static void
diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c
index ab0ce1253d..e6396427da 100644
--- a/calendar/gui/e-memo-table.c
+++ b/calendar/gui/e-memo-table.c
@@ -155,7 +155,7 @@ static void
memo_table_model_cal_view_progress_cb (EMemoTable *memo_table,
const gchar *message,
gint progress,
- ECalSourceType type)
+ ECalClientSourceType type)
{
gdouble percent = (gdouble) progress;
@@ -164,9 +164,8 @@ memo_table_model_cal_view_progress_cb (EMemoTable *memo_table,
static void
memo_table_model_cal_view_complete_cb ( EMemoTable *memo_table,
- ECalendarStatus status,
- const gchar *error_msg,
- ECalSourceType type)
+ const GError *error,
+ ECalClientSourceType type)
{
memo_table_emit_status_message (memo_table, NULL, -1.0);
}
@@ -187,8 +186,8 @@ delete_selected_components (EMemoTable *memo_table)
ECalModelComponent *comp_data = (ECalModelComponent *) l->data;
GError *error = NULL;
- e_cal_remove_object (comp_data->client,
- icalcomponent_get_uid (comp_data->icalcomp), &error);
+ e_cal_client_remove_object_sync (comp_data->client,
+ icalcomponent_get_uid (comp_data->icalcomp), NULL, CALOBJ_MOD_THIS, NULL, &error);
delete_error_dialog (error, E_CAL_COMPONENT_JOURNAL);
g_clear_error (&error);
}
@@ -560,8 +559,8 @@ memo_table_query_tooltip (GtkWidget *widget,
e_cal_component_get_icalcomponent (new_comp),
dtstart.tzid);
if (!zone)
- e_cal_get_timezone (
- comp_data->client, dtstart.tzid, &zone, NULL);
+ e_cal_client_get_timezone_sync (
+ comp_data->client, dtstart.tzid, &zone, NULL, NULL);
if (!zone)
zone = default_zone;
} else {
@@ -701,12 +700,10 @@ memo_table_update_actions (ESelectable *selectable,
n_selected = e_table_selected_count (E_TABLE (memo_table));
list = e_memo_table_get_selected (memo_table);
- for (iter = list; iter != NULL; iter = iter->next) {
+ for (iter = list; iter != NULL && sources_are_editable; iter = iter->next) {
ECalModelComponent *comp_data = iter->data;
- gboolean read_only;
- e_cal_is_read_only (comp_data->client, &read_only, NULL);
- sources_are_editable &= !read_only;
+ sources_are_editable = sources_are_editable && !e_client_is_readonly (E_CLIENT (comp_data->client));
}
g_slist_free (list);
@@ -826,7 +823,7 @@ clipboard_get_calendar_data (EMemoTable *memo_table,
icalcomponent *icalcomp;
gchar *uid;
ECalComponent *comp;
- ECal *client;
+ ECalClient *client;
ECalModel *model;
icalcomponent_kind kind;
const gchar *status_message;
@@ -869,6 +866,7 @@ clipboard_get_calendar_data (EMemoTable *memo_table,
child_kind == ICAL_VTODO_COMPONENT ||
child_kind == ICAL_VJOURNAL_COMPONENT) {
ECalComponent *tmp_comp;
+ GError *error = NULL;
uid = e_cal_component_gen_uid ();
tmp_comp = e_cal_component_new ();
@@ -876,31 +874,45 @@ clipboard_get_calendar_data (EMemoTable *memo_table,
tmp_comp,
icalcomponent_new_clone (subcomp));
e_cal_component_set_uid (tmp_comp, uid);
- free (uid);
+ g_free (uid);
+ uid = NULL;
/* FIXME Should we convert start/due/complete
* times? Also, need error handling.*/
- e_cal_create_object (
- client, e_cal_component_get_icalcomponent (tmp_comp),
- NULL, NULL);
+ if (!e_cal_client_create_object_sync (client, e_cal_component_get_icalcomponent (tmp_comp), &uid, NULL, &error))
+ uid = NULL;
+ g_free (uid);
g_object_unref (tmp_comp);
+
+ if (error) {
+ g_debug ("%s: Failed to create object: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
}
subcomp = icalcomponent_get_next_component (
vcal_comp, ICAL_ANY_COMPONENT);
}
} else {
+ GError *error = NULL;
+
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomp);
uid = e_cal_component_gen_uid ();
e_cal_component_set_uid (comp, (const gchar *) uid);
- free (uid);
+ g_free (uid);
- e_cal_create_object (
- client, e_cal_component_get_icalcomponent (comp),
- NULL, NULL);
+ uid = NULL;
+ if (!e_cal_client_create_object_sync (client, e_cal_component_get_icalcomponent (comp), &uid, NULL, &error))
+ uid = NULL;
+ g_free (uid);
g_object_unref (comp);
+
+ if (error) {
+ g_debug ("%s: Failed to create object: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
}
memo_table_emit_status_message (memo_table, NULL, -1.0);
diff --git a/calendar/gui/e-task-list-selector.c b/calendar/gui/e-task-list-selector.c
index 6967648b1f..9d1fb5cb99 100644
--- a/calendar/gui/e-task-list-selector.c
+++ b/calendar/gui/e-task-list-selector.c
@@ -25,9 +25,9 @@
#include "e-task-list-selector.h"
#include <string.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
+#include <libedataserverui/e-client-utils.h>
#include "e-util/e-selection.h"
-#include "calendar/common/authentication.h"
#include "calendar/gui/comp-util.h"
struct _ETaskListSelectorPrivate {
@@ -37,23 +37,31 @@ struct _ETaskListSelectorPrivate {
static gpointer parent_class;
static gboolean
-task_list_selector_update_single_object (ECal *client,
+task_list_selector_update_single_object (ECalClient *client,
icalcomponent *icalcomp)
{
- gchar *uid;
+ gchar *uid = NULL;
icalcomponent *tmp_icalcomp;
uid = (gchar *) icalcomponent_get_uid (icalcomp);
- if (e_cal_get_object (client, uid, NULL, &tmp_icalcomp, NULL))
- return e_cal_modify_object (
- client, icalcomp, CALOBJ_MOD_ALL, NULL);
+ if (e_cal_client_get_object_sync (client, uid, NULL, &tmp_icalcomp, NULL, NULL))
+ return e_cal_client_modify_object_sync (
+ client, icalcomp, CALOBJ_MOD_ALL, NULL, NULL);
- return e_cal_create_object (client, icalcomp, &uid, NULL);
+ if (!e_cal_client_create_object_sync (client, icalcomp, &uid, NULL, NULL))
+ return FALSE;
+
+ if (uid)
+ icalcomponent_set_uid (icalcomp, uid);
+
+ g_free (uid);
+
+ return TRUE;
}
static gboolean
-task_list_selector_update_objects (ECal *client,
+task_list_selector_update_objects (ECalClient *client,
icalcomponent *icalcomp)
{
icalcomponent *subcomp;
@@ -74,14 +82,19 @@ task_list_selector_update_objects (ECal *client,
kind = icalcomponent_isa (subcomp);
if (kind == ICAL_VTIMEZONE_COMPONENT) {
icaltimezone *zone;
+ GError *error = NULL;
zone = icaltimezone_new ();
icaltimezone_set_component (zone, subcomp);
- success = e_cal_add_timezone (client, zone, NULL);
+ success = e_cal_client_add_timezone_sync (client, zone, NULL, &error);
icaltimezone_free (zone, 1);
- if (!success)
+ if (!success) {
+ g_debug ("%s: Failed to add timezone: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
return FALSE;
+ }
} else if (kind == ICAL_VTODO_COMPONENT ||
kind == ICAL_VEVENT_COMPONENT) {
success = task_list_selector_update_single_object (
@@ -97,9 +110,36 @@ task_list_selector_update_objects (ECal *client,
return TRUE;
}
+static void
+client_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ gchar *uid = user_data;
+ EClient *client = NULL;
+ GError *error = NULL;
+
+ g_return_if_fail (uid != NULL);
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ if (error) {
+ g_debug ("%s: Failed to open task list: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+
+ if (client) {
+ if (!e_client_is_readonly (client))
+ e_cal_client_remove_object_sync (E_CAL_CLIENT (client), uid, NULL, CALOBJ_MOD_THIS, NULL, NULL);
+
+ g_object_unref (client);
+ }
+
+ g_free (uid);
+}
+
static gboolean
task_list_selector_process_data (ESourceSelector *selector,
- ECal *client,
+ ECalClient *client,
const gchar *source_uid,
icalcomponent *icalcomp,
GdkDragAction action)
@@ -110,7 +150,6 @@ task_list_selector_process_data (ESourceSelector *selector,
const gchar *uid;
gchar *old_uid = NULL;
gboolean success = FALSE;
- gboolean read_only = TRUE;
GError *error = NULL;
/* FIXME Deal with GDK_ACTION_ASK. */
@@ -124,13 +163,13 @@ task_list_selector_process_data (ESourceSelector *selector,
if (old_uid == NULL)
old_uid = g_strdup (uid);
- if (e_cal_get_object (client, uid, NULL, &tmp_icalcomp, &error)) {
+ if (e_cal_client_get_object_sync (client, uid, NULL, &tmp_icalcomp, NULL, &error)) {
icalcomponent_free (tmp_icalcomp);
success = TRUE;
goto exit;
}
- if (error != NULL && error->code != E_CALENDAR_STATUS_OBJECT_NOT_FOUND) {
+ if (error != NULL && !g_error_matches (error, E_CAL_CLIENT_ERROR, E_CAL_CLIENT_ERROR_OBJECT_NOT_FOUND)) {
g_message (
"Failed to search the object in destination "
"task list: %s", error->message);
@@ -138,6 +177,10 @@ task_list_selector_process_data (ESourceSelector *selector,
goto exit;
}
+ if (error)
+ g_error_free (error);
+ error = NULL;
+
success = task_list_selector_update_objects (client, icalcomp);
if (!success || action != GDK_ACTION_MOVE)
@@ -149,74 +192,93 @@ task_list_selector_process_data (ESourceSelector *selector,
if (!E_IS_SOURCE (source) || e_source_get_readonly (source))
goto exit;
- client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_TODO);
- if (client == NULL) {
- g_message ("Cannot create source client to remove old task");
- goto exit;
- }
-
- e_cal_is_read_only (client, &read_only, NULL);
- if (!read_only && e_cal_open (client, TRUE, NULL))
- e_cal_remove_object (client, old_uid, NULL);
- else if (!read_only)
- g_message ("Cannot open source client to remove old task");
+ e_client_utils_open_new (source, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
+ e_client_utils_authenticate_handler, NULL,
+ client_opened_cb, g_strdup (old_uid));
- g_object_unref (client);
-
-exit:
+ exit:
g_free (old_uid);
return success;
}
-static gboolean
-task_list_selector_data_dropped (ESourceSelector *selector,
- GtkSelectionData *selection_data,
- ESource *destination,
- GdkDragAction action,
- guint info)
+struct DropData
{
- ECal *client;
- GSList *list, *iter;
- gboolean success = FALSE;
+ ESourceSelector *selector;
+ GdkDragAction action;
+ GSList *list;
+};
- client = e_auth_new_cal_from_source (
- destination, E_CAL_SOURCE_TYPE_TODO);
+static void
+client_opened_for_drop_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ struct DropData *dd = user_data;
+ EClient *client = NULL;
+ GError *error = NULL;
- if (client == NULL || !e_cal_open (client, TRUE, NULL))
- goto exit;
+ g_return_if_fail (dd != NULL);
- list = cal_comp_selection_get_string_list (selection_data);
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
- for (iter = list; iter != NULL; iter = iter->next) {
- gchar *source_uid = iter->data;
- icalcomponent *icalcomp;
- gchar *component_string;
+ if (error) {
+ g_debug ("%s: Failed to open task list: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
- /* Each string is "source_uid\ncomponent_string". */
- component_string = strchr (source_uid, '\n');
- if (component_string == NULL)
- continue;
+ if (client) {
+ ECalClient *cal_client = E_CAL_CLIENT (client);
+ GSList *iter;
- *component_string++ = '\0';
- icalcomp = icalparser_parse_string (component_string);
- if (icalcomp == NULL)
- continue;
+ for (iter = dd->list; iter != NULL; iter = iter->next) {
+ gchar *source_uid = iter->data;
+ icalcomponent *icalcomp;
+ gchar *component_string;
- success = task_list_selector_process_data (
- selector, client, source_uid, icalcomp, action);
+ /* Each string is "source_uid\ncomponent_string". */
+ component_string = strchr (source_uid, '\n');
+ if (component_string == NULL)
+ continue;
- icalcomponent_free (icalcomp);
- }
+ *component_string++ = '\0';
+ icalcomp = icalparser_parse_string (component_string);
+ if (icalcomp == NULL)
+ continue;
+
+ task_list_selector_process_data (
+ dd->selector, cal_client, source_uid, icalcomp, dd->action);
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
+ icalcomponent_free (icalcomp);
+ }
-exit:
- if (client != NULL)
g_object_unref (client);
+ }
- return success;
+ g_slist_foreach (dd->list, (GFunc) g_free, NULL);
+ g_slist_free (dd->list);
+ g_object_unref (dd->selector);
+ g_free (dd);
+}
+
+static gboolean
+task_list_selector_data_dropped (ESourceSelector *selector,
+ GtkSelectionData *selection_data,
+ ESource *destination,
+ GdkDragAction action,
+ guint info)
+{
+ struct DropData *dd;
+
+ dd = g_new0 (struct DropData, 1);
+ dd->selector = g_object_ref (selector);
+ dd->action = action;
+ dd->list = cal_comp_selection_get_string_list (selection_data);
+
+ e_client_utils_open_new (destination, E_CLIENT_SOURCE_TYPE_TASKS, TRUE, NULL,
+ e_client_utils_authenticate_handler, NULL,
+ client_opened_for_drop_cb, dd);
+
+ return TRUE;
}
static void
diff --git a/calendar/gui/e-task-table.c b/calendar/gui/e-task-table.c
index 540ce1cc63..38b1d9ece5 100644
--- a/calendar/gui/e-task-table.c
+++ b/calendar/gui/e-task-table.c
@@ -233,7 +233,7 @@ static void
task_table_model_cal_view_progress_cb (ETaskTable *task_table,
const gchar *message,
gint progress,
- ECalSourceType type)
+ ECalClientSourceType type)
{
gdouble percent = (gdouble) progress;
@@ -242,9 +242,8 @@ task_table_model_cal_view_progress_cb (ETaskTable *task_table,
static void
task_table_model_cal_view_complete_cb ( ETaskTable *task_table,
- ECalendarStatus status,
- const gchar *error_msg,
- ECalSourceType type)
+ const GError *error,
+ ECalClientSourceType type)
{
task_table_emit_status_message (task_table, NULL, -1.0);
}
@@ -265,8 +264,7 @@ delete_selected_components (ETaskTable *task_table)
ECalModelComponent *comp_data = (ECalModelComponent *) l->data;
GError *error = NULL;
- e_cal_remove_object (comp_data->client,
- icalcomponent_get_uid (comp_data->icalcomp), &error);
+ e_cal_client_remove_object_sync (comp_data->client, icalcomponent_get_uid (comp_data->icalcomp), NULL, CALOBJ_MOD_THIS, NULL, &error);
delete_error_dialog (error, E_CAL_COMPONENT_TODO);
g_clear_error (&error);
}
@@ -782,8 +780,8 @@ task_table_query_tooltip (GtkWidget *widget,
e_cal_component_get_icalcomponent (new_comp),
dtstart.tzid);
if (!zone)
- e_cal_get_timezone (
- comp_data->client, dtstart.tzid, &zone, NULL);
+ e_cal_client_get_timezone_sync (
+ comp_data->client, dtstart.tzid, &zone, NULL, NULL);
if (!zone)
zone = default_zone;
} else {
@@ -932,12 +930,10 @@ task_table_update_actions (ESelectable *selectable,
n_selected = e_table_selected_count (E_TABLE (task_table));
list = e_task_table_get_selected (task_table);
- for (iter = list; iter != NULL; iter = iter->next) {
+ for (iter = list; iter != NULL && sources_are_editable; iter = iter->next) {
ECalModelComponent *comp_data = iter->data;
- gboolean read_only;
- e_cal_is_read_only (comp_data->client, &read_only, NULL);
- sources_are_editable &= !read_only;
+ sources_are_editable = sources_are_editable && !e_client_is_readonly (E_CLIENT (comp_data->client));
}
g_slist_free (list);
@@ -1058,7 +1054,7 @@ clipboard_get_calendar_data (ETaskTable *task_table,
gchar *uid;
ECalComponent *comp;
ECalModel *model;
- ECal *client;
+ ECalClient *client;
icalcomponent_kind kind;
const gchar *status_message;
@@ -1100,6 +1096,7 @@ clipboard_get_calendar_data (ETaskTable *task_table,
child_kind == ICAL_VTODO_COMPONENT ||
child_kind == ICAL_VJOURNAL_COMPONENT) {
ECalComponent *tmp_comp;
+ GError *error = NULL;
uid = e_cal_component_gen_uid ();
tmp_comp = e_cal_component_new ();
@@ -1107,31 +1104,45 @@ clipboard_get_calendar_data (ETaskTable *task_table,
tmp_comp,
icalcomponent_new_clone (subcomp));
e_cal_component_set_uid (tmp_comp, uid);
- free (uid);
+ g_free (uid);
+ uid = NULL;
/* FIXME should we convert start/due/complete
* times? Also, need error handling. */
- e_cal_create_object (
- client, e_cal_component_get_icalcomponent (tmp_comp),
- NULL, NULL);
+ if (!e_cal_client_create_object_sync (client, e_cal_component_get_icalcomponent (tmp_comp), &uid, NULL, &error))
+ uid = NULL;
+
+ if (error) {
+ g_debug ("%s: Failed to create object: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
g_object_unref (tmp_comp);
+ g_free (uid);
}
subcomp = icalcomponent_get_next_component (
vcal_comp, ICAL_ANY_COMPONENT);
}
} else {
+ GError *error = NULL;
+
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomp);
uid = e_cal_component_gen_uid ();
e_cal_component_set_uid (comp, (const gchar *) uid);
- free (uid);
+ g_free (uid);
+ uid = NULL;
- e_cal_create_object (
- client, e_cal_component_get_icalcomponent (comp),
- NULL, NULL);
+ if (!e_cal_client_create_object_sync (client, e_cal_component_get_icalcomponent (comp), &uid, NULL, &error))
+ uid = NULL;
+
+ if (error) {
+ g_debug ("%s: Failed to create object: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
g_object_unref (comp);
+ g_free (uid);
}
task_table_emit_status_message (task_table, NULL, -1.0);
@@ -1228,7 +1239,7 @@ add_retract_data (ECalComponent *comp, const gchar *retract_comment)
}
static gboolean
-check_for_retract (ECalComponent *comp, ECal *client)
+check_for_retract (ECalComponent *comp, ECalClient *client)
{
ECalComponentOrganizer org;
gchar *email = NULL;
@@ -1238,15 +1249,15 @@ check_for_retract (ECalComponent *comp, ECal *client)
if (!e_cal_component_has_attendees (comp))
return FALSE;
- if (!e_cal_get_save_schedules (client))
+ if (!e_cal_client_check_save_schedules (client))
return FALSE;
e_cal_component_get_organizer (comp, &org);
strip = itip_strip_mailto (org.value);
ret_val =
- e_cal_get_cal_address (client, &email, NULL) &&
- g_ascii_strcasecmp (email, strip) == 0;
+ e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &email, NULL, NULL) &&
+ email && g_ascii_strcasecmp (email, strip) == 0;
g_free (email);
@@ -1292,14 +1303,13 @@ task_table_delete_selection (ESelectable *selectable)
comp, &retract_comment,
GTK_WIDGET (task_table), &retract);
if (retract) {
- GList *users = NULL;
+ GSList *users = NULL;
icalcomponent *icalcomp = NULL, *mod_comp = NULL;
add_retract_data (comp, retract_comment);
icalcomp = e_cal_component_get_icalcomponent (comp);
icalcomponent_set_method (icalcomp, ICAL_METHOD_CANCEL);
- if (!e_cal_send_objects (comp_data->client, icalcomp, &users,
- &mod_comp, &error)) {
+ if (!e_cal_client_send_objects_sync (comp_data->client, icalcomp, &users, &mod_comp, NULL, &error)) {
delete_error_dialog (error, E_CAL_COMPONENT_TODO);
g_clear_error (&error);
error = NULL;
@@ -1309,8 +1319,8 @@ task_table_delete_selection (ESelectable *selectable)
icalcomponent_free (mod_comp);
if (users) {
- g_list_foreach (users, (GFunc) g_free, NULL);
- g_list_free (users);
+ g_slist_foreach (users, (GFunc) g_free, NULL);
+ g_slist_free (users);
}
}
@@ -1596,17 +1606,21 @@ hide_completed_rows (ECalModel *model,
gchar *hide_sexp,
GPtrArray *comp_objects)
{
- GList *l, *m, *objects;
- ECal *client;
+ GList *l;
+ GSList *m, *objects;
+ ECalClient *client;
gint pos;
gboolean changed = FALSE;
for (l = clients_list; l != NULL; l = l->next) {
- client = l->data;
+ GError *error = NULL;
- if (!e_cal_get_object_list (client, hide_sexp, &objects, NULL)) {
- g_warning (G_STRLOC ": Could not get the objects");
+ client = l->data;
+ if (!e_cal_client_get_object_list_sync (client, hide_sexp, &objects, NULL, &error)) {
+ g_debug ("%s: Could not get the objects: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
continue;
}
@@ -1635,8 +1649,8 @@ hide_completed_rows (ECalModel *model,
g_object_unref (comp);
}
- g_list_foreach (objects, (GFunc) icalcomponent_free, NULL);
- g_list_free (objects);
+ g_slist_foreach (objects, (GFunc) icalcomponent_free, NULL);
+ g_slist_free (objects);
}
if (changed) {
@@ -1652,15 +1666,19 @@ show_completed_rows (ECalModel *model,
gchar *show_sexp,
GPtrArray *comp_objects)
{
- GList *l, *m, *objects;
- ECal *client;
+ GList *l;
+ GSList *m, *objects;
+ ECalClient *client;
for (l = clients_list; l != NULL; l = l->next) {
- client = l->data;
+ GError *error = NULL;
- if (!e_cal_get_object_list (client, show_sexp, &objects, NULL)) {
- g_warning (G_STRLOC ": Could not get the objects");
+ client = l->data;
+ if (!e_cal_client_get_object_list_sync (client, show_sexp, &objects, NULL, &error)) {
+ g_debug ("%s: Could not get the objects: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
continue;
}
@@ -1697,6 +1715,9 @@ show_completed_rows (ECalModel *model,
e_cal_component_free_id (id);
g_object_unref (comp);
}
+
+ g_slist_foreach (objects, (GFunc) icalcomponent_free, NULL);
+ g_slist_free (objects);
}
}
diff --git a/calendar/gui/e-timezone-entry.h b/calendar/gui/e-timezone-entry.h
index 6c0cd1dc6b..59d2c00cb1 100644
--- a/calendar/gui/e-timezone-entry.h
+++ b/calendar/gui/e-timezone-entry.h
@@ -33,7 +33,7 @@
#define E_TIMEZONE_ENTRY_H
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
/* Standard GObject macros */
#define E_TYPE_TIMEZONE_ENTRY \
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index d6f430f2a1..47f03a9fa2 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -148,7 +148,7 @@ static void e_week_view_on_editing_started (EWeekView *week_view,
static void e_week_view_on_editing_stopped (EWeekView *week_view,
GnomeCanvasItem *item);
static gboolean e_week_view_find_event_from_uid (EWeekView *week_view,
- ECal *client,
+ ECalClient *client,
const gchar *uid,
const gchar *rid,
gint *event_num_return);
@@ -708,7 +708,6 @@ e_week_view_init (EWeekView *week_view)
gtk_widget_set_can_focus (GTK_WIDGET (week_view), TRUE);
- week_view->query = NULL;
week_view->event_destroyed = FALSE;
week_view->events = g_array_new (FALSE, FALSE,
sizeof (EWeekViewEvent));
@@ -875,13 +874,6 @@ e_week_view_dispose (GObject *object)
week_view->events = NULL;
}
- if (week_view->query) {
- g_signal_handlers_disconnect_matched (week_view->query, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, week_view);
- g_object_unref (week_view->query);
- week_view->query = NULL;
- }
-
if (week_view->small_font_desc) {
pango_font_description_free (week_view->small_font_desc);
week_view->small_font_desc = NULL;
@@ -3018,7 +3010,7 @@ tooltip_event_cb (GnomeCanvasItem *item,
}
static const gchar *
-get_comp_summary (ECal *ecal, icalcomponent *icalcomp, gboolean *free_text)
+get_comp_summary (ECalClient *client, icalcomponent *icalcomp, gboolean *free_text)
{
const gchar *my_summary, *location;
const gchar *summary;
@@ -3026,7 +3018,7 @@ get_comp_summary (ECal *ecal, icalcomponent *icalcomp, gboolean *free_text)
g_return_val_if_fail (icalcomp != NULL && free_text != NULL, NULL);
- my_summary = e_calendar_view_get_icalcomponent_summary (ecal, icalcomp, &my_free_text);
+ my_summary = e_calendar_view_get_icalcomponent_summary (client, icalcomp, &my_free_text);
location = icalcomponent_get_location (icalcomp);
if (location && *location) {
@@ -3172,7 +3164,7 @@ e_week_view_reshape_event_span (EWeekView *week_view,
if (free_text)
g_free ((gchar *) summary);
- if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
+ if (e_client_check_capability (E_CLIENT (event->comp_data->client), CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp)) {
set_text_as_bold (event, span);
}
@@ -3335,7 +3327,6 @@ e_week_view_start_editing_event (EWeekView *week_view,
ETextEventProcessor *event_processor = NULL;
ETextEventProcessorCommand command;
ECalModelComponent *comp_data;
- gboolean read_only;
/* If we are already editing the event, just return. */
if (event_num == week_view->editing_event_num
@@ -3356,7 +3347,7 @@ e_week_view_start_editing_event (EWeekView *week_view,
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
- if (!e_cal_is_read_only (event->comp_data->client, &read_only, NULL) || read_only)
+ if (e_client_is_readonly (E_CLIENT (event->comp_data->client)))
return FALSE;
/* If the event is not shown, don't try to edit it. */
@@ -3814,7 +3805,7 @@ e_week_view_change_event_time (EWeekView *week_view, time_t start_dt, time_t end
ECalComponent *comp;
ECalComponentDateTime date;
struct icaltimetype itt;
- ECal *client;
+ ECalClient *client;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
@@ -3924,7 +3915,7 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
gchar *text = NULL;
ECalComponent *comp;
ECalComponentText summary;
- ECal *client;
+ ECalClient *client;
const gchar *uid;
gboolean on_server;
@@ -4003,11 +3994,24 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
e_cal_component_commit_sequence (comp);
if (!on_server) {
- if (!e_cal_create_object (client, icalcomp, NULL, NULL))
- g_message (G_STRLOC ": Could not create the object!");
- else
+ gchar *uid = NULL;
+ GError *error = NULL;
+
+ if (!e_cal_client_create_object_sync (client, icalcomp, &uid, NULL, &error)) {
+ g_message (G_STRLOC ": Could not create the object! %s", error ? error->message : "Unknown error");
+ uid = NULL;
+ } else {
+ if (uid)
+ icalcomponent_set_uid (icalcomp, uid);
+
e_calendar_view_emit_user_created (
E_CALENDAR_VIEW (week_view));
+ }
+
+ if (uid)
+ g_free (uid);
+ if (error)
+ g_error_free (error);
/* we remove the object since we either got the update from the server or failed */
e_week_view_remove_event_cb (week_view, event_num, NULL);
@@ -4130,7 +4134,7 @@ e_week_view_find_event_from_item (EWeekView *week_view,
see if any events with the uid exist. */
static gboolean
e_week_view_find_event_from_uid (EWeekView *week_view,
- ECal *client,
+ ECalClient *client,
const gchar *uid,
const gchar *rid,
gint *event_num_return)
@@ -4256,7 +4260,7 @@ e_week_view_cursor_key_right (EWeekView *week_view)
static gboolean
e_week_view_add_new_event_in_selected_range (EWeekView *week_view, const gchar *initial_text)
{
- ECal *ecal;
+ ECalClient *client;
ECalModel *model;
ECalComponent *comp;
icalcomponent *icalcomp;
@@ -4266,14 +4270,13 @@ e_week_view_add_new_event_in_selected_range (EWeekView *week_view, const gchar *
time_t dtstart, dtend;
const gchar *uid;
AddEventData add_event_data;
- gboolean read_only = TRUE;
EWeekViewEvent *wvevent;
EWeekViewEventSpan *span;
/* Check if the client is read only */
model = e_calendar_view_get_model (E_CALENDAR_VIEW (week_view));
- ecal = e_cal_model_get_default_client (model);
- if (!e_cal_is_read_only (ecal, &read_only, NULL) || read_only)
+ client = e_cal_model_get_default_client (model);
+ if (e_client_is_readonly (E_CLIENT (client)))
return FALSE;
/* Add a new event covering the selected range. */
@@ -4316,7 +4319,7 @@ e_week_view_add_new_event_in_selected_range (EWeekView *week_view, const gchar *
e_week_view_check_layout (week_view);
gtk_widget_queue_draw (week_view->main_canvas);
- if (!e_week_view_find_event_from_uid (week_view, ecal, uid, NULL, &event_num)) {
+ if (!e_week_view_find_event_from_uid (week_view, client, uid, NULL, &event_num)) {
g_warning ("Couldn't find event to start editing.\n");
g_object_unref (comp);
return FALSE;
diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h
index 3f65149f19..9525b87c02 100644
--- a/calendar/gui/e-week-view.h
+++ b/calendar/gui/e-week-view.h
@@ -185,9 +185,6 @@ struct _EWeekView {
GtkWidget *vscrollbar;
- /* The query object */
- ECalView *query;
-
/* The array of EWeekViewEvent elements. */
GArray *events;
gboolean events_sorted;
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index ffbc449584..78721bf214 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -38,7 +38,9 @@
#include <libedataserver/e-categories.h>
#include <libedataserver/e-url.h>
#include <libedataserverui/e-passwords.h>
+#include <libedataserverui/e-client-utils.h>
+#include <libecal/e-cal-client-view.h>
#include <libecal/e-cal-time-util.h>
#include <widgets/menus/gal-view-factory-etable.h>
#include <widgets/menus/gal-view-etable.h>
@@ -63,7 +65,6 @@
#include "tag-calendar.h"
#include "misc.h"
#include "ea-calendar.h"
-#include "common/authentication.h"
#include "e-memo-table.h"
#include "e-task-table.h"
@@ -290,7 +291,7 @@ static void
view_progress_cb (ECalModel *model,
const gchar *message,
gint percent,
- ECalSourceType type,
+ ECalClientSourceType type,
GnomeCalendar *gcal)
{
gcal_update_status_message (gcal, message, percent);
@@ -298,9 +299,8 @@ view_progress_cb (ECalModel *model,
static void
view_complete_cb (ECalModel *model,
- ECalendarStatus status,
- const gchar *error_msg,
- ECalSourceType type,
+ const GError *error,
+ ECalClientSourceType type,
GnomeCalendar *gcal)
{
gcal_update_status_message (gcal, NULL, -1);
@@ -752,11 +752,11 @@ ensure_dates_are_in_default_zone (GnomeCalendar *gcal,
/* Callback used when the calendar query reports of an updated object */
static void
-dn_e_cal_view_objects_added_cb (ECalView *query, GList *objects, gpointer data)
+dn_client_view_objects_added_cb (ECalClientView *view, const GSList *objects, gpointer data)
{
GnomeCalendar *gcal;
GnomeCalendarPrivate *priv;
- GList *l;
+ const GSList *l;
gcal = GNOME_CALENDAR (data);
priv = gcal->priv;
@@ -774,14 +774,14 @@ dn_e_cal_view_objects_added_cb (ECalView *query, GList *objects, gpointer data)
tag_calendar_by_comp (
priv->date_navigator, comp,
- e_cal_view_get_client (query),
+ e_cal_client_view_get_client (view),
NULL, FALSE, TRUE, TRUE);
g_object_unref (comp);
}
}
static void
-dn_e_cal_view_objects_modified_cb (ECalView *query, GList *objects, gpointer data)
+dn_client_view_objects_modified_cb (ECalClientView *view, const GSList *objects, gpointer data)
{
GnomeCalendar *gcal;
@@ -796,7 +796,7 @@ dn_e_cal_view_objects_modified_cb (ECalView *query, GList *objects, gpointer dat
/* Callback used when the calendar query reports of a removed object */
static void
-dn_e_cal_view_objects_removed_cb (ECalView *query, GList *ids, gpointer data)
+dn_client_view_objects_removed_cb (ECalClientView *view, const GSList *ids, gpointer data)
{
GnomeCalendar *gcal;
@@ -808,17 +808,11 @@ dn_e_cal_view_objects_removed_cb (ECalView *query, GList *ids, gpointer data)
/* Callback used when the calendar query is done */
static void
-dn_e_cal_view_complete_cb (ECalView *query,
- ECalendarStatus status,
- const gchar *error_msg,
- gpointer data)
+dn_client_view_complete_cb (ECalClientView *query, const GError *error, gpointer data)
{
/* FIXME Better error reporting */
- if (status != E_CALENDAR_STATUS_OK)
- g_warning (
- G_STRLOC ": Query did not successfully complete, "
- "code: %d (%s)", status, error_msg ? error_msg :
- "Unknown error");
+ if (error)
+ g_debug ("%s: Query did not complete successfully: %s", G_STRFUNC, error->message);
}
ECalendarView *
@@ -1009,7 +1003,7 @@ get_date_navigator_range (GnomeCalendar *gcal, time_t *start_time, time_t *end_t
/* Adjusts a given query sexp with the time range of the date navigator */
static gchar *
-adjust_e_cal_view_sexp (GnomeCalendar *gcal, const gchar *sexp)
+adjust_client_view_sexp (GnomeCalendar *gcal, const gchar *sexp)
{
time_t start_time, end_time;
gchar *start, *end;
@@ -1058,9 +1052,7 @@ free_dn_queries (GnomeCalendar *gcal)
for (l = priv->dn_queries; l != NULL; l = l->next) {
if (!l->data)
continue;
- g_signal_handlers_disconnect_matched (
- l->data, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, gcal);
+ g_signal_handlers_disconnect_matched (l->data, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, gcal);
g_object_unref (l->data);
}
@@ -1075,7 +1067,7 @@ update_query_async (struct _date_query_msg *msg)
{
GnomeCalendar *gcal = msg->gcal;
GnomeCalendarPrivate *priv;
- ECalView *new_query;
+ ECalClientView *new_view;
gchar *real_sexp;
GList *list, *iter;
@@ -1086,7 +1078,7 @@ update_query_async (struct _date_query_msg *msg)
g_return_if_fail (priv->sexp != NULL);
- real_sexp = adjust_e_cal_view_sexp (gcal, priv->sexp);
+ real_sexp = adjust_client_view_sexp (gcal, priv->sexp);
if (!real_sexp) {
return; /* No time range is set, so don't start a query */
}
@@ -1096,19 +1088,19 @@ update_query_async (struct _date_query_msg *msg)
/* create queries for each loaded client */
for (iter = list; iter != NULL; iter = iter->next) {
- ECal *client = E_CAL (iter->data);
+ ECalClient *client = E_CAL_CLIENT (iter->data);
GError *error = NULL;
gint tries = 0;
/* don't create queries for clients not loaded yet */
- if (e_cal_get_load_state (client) != E_CAL_LOAD_LOADED)
+ if (!e_client_is_opened (E_CLIENT (client)))
continue;
-try_again:
- new_query = NULL;
- if (!e_cal_get_query (client, real_sexp, &new_query, &error)) {
+ try_again:
+ new_view = NULL;
+ if (!e_cal_client_get_view_sync (client, real_sexp, &new_view, NULL, &error)) {
/* If calendar is busy try again for 3 times. */
- if (error->code == E_CALENDAR_STATUS_BUSY && tries != 10) {
+ if (g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_BUSY) && tries != 10) {
tries++;
/*TODO chose an optimal value */
g_usleep (500);
@@ -1117,24 +1109,28 @@ try_again:
goto try_again;
}
- g_warning (G_STRLOC ": Could not create the query: %s ", error->message);
+ g_warning (G_STRLOC ": Could not create the view: %s ", error->message);
g_clear_error (&error);
continue;
}
- g_signal_connect (new_query, "objects_added",
- G_CALLBACK (dn_e_cal_view_objects_added_cb), gcal);
- g_signal_connect (new_query, "objects_modified",
- G_CALLBACK (dn_e_cal_view_objects_modified_cb), gcal);
- g_signal_connect (new_query, "objects_removed",
- G_CALLBACK (dn_e_cal_view_objects_removed_cb), gcal);
- g_signal_connect (new_query, "view_complete",
- G_CALLBACK (dn_e_cal_view_complete_cb), gcal);
+ g_signal_connect (new_view, "objects-added",
+ G_CALLBACK (dn_client_view_objects_added_cb), gcal);
+ g_signal_connect (new_view, "objects-modified",
+ G_CALLBACK (dn_client_view_objects_modified_cb), gcal);
+ g_signal_connect (new_view, "objects-removed",
+ G_CALLBACK (dn_client_view_objects_removed_cb), gcal);
+ g_signal_connect (new_view, "complete",
+ G_CALLBACK (dn_client_view_complete_cb), gcal);
g_mutex_lock (priv->dn_query_lock);
- priv->dn_queries = g_list_append (priv->dn_queries, new_query);
- e_cal_view_start (new_query);
+ priv->dn_queries = g_list_append (priv->dn_queries, new_view);
+ e_cal_client_view_start (new_view, &error);
+ if (error) {
+ g_debug ("%s: Failed to start view: %s", G_STRFUNC, error->message);
+ g_clear_error (&error);
+ }
g_mutex_unlock (priv->dn_query_lock);
}
@@ -2221,15 +2217,17 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
/* FIXME Confirm expunge */
clients = e_cal_model_get_client_list (gnome_calendar_get_model (gcal));
for (l = clients; l != NULL; l = l->next) {
- ECal *client = l->data;
- GList *objects, *m;
- gboolean read_only;
+ ECalClient *client = l->data;
+ GSList *objects, *m;
+ GError *error = NULL;
- if (!e_cal_is_read_only (client, &read_only, NULL) || read_only)
+ if (e_client_is_readonly (E_CLIENT (client)))
continue;
- if (!e_cal_get_object_list (client, sexp, &objects, NULL)) {
- g_warning (G_STRLOC ": Could not get the objects");
+ if (!e_cal_client_get_object_list_sync (client, sexp, &objects, NULL, &error)) {
+ g_warning (G_STRLOC ": Could not get the objects: %s", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
continue;
}
@@ -2240,16 +2238,15 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
/* FIXME write occur-before and occur-after
* sexp funcs so we don't have to use the max
* gint */
- if (!e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_RECURRENCES_NO_MASTER)) {
+ if (!e_cal_client_check_recurrences_no_master (client)) {
struct purge_data pd;
pd.remove = TRUE;
pd.older_than = older_than;
- e_cal_generate_instances_for_object (client, m->data,
+ e_cal_client_generate_instances_for_object (client, m->data,
older_than, G_MAXINT32,
- (ECalRecurInstanceFn) check_instance_cb,
+ check_instance_cb,
&pd);
remove = pd.remove;
@@ -2270,23 +2267,21 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
if (!icaltime_is_null_time (recur_id) )
rid = icaltime_as_ical_string_r (recur_id);
- e_cal_remove_object_with_mod (
- client, uid, rid,
- CALOBJ_MOD_ALL, &error);
+ e_cal_client_remove_object_sync (client, uid, rid, CALOBJ_MOD_ALL, NULL, &error);
g_free (rid);
} else {
- e_cal_remove_object (client, uid, &error);
+ e_cal_client_remove_object_sync (client, uid, NULL, CALOBJ_MOD_THIS, NULL, &error);
}
if (error) {
- g_warning ("Unable to purge events %s \n", error->message);
+ g_debug ("%s: Unable to purge events: %s", G_STRFUNC, error->message);
g_error_free (error);
}
}
}
- g_list_foreach (objects, (GFunc) icalcomponent_free, NULL);
- g_list_free (objects);
+ g_slist_foreach (objects, (GFunc) icalcomponent_free, NULL);
+ g_slist_free (objects);
}
g_list_free (clients);
diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h
index 92f6f3ad36..6657b8efe3 100644
--- a/calendar/gui/gnome-cal.h
+++ b/calendar/gui/gnome-cal.h
@@ -30,7 +30,7 @@
#include <time.h>
#include <gtk/gtk.h>
#include <misc/e-calendar.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include "e-cal-model.h"
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c
index 4d56645b38..d095d4ecbe 100644
--- a/calendar/gui/itip-utils.c
+++ b/calendar/gui/itip-utils.c
@@ -157,14 +157,14 @@ itip_address_is_user (const gchar *address)
gboolean
itip_organizer_is_user (ECalComponent *comp,
- ECal *client)
+ ECalClient *cal_client)
{
- return itip_organizer_is_user_ex (comp, client, FALSE);
+ return itip_organizer_is_user_ex (comp, cal_client, FALSE);
}
gboolean
itip_organizer_is_user_ex (ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
gboolean skip_cap_test)
{
ECalComponentOrganizer organizer;
@@ -172,8 +172,8 @@ itip_organizer_is_user_ex (ECalComponent *comp,
gboolean user_org = FALSE;
if (!e_cal_component_has_organizer (comp) ||
- (!skip_cap_test && e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_NO_ORGANIZER)))
+ (!skip_cap_test && e_client_check_capability (
+ E_CLIENT (cal_client), CAL_STATIC_CAPABILITY_NO_ORGANIZER)))
return FALSE;
e_cal_component_get_organizer (comp, &organizer);
@@ -181,11 +181,10 @@ itip_organizer_is_user_ex (ECalComponent *comp,
strip = itip_strip_mailto (organizer.value);
- if (e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS)) {
+ if (e_client_check_capability (E_CLIENT (cal_client), CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS)) {
gchar *email = NULL;
- if (e_cal_get_cal_address (client, &email, NULL) &&
+ if (e_client_get_backend_property_sync (E_CLIENT (cal_client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &email, NULL, NULL) &&
!g_ascii_strcasecmp (email, strip)) {
g_free (email);
@@ -204,15 +203,15 @@ itip_organizer_is_user_ex (ECalComponent *comp,
gboolean
itip_sentby_is_user (ECalComponent *comp,
- ECal *client)
+ ECalClient *cal_client)
{
ECalComponentOrganizer organizer;
const gchar *strip;
gboolean user_sentby = FALSE;
if (!e_cal_component_has_organizer (comp) ||
- e_cal_get_static_capability (
- client, CAL_STATIC_CAPABILITY_NO_ORGANIZER))
+ e_client_check_capability (
+ E_CLIENT (cal_client), CAL_STATIC_CAPABILITY_NO_ORGANIZER))
return FALSE;
e_cal_component_get_organizer (comp, &organizer);
@@ -277,7 +276,7 @@ html_new_lines_for (const gchar *string)
gchar *
itip_get_comp_attendee (ECalComponent *comp,
- ECal *client)
+ ECalClient *cal_client)
{
GSList *attendees;
EAccountList *al;
@@ -289,8 +288,8 @@ itip_get_comp_attendee (ECalComponent *comp,
e_cal_component_get_attendee_list (comp, &attendees);
al = e_get_account_list ();
- if (client)
- e_cal_get_cal_address (client, &address, NULL);
+ if (cal_client)
+ e_client_get_backend_property_sync (E_CLIENT (cal_client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &address, NULL, NULL);
if (address && *address) {
attendee = get_attendee (attendees, address);
@@ -386,7 +385,7 @@ get_label (struct icaltimetype *tt,
typedef struct {
GHashTable *tzids;
icalcomponent *icomp;
- ECal *client;
+ ECalClient *client;
icalcomponent *zones;
} ItipUtilTZData;
@@ -409,7 +408,7 @@ foreach_tzid_callback (icalparameter *param, gpointer data)
if (zone == NULL)
zone = icaltimezone_get_builtin_timezone_from_tzid (tzid);
if (zone == NULL && tz_data->client != NULL)
- e_cal_get_timezone (tz_data->client, tzid, &zone, NULL);
+ e_cal_client_get_timezone_sync (tz_data->client, tzid, &zone, NULL, NULL);
if (zone == NULL)
return;
@@ -426,7 +425,7 @@ foreach_tzid_callback (icalparameter *param, gpointer data)
static icalcomponent *
comp_toplevel_with_zones (ECalComponentItipMethod method,
ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
icalcomponent *zones)
{
icalcomponent *top_level, *icomp;
@@ -446,7 +445,7 @@ comp_toplevel_with_zones (ECalComponentItipMethod method,
tz_data.tzids = g_hash_table_new (g_str_hash, g_str_equal);
tz_data.icomp = top_level;
- tz_data.client = client;
+ tz_data.client = cal_client;
tz_data.zones = zones;
icalcomponent_foreach_tzid (icomp, foreach_tzid_callback, &tz_data);
g_hash_table_destroy (tz_data.tzids);
@@ -457,10 +456,10 @@ comp_toplevel_with_zones (ECalComponentItipMethod method,
}
static gboolean
-users_has_attendee (GList *users,
+users_has_attendee (const GSList *users,
const gchar *address)
{
- GList *l;
+ const GSList *l;
for (l = users; l != NULL; l = l->next) {
if (!g_ascii_strcasecmp (address, l->data))
@@ -525,7 +524,7 @@ comp_from (ECalComponentItipMethod method,
static EDestination **
comp_to_list (ECalComponentItipMethod method,
ECalComponent *comp,
- GList *users,
+ const GSList *users,
gboolean reply_all,
const GSList *only_attendees)
{
@@ -703,7 +702,7 @@ comp_to_list (ECalComponentItipMethod method,
break;
case E_CAL_COMPONENT_METHOD_PUBLISH:
if (users) {
- GList *list;
+ const GSList *list;
array = g_ptr_array_new ();
@@ -945,19 +944,19 @@ comp_description (ECalComponent *comp,
static gboolean
comp_server_send (ECalComponentItipMethod method,
ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
icalcomponent *zones,
- GList **users)
+ GSList **users)
{
icalcomponent *top_level, *returned_icalcomp = NULL;
gboolean retval = TRUE;
GError *error = NULL;
- top_level = comp_toplevel_with_zones (method, comp, client, zones);
- if (!e_cal_send_objects (client, top_level, users, &returned_icalcomp, &error)) {
+ top_level = comp_toplevel_with_zones (method, comp, cal_client, zones);
+ if (!e_cal_client_send_objects_sync (cal_client, top_level, users, &returned_icalcomp, NULL, &error)) {
/* FIXME Really need a book problem status code */
- if (error->code != E_CALENDAR_STATUS_OK) {
- if (error->code == E_CALENDAR_STATUS_OBJECT_ID_ALREADY_EXISTS) {
+ if (error) {
+ if (g_error_matches (error, E_CAL_CLIENT_ERROR, E_CAL_CLIENT_ERROR_OBJECT_ID_ALREADY_EXISTS)) {
e_notice (
NULL, GTK_MESSAGE_ERROR,
_("Unable to book a resource, the "
@@ -1051,7 +1050,7 @@ comp_limit_attendees (ECalComponent *comp)
}
static void
-comp_sentby (ECalComponent *comp, ECal *client)
+comp_sentby (ECalComponent *comp, ECalClient *cal_client)
{
ECalComponentOrganizer organizer;
GSList * attendees, *l;
@@ -1073,7 +1072,7 @@ comp_sentby (ECalComponent *comp, ECal *client)
}
e_cal_component_get_attendee_list (comp, &attendees);
- user = itip_get_comp_attendee (comp, client);
+ user = itip_get_comp_attendee (comp, cal_client);
for (l = attendees; l; l = l->next) {
ECalComponentAttendee *a = l->data;
@@ -1086,8 +1085,7 @@ comp_sentby (ECalComponent *comp, ECal *client)
}
}
- if (!itip_organizer_is_user (comp, client) &&
- !itip_sentby_is_user (comp, client)) {
+ if (!itip_organizer_is_user (comp, cal_client) && !itip_sentby_is_user (comp, cal_client)) {
EAccount *a = e_get_default_account ();
organizer.value = g_strdup (organizer.value);
@@ -1213,7 +1211,7 @@ strip_x_microsoft_props (ECalComponent *comp)
static ECalComponent *
comp_compliant (ECalComponentItipMethod method,
ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
icalcomponent *zones,
icaltimezone *default_zone,
gboolean strip_alarms)
@@ -1252,7 +1250,7 @@ comp_compliant (ECalComponentItipMethod method,
from_zone = icaltimezone_get_builtin_timezone_from_tzid (dt.tzid);
if (from_zone == NULL && client != NULL)
/* FIXME Error checking */
- e_cal_get_timezone (client, dt.tzid, &from_zone, NULL);
+ e_cal_client_get_timezone_sync (client, dt.tzid, &from_zone, NULL, NULL);
}
to_zone = icaltimezone_get_utc_timezone ();
@@ -1420,7 +1418,7 @@ find_enabled_account (EAccountList *accounts,
static void
setup_from (ECalComponentItipMethod method,
ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
EComposerHeaderTable *table)
{
EAccountList *accounts;
@@ -1430,7 +1428,7 @@ setup_from (ECalComponentItipMethod method,
EAccount *account = NULL;
/* always use organizer's email when user is an organizer */
- if (itip_organizer_is_user (comp, client)) {
+ if (itip_organizer_is_user (comp, cal_client)) {
ECalComponentOrganizer organizer = {0};
e_cal_component_get_organizer (comp, &organizer);
@@ -1458,10 +1456,10 @@ setup_from (ECalComponentItipMethod method,
gboolean
itip_send_comp (ECalComponentItipMethod method,
ECalComponent *send_comp,
- ECal *client,
+ ECalClient *cal_client,
icalcomponent *zones,
GSList *attachments_list,
- GList *users,
+ GSList *users,
gboolean strip_alarms,
gboolean only_new_attendees)
{
@@ -1490,29 +1488,29 @@ itip_send_comp (ECalComponentItipMethod method,
shell_settings, "cal-use-24-hour-format");
/* check whether backend could handle auto-saving requests/updates */
- if (method != E_CAL_COMPONENT_METHOD_PUBLISH && e_cal_get_save_schedules (client))
+ if (method != E_CAL_COMPONENT_METHOD_PUBLISH && e_cal_client_check_save_schedules (cal_client))
return TRUE;
/* Give the server a chance to manipulate the comp */
if (method != E_CAL_COMPONENT_METHOD_PUBLISH) {
- if (!comp_server_send (method, send_comp, client, zones, &users))
+ if (!comp_server_send (method, send_comp, cal_client, zones, &users))
goto cleanup;
}
/* check whether backend could handle sending requests/updates */
if (method != E_CAL_COMPONENT_METHOD_PUBLISH &&
- e_cal_get_static_capability (client,
+ e_client_check_capability (E_CLIENT (cal_client),
CAL_STATIC_CAPABILITY_CREATE_MESSAGES)) {
if (users) {
- g_list_foreach (users, (GFunc) g_free, NULL);
- g_list_free (users);
+ g_slist_foreach (users, (GFunc) g_free, NULL);
+ g_slist_free (users);
}
return TRUE;
}
/* Tidy up the comp */
comp = comp_compliant (
- method, send_comp, client, zones, default_zone, strip_alarms);
+ method, send_comp, cal_client, zones, default_zone, strip_alarms);
if (comp == NULL)
goto cleanup;
@@ -1536,7 +1534,7 @@ itip_send_comp (ECalComponentItipMethod method,
composer = e_msg_composer_new (shell);
table = e_msg_composer_get_header_table (composer);
- setup_from (method, send_comp, client, table);
+ setup_from (method, send_comp, cal_client, table);
e_composer_header_table_set_subject (table, subject);
e_composer_header_table_set_destinations_to (table, destinations);
@@ -1545,7 +1543,7 @@ itip_send_comp (ECalComponentItipMethod method,
/* Content type */
content_type = comp_content_type (comp, method);
- top_level = comp_toplevel_with_zones (method, comp, client, zones);
+ top_level = comp_toplevel_with_zones (method, comp, cal_client, zones);
ical_string = icalcomponent_as_ical_string_r (top_level);
if (e_cal_component_get_vtype (comp) == E_CAL_COMPONENT_EVENT) {
@@ -1595,8 +1593,8 @@ cleanup:
icalcomponent_free (top_level);
if (users) {
- g_list_foreach (users, (GFunc) g_free, NULL);
- g_list_free (users);
+ g_slist_foreach (users, (GFunc) g_free, NULL);
+ g_slist_free (users);
}
g_free (content_type);
@@ -1609,7 +1607,7 @@ cleanup:
gboolean
reply_to_calendar_comp (ECalComponentItipMethod method,
ECalComponent *send_comp,
- ECal *client,
+ ECalClient *cal_client,
gboolean reply_all,
icalcomponent *zones,
GSList *attachments_list)
@@ -1622,7 +1620,7 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
ECalComponent *comp = NULL;
icalcomponent *top_level = NULL;
icaltimezone *default_zone;
- GList *users = NULL;
+ GSList *users = NULL;
gchar *subject = NULL;
gchar *ical_string = NULL;
gboolean retval = FALSE;
@@ -1636,7 +1634,7 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
/* Tidy up the comp */
comp = comp_compliant (
- method, send_comp, client, zones, default_zone, TRUE);
+ method, send_comp, cal_client, zones, default_zone, TRUE);
if (comp == NULL)
goto cleanup;
@@ -1649,13 +1647,13 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
composer = e_msg_composer_new (shell);
table = e_msg_composer_get_header_table (composer);
- setup_from (method, send_comp, client, table);
+ setup_from (method, send_comp, cal_client, table);
e_composer_header_table_set_subject (table, subject);
e_composer_header_table_set_destinations_to (table, destinations);
e_destination_freev (destinations);
- top_level = comp_toplevel_with_zones (method, comp, client, zones);
+ top_level = comp_toplevel_with_zones (method, comp, cal_client, zones);
ical_string = icalcomponent_as_ical_string_r (top_level);
if (e_cal_component_get_vtype (comp) == E_CAL_COMPONENT_EVENT) {
@@ -1703,12 +1701,15 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
e_cal_component_get_dtstart (comp, &dtstart);
if (dtstart.value) {
start_zone = icaltimezone_get_builtin_timezone_from_tzid (dtstart.tzid);
- if (!start_zone) {
- if (!e_cal_get_timezone (client, dtstart.tzid, &start_zone, NULL))
- g_warning (
- "Couldn't get timezone from "
- "server: %s", dtstart.tzid ?
- dtstart.tzid : "");
+ if (!start_zone && dtstart.tzid) {
+ GError *error = NULL;
+
+ if (!e_cal_client_get_timezone_sync (cal_client, dtstart.tzid, &start_zone, NULL, &error))
+ g_debug ("%s: Couldn't get timezone '%s' from server: %s", G_STRFUNC,
+ dtstart.tzid ? dtstart.tzid : "", error ? error->message : "Unknown error");
+
+ if (error)
+ g_error_free (error);
}
if (!start_zone || dtstart.value->is_date)
@@ -1767,8 +1768,8 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
icalcomponent_free (top_level);
if (users) {
- g_list_foreach (users, (GFunc) g_free, NULL);
- g_list_free (users);
+ g_slist_foreach (users, (GFunc) g_free, NULL);
+ g_slist_free (users);
}
g_free (subject);
@@ -1778,11 +1779,11 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
gboolean
itip_publish_begin (ECalComponent *pub_comp,
- ECal *client,
+ ECalClient *cal_client,
gboolean cloned,
ECalComponent **clone)
{
- icalcomponent *icomp =NULL, *icomp_clone = NULL;
+ icalcomponent *icomp = NULL, *icomp_clone = NULL;
icalproperty *prop;
if (e_cal_component_get_vtype (pub_comp) == E_CAL_COMPONENT_FREEBUSY) {
@@ -1920,7 +1921,7 @@ comp_fb_normalize (icalcomponent *icomp)
}
gboolean
-itip_publish_comp (ECal *client,
+itip_publish_comp (ECalClient *cal_client,
gchar *uri,
gchar *username,
gchar *password,
diff --git a/calendar/gui/itip-utils.h b/calendar/gui/itip-utils.h
index c5718894fc..6da2519d07 100644
--- a/calendar/gui/itip-utils.h
+++ b/calendar/gui/itip-utils.h
@@ -22,7 +22,7 @@
#include <libical/ical.h>
#include <string.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
#include <libedataserver/e-account-list.h>
@@ -53,35 +53,35 @@ gchar ** itip_get_user_identities (void);
gchar * itip_get_fallback_identity (void);
gboolean itip_address_is_user (const gchar *address);
gboolean itip_organizer_is_user (ECalComponent *comp,
- ECal *client);
+ ECalClient *cal_client);
gboolean itip_organizer_is_user_ex (ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
gboolean skip_cap_test);
gboolean itip_sentby_is_user (ECalComponent *comp,
- ECal *client);
+ ECalClient *cal_client);
const gchar * itip_strip_mailto (const gchar *address);
gchar * itip_get_comp_attendee (ECalComponent *comp,
- ECal *client);
+ ECalClient *cal_client);
gboolean itip_send_comp (ECalComponentItipMethod method,
ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
icalcomponent *zones,
GSList *attachments_list,
- GList *users,
+ GSList *users,
gboolean strip_alarms,
gboolean only_new_attendees);
-gboolean itip_publish_comp (ECal *client,
+gboolean itip_publish_comp (ECalClient *cal_client,
gchar *uri,
gchar *username,
gchar *password,
ECalComponent **pub_comp);
gboolean itip_publish_begin (ECalComponent *pub_comp,
- ECal *client,
+ ECalClient *cal_client,
gboolean cloned,
ECalComponent **clone);
gboolean reply_to_calendar_comp (ECalComponentItipMethod method,
ECalComponent *send_comp,
- ECal *client,
+ ECalClient *cal_client,
gboolean reply_all,
icalcomponent *zones,
GSList *attachments_list);
diff --git a/calendar/gui/print.c b/calendar/gui/print.c
index a4d4fd61c8..702f281b5a 100644
--- a/calendar/gui/print.c
+++ b/calendar/gui/print.c
@@ -57,7 +57,7 @@ typedef struct PrintCompItem PrintCompItem;
typedef struct PrintCalItem PrintCalItem;
struct PrintCompItem {
- ECal *client;
+ ECalClient *client;
ECalComponent *comp;
icaltimezone *zone;
gboolean use_24_hour_format;
@@ -2924,18 +2924,22 @@ write_label_piece (time_t t,
}
static icaltimezone*
-get_zone_from_tzid (ECal *client, const gchar *tzid)
+get_zone_from_tzid (ECalClient *client, const gchar *tzid)
{
icaltimezone *zone;
/* Note that the timezones may not be on the server, so we try to get
the builtin timezone with the TZID first. */
zone = icaltimezone_get_builtin_timezone_from_tzid (tzid);
- if (!zone) {
- if (!e_cal_get_timezone (client, tzid, &zone, NULL))
- /* FIXME: Handle error better. */
- g_warning ("Couldn't get timezone from server: %s",
- tzid ? tzid : "");
+ if (!zone && tzid) {
+ GError *error = NULL;
+
+ if (!e_cal_client_get_timezone_sync (client, tzid, &zone, NULL, &error)) {
+ g_warning ("Couldn't get timezone '%s' from server: %s",
+ tzid ? tzid : "", error ? error->message : "Unknown error");
+ if (error)
+ g_error_free (error);
+ }
}
return zone;
@@ -2944,7 +2948,7 @@ get_zone_from_tzid (ECal *client, const gchar *tzid)
static void
print_date_label (GtkPrintContext *context,
ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
icaltimezone *zone,
gboolean use_24_hour_format,
gdouble left,
@@ -3137,7 +3141,7 @@ print_comp_draw_real (GtkPrintOperation *operation,
{
GtkPageSetup *setup;
PangoFontDescription *font;
- ECal *client;
+ ECalClient *client;
ECalComponent *comp;
ECalComponentVType vtype;
ECalComponentText text;
@@ -3413,7 +3417,7 @@ print_comp_begin_print (GtkPrintOperation *operation,
void
print_comp (ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
icaltimezone *zone,
gboolean use_24_hour_format,
GtkPrintOperationAction action)
@@ -3424,7 +3428,7 @@ print_comp (ECalComponent *comp,
g_return_if_fail (E_IS_CAL_COMPONENT (comp));
pci.comp = comp;
- pci.client = client;
+ pci.client = cal_client;
pci.zone = zone;
pci.use_24_hour_format = use_24_hour_format;
diff --git a/calendar/gui/print.h b/calendar/gui/print.h
index 85397b0356..b81bcfa36c 100644
--- a/calendar/gui/print.h
+++ b/calendar/gui/print.h
@@ -40,7 +40,7 @@ void print_calendar (GnomeCalendar *gcal,
GtkPrintOperationAction action,
time_t start);
void print_comp (ECalComponent *comp,
- ECal *client,
+ ECalClient *cal_client,
icaltimezone *zone,
gboolean use_24_hour_format,
GtkPrintOperationAction action);
diff --git a/calendar/gui/tag-calendar.c b/calendar/gui/tag-calendar.c
index 0af271e1de..dff1285587 100644
--- a/calendar/gui/tag-calendar.c
+++ b/calendar/gui/tag-calendar.c
@@ -151,18 +151,18 @@ get_recur_events_italic (void)
**/
void
tag_calendar_by_client (ECalendar *ecal,
- ECal *client)
+ ECalClient *client)
{
struct calendar_tag_closure c;
g_return_if_fail (E_IS_CALENDAR (ecal));
- g_return_if_fail (E_IS_CAL (client));
+ g_return_if_fail (E_IS_CAL_CLIENT (client));
/* If the ECalendar isn't visible, we just return. */
if (!gtk_widget_get_visible (GTK_WIDGET (ecal)))
return;
- if (e_cal_get_load_state (client) != E_CAL_LOAD_LOADED)
+ if (!e_client_is_opened (E_CLIENT (client)))
return;
if (!prepare_tag (ecal, &c, NULL, TRUE))
@@ -171,7 +171,7 @@ tag_calendar_by_client (ECalendar *ecal,
c.skip_transparent_events = TRUE;
c.recur_events_italic = get_recur_events_italic ();
- e_cal_generate_instances (
+ e_cal_client_generate_instances (
client, c.start_time, c.end_time, tag_calendar_cb, &c);
}
@@ -182,19 +182,25 @@ static icaltimezone*
resolve_tzid_cb (const gchar *tzid,
gpointer data)
{
- ECal *client;
+ ECalClient *client;
icaltimezone *zone = NULL;
- g_return_val_if_fail (E_IS_CAL (data), NULL);
+ g_return_val_if_fail (E_IS_CAL_CLIENT (data), NULL);
- client = E_CAL (data);
+ client = E_CAL_CLIENT (data);
/* Try to find the builtin timezone first. */
zone = icaltimezone_get_builtin_timezone_from_tzid (tzid);
- if (!zone) {
+ if (!zone && tzid) {
/* FIXME: Handle errors. */
- e_cal_get_timezone (client, tzid, &zone, NULL);
+ GError *error = NULL;
+
+ if (!e_cal_client_get_timezone_sync (client, tzid, &zone, NULL, &error)) {
+ g_debug ("%s: Failed to get timezone '%s': %s", G_STRFUNC, tzid, error->message);
+ if (error)
+ g_error_free (error);
+ }
}
return zone;
@@ -217,7 +223,7 @@ resolve_tzid_cb (const gchar *tzid,
void
tag_calendar_by_comp (ECalendar *ecal,
ECalComponent *comp,
- ECal *client,
+ ECalClient *client,
icaltimezone *display_zone,
gboolean clear_first,
gboolean comp_is_on_server,
@@ -239,7 +245,7 @@ tag_calendar_by_comp (ECalendar *ecal,
c.recur_events_italic = can_recur_events_italic && get_recur_events_italic ();
if (comp_is_on_server)
- e_cal_generate_instances_for_object (
+ e_cal_client_generate_instances_for_object (
client, e_cal_component_get_icalcomponent (comp),
c.start_time, c.end_time, tag_calendar_cb, &c);
else
diff --git a/calendar/gui/tag-calendar.h b/calendar/gui/tag-calendar.h
index ebf996173e..2dc5bff176 100644
--- a/calendar/gui/tag-calendar.h
+++ b/calendar/gui/tag-calendar.h
@@ -28,11 +28,11 @@
#define TAG_CALENDAR_H
#include <misc/e-calendar.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
-void tag_calendar_by_client (ECalendar *ecal, ECal *client);
+void tag_calendar_by_client (ECalendar *ecal, ECalClient *client);
void tag_calendar_by_comp (ECalendar *ecal, ECalComponent *comp,
- ECal *client, icaltimezone *display_zone,
+ ECalClient *client, icaltimezone *display_zone,
gboolean clear_first, gboolean comp_is_on_server,
gboolean can_recur_events_italic);
diff --git a/calendar/importers/Makefile.am b/calendar/importers/Makefile.am
index b54e619249..dc7b0dc89f 100644
--- a/calendar/importers/Makefile.am
+++ b/calendar/importers/Makefile.am
@@ -19,7 +19,6 @@ libevolution_calendar_importers_la_LDFLAGS = $(NO_UNDEFINED)
libevolution_calendar_importers_la_LIBADD = \
$(top_builddir)/e-util/libeutil.la \
- $(top_builddir)/calendar/common/libevolution-calendarprivate.la \
$(top_builddir)/shell/libeshell.la \
$(top_builddir)/widgets/misc/libemiscwidgets.la \
$(EVOLUTION_CALENDAR_LIBS) \
diff --git a/calendar/importers/icalendar-importer.c b/calendar/importers/icalendar-importer.c
index 38c1fc8251..c523e57e39 100644
--- a/calendar/importers/icalendar-importer.c
+++ b/calendar/importers/icalendar-importer.c
@@ -35,13 +35,13 @@
#include <gtk/gtk.h>
-#include <libecal/e-cal.h>
+#include <libecal/e-cal-client.h>
#include <libecal/e-cal-time-util.h>
+#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-selector.h>
#include <libical/icalvcal.h>
#include "evolution-calendar-importer.h"
#include "shell/e-shell.h"
-#include "common/authentication.h"
#include "gui/calendar-config-keys.h"
#include "e-util/e-import.h"
@@ -58,21 +58,25 @@ typedef struct {
guint idle_id;
- ECal *client;
- ECalSourceType source_type;
+ ECalClient *cal_client;
+ EClientSourceType source_type;
icalcomponent *icalcomp;
- guint cancelled:1;
+ GCancellable *cancellable;
} ICalImporter;
typedef struct {
- guint cancelled:1;
+ EImport *ei;
+ EImportTarget *target;
+ GList *tasks;
+ icalcomponent *icalcomp;
+ GCancellable *cancellable;
} ICalIntelligentImporter;
static const gint import_type_map[] = {
- E_CAL_SOURCE_TYPE_EVENT,
- E_CAL_SOURCE_TYPE_TODO,
+ E_CLIENT_SOURCE_TYPE_EVENTS,
+ E_CLIENT_SOURCE_TYPE_TASKS,
-1
};
@@ -99,11 +103,13 @@ is_icalcomp_usable (icalcomponent *icalcomp)
static void
ivcal_import_done (ICalImporter *ici)
{
- g_object_unref (ici->client);
+ if (ici->cal_client)
+ g_object_unref (ici->cal_client);
icalcomponent_free (ici->icalcomp);
e_import_complete (ici->import, ici->target);
g_object_unref (ici->import);
+ g_object_unref (ici->cancellable);
g_free (ici);
}
@@ -165,12 +171,39 @@ prepare_tasks (icalcomponent *icalcomp, GList *vtodos)
g_list_free (vtodos);
}
-static gboolean
-update_objects (ECal *client, icalcomponent *icalcomp)
+struct UpdateObjectsData
+{
+ void (*done_cb) (gpointer user_data);
+ gpointer user_data;
+};
+
+static void
+receive_objects_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ ECalClient *cal_client = E_CAL_CLIENT (source_object);
+ struct UpdateObjectsData *uod = user_data;
+ GError *error = NULL;
+
+ g_return_if_fail (uod != NULL);
+
+ e_cal_client_receive_objects_finish (cal_client, result, &error);
+
+ if (error) {
+ g_debug ("%s: Failed to receive objects: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
+
+ if (uod->done_cb)
+ uod->done_cb (uod->user_data);
+ g_free (uod);
+}
+
+static void
+update_objects (ECalClient *cal_client, icalcomponent *icalcomp, GCancellable *cancellable, void (*done_cb)(gpointer user_data), gpointer user_data)
{
icalcomponent_kind kind;
icalcomponent *vcal;
- gboolean success = TRUE;
+ struct UpdateObjectsData *uod;
kind = icalcomponent_isa (icalcomp);
if (kind == ICAL_VTODO_COMPONENT || kind == ICAL_VEVENT_COMPONENT) {
@@ -184,15 +217,21 @@ update_objects (ECal *client, icalcomponent *icalcomp)
vcal = icalcomponent_new_clone (icalcomp);
if (!icalcomponent_get_first_property (vcal, ICAL_METHOD_PROPERTY))
icalcomponent_set_method (vcal, ICAL_METHOD_PUBLISH);
- } else
- return FALSE;
+ } else {
+ if (done_cb)
+ done_cb (user_data);
+ return;
+ }
- if (!e_cal_receive_objects (client, vcal, NULL))
- success = FALSE;
+ uod = g_new0 (struct UpdateObjectsData, 1);
+ uod->done_cb = done_cb;
+ uod->user_data = user_data;
+
+ e_cal_client_receive_objects (cal_client, vcal, cancellable, receive_objects_ready_cb, uod);
icalcomponent_free (vcal);
- return success;
+ return;
}
struct _selector_data {
@@ -246,7 +285,7 @@ ivcal_getwidget (EImport *ei, EImportTarget *target, EImportImporter *im)
struct _selector_data *sd;
/* FIXME Better error handling */
- if (!e_cal_get_sources (&source_list, import_type_map[i], NULL))
+ if (!e_cal_client_get_sources (&source_list, import_type_map[i], NULL))
continue;
selector = e_source_selector_new (source_list);
@@ -290,71 +329,86 @@ ivcal_getwidget (EImport *ei, EImportTarget *target, EImportImporter *im)
return vbox;
}
+static void
+ivcal_call_import_done (gpointer user_data)
+{
+ ivcal_import_done (user_data);
+}
+
static gboolean
ivcal_import_items (gpointer d)
{
ICalImporter *ici = d;
switch (ici->source_type) {
- case E_CAL_SOURCE_TYPE_EVENT:
+ case E_CLIENT_SOURCE_TYPE_EVENTS:
prepare_events (ici->icalcomp, NULL);
- if (!update_objects (ici->client, ici->icalcomp)) {
- /* FIXME: e_alert ... */;
- }
+ update_objects (ici->cal_client, ici->icalcomp, ici->cancellable, ivcal_call_import_done, ici);
break;
- case E_CAL_SOURCE_TYPE_TODO:
+ case E_CLIENT_SOURCE_TYPE_TASKS:
prepare_tasks (ici->icalcomp, NULL);
- if (!update_objects (ici->client, ici->icalcomp)) {
- /* FIXME: e_alert ... */;
- }
+ update_objects (ici->cal_client, ici->icalcomp, ici->cancellable, ivcal_call_import_done, ici);
break;
default:
- g_return_val_if_reached (FALSE);
+ g_warn_if_reached ();
+
+ ici->idle_id = 0;
+ ivcal_import_done (ici);
+ return FALSE;
}
- ivcal_import_done (ici);
ici->idle_id = 0;
return FALSE;
}
static void
-ivcal_opened (ECal *ecal, const GError *error, ICalImporter *ici)
+ivcal_opened (GObject *source_object, GAsyncResult *result, gpointer user_data)
{
- if (!ici->cancelled && !error) {
+ EClient *client = NULL;
+ ICalImporter *ici = user_data;
+ GError *error = NULL;
+
+ g_return_if_fail (ici != NULL);
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ ici->cal_client = client ? E_CAL_CLIENT (client) : NULL;
+
+ if (!g_cancellable_is_cancelled (ici->cancellable) && !error) {
e_import_status(ici->import, ici->target, _("Importing..."), 0);
ici->idle_id = g_idle_add (ivcal_import_items, ici);
} else
ivcal_import_done (ici);
+
+ if (error) {
+ g_debug ("%s: Failed to open calendar: %s", G_STRFUNC, error->message);
+ g_error_free (error);
+ }
}
static void
ivcal_import (EImport *ei, EImportTarget *target, icalcomponent *icalcomp)
{
- ECal *client;
- ECalSourceType type;
+ EClientSourceType type;
+ ICalImporter *ici = g_malloc0 (sizeof (*ici));
type = GPOINTER_TO_INT(g_datalist_get_data(&target->data, "primary-type"));
- client = e_auth_new_cal_from_source (g_datalist_get_data(&target->data, "primary-source"), type);
- if (client) {
- ICalImporter *ici = g_malloc0 (sizeof (*ici));
-
- ici->import = ei;
- g_datalist_set_data(&target->data, "ivcal-data", ici);
- g_object_ref (ei);
- ici->target = target;
- ici->icalcomp = icalcomp;
- ici->client = client;
- ici->source_type = type;
- e_import_status(ei, target, _("Opening calendar"), 0);
- g_signal_connect(client, "cal-opened-ex", G_CALLBACK(ivcal_opened), ici);
- e_cal_open_async (client, TRUE);
- return;
- } else {
- icalcomponent_free (icalcomp);
- e_import_complete (ei, target);
- }
+ ici->import = ei;
+ g_datalist_set_data(&target->data, "ivcal-data", ici);
+ g_object_ref (ei);
+ ici->target = target;
+ ici->icalcomp = icalcomp;
+ ici->cal_client = NULL;
+ ici->source_type = type;
+ ici->cancellable = g_cancellable_new ();
+ e_import_status (ei, target, _("Opening calendar"), 0);
+
+ e_client_utils_open_new (g_datalist_get_data(&target->data, "primary-source"), type, FALSE, ici->cancellable,
+ e_client_utils_authenticate_handler, NULL,
+ ivcal_opened, ici);
}
static void
@@ -363,7 +417,7 @@ ivcal_cancel (EImport *ei, EImportTarget *target, EImportImporter *im)
ICalImporter *ici = g_datalist_get_data(&target->data, "ivcal-data");
if (ici)
- ici->cancelled = 1;
+ g_cancellable_cancel (ici->cancellable);
}
/* ********************************************************************** */
@@ -684,13 +738,152 @@ gnome_calendar_supported (EImport *ei, EImportTarget *target, EImportImporter *i
}
static void
+free_ici (gpointer ptr)
+{
+ ICalIntelligentImporter *ici = ptr;
+
+ if (!ici)
+ return;
+
+ if (ici->icalcomp)
+ icalcomponent_free (ici->icalcomp);
+
+ g_object_unref (ici->cancellable);
+ g_free (ici);
+}
+
+struct OpenDefaultSourceData
+{
+ ICalIntelligentImporter *ici;
+ void (* opened_cb) (ECalClient *cal_client, const GError *error, ICalIntelligentImporter *ici);
+};
+
+static void
+default_source_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
+{
+ EClient *client = NULL;
+ struct OpenDefaultSourceData *odsd = user_data;
+ GError *error = NULL;
+
+ g_return_if_fail (odsd != NULL);
+ g_return_if_fail (odsd->ici != NULL);
+ g_return_if_fail (odsd->opened_cb != NULL);
+
+ if (!e_client_utils_open_new_finish (E_SOURCE (source_object), result, &client, &error))
+ client = NULL;
+
+ odsd->opened_cb (client ? E_CAL_CLIENT (client) : NULL, error, odsd->ici);
+
+ if (client)
+ g_object_unref (client);
+ if (error)
+ g_error_free (error);
+
+ g_free (odsd);
+}
+
+static void
+open_default_source (ICalIntelligentImporter *ici, ECalClientSourceType source_type, void (* opened_cb) (ECalClient *cal_client, const GError *error, ICalIntelligentImporter *ici))
+{
+ ESource *source;
+ ECalClient *cal_client;
+ GError *error = NULL;
+ struct OpenDefaultSourceData *odsd;
+
+ g_return_if_fail (ici != NULL);
+ g_return_if_fail (opened_cb != NULL);
+
+ cal_client = e_cal_client_new_default (source_type, NULL);
+ if (!cal_client)
+ cal_client = e_cal_client_new_system (source_type, &error);
+
+ if (!cal_client) {
+ opened_cb (NULL, error, ici);
+ if (error)
+ g_error_free (error);
+ return;
+ }
+
+ source = e_client_get_source (E_CLIENT (cal_client));
+ g_return_if_fail (source != NULL);
+
+ source = g_object_ref (source);
+ g_object_unref (cal_client);
+
+ odsd = g_new0 (struct OpenDefaultSourceData, 1);
+ odsd->ici = ici;
+ odsd->opened_cb = opened_cb;
+
+ e_import_status (ici->ei, ici->target, _("Opening calendar"), 0);
+
+ e_client_utils_open_new (source, source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS ? E_CLIENT_SOURCE_TYPE_EVENTS : E_CLIENT_SOURCE_TYPE_TASKS, FALSE, ici->cancellable,
+ e_client_utils_authenticate_handler, NULL,
+ default_source_opened_cb, odsd);
+
+ g_object_unref (source);
+}
+
+static void
+continue_done_cb (gpointer user_data)
+{
+ ICalIntelligentImporter *ici = user_data;
+
+ g_return_if_fail (ici != NULL);
+
+ e_import_complete (ici->ei, ici->target);
+}
+
+static void
+gc_import_tasks (ECalClient *cal_client, const GError *error, ICalIntelligentImporter *ici)
+{
+ g_return_if_fail (ici != NULL);
+
+ if (!cal_client) {
+ g_debug ("%s: Failed to open tasks: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ e_import_complete (ici->ei, ici->target);
+ return;
+ }
+
+ e_import_status (ici->ei, ici->target, _("Importing..."), 0);
+
+ prepare_tasks (ici->icalcomp, ici->tasks);
+ update_objects (cal_client, ici->icalcomp, ici->cancellable, continue_done_cb, ici);
+}
+
+static void
+continue_tasks_cb (gpointer user_data)
+{
+ ICalIntelligentImporter *ici = user_data;
+
+ g_return_if_fail (ici != NULL);
+
+ open_default_source (ici, E_CAL_CLIENT_SOURCE_TYPE_TASKS, gc_import_tasks);
+}
+
+static void
+gc_import_events (ECalClient *cal_client, const GError *error, ICalIntelligentImporter *ici)
+{
+ g_return_if_fail (ici != NULL);
+
+ if (!cal_client) {
+ g_debug ("%s: Failed to open events calendar: %s", G_STRFUNC, error ? error->message : "Unknown error");
+ if (ici->tasks)
+ open_default_source (ici, E_CAL_CLIENT_SOURCE_TYPE_TASKS, gc_import_tasks);
+ else
+ e_import_complete (ici->ei, ici->target);
+ return;
+ }
+
+ e_import_status (ici->ei, ici->target, _("Importing..."), 0);
+
+ update_objects (cal_client, ici->icalcomp, ici->cancellable, ici->tasks ? continue_tasks_cb : continue_done_cb, ici);
+}
+
+static void
gnome_calendar_import (EImport *ei, EImportTarget *target, EImportImporter *im)
{
icalcomponent *icalcomp = NULL;
gchar *filename;
- GList *vtodos;
- ECal *calendar_client = NULL, *tasks_client = NULL;
- gint t;
gint do_calendar, do_tasks;
ICalIntelligentImporter *ici;
@@ -704,21 +897,6 @@ gnome_calendar_import (EImport *ei, EImportTarget *target, EImportImporter *im)
if (!do_calendar && !do_tasks)
return;
- e_import_status(ei, target, _("Opening calendar"), 0);
-
- /* Try to open the default calendar & tasks folders. */
- if (do_calendar) {
- calendar_client = e_auth_new_cal_from_default (E_CAL_SOURCE_TYPE_EVENT);
- if (!calendar_client)
- goto out;
- }
-
- if (do_tasks) {
- tasks_client = e_auth_new_cal_from_default (E_CAL_SOURCE_TYPE_TODO);
- if (!tasks_client)
- goto out;
- }
-
/* Load the Gnome Calendar file and convert to iCalendar. */
filename = g_build_filename(g_get_home_dir (), "user-cal.vcf", NULL);
icalcomp = load_vcalendar_file (filename);
@@ -729,64 +907,29 @@ gnome_calendar_import (EImport *ei, EImportTarget *target, EImportImporter *im)
goto out;
ici = g_malloc0 (sizeof (*ici));
- g_datalist_set_data_full(&target->data, "gnomecal-data", ici, g_free);
+ ici->ei = ei;
+ ici->target = target;
+ ici->cancellable = g_cancellable_new ();
+ ici->icalcomp = icalcomp;
+ icalcomp = NULL;
- /* Wait for client to finish opening the calendar & tasks folders. */
- for (t = 0; t < IMPORTER_TIMEOUT_SECONDS; t++) {
- ECalLoadState calendar_state, tasks_state;
+ g_datalist_set_data_full(&target->data, "gnomecal-data", ici, free_ici);
- calendar_state = tasks_state = E_CAL_LOAD_LOADED;
-
- /* We need this so the ECal gets notified that the
- folder is opened, via Corba. */
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- if (do_calendar)
- calendar_state = e_cal_get_load_state (calendar_client);
-
- if (do_tasks)
- tasks_state = e_cal_get_load_state (tasks_client);
-
- if (calendar_state == E_CAL_LOAD_LOADED
- && tasks_state == E_CAL_LOAD_LOADED)
- break;
-
- g_usleep (1000000);
- if (ici->cancelled)
- goto out;
+ prepare_events (ici->icalcomp, &ici->tasks);
+ if (do_calendar) {
+ open_default_source (ici, E_CAL_CLIENT_SOURCE_TYPE_EVENTS, gc_import_events);
+ return;
}
- /* If we timed out, just return. */
- if (t == IMPORTER_TIMEOUT_SECONDS)
- goto out;
-
- e_import_status(ei, target, _("Importing..."), 0);
-
- /*
- * Import the calendar events into the default calendar folder.
- */
- prepare_events (icalcomp, &vtodos);
- if (do_calendar)
- update_objects (calendar_client, icalcomp);
-
- if (ici->cancelled)
- goto out;
-
- /*
- * Import the tasks into the default tasks folder.
- */
- prepare_tasks (icalcomp, vtodos);
- if (do_tasks)
- update_objects (tasks_client, icalcomp);
+ prepare_tasks (ici->icalcomp, ici->tasks);
+ if (do_tasks) {
+ open_default_source (ici, E_CAL_CLIENT_SOURCE_TYPE_TASKS, gc_import_tasks);
+ return;
+ }
out:
if (icalcomp)
icalcomponent_free (icalcomp);
- if (calendar_client)
- g_object_unref (calendar_client);
- if (tasks_client)
- g_object_unref (tasks_client);
e_import_complete (ei, target);
}
@@ -841,7 +984,7 @@ gnome_calendar_cancel (EImport *ei, EImportTarget *target, EImportImporter *im)
ICalIntelligentImporter *ici = g_datalist_get_data(&target->data, "gnomecal-data");
if (ici)
- ici->cancelled = 1;
+ g_cancellable_cancel (ici->cancellable);
}
static EImportImporter gnome_calendar_importer = {