[evolution-data-server/account-mgmt: 15/28] Add an ESource extension for the groupwise backend.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/account-mgmt: 15/28] Add an ESource extension for the groupwise backend.
- Date: Wed, 2 Mar 2011 03:46:17 +0000 (UTC)
commit aae2fd238117f3eb002ce12ddfe2c5c7166f2180
Author: Matthew Barnes <mbarnes redhat com>
Date: Sat Nov 20 09:27:05 2010 -0500
Add an ESource extension for the groupwise backend.
addressbook/backends/groupwise/Makefile.am | 35 +-
.../backends/groupwise/e-book-backend-groupwise.c | 104 ++--
.../groupwise/e-cal-backend-groupwise-factory.c | 215 +++----
.../groupwise/e-cal-backend-groupwise-utils.c | 92 ++--
.../backends/groupwise/e-cal-backend-groupwise.c | 130 ++---
servers/groupwise/Makefile.am | 17 +-
servers/groupwise/create-account.c | 8 -
servers/groupwise/e-gw-connection.c | 2 +-
servers/groupwise/e-gw-connection.h | 2 +-
servers/groupwise/e-source-groupwise.c | 666 ++++++++++++++++++++
servers/groupwise/e-source-groupwise.h | 119 ++++
11 files changed, 1067 insertions(+), 323 deletions(-)
---
diff --git a/addressbook/backends/groupwise/Makefile.am b/addressbook/backends/groupwise/Makefile.am
index 3e64da5..e4ce93f 100644
--- a/addressbook/backends/groupwise/Makefile.am
+++ b/addressbook/backends/groupwise/Makefile.am
@@ -30,23 +30,22 @@ libebookbackendgroupwise_la_LIBADD = \
libebookbackendgroupwise_la_LDFLAGS = \
-module -avoid-version $(NO_UNDEFINED)
-noinst_PROGRAMS = create-account
-
-create_account_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- -I$(top_srcdir)/addressbook \
- -I$(top_builddir)/addressbook \
- -I$(top_srcdir)/servers/groupwise \
- $(EVOLUTION_ADDRESSBOOK_CFLAGS)
-
-create_account_SOURCES = create-account.c
-
-create_account_LDADD = $(top_builddir)/addressbook/libedata-book/libedata-book-1.2.la \
- $(top_builddir)/libedataserver/libedataserver-1.2.la \
- $(top_builddir)/servers/groupwise/libegroupwise-1.2.la \
- $(E_DATA_SERVER_LIBS)
-
+#noinst_PROGRAMS = create-account
+
+#create_account_CPPFLAGS = \
+# $(AM_CPPFLAGS) \
+# -I$(top_srcdir) \
+# -I$(top_builddir) \
+# -I$(top_srcdir)/addressbook \
+# -I$(top_builddir)/addressbook \
+# -I$(top_srcdir)/servers/groupwise \
+# $(EVOLUTION_ADDRESSBOOK_CFLAGS)
+
+#create_account_SOURCES = create-account.c
+
+#create_account_LDADD = $(top_builddir)/addressbook/libedata-book/libedata-book-1.2.la \
+# $(top_builddir)/libedataserver/libedataserver-1.2.la \
+# $(top_builddir)/servers/groupwise/libegroupwise-1.2.la \
+# $(E_DATA_SERVER_LIBS)
-include $(top_srcdir)/git.mk
diff --git a/addressbook/backends/groupwise/e-book-backend-groupwise.c b/addressbook/backends/groupwise/e-book-backend-groupwise.c
index 20be955..835de2f 100644
--- a/addressbook/backends/groupwise/e-book-backend-groupwise.c
+++ b/addressbook/backends/groupwise/e-book-backend-groupwise.c
@@ -43,6 +43,8 @@
#include "libedataserver/e-data-server-util.h"
#include "libedataserver/e-flag.h"
#include "libedataserver/e-url.h"
+#include "libedataserver/e-source-offline.h"
+#include "libedataserver/e-source-security.h"
#include "libebook/e-contact.h"
#include "libebook/e-destination.h"
#include "libedata-book/e-book-backend-sexp.h"
@@ -55,6 +57,7 @@
#include "e-gw-connection.h"
#include "e-gw-item.h"
#include "e-gw-filter.h"
+#include "e-source-groupwise.h"
#define EDB_ERROR(_code) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, NULL)
#define EDB_ERROR_EX(_code,_msg) e_data_book_create_error (E_DATA_BOOK_STATUS_ ## _code, _msg)
@@ -82,7 +85,7 @@ struct _EBookBackendGroupwisePrivate {
gboolean is_cache_ready;
gboolean is_summary_ready;
gboolean marked_for_offline;
- gchar *use_ssl;
+ const gchar *security;
gint mode;
EBookBackendSummary *summary;
GMutex *update_cache_mutex;
@@ -3242,7 +3245,7 @@ e_book_backend_groupwise_authenticate_user (EBookBackend *backend,
}
priv->cnc = e_gw_connection_new_with_error_handler (priv->uri, user, passwd, &error);
- if (!E_IS_GW_CONNECTION(priv->cnc) && priv->use_ssl && g_str_equal (priv->use_ssl, "when-possible")) {
+ if (!E_IS_GW_CONNECTION(priv->cnc) && g_strcmp0 (priv->security, "when-possible") == 0) {
http_uri = g_strconcat ("http://", priv->uri + 8, NULL);
priv->cnc = e_gw_connection_new (http_uri, user, passwd);
g_free (http_uri);
@@ -3449,59 +3452,49 @@ e_book_backend_groupwise_load_source (EBookBackend *backend,
{
EBookBackendGroupwise *ebgw;
EBookBackendGroupwisePrivate *priv;
+ ESourceGroupwise *gw_extension;
+ ESourceOffline *offline_extension;
+ ESourceSecurity *security_extension;
gchar *dirname, *filename, *tmp;
- gchar *book_name;
- gchar *uri;
- gchar **tokens;
const gchar *cache_dir;
- const gchar *port;
gint db_error;
DB *db;
DB_ENV *env;
- EUri *parsed_uri;
- const gchar *use_ssl;
- const gchar *offline;
+ const gchar *uid;
+ const gchar *book_name;
+ const gchar *extension_name;
cache_dir = e_book_backend_get_cache_dir (backend);
+ extension_name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+ gw_extension = e_source_get_extension (source, extension_name);
+
+ extension_name = E_SOURCE_EXTENSION_OFFLINE;
+ offline_extension = e_source_get_extension (source, extension_name);
+
+ extension_name = E_SOURCE_EXTENSION_SECURITY;
+ security_extension = e_source_get_extension (source, extension_name);
+
if (enable_debug)
printf("\ne_book_backend_groupwise_load_source.. \n");
ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
priv = ebgw->priv;
g_object_ref (source);
- offline = e_source_get_property (source, "offline_sync");
- if (offline && g_str_equal (offline, "1"))
- priv->marked_for_offline = TRUE;
+ priv->marked_for_offline =
+ e_source_offline_get_stay_synchronized (offline_extension);
- uri = e_source_get_uri (source);
- priv->original_uri = g_strdup (uri);
- if (uri == NULL) {
- g_propagate_error (perror, EDB_ERROR_EX (OTHER_ERROR, "No URI given"));
- return;
- }
+ /* XXX This is a bit of a kludge, but build a URI string out of the
+ * ESource UID so we can locate the ESource again. The ESource
+ * and its extensions contain all the details we need, so there
+ * is no need to embed all those details in the URI itself. */
+ uid = e_source_get_uid (source);
+ priv->original_uri = g_strdup_printf ("esource:%s", uid);
- tokens = g_strsplit (uri, ";", 2);
- g_free (uri);
- if (tokens[0])
- uri = g_strdup (tokens[0]);
- book_name = g_strdup (tokens[1]);
- if (book_name == NULL) {
- g_propagate_error (perror, EDB_ERROR_EX (OTHER_ERROR, "No book name recognized for a URI"));
- return;
- }
- g_strfreev (tokens);
- parsed_uri = e_uri_new (uri);
- port = e_source_get_property (source, "port");
- if (port == NULL)
- port = "7191";
- use_ssl = e_source_get_property (source, "use_ssl");
- if (use_ssl && !g_str_equal (use_ssl, "never"))
- priv->uri = g_strconcat ("https://", parsed_uri->host,":", port, "/soap", NULL );
- else
- priv->uri = g_strconcat ("http://", parsed_uri->host,":", port, "/soap", NULL );
+ priv->uri = e_source_build_groupwise_uri (source);
- priv->book_name = book_name;
+ book_name = e_source_groupwise_get_book_name (gw_extension);
+ priv->book_name = g_strdup (book_name);;
g_free (priv->summary_file_name);
tmp = g_build_filename (cache_dir, priv->book_name, NULL);
@@ -3621,7 +3614,7 @@ e_book_backend_groupwise_load_source (EBookBackend *backend,
return;
}
- priv->use_ssl = g_strdup (use_ssl);
+ priv->security = e_source_security_get_method (security_extension);
priv->only_if_exists = only_if_exists;
e_book_backend_set_is_loaded (E_BOOK_BACKEND (backend), TRUE);
@@ -3636,8 +3629,6 @@ e_book_backend_groupwise_load_source (EBookBackend *backend,
if (priv->mode == E_DATA_BOOK_MODE_LOCAL)
if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)) {
- g_free (uri);
- e_uri_free (parsed_uri);
g_propagate_error (perror, EDB_ERROR (OFFLINE_UNAVAILABLE));
return;
}
@@ -3647,8 +3638,6 @@ e_book_backend_groupwise_load_source (EBookBackend *backend,
ebgw->priv->is_cache_ready = TRUE;
g_free (filename);
g_free (dirname);
- g_free (uri);
- e_uri_free (parsed_uri);
/*if (enable_debug) {
printf ("summary file name = %s\ncache file name = %s \n",
@@ -3656,10 +3645,9 @@ e_book_backend_groupwise_load_source (EBookBackend *backend,
}*/
}
-static void
+static gboolean
e_book_backend_groupwise_remove (EBookBackend *backend,
- EDataBook *book,
- guint32 opid)
+ GError **error)
{
EBookBackendGroupwise *ebgw;
gint status;
@@ -3668,19 +3656,23 @@ e_book_backend_groupwise_remove (EBookBackend *backend,
printf ("\ne_book_backend_groupwise_remove...\n");
ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
if (ebgw->priv->cnc == NULL) {
- e_data_book_respond_remove (book, opid, EDB_ERROR (AUTHENTICATION_REQUIRED));
- return;
+ g_propagate_error (error, EDB_ERROR (AUTHENTICATION_REQUIRED));
+ return FALSE;
}
if (!ebgw->priv->is_writable) {
- e_data_book_respond_remove (book, opid, EDB_ERROR (PERMISSION_DENIED));
- return;
+ g_propagate_error (error, EDB_ERROR (PERMISSION_DENIED));
+ return FALSE;
}
status = e_gw_connection_remove_item (ebgw->priv->cnc, NULL, ebgw->priv->container_id);
if (status == E_GW_CONNECTION_STATUS_OK)
- e_data_book_respond_remove (book, opid, EDB_ERROR (SUCCESS));
- else
- e_data_book_respond_remove (book, opid, EDB_ERROR_FAILED_STATUS (OTHER_ERROR, status));
+ return TRUE;
+ else {
+ g_propagate_error (error, EDB_ERROR_FAILED_STATUS (OTHER_ERROR, status));
+ return FALSE;
+ }
g_unlink (e_book_backend_db_cache_get_filename (ebgw->priv->file_db));
+
+ return TRUE;
}
static gchar *
@@ -3838,9 +3830,6 @@ e_book_backend_groupwise_dispose (GObject *object)
g_object_unref (bgw->priv->summary);
bgw->priv->summary = NULL;
}
- if (bgw->priv->use_ssl) {
- g_free (bgw->priv->use_ssl);
- }
if (bgw->priv->cache_timeout) {
g_source_remove (bgw->priv->cache_timeout);
bgw->priv->cache_timeout = 0;
@@ -3868,6 +3857,7 @@ e_book_backend_groupwise_class_init (EBookBackendGroupwiseClass *klass)
/* Set the virtual methods. */
parent_class->load_source = e_book_backend_groupwise_load_source;
+ parent_class->remove = e_book_backend_groupwise_remove;
parent_class->get_static_capabilities = e_book_backend_groupwise_get_static_capabilities;
parent_class->create_contact = e_book_backend_groupwise_create_contact;
@@ -3883,7 +3873,6 @@ e_book_backend_groupwise_class_init (EBookBackendGroupwiseClass *klass)
parent_class->get_supported_fields = e_book_backend_groupwise_get_supported_fields;
parent_class->get_supported_auth_methods = e_book_backend_groupwise_get_supported_auth_methods;
parent_class->cancel_operation = e_book_backend_groupwise_cancel_operation;
- parent_class->remove = e_book_backend_groupwise_remove;
parent_class->set_mode = e_book_backend_groupwise_set_mode;
object_class->dispose = e_book_backend_groupwise_dispose;
}
@@ -3898,7 +3887,6 @@ e_book_backend_groupwise_init (EBookBackendGroupwise *backend)
priv->is_cache_ready = FALSE;
priv->is_summary_ready = FALSE;
priv->marked_for_offline = FALSE;
- priv->use_ssl = NULL;
priv->cnc = NULL;
priv->original_uri = NULL;
priv->cache_timeout = 0;
diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c b/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c
index 49711a9..7c891b1 100644
--- a/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c
+++ b/calendar/backends/groupwise/e-cal-backend-groupwise-factory.c
@@ -16,18 +16,34 @@
#include "e-cal-backend-groupwise-factory.h"
#include "e-cal-backend-groupwise.h"
-typedef struct {
- ECalBackendFactory parent_object;
-} ECalBackendGroupwiseFactory;
+typedef ECalBackendFactory ECalBackendGroupwiseEventsFactory;
+typedef ECalBackendFactoryClass ECalBackendGroupwiseEventsFactoryClass;
-typedef struct {
- ECalBackendFactoryClass parent_class;
-} ECalBackendGroupwiseFactoryClass;
+typedef ECalBackendFactory ECalBackendGroupwiseJournalFactory;
+typedef ECalBackendFactoryClass ECalBackendGroupwiseJournalFactoryClass;
-static void
-e_cal_backend_groupwise_factory_instance_init (ECalBackendGroupwiseFactory *factory)
-{
-}
+typedef ECalBackendFactory ECalBackendGroupwiseTodosFactory;
+typedef ECalBackendFactoryClass ECalBackendGroupwiseTodosFactoryClass;
+
+/* Forward Declarations */
+GType e_cal_backend_groupwise_events_factory_get_type (void);
+GType e_cal_backend_groupwise_journal_factory_get_type (void);
+GType e_cal_backend_groupwise_todos_factory_get_type (void);
+
+G_DEFINE_DYNAMIC_TYPE (
+ ECalBackendGroupwiseEventsFactory,
+ e_cal_backend_groupwise_events_factory,
+ E_TYPE_CAL_BACKEND_FACTORY)
+
+G_DEFINE_DYNAMIC_TYPE (
+ ECalBackendGroupwiseJournalFactory,
+ e_cal_backend_groupwise_journal_factory,
+ E_TYPE_CAL_BACKEND_FACTORY)
+
+G_DEFINE_DYNAMIC_TYPE (
+ ECalBackendGroupwiseTodosFactory,
+ e_cal_backend_groupwise_todos_factory,
+ E_TYPE_CAL_BACKEND_FACTORY)
static const gchar *
_get_protocol (ECalBackendFactory *factory)
@@ -35,28 +51,20 @@ _get_protocol (ECalBackendFactory *factory)
return "groupwise";
}
-static ECalBackend*
-_todos_new_backend (ECalBackendFactory *factory, ESource *source)
-{
- return g_object_new (e_cal_backend_groupwise_get_type (),
- "source", source,
- "kind", ICAL_VTODO_COMPONENT,
- NULL);
-}
-
static icalcomponent_kind
-_todos_get_kind (ECalBackendFactory *factory)
+_events_get_kind (ECalBackendFactory *factory)
{
- return ICAL_VTODO_COMPONENT;
+ return ICAL_VEVENT_COMPONENT;
}
-static ECalBackend*
-_journal_new_backend (ECalBackendFactory *factory, ESource *source)
+static ECalBackend *
+_events_new_backend (ECalBackendFactory *factory,
+ ESource *source)
{
- return g_object_new (e_cal_backend_groupwise_get_type (),
- "source", source,
- "kind", ICAL_VJOURNAL_COMPONENT,
- NULL);
+ return g_object_new (
+ e_cal_backend_groupwise_get_type (),
+ "kind", ICAL_VEVENT_COMPONENT,
+ "source", source, NULL);
}
static icalcomponent_kind
@@ -65,139 +73,108 @@ _journal_get_kind (ECalBackendFactory *factory)
return ICAL_VJOURNAL_COMPONENT;
}
-static ECalBackend*
-_events_new_backend (ECalBackendFactory *factory, ESource *source)
+static ECalBackend *
+_journal_new_backend (ECalBackendFactory *factory,
+ ESource *source)
{
- return g_object_new (e_cal_backend_groupwise_get_type (),
- "source", source,
- "kind", ICAL_VEVENT_COMPONENT,
- NULL);
+ return g_object_new (
+ e_cal_backend_groupwise_get_type (),
+ "kind", ICAL_VJOURNAL_COMPONENT,
+ "source", source, NULL);
}
static icalcomponent_kind
-_events_get_kind (ECalBackendFactory *factory)
+_todos_get_kind (ECalBackendFactory *factory)
{
- return ICAL_VEVENT_COMPONENT;
+ return ICAL_VTODO_COMPONENT;
}
-static void
-todos_backend_factory_class_init (ECalBackendGroupwiseFactoryClass *klass)
+static ECalBackend *
+_todos_new_backend (ECalBackendFactory *factory,
+ ESource *source)
{
- E_CAL_BACKEND_FACTORY_CLASS (klass)->get_protocol = _get_protocol;
- E_CAL_BACKEND_FACTORY_CLASS (klass)->get_kind = _todos_get_kind;
- E_CAL_BACKEND_FACTORY_CLASS (klass)->new_backend = _todos_new_backend;
+ return g_object_new (
+ e_cal_backend_groupwise_get_type (),
+ "kind", ICAL_VTODO_COMPONENT,
+ "source", source, NULL);
}
static void
-events_backend_factory_class_init (ECalBackendGroupwiseFactoryClass *klass)
+e_cal_backend_groupwise_events_factory_class_init (ECalBackendFactoryClass *class)
{
- E_CAL_BACKEND_FACTORY_CLASS (klass)->get_protocol = _get_protocol;
- E_CAL_BACKEND_FACTORY_CLASS (klass)->get_kind = _events_get_kind;
- E_CAL_BACKEND_FACTORY_CLASS (klass)->new_backend = _events_new_backend;
+ class->get_protocol = _get_protocol;
+ class->get_kind = _events_get_kind;
+ class->new_backend = _events_new_backend;
}
static void
-journal_backend_factory_class_init (ECalBackendGroupwiseFactoryClass *klass)
+e_cal_backend_groupwise_events_factory_class_finalize (ECalBackendFactoryClass *class)
{
- E_CAL_BACKEND_FACTORY_CLASS (klass)->get_protocol = _get_protocol;
- E_CAL_BACKEND_FACTORY_CLASS (klass)->get_kind = _journal_get_kind;
- E_CAL_BACKEND_FACTORY_CLASS (klass)->new_backend = _journal_new_backend;
}
-static GType
-events_backend_factory_get_type (GTypeModule *module)
+static void
+e_cal_backend_groupwise_events_factory_init (ECalBackendFactory *factory)
{
- GType type;
-
- GTypeInfo info = {
- sizeof (ECalBackendGroupwiseFactoryClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) events_backend_factory_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (ECalBackend),
- 0, /* n_preallocs */
- (GInstanceInitFunc) e_cal_backend_groupwise_factory_instance_init
- };
-
- type = g_type_module_register_type (module,
- E_TYPE_CAL_BACKEND_FACTORY,
- "ECalBackendGroupwiseEventsFactory",
- &info, 0);
-
- return type;
}
-static GType
-todos_backend_factory_get_type (GTypeModule *module)
+static void
+e_cal_backend_groupwise_journal_factory_class_init (ECalBackendFactoryClass *class)
{
- GType type;
-
- GTypeInfo info = {
- sizeof (ECalBackendGroupwiseFactoryClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) todos_backend_factory_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (ECalBackend),
- 0, /* n_preallocs */
- (GInstanceInitFunc) e_cal_backend_groupwise_factory_instance_init
- };
-
- type = g_type_module_register_type (module,
- E_TYPE_CAL_BACKEND_FACTORY,
- "ECalBackendGroupwiseTodosFactory",
- &info, 0);
-
- return type;
+ class->get_protocol = _get_protocol;
+ class->get_kind = _journal_get_kind;
+ class->new_backend = _journal_new_backend;
}
-static GType
-journal_backend_factory_get_type (GTypeModule *module)
+static void
+e_cal_backend_groupwise_journal_factory_class_finalize (ECalBackendFactoryClass *class)
{
- GType type;
+}
- GTypeInfo info = {
- sizeof (ECalBackendGroupwiseFactoryClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) journal_backend_factory_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (ECalBackend),
- 0, /* n_preallocs */
- (GInstanceInitFunc) e_cal_backend_groupwise_factory_instance_init
- };
+static void
+e_cal_backend_groupwise_journal_factory_init (ECalBackendFactory *factory)
+{
+}
- type = g_type_module_register_type (module,
- E_TYPE_CAL_BACKEND_FACTORY,
- "ECalBackendGroupwiseJournalFactory",
- &info, 0);
+static void
+e_cal_backend_groupwise_todos_factory_class_init (ECalBackendFactoryClass *class)
+{
+ class->get_protocol = _get_protocol;
+ class->get_kind = _todos_get_kind;
+ class->new_backend = _todos_new_backend;
+}
- return type;
+static void
+e_cal_backend_groupwise_todos_factory_class_finalize (ECalBackendFactoryClass *class)
+{
}
-
-static GType groupwise_types[3];
+static void
+e_cal_backend_groupwise_todos_factory_init (ECalBackendFactory *factory)
+{
+}
void
-eds_module_initialize (GTypeModule *module)
+eds_module_initialize (GTypeModule *type_module)
{
- groupwise_types[0] = todos_backend_factory_get_type (module);
- groupwise_types[1] = events_backend_factory_get_type (module);
- groupwise_types[2] = journal_backend_factory_get_type (module);
+ e_cal_backend_groupwise_events_factory_register_type (type_module);
+ e_cal_backend_groupwise_journal_factory_register_type (type_module);
+ e_cal_backend_groupwise_todos_factory_register_type (type_module);
}
void
-eds_module_shutdown (void)
+eds_module_shutdown (void)
{
}
void
eds_module_list_types (const GType **types, gint *num_types)
{
+ static GType groupwise_types[3];
+
+ groupwise_types[0] = e_cal_backend_groupwise_events_factory_get_type ();
+ groupwise_types[1] = e_cal_backend_groupwise_journal_factory_get_type ();
+ groupwise_types[2] = e_cal_backend_groupwise_todos_factory_get_type ();
+
*types = groupwise_types;
- *num_types = 3;
+ *num_types = G_N_ELEMENTS (groupwise_types);
}
diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c b/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
index 23984bd..56982bf 100644
--- a/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
+++ b/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
@@ -37,6 +37,7 @@
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <gio/gio.h>
+#include <gconf/gconf-client.h>
#include <e-gw-connection.h>
#include <e-gw-message.h>
@@ -44,7 +45,7 @@
#include <libecal/e-cal-time-util.h>
#include <libsoup/soup-misc.h>
#include "e-cal-backend-groupwise-utils.h"
-#include "libedataserver/e-source-list.h"
+#include "e-source-groupwise.h"
static gboolean
get_recur_instance (ECalComponent *comp, time_t instance_start, time_t instance_end, gpointer data)
@@ -2114,23 +2115,6 @@ e_gw_item_set_changes (EGwItem *item, EGwItem *cache_item)
}
}
-static void
-add_return_value (EGwSendOptionsReturnNotify track, ESource *source, const gchar *notify)
-{
- gchar *value;
-
- switch (track) {
- case E_GW_RETURN_NOTIFY_MAIL:
- value = g_strdup ("mail");
- break;
- default:
- value = g_strdup ("none");
- }
-
- e_source_set_property (source, notify, value);
- g_free (value), value = NULL;
-}
-
gboolean
e_cal_backend_groupwise_store_settings (GwSettings *hold)
{
@@ -2142,8 +2126,8 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
icalcomponent_kind kind;
GConfClient *gconf = gconf_client_get_default ();
ESource *source;
- ESourceList *source_list;
- const gchar *uid;
+ ESourceGroupwise *groupwise_extension;
+ const gchar *extension_name;
gchar *value;
cbgw = hold->cbgw;
@@ -2151,6 +2135,9 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
source = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
+ extension_name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+ groupwise_extension = e_source_get_extension (source, extension_name);
+
/* TODO implement send options for Notes */
if (kind == ICAL_VJOURNAL_COMPONENT) {
g_object_unref (gconf);
@@ -2161,16 +2148,11 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
}
gopts = e_gw_sendoptions_get_general_options (opts);
- if (kind == ICAL_VEVENT_COMPONENT) {
- source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/calendar/sources");
+ if (kind == ICAL_VEVENT_COMPONENT)
sopts = e_gw_sendoptions_get_status_tracking_options (opts, "calendar");
- } else {
- source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/tasks/sources");
+ else
sopts = e_gw_sendoptions_get_status_tracking_options (opts, "task");
- }
- uid = e_source_peek_uid (source);
- source = e_source_list_peek_source_by_uid (source_list, uid);
if (gopts) {
/* priority */
switch (gopts->priority) {
@@ -2186,7 +2168,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
default:
value = g_strdup ("undefined");
}
- e_source_set_property (source, "priority", value);
+ e_source_groupwise_set_priority (groupwise_extension, value);
g_free (value), value = NULL;
/* Reply Requested */
@@ -2197,7 +2179,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
value = g_strdup_printf ("%d",gopts->reply_within);
} else
value = g_strdup ("none");
- e_source_set_property (source, "reply-requested", value);
+ e_source_groupwise_set_reply_requested (groupwise_extension, value);
g_free (value), value = NULL;
/* Delay delivery */
@@ -2207,7 +2189,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
value = icaltime_as_ical_string_r (tt);
} else
value = g_strdup ("none");
- e_source_set_property (source, "delay-delivery", value);
+ e_source_groupwise_set_delivery_delay (groupwise_extension, value);
g_free (value), value = NULL;
/* Expiration date */
@@ -2215,7 +2197,7 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
value = g_strdup_printf ("%d", gopts->expire_after);
else
value = g_strdup ("none");
- e_source_set_property (source, "expiration", value);
+ e_source_groupwise_set_expiration (groupwise_extension, value);
g_free (value), value = NULL;
}
@@ -2234,22 +2216,54 @@ e_cal_backend_groupwise_store_settings (GwSettings *hold)
}
} else
value = g_strdup ("none");
- e_source_set_property (source, "status-tracking", value);
+ e_source_groupwise_set_status_tracking (groupwise_extension, value);
g_free (value), value = NULL;
- add_return_value (sopts->opened, source, "return-open");
- add_return_value (sopts->accepted, source, "return-accept");
- add_return_value (sopts->declined, source, "return-decline");
- add_return_value (sopts->completed, source, "return-complete");
- }
+ switch (sopts->opened) {
+ case E_GW_RETURN_NOTIFY_MAIL:
+ value = g_strdup ("mail");
+ break;
+ default:
+ value = g_strdup ("none");
+ }
+ e_source_groupwise_set_return_opened (groupwise_extension, value);
+ g_free (value), value = NULL;
+
+ switch (sopts->accepted) {
+ case E_GW_RETURN_NOTIFY_MAIL:
+ value = g_strdup ("mail");
+ break;
+ default:
+ value = g_strdup ("none");
+ }
+ e_source_groupwise_set_return_accepted (groupwise_extension, value);
+ g_free (value), value = NULL;
+
+ switch (sopts->declined) {
+ case E_GW_RETURN_NOTIFY_MAIL:
+ value = g_strdup ("mail");
+ break;
+ default:
+ value = g_strdup ("none");
+ }
+ e_source_groupwise_set_return_declined (groupwise_extension, value);
+ g_free (value), value = NULL;
- e_source_list_sync (source_list, NULL);
+ switch (sopts->completed) {
+ case E_GW_RETURN_NOTIFY_MAIL:
+ value = g_strdup ("mail");
+ break;
+ default:
+ value = g_strdup ("none");
+ }
+ e_source_groupwise_set_return_completed (groupwise_extension, value);
+ g_free (value), value = NULL;
+ }
g_object_unref (hold->opts);
g_free (hold);
g_object_unref (gconf);
- g_object_unref (source_list);
return FALSE;
}
diff --git a/calendar/backends/groupwise/e-cal-backend-groupwise.c b/calendar/backends/groupwise/e-cal-backend-groupwise.c
index 60fce4a..5d03670 100644
--- a/calendar/backends/groupwise/e-cal-backend-groupwise.c
+++ b/calendar/backends/groupwise/e-cal-backend-groupwise.c
@@ -36,6 +36,9 @@
#include <libedataserver/e-data-server-util.h>
#include <libedataserver/e-xml-hash-utils.h>
#include <libedataserver/e-url.h>
+#include <libedataserver/e-source-offline.h>
+#include <libedataserver/e-source-refresh.h>
+#include <libedataserver/e-source-security.h>
#include <libedata-cal/e-cal-backend-cache.h>
#include <libedata-cal/e-cal-backend-file-store.h>
#include <libedata-cal/e-cal-backend-util.h>
@@ -44,6 +47,7 @@
#include "e-cal-backend-groupwise.h"
#include "e-cal-backend-groupwise-utils.h"
#include "e-gw-connection.h"
+#include "e-source-groupwise.h"
#ifndef O_BINARY
#define O_BINARY 0
@@ -723,25 +727,26 @@ static guint
get_cache_refresh_interval (ECalBackendGroupwise *cbgw)
{
guint time_interval;
- const gchar *time_interval_string = NULL;
- gchar *temp = NULL;
+ const gchar *time_interval_string;
ECalBackend *backend = E_CAL_BACKEND (cbgw);
ESource *source;
+ ESourceRefresh *refresh_extension;
+ const gchar *extension_name;
time_interval = CACHE_REFRESH_INTERVAL;
source = e_cal_backend_get_source (backend);
- time_interval_string = g_getenv ("GETQM_TIME_INTERVAL");
+ extension_name = E_SOURCE_EXTENSION_REFRESH;
+ refresh_extension = e_source_get_extension (source, extension_name);
- if (!time_interval_string)
- time_interval_string = temp = e_source_get_duped_property (source, "refresh");
+ time_interval_string = g_getenv ("GETQM_TIME_INTERVAL");
- if (time_interval_string) {
+ if (time_interval_string != NULL)
time_interval = g_ascii_strtod (time_interval_string, NULL);
- time_interval *= (60*1000);
- }
+ else
+ time_interval = e_source_refresh_get_interval_minutes (refresh_extension);
- g_free (temp);
+ time_interval *= (60*1000);
return time_interval;
}
@@ -837,40 +842,6 @@ e_cal_backend_groupwise_refresh_calendar (ECalBackendGroupwise *cbgw)
}
#endif
-static gchar *
-form_uri (ESource *source)
-{
- gchar *uri;
- const gchar *port;
- gchar *formed_uri;
- const gchar *use_ssl;
-
- EUri *parsed_uri;
-
- uri = e_source_get_uri (source);
- if (uri == NULL)
- return NULL;
-
- parsed_uri = e_uri_new (uri);
- if (parsed_uri == NULL)
- return NULL;
-
- port = e_source_get_property (source, "port");
- if (port == NULL)
- port = "7191";
- use_ssl = e_source_get_property (source, "use_ssl");
-
- if (use_ssl && !g_str_equal (use_ssl, "never"))
- formed_uri = g_strconcat ("https://", parsed_uri->host,":", port, "/soap", NULL );
- else
- formed_uri = g_strconcat ("http://", parsed_uri->host,":", port, "/soap", NULL );
-
- g_free (uri);
- e_uri_free (parsed_uri);
- return formed_uri;
-
-}
-
static gpointer
cache_init (ECalBackendGroupwise *cbgw)
{
@@ -948,7 +919,7 @@ set_container_id_with_count (ECalBackendGroupwise *cbgw, GError **perror)
case ICAL_VEVENT_COMPONENT:
case ICAL_VTODO_COMPONENT:
case ICAL_VJOURNAL_COMPONENT:
- e_source_set_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
+ e_source_set_display_name (e_cal_backend_get_source (E_CAL_BACKEND (cbgw)), _("Calendar"));
break;
default:
priv->container_id = NULL;
@@ -994,22 +965,32 @@ connect_to_server (ECalBackendGroupwise *cbgw, GError **perror)
gchar *real_uri;
ECalBackendGroupwisePrivate *priv;
ESource *source;
- const gchar *use_ssl;
+ ESourceGroupwise *groupwise_extension;
+ ESourceSecurity *security_extension;
gchar *http_uri;
gint permissions;
GThread *thread;
GError *error = NULL;
- gchar *parent_user = NULL;
icalcomponent_kind kind;
EGwConnectionErrors errors;
+ const gchar *parent_user = NULL;
+ const gchar *extension_name;
+ const gchar *security;
priv = cbgw->priv;
source = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
- real_uri = NULL;
- if (source)
- real_uri = form_uri (source);
- use_ssl = e_source_get_property (source, "use_ssl");
+ extension_name = E_SOURCE_EXTENSION_SECURITY;
+ security_extension = e_source_get_extension (source, extension_name);
+
+ extension_name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+ groupwise_extension = e_source_get_extension (source, extension_name);
+
+ security = e_source_security_get_method (security_extension);
+
+ parent_user = e_source_groupwise_get_parent_id_name (groupwise_extension);
+
+ real_uri = e_source_build_groupwise_uri (source);
if (!real_uri) {
g_propagate_error (perror, EDC_ERROR_EX (NoSuchCal, _("Invalid server URI")));
return;
@@ -1020,13 +1001,12 @@ connect_to_server (ECalBackendGroupwise *cbgw, GError **perror)
kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
- parent_user = (gchar *) e_source_get_property (source, "parent_id_name");
/* create connection to server */
- if (parent_user) {
+ if (parent_user != NULL) {
EGwConnection *cnc;
/* create connection to server */
cnc = e_gw_connection_new (real_uri, parent_user, priv->password);
- if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) {
+ if (!E_IS_GW_CONNECTION(cnc) && g_strcmp0 (security, "when-possible") == 0) {
http_uri = g_strconcat ("http://", real_uri + 8, NULL);
cnc = e_gw_connection_new (http_uri, parent_user, priv->password);
g_free (http_uri);
@@ -1059,7 +1039,7 @@ connect_to_server (ECalBackendGroupwise *cbgw, GError **perror)
priv->cnc = e_gw_connection_new_with_error_handler ( real_uri, priv->username, priv->password, &errors);
- if (!E_IS_GW_CONNECTION(priv->cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) {
+ if (!E_IS_GW_CONNECTION(priv->cnc) && g_strcmp0 (security, "when-possible") == 0) {
http_uri = g_strconcat ("http://", real_uri + 8, NULL);
priv->cnc = e_gw_connection_new_with_error_handler (http_uri, priv->username, priv->password, &errors);
g_free (http_uri);
@@ -1339,14 +1319,17 @@ e_cal_backend_groupwise_open (ECalBackendSync *backend, EDataCal *cal, gboolean
cbgw->priv->read_only = FALSE;
if (priv->mode == CAL_MODE_LOCAL) {
- ESource *esource;
- const gchar *display_contents = NULL;
+ ESource *source;
+ ESourceOffline *offline_extension;
+ const gchar *extension_name;
cbgw->priv->read_only = TRUE;
- esource = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
- display_contents = e_source_get_property (esource, "offline_sync");
+ source = e_cal_backend_get_source (E_CAL_BACKEND (cbgw));
+
+ extension_name = E_SOURCE_EXTENSION_OFFLINE;
+ offline_extension = e_source_get_extension (source, extension_name);
- if (!display_contents || !g_str_equal (display_contents, "1")) {
+ if (!e_source_offline_get_stay_synchronized (offline_extension)) {
PRIV_UNLOCK (priv);
g_propagate_error (perror, EDC_ERROR (RepositoryOffline));
return;
@@ -1377,8 +1360,9 @@ e_cal_backend_groupwise_open (ECalBackendSync *backend, EDataCal *cal, gboolean
PRIV_UNLOCK (priv);
}
-static void
-e_cal_backend_groupwise_remove (ECalBackendSync *backend, EDataCal *cal, GError **perror)
+/* is_loaded handler for the file backend */
+static gboolean
+e_cal_backend_groupwise_is_loaded (ECalBackend *backend)
{
ECalBackendGroupwise *cbgw;
ECalBackendGroupwisePrivate *priv;
@@ -1386,18 +1370,12 @@ e_cal_backend_groupwise_remove (ECalBackendSync *backend, EDataCal *cal, GError
cbgw = E_CAL_BACKEND_GROUPWISE (backend);
priv = cbgw->priv;
- PRIV_LOCK (priv);
-
- /* remove the cache */
- if (priv->store)
- e_cal_backend_store_remove (priv->store);
-
- PRIV_UNLOCK (priv);
+ return priv->store ? TRUE : FALSE;
}
-/* is_loaded handler for the file backend */
static gboolean
-e_cal_backend_groupwise_is_loaded (ECalBackend *backend)
+e_cal_backend_groupwise_remove (ECalBackend *backend,
+ GError **error)
{
ECalBackendGroupwise *cbgw;
ECalBackendGroupwisePrivate *priv;
@@ -1405,7 +1383,15 @@ e_cal_backend_groupwise_is_loaded (ECalBackend *backend)
cbgw = E_CAL_BACKEND_GROUPWISE (backend);
priv = cbgw->priv;
- return priv->store ? TRUE : FALSE;
+ PRIV_LOCK (priv);
+
+ /* remove the cache */
+ if (priv->store)
+ e_cal_backend_store_remove (priv->store);
+
+ PRIV_UNLOCK (priv);
+
+ return TRUE;
}
/* is_remote handler for the file backend */
@@ -2788,7 +2774,6 @@ e_cal_backend_groupwise_class_init (ECalBackendGroupwiseClass *class)
sync_class->get_ldap_attribute_sync = e_cal_backend_groupwise_get_ldap_attribute;
sync_class->get_static_capabilities_sync = e_cal_backend_groupwise_get_static_capabilities;
sync_class->open_sync = e_cal_backend_groupwise_open;
- sync_class->remove_sync = e_cal_backend_groupwise_remove;
sync_class->create_object_sync = e_cal_backend_groupwise_create_object;
sync_class->modify_object_sync = e_cal_backend_groupwise_modify_object;
sync_class->remove_object_sync = e_cal_backend_groupwise_remove_object;
@@ -2805,6 +2790,7 @@ e_cal_backend_groupwise_class_init (ECalBackendGroupwiseClass *class)
sync_class->get_changes_sync = e_cal_backend_groupwise_get_changes;
backend_class->is_loaded = e_cal_backend_groupwise_is_loaded;
+ backend_class->remove = e_cal_backend_groupwise_remove;
backend_class->start_query = e_cal_backend_groupwise_start_query;
backend_class->get_mode = e_cal_backend_groupwise_get_mode;
backend_class->set_mode = e_cal_backend_groupwise_set_mode;
diff --git a/servers/groupwise/Makefile.am b/servers/groupwise/Makefile.am
index b815620..25817e3 100644
--- a/servers/groupwise/Makefile.am
+++ b/servers/groupwise/Makefile.am
@@ -1,4 +1,5 @@
-noinst_PROGRAMS = create-account soap-test
+#noinst_PROGRAMS = create-account soap-test
+noinst_PROGRAMS = soap-test
SERVERS_GROUPWISE_CPPFLAGS= \
-DG_LOG_DOMAIN=\"libegroupwise\" \
@@ -7,12 +8,12 @@ SERVERS_GROUPWISE_CPPFLAGS= \
$(SOUP_CFLAGS) \
$(E_DATA_SERVER_CFLAGS)
-create_account_CPPFLAGS = $(SERVERS_GROUPWISE_CPPFLAGS)
-create_account_SOURCES = create-account.c
-create_account_LDADD = \
- $(top_builddir)/libedataserver/libedataserver-1.2.la \
- $(SOUP_LIBS) \
- $(E_DATA_SERVER_LIBS)
+#create_account_CPPFLAGS = $(SERVERS_GROUPWISE_CPPFLAGS)
+#create_account_SOURCES = create-account.c
+#create_account_LDADD = \
+# $(top_builddir)/libedataserver/libedataserver-1.2.la \
+# $(SOUP_LIBS) \
+# $(E_DATA_SERVER_LIBS)
soap_test_CPPFLAGS = $(SERVERS_GROUPWISE_CPPFLAGS)
soap_test_SOURCES = soap-test.c
@@ -56,6 +57,8 @@ libegroupwise_1_2_la_SOURCES = \
e-gw-recur-utils.h \
e-gw-proxy.h \
e-gw-proxy.c \
+ e-source-groupwise.h \
+ e-source-groupwise.c \
soup-soap-message.c \
soup-soap-response.c \
build-timestamp.h
diff --git a/servers/groupwise/create-account.c b/servers/groupwise/create-account.c
index b308c87..279a7fd 100644
--- a/servers/groupwise/create-account.c
+++ b/servers/groupwise/create-account.c
@@ -2,22 +2,17 @@
#include <config.h>
#include <gconf/gconf-client.h>
#include <glib.h>
-#include <libedataserver/e-source-list.h>
-static GConfClient *conf_client;
static GMainLoop *main_loop;
static gchar *arg_hostname, *arg_username, *arg_password;
static void
add_account (const gchar *conf_key, const gchar *hostname, const gchar *username)
{
- ESourceList *source_list;
ESourceGroup *group;
ESource *source;
gchar *group_name;
- source_list = e_source_list_new_for_gconf (conf_client, conf_key);
-
group_name = g_strdup (hostname);
group = e_source_group_new (group_name, "groupwise://");
e_source_list_add_group (source_list, group, -1);
@@ -64,14 +59,11 @@ main (gint argc, gchar *argv[])
else
arg_password = NULL;
- conf_client = gconf_client_get_default ();
-
main_loop = g_main_loop_new (NULL, TRUE);
g_idle_add ((GSourceFunc) idle_cb, NULL);
g_main_loop_run (main_loop);
/* terminate */
- g_object_unref (conf_client);
g_main_loop_unref (main_loop);
return 0;
diff --git a/servers/groupwise/e-gw-connection.c b/servers/groupwise/e-gw-connection.c
index a4e281e..7ddebae 100644
--- a/servers/groupwise/e-gw-connection.c
+++ b/servers/groupwise/e-gw-connection.c
@@ -4043,7 +4043,7 @@ form_proxy_login_request (EGwConnection *cnc, const gchar * username, const gcha
}
EGwConnection *
-e_gw_connection_get_proxy_connection (EGwConnection *parent_cnc, gchar *username, const gchar *password, const gchar *proxy, gint *permissions)
+e_gw_connection_get_proxy_connection (EGwConnection *parent_cnc, const gchar *username, const gchar *password, const gchar *proxy, gint *permissions)
{
EGwConnection *cnc;
SoupSoapMessage *msg;
diff --git a/servers/groupwise/e-gw-connection.h b/servers/groupwise/e-gw-connection.h
index d66bfab..15f648b 100644
--- a/servers/groupwise/e-gw-connection.h
+++ b/servers/groupwise/e-gw-connection.h
@@ -180,7 +180,7 @@ EGwConnectionStatus e_gw_connection_add_proxy (EGwConnection *cnc, proxyHandler
EGwConnectionStatus e_gw_connection_remove_proxy (EGwConnection *cnc, proxyHandler *newProxy);
EGwConnectionStatus e_gw_connection_modify_proxy (EGwConnection *cnc, proxyHandler *newProxy);
EGwConnectionStatus e_gw_connection_get_proxy_list (EGwConnection *cnc, GList **proxy_info);
-EGwConnection *e_gw_connection_get_proxy_connection (EGwConnection *cnc1, gchar *username, const gchar *password, const gchar *proxy, int* permissions);
+EGwConnection *e_gw_connection_get_proxy_connection (EGwConnection *cnc1, const gchar *username, const gchar *password, const gchar *proxy, int* permissions);
EGwConnectionStatus e_gw_connection_get_all_mail_uids (EGwConnection *cnc, const gchar *container, gint cursor, gboolean forward, gint count, const gchar *cursor_seek, GList **list);
G_END_DECLS
diff --git a/servers/groupwise/e-source-groupwise.c b/servers/groupwise/e-source-groupwise.c
new file mode 100644
index 0000000..da39abf
--- /dev/null
+++ b/servers/groupwise/e-source-groupwise.c
@@ -0,0 +1,666 @@
+/*
+ * e-source-groupwise.c
+ *
+ * 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/>
+ *
+ */
+
+#include "e-source-groupwise.h"
+
+#include <libedataserver/e-source-authentication.h>
+#include <libedataserver/e-source-security.h>
+
+#define E_SOURCE_GROUPWISE_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwisePrivate))
+
+struct _ESourceGroupwisePrivate {
+ gchar *book_name;
+ gchar *delivery_delay;
+ gchar *expiration;
+ gchar *parent_id_name;
+ gchar *priority;
+ gchar *reply_requested;
+ gchar *return_accepted;
+ gchar *return_completed;
+ gchar *return_declined;
+ gchar *return_opened;
+ gchar *status_tracking;
+};
+
+enum {
+ PROP_0,
+ PROP_BOOK_NAME,
+ PROP_DELIVERY_DELAY,
+ PROP_EXPIRATION,
+ PROP_PARENT_ID_NAME,
+ PROP_PRIORITY,
+ PROP_REPLY_REQUESTED,
+ PROP_RETURN_ACCEPTED,
+ PROP_RETURN_COMPLETED,
+ PROP_RETURN_DECLINED,
+ PROP_RETURN_OPENED,
+ PROP_STATUS_TRACKING
+};
+
+G_DEFINE_TYPE (
+ ESourceGroupwise,
+ e_source_groupwise,
+ E_TYPE_SOURCE_EXTENSION)
+
+static void
+source_groupwise_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_BOOK_NAME:
+ e_source_groupwise_set_book_name (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_DELIVERY_DELAY:
+ e_source_groupwise_set_delivery_delay (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_EXPIRATION:
+ e_source_groupwise_set_expiration (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_PARENT_ID_NAME:
+ e_source_groupwise_set_parent_id_name (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_PRIORITY:
+ e_source_groupwise_set_priority (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_REPLY_REQUESTED:
+ e_source_groupwise_set_reply_requested (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_RETURN_ACCEPTED:
+ e_source_groupwise_set_return_accepted (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_RETURN_COMPLETED:
+ e_source_groupwise_set_return_completed (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_RETURN_DECLINED:
+ e_source_groupwise_set_return_declined (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_RETURN_OPENED:
+ e_source_groupwise_set_return_opened (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+
+ case PROP_STATUS_TRACKING:
+ e_source_groupwise_set_status_tracking (
+ E_SOURCE_GROUPWISE (object),
+ g_value_get_string (value));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+source_groupwise_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_BOOK_NAME:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_book_name (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_DELIVERY_DELAY:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_delivery_delay (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_EXPIRATION:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_expiration (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_PARENT_ID_NAME:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_parent_id_name (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_PRIORITY:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_priority (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_REPLY_REQUESTED:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_reply_requested (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_RETURN_ACCEPTED:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_return_accepted (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_RETURN_COMPLETED:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_return_completed (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_RETURN_DECLINED:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_return_declined (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_RETURN_OPENED:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_return_opened (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+
+ case PROP_STATUS_TRACKING:
+ g_value_set_string (
+ value,
+ e_source_groupwise_get_status_tracking (
+ E_SOURCE_GROUPWISE (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+source_groupwise_finalize (GObject *object)
+{
+ ESourceGroupwisePrivate *priv;
+
+ priv = E_SOURCE_GROUPWISE_GET_PRIVATE (object);
+
+ g_free (priv->book_name);
+ g_free (priv->delivery_delay);
+ g_free (priv->expiration);
+ g_free (priv->parent_id_name);
+ g_free (priv->priority);
+ g_free (priv->reply_requested);
+ g_free (priv->return_accepted);
+ g_free (priv->return_completed);
+ g_free (priv->return_declined);
+ g_free (priv->return_opened);
+ g_free (priv->status_tracking);
+
+ /* Chain up to parent's finalize() method. */
+ G_OBJECT_CLASS (e_source_groupwise_parent_class)->finalize (object);
+}
+
+static void
+e_source_groupwise_class_init (ESourceGroupwiseClass *class)
+{
+ GObjectClass *object_class;
+ ESourceExtensionClass *extension_class;
+
+ g_type_class_add_private (class, sizeof (ESourceGroupwisePrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = source_groupwise_set_property;
+ object_class->get_property = source_groupwise_get_property;
+ object_class->finalize = source_groupwise_finalize;
+
+ extension_class = E_SOURCE_EXTENSION_CLASS (class);
+ extension_class->name = E_SOURCE_EXTENSION_GROUPWISE_BACKEND;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_BOOK_NAME,
+ g_param_spec_string (
+ "book-name",
+ "Book Name",
+ "The name of the EBook",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_DELIVERY_DELAY,
+ g_param_spec_string (
+ "delivery-delay",
+ "Delivery Delay",
+ "Delivery delay",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_EXPIRATION,
+ g_param_spec_string (
+ "expiration",
+ "Expiration",
+ "Expiration",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_PARENT_ID_NAME,
+ g_param_spec_string (
+ "parent-id-name",
+ "Parent ID Name",
+ "Parent ID name",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_PRIORITY,
+ g_param_spec_string (
+ "priority",
+ "Priority",
+ "Priority",
+ "undefined",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_REPLY_REQUESTED,
+ g_param_spec_string (
+ "reply-requested",
+ "Reply Requested",
+ "Reply requested",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_RETURN_ACCEPTED,
+ g_param_spec_string (
+ "return-accepted",
+ "Return Accepted",
+ "Return accepted",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_RETURN_COMPLETED,
+ g_param_spec_string (
+ "return-completed",
+ "Return Completed",
+ "Return completed",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_RETURN_DECLINED,
+ g_param_spec_string (
+ "return-declined",
+ "Return Declined",
+ "Return declined",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_RETURN_OPENED,
+ g_param_spec_string (
+ "return-opened",
+ "Return Opened",
+ "Return opened",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_STATUS_TRACKING,
+ g_param_spec_string (
+ "status-tracking",
+ "Status Tracking",
+ "Status tracking",
+ "none",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS |
+ E_SOURCE_PARAM_SETTING));
+}
+
+static void
+e_source_groupwise_init (ESourceGroupwise *extension)
+{
+ extension->priv = E_SOURCE_GROUPWISE_GET_PRIVATE (extension);
+}
+
+const gchar *
+e_source_groupwise_get_book_name (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->book_name;
+}
+
+void
+e_source_groupwise_set_book_name (ESourceGroupwise *extension,
+ const gchar *book_name)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->book_name);
+ extension->priv->book_name = g_strdup (book_name);
+
+ g_object_notify (G_OBJECT (extension), "book-name");
+}
+
+const gchar *
+e_source_groupwise_get_delivery_delay (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->delivery_delay;
+}
+
+void
+e_source_groupwise_set_delivery_delay (ESourceGroupwise *extension,
+ const gchar *delivery_delay)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->delivery_delay);
+ extension->priv->delivery_delay = g_strdup (delivery_delay);
+
+ g_object_notify (G_OBJECT (extension), "delivery-delay");
+}
+
+const gchar *
+e_source_groupwise_get_expiration (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->expiration;
+}
+
+void
+e_source_groupwise_set_expiration (ESourceGroupwise *extension,
+ const gchar *expiration)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->expiration);
+ extension->priv->expiration = g_strdup (expiration);
+
+ g_object_notify (G_OBJECT (extension), "expiration");
+}
+
+const gchar *
+e_source_groupwise_get_parent_id_name (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->parent_id_name;
+}
+
+void
+e_source_groupwise_set_parent_id_name (ESourceGroupwise *extension,
+ const gchar *parent_id_name)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->parent_id_name);
+ extension->priv->parent_id_name = g_strdup (parent_id_name);
+
+ g_object_notify (G_OBJECT (extension), "parent-id-name");
+}
+
+const gchar *
+e_source_groupwise_get_priority (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->priority;
+}
+
+void
+e_source_groupwise_set_priority (ESourceGroupwise *extension,
+ const gchar *priority)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->priority);
+ extension->priv->priority = g_strdup (priority);
+
+ g_object_notify (G_OBJECT (extension), "priority");
+}
+
+const gchar *
+e_source_groupwise_get_reply_requested (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->reply_requested;
+}
+
+void
+e_source_groupwise_set_reply_requested (ESourceGroupwise *extension,
+ const gchar *reply_requested)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->reply_requested);
+ extension->priv->reply_requested = g_strdup (reply_requested);
+
+ g_object_notify (G_OBJECT (extension), "reply-requested");
+}
+
+const gchar *
+e_source_groupwise_get_return_accepted (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->return_accepted;
+}
+
+void
+e_source_groupwise_set_return_accepted (ESourceGroupwise *extension,
+ const gchar *return_accepted)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->return_accepted);
+ extension->priv->return_accepted = g_strdup (return_accepted);
+
+ g_object_notify (G_OBJECT (extension), "return-accepted");
+}
+
+const gchar *
+e_source_groupwise_get_return_completed (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->return_completed;
+}
+
+void
+e_source_groupwise_set_return_completed (ESourceGroupwise *extension,
+ const gchar *return_completed)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->return_completed);
+ extension->priv->return_completed = g_strdup (return_completed);
+
+ g_object_notify (G_OBJECT (extension), "return-completed");
+}
+
+const gchar *
+e_source_groupwise_get_return_declined (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->return_declined;
+}
+
+void
+e_source_groupwise_set_return_declined (ESourceGroupwise *extension,
+ const gchar *return_declined)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->return_declined);
+ extension->priv->return_declined = g_strdup (return_declined);
+
+ g_object_notify (G_OBJECT (extension), "return-declined");
+}
+
+const gchar *
+e_source_groupwise_get_return_opened (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->return_opened;
+}
+
+void
+e_source_groupwise_set_return_opened (ESourceGroupwise *extension,
+ const gchar *return_opened)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->return_opened);
+ extension->priv->return_opened = g_strdup (return_opened);
+
+ g_object_notify (G_OBJECT (extension), "return-opened");
+}
+
+const gchar *
+e_source_groupwise_get_status_tracking (ESourceGroupwise *extension)
+{
+ g_return_val_if_fail (E_IS_SOURCE_GROUPWISE (extension), NULL);
+
+ return extension->priv->status_tracking;
+}
+
+void
+e_source_groupwise_set_status_tracking (ESourceGroupwise *extension,
+ const gchar *status_tracking)
+{
+ g_return_if_fail (E_IS_SOURCE_GROUPWISE (extension));
+
+ g_free (extension->priv->status_tracking);
+ extension->priv->status_tracking = g_strdup (status_tracking);
+
+ g_object_notify (G_OBJECT (extension), "status-tracking");
+}
+
+gchar *
+e_source_build_groupwise_uri (ESource *source)
+{
+ ESourceAuthentication *auth_extension;
+ ESourceSecurity *security_extension;
+ gboolean secure_connection;
+ const gchar *extension_name;
+ const gchar *host;
+ guint16 port;
+ gchar *uri;
+
+ g_return_val_if_fail (E_IS_SOURCE (source), NULL);
+
+ extension_name = E_SOURCE_EXTENSION_AUTHENTICATION;
+ auth_extension = e_source_get_extension (source, extension_name);
+
+ extension_name = E_SOURCE_EXTENSION_SECURITY;
+ security_extension = e_source_get_extension (source, extension_name);
+
+ host = e_source_authentication_get_host (auth_extension);
+ port = e_source_authentication_get_port (auth_extension);
+
+ secure_connection = e_source_security_get_secure (security_extension);
+
+ if (secure_connection)
+ uri = g_strdup_printf ("https://%s:%d/soap", host, port);
+ else
+ uri = g_strdup_printf ("http://%s:%d/soap", host, port);
+
+ return uri;
+}
diff --git a/servers/groupwise/e-source-groupwise.h b/servers/groupwise/e-source-groupwise.h
new file mode 100644
index 0000000..f2246eb
--- /dev/null
+++ b/servers/groupwise/e-source-groupwise.h
@@ -0,0 +1,119 @@
+/*
+ * e-source-groupwise.h
+ *
+ * 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/>
+ *
+ */
+
+#ifndef E_SOURCE_GROUPWISE_H
+#define E_SOURCE_GROUPWISE_H
+
+#include <libedataserver/e-source-extension.h>
+
+/* Standard GObject macros */
+#define E_TYPE_SOURCE_GROUPWISE \
+ (e_source_groupwise_get_type ())
+#define E_SOURCE_GROUPWISE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST \
+ ((obj), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwise))
+#define E_SOURCE_GROUPWISE_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_CAST \
+ ((cls), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwiseClass))
+#define E_IS_SOURCE_GROUPWISE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE \
+ ((obj), E_TYPE_SOURCE_GROUPWISE))
+#define E_IS_SOURCE_GROUPWISE_CLASS(cls) \
+ (G_TYPE_CHECK_CLASS_TYPE \
+ ((cls), E_TYPE_SOURCE_GROUPWISE))
+#define E_SOURCE_GROUPWISE_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS \
+ ((obj), E_TYPE_SOURCE_GROUPWISE, ESourceGroupwiseClass))
+
+#define E_SOURCE_EXTENSION_GROUPWISE_BACKEND "GroupWise Backend"
+
+G_BEGIN_DECLS
+
+typedef struct _ESourceGroupwise ESourceGroupwise;
+typedef struct _ESourceGroupwiseClass ESourceGroupwiseClass;
+typedef struct _ESourceGroupwisePrivate ESourceGroupwisePrivate;
+
+struct _ESourceGroupwise {
+ ESourceExtension parent;
+ ESourceGroupwisePrivate *priv;
+};
+
+struct _ESourceGroupwiseClass {
+ ESourceExtensionClass parent_class;
+};
+
+GType e_source_groupwise_get_type (void);
+const gchar * e_source_groupwise_get_book_name
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_book_name
+ (ESourceGroupwise *extension,
+ const gchar *book_name);
+const gchar * e_source_groupwise_get_delivery_delay
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_delivery_delay
+ (ESourceGroupwise *extension,
+ const gchar *delivery_delay);
+const gchar * e_source_groupwise_get_expiration
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_expiration
+ (ESourceGroupwise *extension,
+ const gchar *expiration);
+const gchar * e_source_groupwise_get_parent_id_name
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_parent_id_name
+ (ESourceGroupwise *extension,
+ const gchar *parent_id_name);
+const gchar * e_source_groupwise_get_priority (ESourceGroupwise *extension);
+void e_source_groupwise_set_priority (ESourceGroupwise *extension,
+ const gchar *priority);
+const gchar * e_source_groupwise_get_reply_requested
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_reply_requested
+ (ESourceGroupwise *extension,
+ const gchar *reply_requested);
+const gchar * e_source_groupwise_get_return_accepted
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_return_accepted
+ (ESourceGroupwise *extension,
+ const gchar *return_accepted);
+const gchar * e_source_groupwise_get_return_completed
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_return_completed
+ (ESourceGroupwise *extension,
+ const gchar *return_completed);
+const gchar * e_source_groupwise_get_return_declined
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_return_declined
+ (ESourceGroupwise *extension,
+ const gchar *return_declined);
+const gchar * e_source_groupwise_get_return_opened
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_return_opened
+ (ESourceGroupwise *extension,
+ const gchar *return_opened);
+const gchar * e_source_groupwise_get_status_tracking
+ (ESourceGroupwise *extension);
+void e_source_groupwise_set_status_tracking
+ (ESourceGroupwise *extension,
+ const gchar *status_tracking);
+
+gchar * e_source_build_groupwise_uri (ESource *source);
+
+G_END_DECLS
+
+#endif /* E_SOURCE_LDAP_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]