diff options
author | Milan Crha <mcrha@redhat.com> | 2014-06-20 17:20:24 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2014-06-20 17:22:15 +0800 |
commit | bfa9ece0091f86870de99b6062d18d81ab2fcd5e (patch) | |
tree | 33f3db8f84fbe88408e024c1dfcc38982fadeb9f | |
parent | 61e260ac069b6c26c370d66a54c4e307c50ab922 (diff) | |
download | gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.tar gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.tar.gz gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.tar.bz2 gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.tar.lz gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.tar.xz gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.tar.zst gsoc2013-evolution-bfa9ece0091f86870de99b6062d18d81ab2fcd5e.zip |
Bug 652132 - Google Tasks support
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | modules/cal-config-google/Makefile.am | 7 | ||||
-rw-r--r-- | modules/cal-config-google/e-cal-config-google.c (renamed from modules/cal-config-google/evolution-cal-config-google.c) | 19 | ||||
-rw-r--r-- | modules/cal-config-google/e-cal-config-gtasks.c | 146 | ||||
-rw-r--r-- | modules/cal-config-google/module-cal-config-google.c | 45 | ||||
-rw-r--r-- | modules/cal-config-google/module-cal-config-google.h | 25 | ||||
-rw-r--r-- | po/POTFILES.in | 2 |
7 files changed, 233 insertions, 18 deletions
diff --git a/configure.ac b/configure.ac index fcd15e5944..f75d1a1609 100644 --- a/configure.ac +++ b/configure.ac @@ -1110,6 +1110,13 @@ PKG_CHECK_MODULES([GDATA], [libgdata >= libgdata_minimum_version]) AC_SUBST(GDATA_CFLAGS) AC_SUBST(GDATA_LIBS) +dnl *********************************** +dnl GTasks require more latest libgdata +dnl *********************************** +if `$PKG_CONFIG --atleast-version=0.15.1 libgdata`; then + AC_DEFINE(HAVE_GDATA_0_15_1, 1, [Define to 1 if you have the libgdata package >= 0.15.1]) +fi + dnl **************************** dnl Check for ical_set_unknown_token_handling_setting function dnl **************************** diff --git a/modules/cal-config-google/Makefile.am b/modules/cal-config-google/Makefile.am index 2f1a3defd6..bb83eb620c 100644 --- a/modules/cal-config-google/Makefile.am +++ b/modules/cal-config-google/Makefile.am @@ -11,13 +11,16 @@ module_cal_config_google_la_CPPFLAGS = \ $(NULL) module_cal_config_google_la_SOURCES = \ - evolution-cal-config-google.c \ + e-cal-config-google.c \ + e-cal-config-gtasks.c \ e-google-chooser-button.c \ e-google-chooser-button.h \ e-google-chooser-dialog.c \ e-google-chooser-dialog.h \ e-google-chooser.c \ - e-google-chooser.h + e-google-chooser.h \ + module-cal-config-google.c \ + module-cal-config-google.h module_cal_config_google_la_LIBADD = \ $(top_builddir)/e-util/libevolution-util.la \ diff --git a/modules/cal-config-google/evolution-cal-config-google.c b/modules/cal-config-google/e-cal-config-google.c index 57c8ee095a..9cba60b0b3 100644 --- a/modules/cal-config-google/evolution-cal-config-google.c +++ b/modules/cal-config-google/e-cal-config-google.c @@ -1,5 +1,5 @@ /* - * evolution-cal-config-google.c + * e-cal-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 @@ -24,6 +24,7 @@ #include "e-google-chooser-button.h" #include "e-google-chooser-dialog.h" +#include "module-cal-config-google.h" typedef ESourceConfigBackend ECalConfigGoogle; typedef ESourceConfigBackendClass ECalConfigGoogleClass; @@ -34,10 +35,6 @@ struct _Context { GtkWidget *google_button; }; -/* Module Entry Points */ -void e_module_load (GTypeModule *type_module); -void e_module_unload (GTypeModule *type_module); - /* Forward Declarations */ GType e_cal_config_google_get_type (void); @@ -183,16 +180,8 @@ e_cal_config_google_init (ESourceConfigBackend *backend) { } -G_MODULE_EXPORT void -e_module_load (GTypeModule *type_module) +void +e_cal_config_google_type_register (GTypeModule *type_module) { - e_google_chooser_type_register (type_module); - e_google_chooser_button_type_register (type_module); - e_google_chooser_dialog_type_register (type_module); e_cal_config_google_register_type (type_module); } - -G_MODULE_EXPORT void -e_module_unload (GTypeModule *type_module) -{ -} diff --git a/modules/cal-config-google/e-cal-config-gtasks.c b/modules/cal-config-google/e-cal-config-gtasks.c new file mode 100644 index 0000000000..5de0d17f9f --- /dev/null +++ b/modules/cal-config-google/e-cal-config-gtasks.c @@ -0,0 +1,146 @@ +/* + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <string.h> + +#include <libebackend/libebackend.h> + +#include <e-util/e-util.h> + +#include "module-cal-config-google.h" + +typedef ESourceConfigBackend ECalConfigGTasks; +typedef ESourceConfigBackendClass ECalConfigGTasksClass; + +/* Forward Declarations */ +GType e_cal_config_gtasks_get_type (void); + +G_DEFINE_DYNAMIC_TYPE ( + ECalConfigGTasks, + e_cal_config_gtasks, + E_TYPE_SOURCE_CONFIG_BACKEND) + +static gboolean +cal_config_gtasks_allow_creation (ESourceConfigBackend *backend) +{ + ESourceConfig *config; + ESourceTaskList *task_list; + ESource *source; + + g_return_val_if_fail (E_IS_SOURCE_CONFIG_BACKEND (backend), FALSE); + + config = e_source_config_backend_get_config (backend); + + if (e_cal_source_config_get_source_type (E_CAL_SOURCE_CONFIG (config)) != E_CAL_CLIENT_SOURCE_TYPE_TASKS) + return FALSE; + + source = e_source_config_get_original_source (config); + if (!source || !e_source_has_extension (source, E_SOURCE_EXTENSION_TASK_LIST)) + return FALSE; + + task_list = e_source_get_extension (source, E_SOURCE_EXTENSION_TASK_LIST); + return g_strcmp0 (E_SOURCE_CONFIG_BACKEND_GET_CLASS (backend)->backend_name, + e_source_backend_get_backend_name (E_SOURCE_BACKEND (task_list))) == 0; +} + +static void +cal_config_gtasks_insert_widgets (ESourceConfigBackend *backend, + ESource *scratch_source) +{ + ESourceConfig *config; + + config = e_source_config_backend_get_config (backend); + + e_source_config_add_user_entry (config, scratch_source); + e_source_config_add_refresh_interval (config, scratch_source); +} + +static gboolean +cal_config_gtasks_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 && *user; +} + +static void +cal_config_gtasks_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); + + e_source_authentication_set_host (extension, "www.google.com"); + e_source_authentication_set_method (extension, "OAuth2"); + + 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_cal_config_gtasks_class_init (ESourceConfigBackendClass *class) +{ + EExtensionClass *extension_class; + + extension_class = E_EXTENSION_CLASS (class); + extension_class->extensible_type = E_TYPE_CAL_SOURCE_CONFIG; + + class->parent_uid = "google-stub"; + class->backend_name = "gtasks"; + class->allow_creation = cal_config_gtasks_allow_creation; + class->insert_widgets = cal_config_gtasks_insert_widgets; + class->check_complete = cal_config_gtasks_check_complete; + class->commit_changes = cal_config_gtasks_commit_changes; +} + +static void +e_cal_config_gtasks_class_finalize (ESourceConfigBackendClass *class) +{ +} + +static void +e_cal_config_gtasks_init (ESourceConfigBackend *backend) +{ +} + +void +e_cal_config_gtasks_type_register (GTypeModule *type_module) +{ + e_cal_config_gtasks_register_type (type_module); +} diff --git a/modules/cal-config-google/module-cal-config-google.c b/modules/cal-config-google/module-cal-config-google.c new file mode 100644 index 0000000000..94dc549653 --- /dev/null +++ b/modules/cal-config-google/module-cal-config-google.c @@ -0,0 +1,45 @@ +/* + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <libebackend/libebackend.h> + +#include "e-google-chooser-button.h" +#include "e-google-chooser-dialog.h" +#include "module-cal-config-google.h" + +/* Module Entry Points */ +void e_module_load (GTypeModule *type_module); +void e_module_unload (GTypeModule *type_module); + +G_MODULE_EXPORT void +e_module_load (GTypeModule *type_module) +{ + e_google_chooser_type_register (type_module); + e_google_chooser_button_type_register (type_module); + e_google_chooser_dialog_type_register (type_module); + e_cal_config_google_type_register (type_module); +#ifdef HAVE_GDATA_0_15_1 + e_cal_config_gtasks_type_register (type_module); +#endif +} + +G_MODULE_EXPORT void +e_module_unload (GTypeModule *type_module) +{ +} diff --git a/modules/cal-config-google/module-cal-config-google.h b/modules/cal-config-google/module-cal-config-google.h new file mode 100644 index 0000000000..89dc1c154d --- /dev/null +++ b/modules/cal-config-google/module-cal-config-google.h @@ -0,0 +1,25 @@ +/* + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + * + */ + +#ifndef MODULE_CAL_CONFIG_GOOGLE_H +#define MODULE_CAL_CONFIG_GOOGLE_H + +#include <glib.h> +#include <libebackend/libebackend.h> + +void e_cal_config_google_type_register (GTypeModule *type_module); +void e_cal_config_gtasks_type_register (GTypeModule *type_module); + +#endif /* MODULE_CAL_CONFIG_GOOGLE_H */ diff --git a/po/POTFILES.in b/po/POTFILES.in index 36c896fc59..26892a9f65 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -410,7 +410,7 @@ modules/cal-config-contacts/evolution-cal-config-contacts.c modules/cal-config-google/e-google-chooser-button.c modules/cal-config-google/e-google-chooser.c modules/cal-config-google/e-google-chooser-dialog.c -modules/cal-config-google/evolution-cal-config-google.c +modules/cal-config-google/e-cal-config-google.c modules/cal-config-local/evolution-cal-config-local.c modules/cal-config-weather/evolution-cal-config-weather.c modules/cal-config-webcal/evolution-cal-config-webcal.c |