diff options
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | modules/Makefile.am | 1 | ||||
-rw-r--r-- | modules/book-config-google/Makefile.am | 27 | ||||
-rw-r--r-- | modules/book-config-google/evolution-book-config-google.c | 161 |
4 files changed, 190 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 5828f33efe..bf65e3324b 100644 --- a/configure.ac +++ b/configure.ac @@ -1633,6 +1633,7 @@ modules/bogofilter/Makefile modules/calendar/Makefile modules/mail/Makefile modules/backup-restore/Makefile +modules/book-config-google/Makefile modules/book-config-local/Makefile modules/composer-autosave/Makefile modules/mailto-handler/Makefile diff --git a/modules/Makefile.am b/modules/Makefile.am index cd1e5ce79f..1668322e8b 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -16,6 +16,7 @@ SUBDIRS = \ calendar \ mail \ backup-restore \ + book-config-google \ book-config-local \ composer-autosave \ mailto-handler \ 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 <http://www.gnu.org/licenses/> + * + */ + +#include <config.h> +#include <glib/gi18n-lib.h> + +#include <libebackend/e-extension.h> +#include <libedataserver/e-source-authentication.h> +#include <libedataserver/e-source-security.h> + +#include <misc/e-interval-chooser.h> +#include <misc/e-source-config-backend.h> +#include <addressbook/gui/widgets/e-book-source-config.h> + +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 '<user>@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) +{ +} |