diff options
Diffstat (limited to 'plugins/google-account-setup/google-contacts-source.c')
-rw-r--r-- | plugins/google-account-setup/google-contacts-source.c | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/plugins/google-account-setup/google-contacts-source.c b/plugins/google-account-setup/google-contacts-source.c deleted file mode 100644 index 9345deba57..0000000000 --- a/plugins/google-account-setup/google-contacts-source.c +++ /dev/null @@ -1,425 +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/> - * - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * Copyright 2008, Joergen Scheibengruber <joergen.scheibengruber@googlemail.com> - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> - -#include <glib/gi18n-lib.h> - -#include <gtk/gtk.h> - -#include <e-util/e-config.h> -#include <e-util/e-plugin.h> -#include <shell/e-shell.h> -#include <addressbook/gui/widgets/eab-config.h> - -#include <libedataserver/e-source.h> -#include <libedataserver/e-source-list.h> -#include <libedataserver/e-url.h> -#include <libedataserver/e-account-list.h> - -#include "google-contacts-source.h" - -void -ensure_google_contacts_source_group (void) -{ - EShellBackend *backend; - ESourceList *source_list = NULL; - - backend = e_shell_get_backend_by_name (e_shell_get_default (), "contacts"); - g_return_if_fail (backend != NULL); - - g_object_get (G_OBJECT (backend), "source-list", &source_list, NULL); - g_return_if_fail (source_list != NULL); - - e_source_list_ensure_group (source_list, _("Google"), "google://", FALSE); - g_object_unref (source_list); -} - -void -remove_google_contacts_source_group (void) -{ - ESourceList *source_list; - ESourceGroup *group; - const gchar *key; - - key = "/apps/evolution/addressbook/sources"; - source_list = e_source_list_new_for_gconf_default (key); - - if (source_list == NULL) - return; - - group = e_source_list_peek_group_by_base_uri (source_list, "google://"); - - if (group) { - GSList *sources; - - sources = e_source_group_peek_sources (group); - - if (NULL == sources) { - e_source_list_remove_group (source_list, group); - e_source_list_sync (source_list, NULL); - } - } - g_object_unref (source_list); -} - -static void -on_username_entry_changed (GtkEntry *entry, - gpointer user_data) -{ - ESource *source = user_data; - const gchar *text; - gchar *username; - - text = gtk_entry_get_text (entry); - - if (!text || !*text) { - username = NULL; - } else if (strstr (text, "@")) { - username = g_strdup (text); - } else { - username = g_strdup_printf ("%s@gmail.com", text); - } - - e_source_set_relative_uri (source, username); - e_source_set_property (source, "username", username); - e_source_set_property (source, "auth", "plain/password"); - g_free (username); -} - -static void -on_ssl_cb_toggled (GtkToggleButton *tb, - gpointer user_data) -{ - ESource *source = user_data; - - if (gtk_toggle_button_get_active (tb)) { - e_source_set_property (source, "use-ssl", "true"); - } else { - e_source_set_property (source, "use-ssl", "false"); - } -} - -typedef enum { - MINUTES, - HOURS, - DAYS, - WEEKS -} IntervalType; - -static void -seconds_to_interval (guint seconds, - IntervalType *type, - gint *time) -{ - gint minutes = seconds / 60; - - *type = MINUTES; - *time = minutes; - if (minutes && !(minutes % 10080)) { - *type = WEEKS; - *time = minutes / 10080; - } else if (minutes && !(minutes % 1440)) { - *type = DAYS; - *time = minutes / 1440; - } else if (minutes && !(minutes % 60)) { - *type = HOURS; - *time = minutes / 60; - } -} - -static guint -interval_to_seconds (IntervalType type, - gint time) -{ - switch (type) { - case MINUTES: - return time * 60; - case HOURS: - return time * 60 * 60; - case DAYS: - return time * 60 * 60 * 24; - case WEEKS: - return time * 60 * 60 * 24 * 7; - default: - g_warning ("Time unit out of range"); - break; - } - return 0; -} - -static void -on_interval_sb_value_changed (GtkSpinButton *sb, - gpointer user_data) -{ - ESource *source = user_data; - gdouble time; - guint seconds; - gchar *value_string; - GtkWidget *interval_combo; - IntervalType type; - - interval_combo = g_object_get_data (G_OBJECT (sb), "interval-combo"); - type = gtk_combo_box_get_active (GTK_COMBO_BOX (interval_combo)); - - time = gtk_spin_button_get_value (sb); - - seconds = interval_to_seconds (type, time); - - value_string = g_strdup_printf ("%u", seconds); - e_source_set_property (source, "refresh-interval", value_string); - g_free (value_string); -} - -static void -on_interval_combo_changed (GtkComboBox *combo, - gpointer user_data) -{ - ESource *source = user_data; - gdouble time; - guint seconds; - gchar *value_string; - GtkWidget *sb; - IntervalType type; - - sb = g_object_get_data (G_OBJECT (combo), "interval-sb"); - type = gtk_combo_box_get_active (combo); - - time = gtk_spin_button_get_value (GTK_SPIN_BUTTON (sb)); - - seconds = interval_to_seconds (type, time); - - value_string = g_strdup_printf ("%u", seconds); - e_source_set_property (source, "refresh-interval", value_string); - g_free (value_string); -} - -gpointer -check_username_filled (ESource *source) -{ - gboolean res = TRUE; - - g_return_val_if_fail (source != NULL, NULL); - - if (g_ascii_strncasecmp ( - GOOGLE_BASE_URI, e_source_group_peek_base_uri ( - e_source_peek_group (source)), strlen (GOOGLE_BASE_URI)) == 0) { - gchar *username; - - username = g_strdup (e_source_get_property (source, "username")); - - if (username) - username = g_strstrip (username); - - res = username && *username; - - g_free (username); - } - - return GINT_TO_POINTER (res ? 1 : 0); -} - -gpointer -plugin_google_contacts_check (EPlugin *epl, - EConfigHookPageCheckData *data) -{ - EABConfigTargetSource *t; - - g_return_val_if_fail (data != NULL, NULL); - g_return_val_if_fail (data->target != NULL, NULL); - - t = (EABConfigTargetSource *) data->target; - g_return_val_if_fail (t->source != NULL, NULL); - - return check_username_filled (t->source); -} - -struct ui_data { - GtkWidget *widget; -}; - -static void -destroy_ui_data (gpointer data) -{ - struct ui_data *ui = data; - - if (ui && ui->widget) - gtk_widget_destroy (ui->widget); - - g_free (ui); -} - -GtkWidget * -plugin_google_contacts (EPlugin *epl, - EConfigHookItemFactoryData *data) -{ - EABConfigTargetSource *t = (EABConfigTargetSource *) data->target; - ESource *source; - ESourceGroup *group; - const gchar *base_uri; - const gchar *username; - const gchar *refresh_interval_str; - guint refresh_interval; - const gchar *use_ssl_str; - gchar *buff; - gboolean use_ssl; - GtkWidget *parent; - GtkWidget *vbox; - - GtkWidget *section; - GtkWidget *vbox2; - - GtkWidget *hbox; - GtkWidget *spacer; - GtkWidget *label; - GtkWidget *username_entry; - - GtkWidget *interval_sb; - GtkWidget *interval_combo; - IntervalType type; - gint time; - - GtkWidget *ssl_cb; - struct ui_data *ui; - - source = t->source; - group = e_source_peek_group (source); - - base_uri = e_source_group_peek_base_uri (group); - - g_object_set_data (G_OBJECT (epl), "gwidget", NULL); - - if (g_ascii_strncasecmp (GOOGLE_BASE_URI, base_uri, 9) != 0) - return NULL; - - /* Build up the UI */ - parent = data->parent; - vbox = gtk_widget_get_ancestor ( - gtk_widget_get_parent (parent), GTK_TYPE_VBOX); - - vbox2 = gtk_vbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0); - - section = gtk_label_new (NULL); - buff = g_strconcat ("<b>", _("Server"), "</b>", NULL); - gtk_label_set_markup (GTK_LABEL (section), buff); - g_free (buff); - gtk_misc_set_alignment (GTK_MISC (section), 0.0, 0.0); - gtk_box_pack_start (GTK_BOX (vbox2), section, FALSE, FALSE, 0); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); - - spacer = gtk_label_new (" "); - gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); - - label = gtk_label_new_with_mnemonic (_("User_name:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - username_entry = gtk_entry_new (); - username = e_source_get_property (source, "username"); - if (username) - gtk_entry_set_text (GTK_ENTRY (username_entry), username); - gtk_box_pack_start (GTK_BOX (hbox), username_entry, TRUE, TRUE, 0); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); - - spacer = gtk_label_new (" "); - gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); - - use_ssl_str = e_source_get_property (source, "use-ssl"); - if (use_ssl_str && ('1' == use_ssl_str[0] || - 0 == g_ascii_strcasecmp (use_ssl_str, "true"))) { - use_ssl = 1; - } else { - use_ssl = 0; - } - ssl_cb = gtk_check_button_new_with_mnemonic (_("Use _secure connection")); - gtk_box_pack_start (GTK_BOX (hbox), ssl_cb, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ssl_cb), use_ssl); - - hbox = gtk_hbox_new (FALSE, 10); - gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); - - spacer = gtk_label_new (" "); - gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); - - refresh_interval_str = e_source_get_property (source, "refresh-interval"); - if (refresh_interval_str && - (1 == sscanf (refresh_interval_str, "%u", &refresh_interval))) { - } else { - refresh_interval = -1; - } - seconds_to_interval (refresh_interval, &type, &time); - - label = gtk_label_new_with_mnemonic (_("Re_fresh:")); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - interval_sb = gtk_spin_button_new_with_range (1, 100, 1); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (interval_sb), time); - gtk_box_pack_start (GTK_BOX (hbox), interval_sb, FALSE, FALSE, 0); - - interval_combo = gtk_combo_box_text_new (); - gtk_combo_box_text_append_text ( - GTK_COMBO_BOX_TEXT (interval_combo), _("minutes")); - gtk_combo_box_text_append_text ( - GTK_COMBO_BOX_TEXT (interval_combo), _("hours")); - gtk_combo_box_text_append_text ( - GTK_COMBO_BOX_TEXT (interval_combo), _("days")); - gtk_combo_box_text_append_text ( - GTK_COMBO_BOX_TEXT (interval_combo), _("weeks")); - gtk_combo_box_set_active (GTK_COMBO_BOX (interval_combo), type); - gtk_box_pack_start (GTK_BOX (hbox), interval_combo, FALSE, FALSE, 0); - - gtk_widget_show_all (vbox2); - - g_object_set_data ( - G_OBJECT (interval_sb), "interval-combo", interval_combo); - g_object_set_data ( - G_OBJECT (interval_combo), "interval-sb", interval_sb); - - ui = g_malloc0 (sizeof (struct ui_data)); - ui->widget = vbox2; - g_object_set_data_full(G_OBJECT(epl), "gwidget", ui, destroy_ui_data); - g_signal_connect ( - ui->widget, "destroy", - G_CALLBACK (gtk_widget_destroyed), &ui->widget); - - g_signal_connect ( - username_entry, "changed", - G_CALLBACK (on_username_entry_changed), source); - g_signal_connect ( - interval_combo, "changed", - G_CALLBACK (on_interval_combo_changed), source); - g_signal_connect ( - ssl_cb, "toggled", - G_CALLBACK (on_ssl_cb_toggled), source); - g_signal_connect ( - interval_sb, "value-changed", - G_CALLBACK (on_interval_sb_value_changed), source); - - return NULL; -} - |