From a4607aee992c409da5ff5afa9f0222bbd1bebc29 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 29 Dec 2010 23:36:47 -0500 Subject: Add 'book-config-google' module. Register the "Google" backend in EBookSourceConfig widgets. Partially replaces the 'google-account-setup' plugin. --- modules/book-config-google/Makefile.am | 27 ++++ .../evolution-book-config-google.c | 161 +++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 modules/book-config-google/Makefile.am create mode 100644 modules/book-config-google/evolution-book-config-google.c (limited to 'modules/book-config-google') diff --git a/modules/book-config-google/Makefile.am b/modules/book-config-google/Makefile.am new file mode 100644 index 0000000000..c3a290b240 --- /dev/null +++ b/modules/book-config-google/Makefile.am @@ -0,0 +1,27 @@ +module_LTLIBRARIES = module-book-config-google.la + +module_book_config_google_la_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -I$(top_srcdir) \ + -I$(top_srcdir)/widgets \ + -DG_LOG_DOMAIN=\"evolution-book-config-google\" \ + $(EVOLUTION_DATA_SERVER_CFLAGS) \ + $(GNOME_PLATFORM_CFLAGS) + +module_book_config_google_la_SOURCES = \ + evolution-book-config-google.c + +module_book_config_google_la_LIBADD = \ + $(top_builddir)/e-util/libeutil.la \ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(top_builddir)/addressbook/printing/libecontactprint.la \ + $(top_builddir)/addressbook/gui/merging/libeabbookmerging.la \ + $(top_builddir)/addressbook/gui/widgets/libeabwidgets.la \ + $(top_builddir)/addressbook/util/libeabutil.la \ + $(EVOLUTION_DATA_SERVER_LIBS) \ + $(GNOME_PLATFORM_LIBS) + +module_book_config_google_la_LDFLAGS = \ + -module -avoid-version $(NO_UNDEFINED) + +-include $(top_srcdir)/git.mk diff --git a/modules/book-config-google/evolution-book-config-google.c b/modules/book-config-google/evolution-book-config-google.c new file mode 100644 index 0000000000..c924c65d6e --- /dev/null +++ b/modules/book-config-google/evolution-book-config-google.c @@ -0,0 +1,161 @@ +/* + * evolution-book-config-google.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 + * + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include + +typedef ESourceConfigBackend EBookConfigGoogle; +typedef ESourceConfigBackendClass EBookConfigGoogleClass; + +typedef struct _Context Context; + +struct _Context { + gint placeholder; +}; + +/* Module Entry Points */ +void e_module_load (GTypeModule *type_module); +void e_module_unload (GTypeModule *type_module); + +/* Forward Declarations */ +GType e_book_config_google_get_type (void); + +G_DEFINE_DYNAMIC_TYPE ( + EBookConfigGoogle, + e_book_config_google, + E_TYPE_SOURCE_CONFIG_BACKEND) + +static void +book_config_google_context_free (Context *context) +{ + g_slice_free (Context, context); +} + +static void +book_config_google_insert_widgets (ESourceConfigBackend *backend, + ESource *scratch_source) +{ + ESourceConfig *config; + Context *context; + const gchar *uid; + + context = g_slice_new (Context); + uid = e_source_get_uid (scratch_source); + config = e_source_config_backend_get_config (backend); + + g_object_set_data_full ( + G_OBJECT (backend), uid, context, + (GDestroyNotify) book_config_google_context_free); + + e_book_source_config_add_offline_toggle ( + E_BOOK_SOURCE_CONFIG (config), scratch_source); + + e_source_config_add_user_entry (config, scratch_source); + + e_source_config_add_secure_connection (config, scratch_source); + + e_source_config_add_refresh_interval (config, scratch_source); +} + +static gboolean +book_config_google_check_complete (ESourceConfigBackend *backend, + ESource *scratch_source) +{ + ESourceAuthentication *extension; + const gchar *extension_name; + const gchar *user; + + extension_name = E_SOURCE_EXTENSION_AUTHENTICATION; + extension = e_source_get_extension (scratch_source, extension_name); + user = e_source_authentication_get_user (extension); + + return (user != NULL && *user != '\0'); +} + +static void +book_config_google_commit_changes (ESourceConfigBackend *backend, + ESource *scratch_source) +{ + ESourceAuthentication *extension; + const gchar *extension_name; + const gchar *user; + + extension_name = E_SOURCE_EXTENSION_AUTHENTICATION; + extension = e_source_get_extension (scratch_source, extension_name); + + /* The authentication method should match what the google backend + * returns for get_supported_auth_methods(), although in practice + * the value just needs to be something other than "none". */ + e_source_authentication_set_method (extension, "plain/password"); + + user = e_source_authentication_get_user (extension); + g_return_if_fail (user != NULL); + + /* A user name without a domain implies '@gmail.com'. */ + if (strchr (user, '@') == NULL) { + gchar *full_user; + + full_user = g_strconcat (user, "@gmail.com", NULL); + e_source_authentication_set_user (extension, full_user); + g_free (full_user); + } +} + +static void +e_book_config_google_class_init (ESourceConfigBackendClass *class) +{ + EExtensionClass *extension_class; + + extension_class = E_EXTENSION_CLASS (class); + extension_class->extensible_type = E_TYPE_BOOK_SOURCE_CONFIG; + + class->parent_uid = "google-stub"; + class->backend_name = "google"; + class->insert_widgets = book_config_google_insert_widgets; + class->check_complete = book_config_google_check_complete; + class->commit_changes = book_config_google_commit_changes; +} + +static void +e_book_config_google_class_finalize (ESourceConfigBackendClass *class) +{ +} + +static void +e_book_config_google_init (ESourceConfigBackend *backend) +{ +} + +G_MODULE_EXPORT void +e_module_load (GTypeModule *type_module) +{ + e_book_config_google_register_type (type_module); +} + +G_MODULE_EXPORT void +e_module_unload (GTypeModule *type_module) +{ +} -- cgit v1.2.3