aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2010-02-04 19:55:42 +0800
committerMilan Crha <mcrha@redhat.com>2010-02-04 19:55:42 +0800
commit9a8fa88b6a3fe12409ff0358bed45187c9c743a5 (patch)
tree2686e65a6fa77973efac264c3ce14c388906f650
parentcaee31bac657c69b3dd8ec2d9ebfebd4510a6608 (diff)
downloadgsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.tar
gsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.tar.gz
gsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.tar.bz2
gsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.tar.lz
gsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.tar.xz
gsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.tar.zst
gsoc2013-evolution-9a8fa88b6a3fe12409ff0358bed45187c9c743a5.zip
Move some ESource-plugin common code to e-plugin-util.h/.c
-rw-r--r--e-util/Makefile.am4
-rw-r--r--e-util/e-plugin-util.c462
-rw-r--r--e-util/e-plugin-util.h46
-rw-r--r--plugins/caldav/caldav-source.c365
-rw-r--r--plugins/calendar-file/Makefile.am1
-rw-r--r--plugins/calendar-file/calendar-file.c134
-rw-r--r--plugins/calendar-http/Makefile.am1
-rw-r--r--plugins/calendar-http/calendar-http.c413
-rw-r--r--plugins/calendar-weather/calendar-weather.c209
-rw-r--r--plugins/default-source/Makefile.am1
-rw-r--r--plugins/default-source/default-source.c67
-rw-r--r--plugins/google-account-setup/google-source.c145
-rw-r--r--plugins/google-account-setup/org-gnome-evolution-google.eplug.xml4
-rw-r--r--plugins/webdav-account-setup/Makefile.am1
-rw-r--r--plugins/webdav-account-setup/webdav-contacts-source.c117
-rw-r--r--po/POTFILES.in1
16 files changed, 713 insertions, 1258 deletions
diff --git a/e-util/Makefile.am b/e-util/Makefile.am
index 8a15c521f6..b34e0375a8 100644
--- a/e-util/Makefile.am
+++ b/e-util/Makefile.am
@@ -39,6 +39,7 @@ eutilinclude_HEADERS = \
e-print.h \
e-plugin.h \
e-plugin-ui.h \
+ e-plugin-util.h \
e-profile-event.h \
e-selection.h \
e-signature.h \
@@ -112,8 +113,9 @@ libeutil_la_SOURCES = \
e-mktemp.c \
e-module.c \
e-non-intrusive-error-dialog.c \
- e-plugin-ui.c \
e-plugin.c \
+ e-plugin-ui.c \
+ e-plugin-util.c \
e-print.c \
e-profile-event.c \
e-selection.c \
diff --git a/e-util/e-plugin-util.c b/e-util/e-plugin-util.c
new file mode 100644
index 0000000000..885d017e15
--- /dev/null
+++ b/e-util/e-plugin-util.c
@@ -0,0 +1,462 @@
+/*
+ * 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-2010 Novell, Inc. (www.novell.com)
+ */
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <libsoup/soup.h>
+#include <libedataserver/e-source.h>
+#include <string.h>
+
+#include "e-plugin-util.h"
+
+/* name of a property on a widget with corresponding property name for an ESource */
+#define EPU_SP_NAME "e-source-property-name"
+
+#define EPU_CHECK_TRUE "epu-check-true-value"
+#define EPU_CHECK_FALSE "epu-check-false-value"
+
+static gboolean
+epu_is_uri_proto (const gchar *uri, const gchar *protocol)
+{
+ gboolean res;
+
+ g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_val_if_fail (protocol != NULL, FALSE);
+
+ res = uri && g_ascii_strncasecmp (uri, protocol, strlen (protocol)) == 0;
+
+ if (res)
+ res = strchr (protocol, ':') != NULL || uri[strlen (protocol)] == ':';
+
+ return res;
+}
+
+/**
+ * e_plugin_util_is_source_proto:
+ * @source: #ESource object
+ * @protocol: protocol to check on, like "http", "https", ...
+ *
+ * Returns whether given source's uri is of the given protocol.
+ **/
+gboolean
+e_plugin_util_is_source_proto (ESource *source, const gchar *protocol)
+{
+ gchar *uri;
+ gboolean res;
+
+ g_return_val_if_fail (source != NULL, FALSE);
+ g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
+ g_return_val_if_fail (protocol != NULL, FALSE);
+
+ uri = e_source_get_uri (source);
+ res = epu_is_uri_proto (uri, protocol);
+ g_free (uri);
+
+ return res;
+}
+
+/**
+ * e_plugin_util_is_group_proto:
+ * @group: #ESourceGroup object
+ * @protocol: protocol to check on, like "http", "https", ...
+ *
+ * Returns whether given groups' base uri is of the given protocol.
+ **/
+gboolean
+e_plugin_util_is_group_proto (ESourceGroup *group, const gchar *protocol)
+{
+ g_return_val_if_fail (group != NULL, FALSE);
+ g_return_val_if_fail (E_IS_SOURCE_GROUP (group), FALSE);
+ g_return_val_if_fail (protocol != NULL, FALSE);
+
+ return epu_is_uri_proto (e_source_group_peek_base_uri (group), protocol);
+}
+
+/**
+ * e_plugin_util_replace_at_sign:
+ * @str: string to work with
+ *
+ * Replaces all '@' with '%40' in @str.
+ * Returns newly allocated string.
+ **/
+gchar *
+e_plugin_util_replace_at_sign (const gchar *str)
+{
+ gchar *res, *at;
+
+ if (!str)
+ return NULL;
+
+ res = g_strdup (str);
+ while (at = strchr (res, '@'), at) {
+ gchar *tmp = g_malloc0 (sizeof (gchar) * (1 + strlen (res) + 2));
+
+ strncpy (tmp, res, at - res);
+ strcat (tmp, "%40");
+ strcat (tmp, at + 1);
+
+ g_free (res);
+ res = tmp;
+ }
+
+ return res;
+}
+
+/**
+ * e_plugin_util_uri_no_proto:
+ * @uri: #SoupURI object
+ *
+ * Returns uri encoded as string, without protocol part.
+ * Returned pointer should be freed with g_free.
+ **/
+gchar *
+e_plugin_util_uri_no_proto (SoupURI *uri)
+{
+ gchar *full_uri, *uri_noproto;
+ const gchar *tmp;
+
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ full_uri = soup_uri_to_string (uri, FALSE);
+ g_return_val_if_fail (full_uri != NULL, NULL);
+
+ tmp = strstr (full_uri, "://");
+ if (tmp && tmp < strchr (full_uri, '/')) {
+ uri_noproto = g_strdup (tmp + 3);
+ } else {
+ uri_noproto = full_uri;
+ full_uri = NULL;
+ }
+
+ g_free (full_uri);
+
+ return uri_noproto;
+}
+
+static void
+epu_update_source_property (ESource *source, GObject *object, const gchar *value)
+{
+ const gchar *property_name;
+
+ g_return_if_fail (source != NULL);
+ g_return_if_fail (E_IS_SOURCE (source));
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (G_IS_OBJECT (object));
+
+ property_name = g_object_get_data (object, EPU_SP_NAME);
+ g_return_if_fail (property_name != NULL);
+
+ e_source_set_property (source, property_name, value);
+}
+
+static void
+epu_entry_changed_cb (GObject *entry, ESource *source)
+{
+ g_return_if_fail (entry != NULL);
+ g_return_if_fail (GTK_IS_ENTRY (entry));
+
+ epu_update_source_property (source, entry, gtk_entry_get_text (GTK_ENTRY (entry)));
+}
+
+static void
+epu_check_toggled_cb (GObject *button, ESource *source)
+{
+ const gchar *true_value, *false_value;
+
+ g_return_if_fail (button != NULL);
+ g_return_if_fail (GTK_IS_TOGGLE_BUTTON (button));
+
+ true_value = g_object_get_data (button, EPU_CHECK_TRUE);
+ false_value = g_object_get_data (button, EPU_CHECK_FALSE);
+
+ epu_update_source_property (source, button, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)) ? true_value : false_value);
+}
+
+/**
+ * e_plugin_util_add_entry:
+ * @parent: two-columns #GtkTable or #GtkContainer, where to add new entry
+ * @label: label for the entry; can be NULL for no label
+ * @source: #ESource object to which tight the entry change; can be NULL for no property binding
+ * @source_property: source's property name to use for a value; can be NULL for no property binding
+ *
+ * Adds a #GtkEntry to the table at the last row or to the container, with a given label.
+ * The entry will be always at the second column of the table.
+ * Value of an entry will be prefilled with a property value of the given
+ * source, and the source will be updated on any change of the entry automatically.
+ * Entry is shown by default.
+ *
+ * Returns pointer to newly added #GtkEntry.
+ **/
+GtkWidget *
+e_plugin_util_add_entry (GtkWidget *parent, const gchar *label, ESource *source, const gchar *source_property)
+{
+ GtkWidget *entry, *lbl = NULL;
+ const gchar *value;
+ gint row = -1;
+
+ g_return_val_if_fail (parent != NULL, NULL);
+ g_return_val_if_fail (GTK_IS_TABLE (parent) || GTK_IS_CONTAINER (parent), NULL);
+
+ if (source || source_property) {
+ g_return_val_if_fail (source != NULL, NULL);
+ g_return_val_if_fail (E_IS_SOURCE (source), NULL);
+ g_return_val_if_fail (source_property != NULL, NULL);
+ g_return_val_if_fail (*source_property != 0, NULL);
+ }
+
+ if (GTK_IS_TABLE (parent))
+ row = GTK_TABLE (parent)->nrows;
+
+ if (label) {
+ lbl = gtk_label_new_with_mnemonic (label);
+ gtk_widget_show (lbl);
+ gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5);
+ if (row != -1)
+ gtk_table_attach (GTK_TABLE (parent), lbl, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
+ else
+ gtk_container_add (GTK_CONTAINER (parent), lbl);
+ }
+
+ if (source)
+ value = e_source_get_property (source, source_property);
+ else
+ value = NULL;
+
+ entry = gtk_entry_new ();
+ gtk_widget_show (entry);
+ gtk_entry_set_text (GTK_ENTRY (entry), value ? value : "");
+ if (row != -1)
+ gtk_table_attach (GTK_TABLE (parent), entry, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ else
+ gtk_container_add (GTK_CONTAINER (parent), entry);
+
+ if (lbl)
+ gtk_label_set_mnemonic_widget (GTK_LABEL (lbl), entry);
+
+ if (source) {
+ g_object_set_data_full (G_OBJECT (entry), EPU_SP_NAME, g_strdup (source_property), g_free);
+ g_signal_connect (G_OBJECT (entry), "changed", G_CALLBACK (epu_entry_changed_cb), source);
+ }
+
+ return entry;
+}
+
+/**
+ * e_plugin_util_add_check:
+ * @parent: either two-columns #GtkTable or #GtkContainer where to add new check box; or NULL to just create it
+ * @label: label for the check; cannot be NULL
+ * @source: #ESource object to which tight the check change; can be NULL for no property binding
+ * @source_property: source's property name to use for a value; can be NULL for no property binding
+ * @true_value: what value use for a checked state in a source
+ * @false_value: what value use for an unchecked state in a source
+ *
+ * Adds a #GtkCheckButton to the parent (if provided) at the last row, with a given label.
+ * The check will be always at the second column of the table.
+ * Value of a check will be prefilled with a property value of the given
+ * source, and the source will be updated on any change of the check automatically.
+ * Check is shown by default.
+ *
+ * Returns pointer to newly added #GtkCheckButton.
+ **/
+GtkWidget *
+e_plugin_util_add_check (GtkWidget *parent, const gchar *label, ESource *source, const gchar *source_property, const gchar *true_value, const gchar *false_value)
+{
+ GtkWidget *check;
+ const gchar *value;
+
+ g_return_val_if_fail (parent == NULL || GTK_IS_TABLE (parent) || GTK_IS_CONTAINER (parent), NULL);
+ g_return_val_if_fail (label != NULL, NULL);
+
+ if (source || source_property) {
+ g_return_val_if_fail (source != NULL, NULL);
+ g_return_val_if_fail (E_IS_SOURCE (source), NULL);
+ g_return_val_if_fail (source_property != NULL, NULL);
+ g_return_val_if_fail (*source_property != 0, NULL);
+ }
+
+ if (source)
+ value = e_source_get_property (source, source_property);
+ else
+ value = NULL;
+
+ check = gtk_check_button_new_with_mnemonic (label);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check),
+ value && (value == true_value ||
+ (true_value && g_str_equal (value, true_value)) ||
+ (!source && g_str_equal (value, "1"))));
+ gtk_widget_show (check);
+
+ if (parent && GTK_IS_TABLE (parent)) {
+ gint row = GTK_TABLE (parent)->nrows;
+
+ gtk_table_attach (GTK_TABLE (parent), check, 1, 2, row , row + 1, GTK_FILL, 0, 0, 0);
+ } else if (parent) {
+ gtk_container_add (GTK_CONTAINER (parent), check);
+ }
+
+ if (source) {
+ g_object_set_data_full (G_OBJECT (check), EPU_SP_NAME, g_strdup (source_property), g_free);
+ g_object_set_data_full (G_OBJECT (check), EPU_CHECK_TRUE, g_strdup (true_value), g_free);
+ g_object_set_data_full (G_OBJECT (check), EPU_CHECK_FALSE, g_strdup (false_value), g_free);
+ g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (epu_check_toggled_cb), source);
+ }
+
+ return check;
+}
+
+static void
+epu_update_refresh_value (GtkWidget *spin, GtkWidget *combobox, ESource *source)
+{
+ gchar *value;
+ gint setting = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
+ switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combobox))) {
+ case 0:
+ /* minutes */
+ break;
+ case 1:
+ /* hours */
+ setting *= 60;
+ break;
+ case 2:
+ /* days */
+ setting *= 1440;
+ break;
+ case 3:
+ /* weeks */
+ setting *= 10080;
+ break;
+ default:
+ g_warning ("%s: Time unit out of range", G_STRFUNC);
+ break;
+ }
+
+ value = g_strdup_printf ("%d", setting);
+ epu_update_source_property (source, G_OBJECT (spin), value);
+ g_free (value);
+}
+
+static void
+epu_refresh_spin_changed_cb (GtkWidget *spin, ESource *source)
+{
+ g_return_if_fail (spin != NULL);
+ g_return_if_fail (GTK_IS_SPIN_BUTTON (spin));
+
+ epu_update_refresh_value (spin, g_object_get_data (G_OBJECT (spin), "refresh-combo"), source);
+}
+
+static void
+epu_refresh_combo_changed_cb (GtkWidget *combobox, ESource *source)
+{
+ g_return_if_fail (combobox != NULL);
+ g_return_if_fail (GTK_IS_COMBO_BOX (combobox));
+
+ epu_update_refresh_value (g_object_get_data (G_OBJECT (combobox), "refresh-spin"), combobox, source);
+}
+
+/**
+ * e_plugin_util_add_refresh:
+ * @parent: two-columns #GtkTable where to add new "refresh" setup widgets or NULL to just create an hbox
+ * @label: label for the widgets; can be NULL, but for parent == NULL is ignored
+ * @source: #ESource object to which tight the refresh change; cannot be NULL
+ * @source_property: source's property name to use for a value; cannot be NULL
+ *
+ * Adds widgets to setup Refresh interval. The stored value is in minutes.
+ * Returns pointer to an HBox, which contains two widgets, spin and a combo box.
+ * Both can be accessed by g_object_get_data with a name "refresh-spin" and "refresh-combo".
+ **/
+GtkWidget *
+e_plugin_util_add_refresh (GtkWidget *parent, const gchar *label, ESource *source, const gchar *source_property)
+{
+ GtkWidget *lbl = NULL, *hbox, *spin, *combo;
+ const gchar *value;
+ gint row = -1, value_num, item_num = 0;
+
+ g_return_val_if_fail (parent == NULL || GTK_IS_TABLE (parent), NULL);
+ g_return_val_if_fail (source != NULL, NULL);
+ g_return_val_if_fail (E_IS_SOURCE (source), NULL);
+ g_return_val_if_fail (source_property != NULL, NULL);
+ g_return_val_if_fail (*source_property != 0, NULL);
+
+ if (parent)
+ row = GTK_TABLE (parent)->nrows;
+
+ value = e_source_get_property (source, source_property);
+ if (!value) {
+ value = "30";
+ e_source_set_property (source, source_property, value);
+ }
+
+ if (label && parent) {
+ lbl = gtk_label_new_with_mnemonic (label);
+ gtk_widget_show (lbl);
+ gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (parent), lbl, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
+ }
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_widget_show (hbox);
+
+ spin = gtk_spin_button_new_with_range (0, 100, 1);
+ gtk_widget_show (spin);
+ gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, TRUE, 0);
+
+ combo = gtk_combo_box_new_text ();
+ gtk_widget_show (combo);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("minutes"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("hours"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("days"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("weeks"));
+ gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, TRUE, 0);
+
+ value_num = value ? atoi (value) : 30;
+
+ if (value_num && !(value_num % 10080)) {
+ /* weeks */
+ item_num = 3;
+ value_num /= 10080;
+ } else if (value_num && !(value_num % 1440)) {
+ /* days */
+ item_num = 2;
+ value_num /= 1440;
+ } else if (value_num && !(value_num % 60)) {
+ /* hours */
+ item_num = 1;
+ value_num /= 60;
+ }
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), item_num);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), value_num);
+
+ if (lbl)
+ gtk_label_set_mnemonic_widget (GTK_LABEL (lbl), spin);
+
+ g_object_set_data_full (G_OBJECT (spin), EPU_SP_NAME, g_strdup (source_property), g_free);
+
+ g_object_set_data (G_OBJECT (combo), "refresh-spin", spin);
+ g_object_set_data (G_OBJECT (spin), "refresh-combo", combo);
+ g_object_set_data (G_OBJECT (hbox), "refresh-spin", spin);
+ g_object_set_data (G_OBJECT (hbox), "refresh-combo", combo);
+ g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK (epu_refresh_combo_changed_cb), source);
+ g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (epu_refresh_spin_changed_cb), source);
+
+ if (parent)
+ gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ return hbox;
+}
diff --git a/e-util/e-plugin-util.h b/e-util/e-plugin-util.h
new file mode 100644
index 0000000000..6bee4d0413
--- /dev/null
+++ b/e-util/e-plugin-util.h
@@ -0,0 +1,46 @@
+/*
+ * 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/>
+ *
+ *
+ * Authors:
+ *
+ * Copyright (C) 1999-2010 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifndef _E_PLUGIN_UTIL_H
+#define _E_PLUGIN_UTIL_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <libsoup/soup.h>
+
+#include <libedataserver/e-source.h>
+#include <libedataserver/e-source.h>
+
+gboolean e_plugin_util_is_source_proto (ESource *source, const gchar *protocol);
+gboolean e_plugin_util_is_group_proto (ESourceGroup *group, const gchar *protocol);
+
+gchar *e_plugin_util_replace_at_sign (const gchar *str);
+gchar *e_plugin_util_uri_no_proto (SoupURI *uri);
+
+/* common widgets used in plugin setup */
+GtkWidget *e_plugin_util_add_entry (GtkWidget *parent, const gchar *label, ESource *source, const gchar *source_property);
+GtkWidget *e_plugin_util_add_check (GtkWidget *parent, const gchar *label, ESource *source, const gchar *source_property, const gchar *true_value, const gchar *false_value);
+
+/* multipack widgets */
+GtkWidget *e_plugin_util_add_refresh (GtkWidget *parent, const gchar *label, ESource *source, const gchar *source_property);
+
+#endif /* _E_PLUGIN_UTIL_H */
diff --git a/plugins/caldav/caldav-source.c b/plugins/caldav/caldav-source.c
index 4821cbf2f4..d2bc2f6a16 100644
--- a/plugins/caldav/caldav-source.c
+++ b/plugins/caldav/caldav-source.c
@@ -31,8 +31,8 @@
#include <e-util/e-config.h>
#include <e-util/e-plugin.h>
+#include <e-util/e-plugin-util.h>
#include <calendar/gui/e-cal-config.h>
-#include <libedataserver/e-url.h>
#include <libedataserver/e-account-list.h>
#include <libecal/e-cal.h>
@@ -81,228 +81,66 @@ e_plugin_lib_enable (EPlugin *ep, gint enable)
return 0;
}
-/* replaces all '@' with '%40' in str; returns newly allocated string */
-static gchar *
-replace_at_sign (const gchar *str)
-{
- gchar *res, *at;
-
- if (!str)
- return NULL;
-
- res = g_strdup (str);
- while (at = strchr (res, '@'), at) {
- gchar *tmp = g_malloc0 (sizeof (gchar) * (1 + strlen (res) + 2));
-
- strncpy (tmp, res, at - res);
- strcat (tmp, "%40");
- strcat (tmp, at + 1);
-
- g_free (res);
- res = tmp;
- }
-
- return res;
-}
-
/*****************************************************************************/
-/* the location field for caldav sources */
-
-/* stolen from calendar-weather eplugin */
-static gchar *
-print_uri_noproto (EUri *uri)
-{
- gchar *uri_noproto, *user, *pass;
-
- if (uri->user)
- user = replace_at_sign (uri->user);
- else
- user = NULL;
-
- if (uri->passwd)
- pass = replace_at_sign (uri->passwd);
- else
- pass = NULL;
-
- if (uri->port != 0)
- uri_noproto = g_strdup_printf (
- "%s%s%s%s%s%s%s:%d%s%s%s",
- user ? user : "",
- uri->authmech ? ";auth=" : "",
- uri->authmech ? uri->authmech : "",
- pass ? ":" : "",
- pass ? pass : "",
- user ? "@" : "",
- uri->host ? uri->host : "",
- uri->port,
- uri->path ? uri->path : "",
- uri->query ? "?" : "",
- uri->query ? uri->query : "");
- else
- uri_noproto = g_strdup_printf (
- "%s%s%s%s%s%s%s%s%s%s",
- user ? user : "",
- uri->authmech ? ";auth=" : "",
- uri->authmech ? uri->authmech : "",
- pass ? ":" : "",
- pass ? pass : "",
- user ? "@" : "",
- uri->host ? uri->host : "",
- uri->path ? uri->path : "",
- uri->query ? "?" : "",
- uri->query ? uri->query : "");
-
- g_free (user);
- g_free (pass);
-
- return uri_noproto;
-}
static void
-location_changed (GtkEntry *editable, ESource *source)
+location_changed_cb (GtkEntry *editable, ESource *source)
{
- EUri *euri;
+ SoupURI *suri;
gchar *ruri;
const gchar *uri, *username;
- uri = gtk_entry_get_text (GTK_ENTRY (editable));
+ uri = gtk_entry_get_text (editable);
- euri = e_uri_new (uri);
- g_return_if_fail (euri != NULL);
+ suri = soup_uri_new (uri);
+ if (!suri)
+ return;
username = e_source_get_property (source, "username");
if (username && !*username)
username = NULL;
- if ((!euri->user && username) || (euri->user && username && !g_str_equal (euri->user, username))) {
- g_free (euri->user);
- euri->user = g_strdup (username);
- }
+ soup_uri_set_user (suri, username);
- ruri = print_uri_noproto (euri);
+ ruri = e_plugin_util_uri_no_proto (suri);
e_source_set_relative_uri (source, ruri);
g_free (ruri);
- e_uri_free (euri);
+ soup_uri_free (suri);
}
static void
-ssl_changed (GtkToggleButton *button, ESource *source)
+user_changed_cb (GtkEntry *editable, ESource *source)
{
- e_source_set_property(source, "ssl",
- gtk_toggle_button_get_active(button) ? "1" : "0");
-}
-
-static void
-user_changed (GtkEntry *editable, ESource *source)
-{
- EUri *euri;
- gchar *uri;
- gchar *ruri;
+ SoupURI *suri;
+ gchar *uri, *ruri;
const gchar *user;
uri = e_source_get_uri (source);
- user = gtk_entry_get_text (GTK_ENTRY (editable));
+ user = gtk_entry_get_text (editable);
- if (uri == NULL) {
- g_free (uri);
+ if (uri == NULL)
+ return;
+
+ suri = soup_uri_new (uri);
+ g_free (uri);
+
+ if (suri == NULL)
return;
- }
- euri = e_uri_new (uri);
- g_free (euri->user);
- euri->user = NULL;
+ soup_uri_set_user (suri, NULL);
if (user != NULL && *user) {
- euri->user = g_strdup (user);
+ soup_uri_set_user (suri, user);
e_source_set_property (source, "auth", "1");
} else {
e_source_set_property (source, "auth", NULL);
}
e_source_set_property (source, "username", user);
- ruri = print_uri_noproto (euri);
+ ruri = e_plugin_util_uri_no_proto (suri);
e_source_set_relative_uri (source, ruri);
g_free (ruri);
- e_uri_free (euri);
-}
-
-static void
-set_refresh_time (ESource *source, GtkWidget *spin, GtkWidget *combobox)
-{
- gint time;
- gint item_num = 0;
- const gchar *refresh_str = e_source_get_property (source, "refresh");
- time = refresh_str ? atoi (refresh_str) : 30;
-
- if (time && !(time % 10080)) {
- /* weeks */
- item_num = 3;
- time /= 10080;
- } else if (time && !(time % 1440)) {
- /* days */
- item_num = 2;
- time /= 1440;
- } else if (time && !(time % 60)) {
- /* hours */
- item_num = 1;
- time /= 60;
- }
- gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), item_num);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), time);
-}
-
-static gchar *
-get_refresh_minutes (GtkWidget *spin, GtkWidget *combobox)
-{
- gint setting = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combobox))) {
- case 0:
- /* minutes */
- break;
- case 1:
- /* hours */
- setting *= 60;
- break;
- case 2:
- /* days */
- setting *= 1440;
- break;
- case 3:
- /* weeks - is this *really* necessary? */
- setting *= 10080;
- break;
- default:
- g_warning ("Time unit out of range");
- break;
- }
-
- return g_strdup_printf ("%d", setting);
-}
-
-static void
-spin_changed (GtkSpinButton *spin, ESource *source)
-{
- gchar *refresh_str;
- GtkWidget *combobox;
-
- combobox = g_object_get_data (G_OBJECT (spin), "combobox");
-
- refresh_str = get_refresh_minutes ((GtkWidget *) spin, combobox);
- e_source_set_property (source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-combobox_changed (GtkComboBox *combobox, ESource *source)
-{
- gchar *refresh_str;
- GtkWidget *spin;
-
- spin = g_object_get_data (G_OBJECT (combobox), "spin");
-
- refresh_str = get_refresh_minutes (spin, (GtkWidget *) combobox);
- e_source_set_property (source, "refresh", refresh_str);
- g_free (refresh_str);
+ soup_uri_free (suri);
}
static void
@@ -344,168 +182,59 @@ oge_caldav (EPlugin *epl,
{
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
ESource *source;
- ESourceGroup *group;
- EUri *euri;
- GtkWidget *parent;
- GtkWidget *lurl;
- GtkWidget *cssl;
- GtkWidget *location;
- GtkWidget *widget;
- GtkWidget *luser;
- GtkWidget *user;
- GtkWidget *browse_cal;
- GtkWidget *label, *hbox, *spin, *combobox;
- gchar *uri;
- gchar *username;
- const gchar *ssl_prop;
- gboolean ssl_enabled;
- gint row;
+ SoupURI *suri;
+ GtkWidget *parent, *location, *ssl, *user, *browse_cal, *refresh;
+ gchar *uri, *username;
source = t->source;
- group = e_source_peek_group (source);
-
- widget = NULL;
- if (!g_str_has_prefix (e_source_group_peek_base_uri (group),
- "caldav")) {
+ if (!e_plugin_util_is_group_proto (e_source_peek_group (source), "caldav")) {
return NULL;
}
/* Extract the username from the uri so we can prefill the
* dialog right, remove the username from the url then */
uri = e_source_get_uri (source);
- euri = e_uri_new (uri);
+ suri = soup_uri_new (uri);
g_free (uri);
- if (euri == NULL) {
- return NULL;
+ if (suri) {
+ soup_uri_set_user (suri, NULL);
+ soup_uri_set_password (suri, NULL);
+ uri = soup_uri_to_string (suri, FALSE);
+ soup_uri_free (suri);
+ } else {
+ uri = g_strdup ("");
}
- g_free (euri->user);
- euri->user = NULL;
- uri = e_uri_to_string (euri, FALSE);
-
username = e_source_get_duped_property (source, "username");
- ssl_prop = e_source_get_property (source, "ssl");
- if (ssl_prop && ssl_prop[0] == '1') {
- ssl_enabled = TRUE;
- } else {
- ssl_enabled = FALSE;
- }
-
/* Build up the UI */
parent = data->parent;
- row = GTK_TABLE (parent)->nrows;
-
- lurl = gtk_label_new_with_mnemonic (_("_URL:"));
- gtk_widget_show (lurl);
- gtk_misc_set_alignment (GTK_MISC (lurl), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent),
- lurl, 0, 1,
- row, row+1,
- GTK_FILL, 0, 0, 0);
-
- location = gtk_entry_new ();
- gtk_widget_show (location);
+ location = e_plugin_util_add_entry (parent, _("_URL:"), NULL, NULL);
gtk_entry_set_text (GTK_ENTRY (location), uri);
- gtk_table_attach (GTK_TABLE (parent), location,
- 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (lurl), location);
-
- g_signal_connect (G_OBJECT (location),
- "changed",
- G_CALLBACK (location_changed),
- source);
-
- row++;
-
- cssl = gtk_check_button_new_with_mnemonic (_("Use _SSL"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cssl), ssl_enabled);
- gtk_widget_show (cssl);
- gtk_table_attach (GTK_TABLE (parent),
- cssl, 1, 2,
- row , row + 1,
- GTK_FILL, 0, 0, 0);
-
- g_signal_connect (G_OBJECT (cssl),
- "toggled",
- G_CALLBACK (ssl_changed),
- source);
-
- row++;
-
- luser = gtk_label_new_with_mnemonic (_("User_name:"));
- gtk_widget_show (luser);
- gtk_misc_set_alignment (GTK_MISC (luser), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent),
- luser, 0, 1,
- row, row + 1,
- GTK_FILL, 0, 0, 0);
-
- user = gtk_entry_new ();
- gtk_widget_show (user);
- gtk_entry_set_text (GTK_ENTRY (user), username ? username : "");
- gtk_table_attach (GTK_TABLE (parent), user,
- 1, 2, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (luser), user);
+ g_signal_connect (G_OBJECT (location), "changed", G_CALLBACK (location_changed_cb), source);
- g_signal_connect (G_OBJECT (user),
- "changed",
- G_CALLBACK (user_changed),
- source);
+ ssl = e_plugin_util_add_check (parent, _("Use _SSL"), source, "ssl", "1", "0");
- row++;
+ user = e_plugin_util_add_entry (parent, _("User_name:"), NULL, NULL);
+ gtk_entry_set_text (GTK_ENTRY (user), username ? username : "");
+ g_signal_connect (G_OBJECT (user), "changed", G_CALLBACK (user_changed_cb), source);
g_free (uri);
g_free (username);
browse_cal = gtk_button_new_with_mnemonic (_("Brows_e server for a calendar"));
gtk_widget_show (browse_cal);
- gtk_table_attach (GTK_TABLE (parent), browse_cal, 1, 2, row, row + 1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach (GTK_TABLE (parent), browse_cal, 1, 2, GTK_TABLE (parent)->nrows, GTK_TABLE (parent)->nrows + 1, GTK_FILL, 0, 0, 0);
g_object_set_data (G_OBJECT (browse_cal), "caldav-url", location);
g_object_set_data (G_OBJECT (browse_cal), "caldav-username", user);
- g_object_set_data (G_OBJECT (browse_cal), "caldav-ssl", cssl);
+ g_object_set_data (G_OBJECT (browse_cal), "caldav-ssl", ssl);
g_signal_connect (G_OBJECT (browse_cal), "clicked", G_CALLBACK (browse_cal_clicked_cb), GINT_TO_POINTER (t->source_type));
- row++;
-
- /* add refresh option */
- label = gtk_label_new_with_mnemonic (_("Re_fresh:"));
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_widget_show (hbox);
-
- spin = gtk_spin_button_new_with_range (0, 100, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin);
- gtk_widget_show (spin);
- gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, TRUE, 0);
+ refresh = e_plugin_util_add_refresh (parent, _("Re_fresh:"), source, "refresh");
- combobox = gtk_combo_box_new_text ();
- gtk_widget_show (combobox);
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("minutes"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("hours"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("days"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("weeks"));
- set_refresh_time (source, spin, combobox);
- gtk_box_pack_start (GTK_BOX (hbox), combobox, FALSE, TRUE, 0);
-
- g_object_set_data (G_OBJECT (combobox), "spin", spin);
- g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (combobox_changed), source);
- g_object_set_data (G_OBJECT (spin), "combobox", combobox);
- g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (spin_changed), source);
-
- gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- return widget;
+ return location;
}
-
diff --git a/plugins/calendar-file/Makefile.am b/plugins/calendar-file/Makefile.am
index ba8af51ad4..a4577e5019 100644
--- a/plugins/calendar-file/Makefile.am
+++ b/plugins/calendar-file/Makefile.am
@@ -16,6 +16,7 @@ liborg_gnome_calendar_file_la_SOURCES = calendar-file.c
liborg_gnome_calendar_file_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
liborg_gnome_calendar_file_la_LIBADD = \
+ $(top_builddir)/e-util/libeutil.la \
$(EVOLUTION_CALENDAR_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/plugins/calendar-file/calendar-file.c b/plugins/calendar-file/calendar-file.c
index b5fe2c23ff..e82feaa11a 100644
--- a/plugins/calendar-file/calendar-file.c
+++ b/plugins/calendar-file/calendar-file.c
@@ -21,9 +21,9 @@
#include <gtk/gtk.h>
#include <e-util/e-config.h>
+#include <e-util/e-plugin-util.h>
#include <calendar/gui/e-cal-config.h>
#include <libedataserver/e-source.h>
-#include <libedataserver/e-url.h>
#include <glib/gi18n.h>
#include <string.h>
@@ -41,85 +41,6 @@ location_changed (GtkFileChooserButton *widget, ESource *source)
}
static void
-set_refresh_time (ESource *source, GtkWidget *spin, GtkWidget *combobox)
-{
- gint time;
- gint item_num = 0;
- const gchar *refresh_str = e_source_get_property (source, "refresh");
- time = refresh_str ? atoi (refresh_str) : 30;
-
- if (time && !(time % 10080)) {
- /* weeks */
- item_num = 3;
- time /= 10080;
- } else if (time && !(time % 1440)) {
- /* days */
- item_num = 2;
- time /= 1440;
- } else if (time && !(time % 60)) {
- /* hours */
- item_num = 1;
- time /= 60;
- }
- gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), item_num);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), time);
-}
-
-static gchar *
-get_refresh_minutes (GtkWidget *spin, GtkWidget *combobox)
-{
- gint setting = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combobox))) {
- case 0:
- /* minutes */
- break;
- case 1:
- /* hours */
- setting *= 60;
- break;
- case 2:
- /* days */
- setting *= 1440;
- break;
- case 3:
- /* weeks - is this *really* necessary? */
- setting *= 10080;
- break;
- default:
- g_warning ("Time unit out of range");
- break;
- }
-
- return g_strdup_printf ("%d", setting);
-}
-
-static void
-spin_changed (GtkSpinButton *spin, ESource *source)
-{
- gchar *refresh_str;
- GtkWidget *combobox;
-
- combobox = g_object_get_data (G_OBJECT (spin), "combobox");
-
- refresh_str = get_refresh_minutes ((GtkWidget *) spin, combobox);
- e_source_set_property (source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-combobox_changed (GtkComboBox *combobox, ESource *source)
-{
- gchar *refresh_str;
- GtkWidget *spin;
-
- spin = g_object_get_data (G_OBJECT (combobox), "spin");
-
- refresh_str = get_refresh_minutes (spin, (GtkWidget *) combobox);
- e_source_set_property (source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
maincheck_toggled (GtkToggleButton *check, ESource *source)
{
GtkWidget *w;
@@ -147,34 +68,25 @@ maincheck_toggled (GtkToggleButton *check, ESource *source)
static void
refresh_type_changed (GtkComboBox *refresh_type, ESource *source)
{
- GtkWidget *spin, *combobox;
+ GtkWidget *refresh_hbox;
gint active = gtk_combo_box_get_active (refresh_type);
gchar buff[2] = {0};
- spin = g_object_get_data (G_OBJECT (refresh_type), "spin");
- combobox = g_object_get_data (G_OBJECT (refresh_type), "combobox");
+ refresh_hbox = g_object_get_data (G_OBJECT (refresh_type), "refresh-hbox");
if (active < 0 || active > 2)
active = 0;
if (active == 2) {
- gtk_widget_show (spin);
- gtk_widget_show (combobox);
+ gtk_widget_show (refresh_hbox);
} else {
- gtk_widget_hide (spin);
- gtk_widget_hide (combobox);
+ gtk_widget_hide (refresh_hbox);
}
buff [0] = '0' + active;
e_source_set_property (source, "refresh-type", buff);
}
-static void
-force_readonly_toggled (GtkToggleButton *check, ESource *source)
-{
- e_source_set_property (source, "custom-file-readonly", gtk_toggle_button_get_active (check) ? "1" : NULL);
-}
-
GtkWidget *e_calendar_file_customs (EPlugin *epl, EConfigHookItemFactoryData *data);
GtkWidget *
@@ -182,23 +94,15 @@ e_calendar_file_customs (EPlugin *epl, EConfigHookItemFactoryData *data)
{
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
ESource *source = t->source;
- gchar *uri_text;
const gchar *relative_uri, *value;
- GtkWidget *w1, *w2, *w3, *box1, *box2, *mainbox, *maincheck;
-
- uri_text = e_source_get_uri (source);
- if (strncmp (uri_text, "file", 4)) {
- g_free (uri_text);
+ GtkWidget *w1, *w2, *box1, *box2, *mainbox, *maincheck;
+ if (!e_plugin_util_is_source_proto (source, "file"))
return NULL;
- }
relative_uri = e_source_peek_relative_uri (source);
-
- if (relative_uri && g_str_equal (relative_uri, "system")) {
- g_free (uri_text);
+ if (relative_uri && g_str_equal (relative_uri, "system"))
return NULL;
- }
e_source_set_relative_uri (source, e_source_peek_uid (source));
@@ -286,29 +190,14 @@ e_calendar_file_customs (EPlugin *epl, EConfigHookItemFactoryData *data)
gtk_combo_box_set_active ((GtkComboBox *)w2, (value && *value && !value[1] && value [0] >= '0' && value [0] <= '2') ? value [0] - '0' : 0);
w1 = w2;
- w2 = gtk_spin_button_new_with_range (1, 100, 1);
+ w2 = e_plugin_util_add_refresh (NULL, NULL, source, "refresh");
gtk_box_pack_start (GTK_BOX (box2), w2, FALSE, TRUE, 0);
- w3 = gtk_combo_box_new_text ();
- gtk_combo_box_append_text (GTK_COMBO_BOX (w3), _("minutes"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (w3), _("hours"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (w3), _("days"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (w3), _("weeks"));
- set_refresh_time (source, w2, w3);
- gtk_box_pack_start (GTK_BOX (box2), w3, FALSE, TRUE, 0);
-
- g_object_set_data (G_OBJECT (w1), "spin", w2);
- g_object_set_data (G_OBJECT (w1), "combobox", w3);
- g_object_set_data (G_OBJECT (w2), "combobox", w3);
+ g_object_set_data (G_OBJECT (w1), "refresh-hbox", w2);
g_signal_connect (G_OBJECT (w1), "changed", G_CALLBACK (refresh_type_changed), source);
- g_signal_connect (G_OBJECT (w2), "value-changed", G_CALLBACK (spin_changed), source);
- g_signal_connect (G_OBJECT (w3), "changed", G_CALLBACK (combobox_changed), source);
- w2 = gtk_check_button_new_with_mnemonic (_("Force read _only"));
- value = e_source_get_property (source, "custom-file-readonly");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w2), value && g_str_equal (value, "1"));
- g_signal_connect (G_OBJECT (w2), "toggled", G_CALLBACK (force_readonly_toggled), source);
+ w2 = e_plugin_util_add_check (NULL, _("Force read _only"), source, "custom-file-readonly", "1", NULL);
gtk_box_pack_start ((GtkBox *)box1, w2, TRUE, TRUE, 2);
gtk_widget_show_all (mainbox);
@@ -316,7 +205,6 @@ e_calendar_file_customs (EPlugin *epl, EConfigHookItemFactoryData *data)
/* w1 is a refresh-type combobox, and it hides widgets,
thus should be called after show_all call */
refresh_type_changed (GTK_COMBO_BOX (w1), source);
- g_free (uri_text);
return mainbox;
}
diff --git a/plugins/calendar-http/Makefile.am b/plugins/calendar-http/Makefile.am
index 2e2a49ba0c..54457c3c8b 100644
--- a/plugins/calendar-http/Makefile.am
+++ b/plugins/calendar-http/Makefile.am
@@ -16,6 +16,7 @@ liborg_gnome_calendar_http_la_SOURCES = calendar-http.c
liborg_gnome_calendar_http_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
liborg_gnome_calendar_http_la_LIBADD = \
+ $(top_builddir)/e-util/libeutil.la \
$(EVOLUTION_CALENDAR_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/plugins/calendar-http/calendar-http.c b/plugins/calendar-http/calendar-http.c
index d2e8f903c6..1137d0617e 100644
--- a/plugins/calendar-http/calendar-http.c
+++ b/plugins/calendar-http/calendar-http.c
@@ -21,9 +21,10 @@
#include <gtk/gtk.h>
#include <e-util/e-config.h>
+#include <e-util/e-plugin-util.h>
#include <calendar/gui/e-cal-config.h>
#include <libedataserver/e-source.h>
-#include <libedataserver/e-url.h>
+#include <libsoup/soup.h>
#include <glib/gi18n.h>
#include <string.h>
@@ -33,88 +34,18 @@ gboolean e_calendar_http_check (EPlugin *epl, EConfigHookPageCheckData *data);
GtkWidget * e_calendar_http_secure (EPlugin *epl, EConfigHookItemFactoryData *data);
GtkWidget *e_calendar_http_auth (EPlugin *epl, EConfigHookItemFactoryData *data);
-/* replaces all '@' with '%40' in str; returns newly allocated string */
-static gchar *
-replace_at_sign (const gchar *str)
-{
- gchar *res, *at;
-
- if (!str)
- return NULL;
-
- res = g_strdup (str);
- while (at = strchr (res, '@'), at) {
- gchar *tmp = g_malloc0 (sizeof (gchar) * (1 + strlen (res) + 2));
-
- strncpy (tmp, res, at - res);
- strcat (tmp, "%40");
- strcat (tmp, at + 1);
-
- g_free (res);
- res = tmp;
- }
-
- return res;
-}
-
-static gchar *
-print_uri_noproto (EUri *uri)
-{
- gchar *uri_noproto, *user, *pass;
-
- if (uri->user)
- user = replace_at_sign (uri->user);
- else
- user = NULL;
-
- if (uri->passwd)
- pass = replace_at_sign (uri->passwd);
- else
- pass = NULL;
-
- if (uri->port != 0)
- uri_noproto = g_strdup_printf (
- "%s%s%s%s%s%s%s:%d%s%s%s",
- user ? user : "",
- uri->authmech ? ";auth=" : "",
- uri->authmech ? uri->authmech : "",
- pass ? ":" : "",
- pass ? pass : "",
- user ? "@" : "",
- uri->host ? uri->host : "",
- uri->port,
- uri->path ? uri->path : "",
- uri->query ? "?" : "",
- uri->query ? uri->query : "");
- else
- uri_noproto = g_strdup_printf (
- "%s%s%s%s%s%s%s%s%s%s",
- user ? user : "",
- uri->authmech ? ";auth=" : "",
- uri->authmech ? uri->authmech : "",
- pass ? ":" : "",
- pass ? pass : "",
- user ? "@" : "",
- uri->host ? uri->host : "",
- uri->path ? uri->path : "",
- uri->query ? "?" : "",
- uri->query ? uri->query : "");
-
- g_free (user);
- g_free (pass);
-
- return uri_noproto;
-}
-
static void
url_changed (GtkEntry *entry, ESource *source)
{
- EUri *uri;
+ SoupURI *uri;
gchar *relative_uri;
- uri = e_uri_new (gtk_entry_get_text (GTK_ENTRY (entry)));
+ uri = soup_uri_new (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+ if (!uri)
+ return;
- if (strncmp (uri->protocol, "https", sizeof ("https") - 1) == 0) {
+ if (uri->scheme && strncmp (uri->scheme, "https", sizeof ("https") - 1) == 0) {
gpointer secure_checkbox;
secure_checkbox = g_object_get_data (G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (entry))),
@@ -123,261 +54,79 @@ url_changed (GtkEntry *entry, ESource *source)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (secure_checkbox), TRUE);
}
- g_free (uri->user);
- uri->user = g_strdup (e_source_get_property (source, "username"));
- relative_uri = print_uri_noproto (uri);
+ soup_uri_set_user (uri, e_source_get_property (source, "username"));
+ relative_uri = e_plugin_util_uri_no_proto (uri);
e_source_set_relative_uri (source, relative_uri);
g_free (relative_uri);
- e_uri_free (uri);
+ soup_uri_free (uri);
}
GtkWidget *
e_calendar_http_url (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- static GtkWidget *label;
- GtkWidget *entry, *parent;
- gint row;
+ GtkWidget *entry;
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- EUri *uri;
+ SoupURI *uri;
gchar *uri_text;
- static GtkWidget *hidden = NULL;
- if (!hidden)
- hidden = gtk_label_new ("");
-
- if (data->old)
- gtk_widget_destroy (label);
-
- uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- if ((strcmp (uri->protocol, "http") &&
- strcmp (uri->protocol, "https") &&
- strcmp (uri->protocol, "webcal"))) {
- e_uri_free (uri);
- g_free (uri_text);
- return hidden;
+ if ((!e_plugin_util_is_source_proto (t->source, "http") &&
+ !e_plugin_util_is_source_proto (t->source, "https") &&
+ !e_plugin_util_is_source_proto (t->source, "webcal"))) {
+ return NULL;
}
- g_free (uri->user);
- uri->user = NULL;
+ uri_text = e_source_get_uri (t->source);
+ uri = soup_uri_new (uri_text);
g_free (uri_text);
- uri_text = e_uri_to_string (uri, FALSE);
- e_uri_free (uri);
-
- parent = data->parent;
- row = ((GtkTable*)parent)->nrows;
+ if (uri) {
+ soup_uri_set_user (uri, NULL);
+ soup_uri_set_password (uri, NULL);
- label = gtk_label_new_with_mnemonic (_("_URL:"));
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ uri_text = soup_uri_to_string (uri, FALSE);
+ soup_uri_free (uri);
+ } else {
+ uri_text = g_strdup ("");
+ }
- entry = gtk_entry_new ();
- gtk_widget_show (entry);
+ entry = e_plugin_util_add_entry (data->parent, _("_URL:"), NULL, NULL);
gtk_entry_set_text (GTK_ENTRY (entry), uri_text);
- gtk_table_attach (GTK_TABLE (parent), entry, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
g_signal_connect (G_OBJECT (entry), "changed", G_CALLBACK (url_changed), t->source);
-
g_free (uri_text);
- return entry;
-}
-
-static void
-set_refresh_time (ESource *source, GtkWidget *spin, GtkWidget *combobox)
-{
- gint time;
- gint item_num = 0;
- const gchar *refresh_str = e_source_get_property (source, "refresh");
- time = refresh_str ? atoi (refresh_str) : 30;
-
- if (time && !(time % 10080)) {
- /* weeks */
- item_num = 3;
- time /= 10080;
- } else if (time && !(time % 1440)) {
- /* days */
- item_num = 2;
- time /= 1440;
- } else if (time && !(time % 60)) {
- /* hours */
- item_num = 1;
- time /= 60;
- }
- gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), item_num);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), time);
-}
-
-static gchar *
-get_refresh_minutes (GtkWidget *spin, GtkWidget *combobox)
-{
- gint setting = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combobox))) {
- case 0:
- /* minutes */
- break;
- case 1:
- /* hours */
- setting *= 60;
- break;
- case 2:
- /* days */
- setting *= 1440;
- break;
- case 3:
- /* weeks - is this *really* necessary? */
- setting *= 10080;
- break;
- default:
- g_warning ("Time unit out of range");
- break;
- }
-
- return g_strdup_printf ("%d", setting);
-}
-
-static void
-spin_changed (GtkSpinButton *spin, ECalConfigTargetSource *t)
-{
- gchar *refresh_str;
- GtkWidget *combobox;
-
- combobox = g_object_get_data (G_OBJECT (spin), "combobox");
-
- refresh_str = get_refresh_minutes ((GtkWidget *) spin, combobox);
- e_source_set_property (t->source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-combobox_changed (GtkComboBox *combobox, ECalConfigTargetSource *t)
-{
- gchar *refresh_str;
- GtkWidget *spin;
- spin = g_object_get_data (G_OBJECT (combobox), "spin");
-
- refresh_str = get_refresh_minutes (spin, (GtkWidget *) combobox);
- e_source_set_property (t->source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-secure_setting_changed (GtkWidget *widget, ESource *source)
-{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
- e_source_set_property (source, "use_ssl", "1");
- else
- e_source_set_property (source, "use_ssl", "0");
+ return entry;
}
GtkWidget *
e_calendar_http_refresh (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- static GtkWidget *label;
- GtkWidget *combobox, *spin, *hbox, *parent;
- gint row;
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- ESource *source = t->source;
- EUri *uri;
- gchar * uri_text;
- static GtkWidget *hidden = NULL;
- if (!hidden)
- hidden = gtk_label_new ("");
-
- if (data->old)
- gtk_widget_destroy (label);
-
- uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- g_free (uri_text);
- if ((strcmp (uri->protocol, "http") &&
- strcmp (uri->protocol, "https") &&
- strcmp (uri->protocol, "webcal"))) {
- e_uri_free (uri);
- return hidden;
+ if ((!e_plugin_util_is_source_proto (t->source, "http") &&
+ !e_plugin_util_is_source_proto (t->source, "https") &&
+ !e_plugin_util_is_source_proto (t->source, "webcal"))) {
+ return NULL;
}
- e_uri_free (uri);
- parent = data->parent;
-
- row = ((GtkTable*)parent)->nrows;
-
- label = gtk_label_new_with_mnemonic (_("Re_fresh:"));
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_widget_show (hbox);
-
- spin = gtk_spin_button_new_with_range (0, 100, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin);
- gtk_widget_show (spin);
- gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, TRUE, 0);
-
- combobox = gtk_combo_box_new_text ();
- gtk_widget_show (combobox);
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("minutes"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("hours"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("days"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("weeks"));
- set_refresh_time (source, spin, combobox);
- gtk_box_pack_start (GTK_BOX (hbox), combobox, FALSE, TRUE, 0);
-
- g_object_set_data (G_OBJECT (combobox), "spin", spin);
- g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (combobox_changed), t);
- g_object_set_data (G_OBJECT (spin), "combobox", combobox);
- g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (spin_changed), t);
-
- gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- return hbox;
+ return e_plugin_util_add_refresh (data->parent, _("Re_fresh:"), t->source, "refresh");
}
GtkWidget *
e_calendar_http_secure (EPlugin *epl, EConfigHookItemFactoryData *data)
{
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- GtkWidget *secure_setting, *parent;
- const gchar *secure_prop;
- gint row;
- EUri *uri;
- gchar * uri_text;
- static GtkWidget *hidden = NULL;
-
- if (!hidden)
- hidden = gtk_label_new ("");
+ GtkWidget *secure_setting;
- uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- g_free (uri_text);
- if ((strcmp (uri->protocol, "http") &&
- strcmp (uri->protocol, "https") &&
- strcmp (uri->protocol, "webcal"))) {
- e_uri_free (uri);
- return hidden;
+ if ((!e_plugin_util_is_source_proto (t->source, "http") &&
+ !e_plugin_util_is_source_proto (t->source, "https") &&
+ !e_plugin_util_is_source_proto (t->source, "webcal"))) {
+ return NULL;
}
- e_uri_free (uri);
-
- parent = data->parent;
-
- row = ((GtkTable*)parent)->nrows;
-
- secure_setting = gtk_check_button_new_with_mnemonic (_("_Secure connection"));
-
- secure_prop = e_source_get_property (t->source, "use_ssl");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (secure_setting), (secure_prop && g_str_equal (secure_prop, "1")) ? TRUE : FALSE);
-
- g_signal_connect (secure_setting, "toggled", G_CALLBACK (secure_setting_changed), t->source);
- gtk_widget_show (secure_setting);
- gtk_table_attach (GTK_TABLE (parent), secure_setting, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ secure_setting = e_plugin_util_add_check (data->parent, _("_Secure connection"), t->source, "use_ssl", "1", "0");
/* Store pointer to secure checkbox so we can retrieve it in url_changed() */
- g_object_set_data (G_OBJECT (parent), "secure_checkbox", (gpointer)secure_setting);
+ g_object_set_data (G_OBJECT (data->parent), "secure_checkbox", (gpointer)secure_setting);
return secure_setting;
}
@@ -396,24 +145,24 @@ username_changed (GtkEntry *entry, ESource *source)
} else {
e_source_set_property (source, "auth", NULL);
e_source_set_property (source, "username", NULL);
+ username = NULL;
}
uri = e_source_get_uri (source);
if (uri != NULL) {
- EUri *euri;
+ SoupURI *suri;
gchar *ruri;
- if (username && !*username)
- username = NULL;
+ suri = soup_uri_new (uri);
+ if (!suri)
+ return;
- euri = e_uri_new (uri);
+ soup_uri_set_user (suri, username);
+ soup_uri_set_password (suri, NULL);
- g_free (euri->user);
- euri->user = g_strdup (username);
-
- ruri = print_uri_noproto (euri);
+ ruri = e_plugin_util_uri_no_proto (suri);
e_source_set_relative_uri (source, ruri);
- e_uri_free (euri);
+ soup_uri_free (suri);
g_free (ruri);
g_free (uri);
}
@@ -422,51 +171,22 @@ username_changed (GtkEntry *entry, ESource *source)
GtkWidget *
e_calendar_http_auth (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- static GtkWidget *label;
- GtkWidget *entry, *parent;
- gint row;
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- EUri *uri;
- gchar *uri_text;
+ GtkWidget *entry;
const gchar *username;
- static GtkWidget *hidden = NULL;
-
- if (!hidden)
- hidden = gtk_label_new ("");
- if (data->old)
- gtk_widget_destroy (label);
-
- uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- g_free (uri_text);
- if ((strcmp (uri->protocol, "http") &&
- strcmp (uri->protocol, "https") &&
- strcmp (uri->protocol, "webcal"))) {
- e_uri_free (uri);
- return hidden;
+ if ((!e_plugin_util_is_source_proto (t->source, "http") &&
+ !e_plugin_util_is_source_proto (t->source, "https") &&
+ !e_plugin_util_is_source_proto (t->source, "webcal"))) {
+ return NULL;
}
- e_uri_free (uri);
-
- parent = data->parent;
-
- row = ((GtkTable*)parent)->nrows;
-
- label = gtk_label_new_with_mnemonic (_("Userna_me:"));
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row+1, GTK_FILL, GTK_SHRINK, 0, 0);
username = e_source_get_property (t->source, "username");
- entry = gtk_entry_new ();
- gtk_widget_show (entry);
+ entry = e_plugin_util_add_entry (data->parent, _("Userna_me:"), NULL, NULL);
gtk_entry_set_text (GTK_ENTRY (entry), username ? username : "");
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
g_signal_connect (G_OBJECT (entry), "changed", G_CALLBACK (username_changed), t->source);
- gtk_table_attach (GTK_TABLE (parent), entry, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
return entry;
}
@@ -475,27 +195,18 @@ e_calendar_http_check (EPlugin *epl, EConfigHookPageCheckData *data)
{
/* FIXME - check pageid */
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- EUri *uri;
gboolean ok = FALSE;
- ESourceGroup *group = e_source_peek_group (t->source);
- gchar *uri_text;
- if (strncmp (e_source_group_peek_base_uri (group), "webcal", 6))
+ if (!e_plugin_util_is_group_proto (e_source_peek_group (t->source), "webcal"))
return TRUE;
- uri_text = e_source_get_uri (t->source);
- if (!strncmp (uri_text, "file:", 5)) {
- g_free (uri_text);
+ if (e_plugin_util_is_source_proto (t->source, "file"))
return FALSE;
- }
- uri = e_uri_new (uri_text);
- ok = ((!strcmp (uri->protocol, "webcal")) ||
- (!strcmp (uri->protocol, "http")) ||
- (!strcmp (uri->protocol, "https")) ||
- (!strcmp (uri->protocol, "file")) );
- e_uri_free (uri);
- g_free (uri_text);
+ ok = e_plugin_util_is_source_proto (t->source, "webcal") ||
+ e_plugin_util_is_source_proto (t->source, "http") ||
+ e_plugin_util_is_source_proto (t->source, "https") ||
+ e_plugin_util_is_source_proto (t->source, "file");
return ok;
}
diff --git a/plugins/calendar-weather/calendar-weather.c b/plugins/calendar-weather/calendar-weather.c
index ad2c273baf..50c698da28 100644
--- a/plugins/calendar-weather/calendar-weather.c
+++ b/plugins/calendar-weather/calendar-weather.c
@@ -21,11 +21,11 @@
#include <gtk/gtk.h>
#include <e-util/e-config.h>
-#include "e-util/e-icon-factory.h"
+#include <e-util/e-icon-factory.h>
+#include <e-util/e-plugin-util.h>
#include <calendar/gui/e-cal-config.h>
#include <calendar/gui/e-cal-event.h>
#include <libedataserver/e-source.h>
-#include <libedataserver/e-url.h>
#include <libedataserver/e-categories.h>
#include <glib/gi18n.h>
#include <libxml/parser.h>
@@ -211,7 +211,7 @@ create_source_selector (ESource *source)
GtkCellRenderer *text;
GtkTreeSelection *selection;
gchar *uri_text;
- EUri *uri;
+ SoupURI *suri;
/* FIXME - should show an error here if it fails*/
if (store == NULL)
@@ -238,8 +238,8 @@ create_source_selector (ESource *source)
gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
uri_text = e_source_get_uri (source);
- uri = e_uri_new (uri_text);
- if (uri->path && strlen (uri->path)) {
+ suri = soup_uri_new (uri_text);
+ if (suri && suri->path && *suri->path) {
GtkTreeIter *iter = find_location (store, uri_text + 10);
GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), iter);
gtk_tree_view_expand_to_path (GTK_TREE_VIEW (treeview), path);
@@ -247,7 +247,8 @@ create_source_selector (ESource *source)
gtk_tree_path_free (path);
}
g_free (uri_text);
- e_uri_free (uri);
+ if (suri)
+ soup_uri_free (suri);
g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (selection_changed), dialog);
g_object_set_data (G_OBJECT (dialog), "treeview", treeview);
@@ -332,30 +333,21 @@ location_clicked (GtkButton *button, ESource *source)
GtkWidget *
e_calendar_weather_location (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- static GtkWidget *label;
- GtkWidget *button, *parent, *text;
+ GtkWidget *button, *parent, *text, *label;
gint row;
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
ESource *source = t->source;
- EUri *uri;
+ SoupURI *suri;
gchar *uri_text;
- static GtkWidget *hidden;
+
+ if (!e_plugin_util_is_source_proto (t->source, "weather"))
+ return NULL;
if (store == NULL)
store = gweather_xml_load_locations ();
- if (!hidden)
- hidden = gtk_label_new ("");
-
- if (data->old)
- gtk_widget_destroy (label);
-
uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- if (strcmp ((const gchar *)uri->protocol, "weather")) {
- e_uri_free (uri);
- return hidden;
- }
+ suri = soup_uri_new (uri_text);
parent = data->parent;
@@ -370,7 +362,7 @@ e_calendar_weather_location (EPlugin *epl, EConfigHookItemFactoryData *data)
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (location_clicked), source);
gtk_widget_show (button);
- if (uri->path && strlen (uri->path)) {
+ if (suri && suri->path && *suri->path) {
GtkTreeIter *iter = find_location (store, uri_text + 10);
gchar *location = build_location_path (iter);
text = gtk_label_new (location);
@@ -381,7 +373,8 @@ e_calendar_weather_location (EPlugin *epl, EConfigHookItemFactoryData *data)
gtk_widget_show (text);
gtk_label_set_ellipsize (GTK_LABEL (text), PANGO_ELLIPSIZE_START);
gtk_container_add (GTK_CONTAINER (button), text);
- e_uri_free (uri);
+ if (suri)
+ soup_uri_free (suri);
g_free (uri_text);
gtk_table_attach (GTK_TABLE (parent), button, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
@@ -389,145 +382,15 @@ e_calendar_weather_location (EPlugin *epl, EConfigHookItemFactoryData *data)
return button;
}
-static void
-set_refresh_time (ESource *source, GtkWidget *spin, GtkWidget *combobox)
-{
- gint time;
- gint item_num = 0;
- const gchar *refresh_str = e_source_get_property (source, "refresh");
- time = refresh_str ? atoi (refresh_str) : 30;
-
- if (time && !(time % 10080)) {
- /* weeks */
- item_num = 3;
- time /= 10080;
- } else if (time && !(time % 1440)) {
- /* days */
- item_num = 2;
- time /= 1440;
- } else if (time && !(time % 60)) {
- /* hours */
- item_num = 1;
- time /= 60;
- }
- gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), item_num);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), time);
-}
-
-static gchar *
-get_refresh_minutes (GtkWidget *spin, GtkWidget *combobox)
-{
- gint setting = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combobox))) {
- case 0:
- /* minutes */
- break;
- case 1:
- /* hours */
- setting *= 60;
- break;
- case 2:
- /* days */
- setting *= 1440;
- break;
- case 3:
- /* weeks - is this *really* necessary? */
- setting *= 10080;
- break;
- default:
- g_warning ("Time unit out of range");
- break;
- }
- return g_strdup_printf ("%d", setting);
-}
-
-static void
-spin_changed (GtkSpinButton *spin, ECalConfigTargetSource *t)
-{
- gchar *refresh_str;
- GtkWidget *combobox;
-
- combobox = g_object_get_data (G_OBJECT (spin), "combobox");
-
- refresh_str = get_refresh_minutes ((GtkWidget *) spin, combobox);
- e_source_set_property (t->source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-combobox_changed (GtkComboBox *combobox, ECalConfigTargetSource *t)
-{
- gchar *refresh_str;
- GtkWidget *spin;
-
- spin = g_object_get_data (G_OBJECT (combobox), "spin");
-
- refresh_str = get_refresh_minutes (spin, (GtkWidget *) combobox);
- e_source_set_property (t->source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
GtkWidget *
e_calendar_weather_refresh (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- static GtkWidget *label;
- GtkWidget *spin, *combobox, *hbox, *parent;
- gint row;
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- ESource *source = t->source;
- EUri *uri;
- gchar *uri_text;
- static GtkWidget *hidden = NULL;
-
- if (!hidden)
- hidden = gtk_label_new ("");
-
- if (data->old)
- gtk_widget_destroy (label);
-
- uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- g_free (uri_text);
- if (strcmp ((const gchar *)uri->protocol, "weather")) {
- e_uri_free (uri);
- return hidden;
- }
- e_uri_free (uri);
-
- parent = data->parent;
-
- row = ((GtkTable*)parent)->nrows;
-
- label = gtk_label_new_with_mnemonic (_("Re_fresh:"));
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_widget_show (hbox);
-
- spin = gtk_spin_button_new_with_range (0, 100, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin);
- gtk_widget_show (spin);
- gtk_box_pack_start (GTK_BOX (hbox), spin, FALSE, TRUE, 0);
-
- combobox = gtk_combo_box_new_text ();
- gtk_widget_show (combobox);
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("minutes"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("hours"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("days"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("weeks"));
- set_refresh_time (source, spin, combobox);
- gtk_box_pack_start (GTK_BOX (hbox), combobox, FALSE, TRUE, 0);
-
- g_object_set_data (G_OBJECT (combobox), "spin", spin);
- g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (combobox_changed), t);
- g_object_set_data (G_OBJECT (spin), "combobox", combobox);
- g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (spin_changed), t);
-
- gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ if (!e_plugin_util_is_source_proto (t->source, "weather"))
+ return NULL;
- return hbox;
+ return e_plugin_util_add_refresh (data->parent, _("Re_fresh:"), t->source, "refresh");
}
static void
@@ -568,29 +431,13 @@ units_changed (GtkComboBox *combobox, ECalConfigTargetSource *t)
GtkWidget *
e_calendar_weather_units (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- static GtkWidget *label;
- GtkWidget *combobox, *parent;
+ GtkWidget *combobox, *parent, *label;
gint row;
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
ESource *source = t->source;
- EUri *uri;
- gchar *uri_text;
- static GtkWidget *hidden = NULL;
-
- if (!hidden)
- hidden = gtk_label_new ("");
- if (data->old)
- gtk_widget_destroy (label);
-
- uri_text = e_source_get_uri (t->source);
- uri = e_uri_new (uri_text);
- g_free (uri_text);
- if (strcmp ((const gchar *)uri->protocol, "weather")) {
- e_uri_free (uri);
- return hidden;
- }
- e_uri_free (uri);
+ if (!e_plugin_util_is_source_proto (t->source, "weather"))
+ return NULL;
parent = data->parent;
@@ -618,18 +465,18 @@ e_calendar_weather_check (EPlugin *epl, EConfigHookPageCheckData *data)
{
/* FIXME - check pageid */
ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
- EUri *uri;
+ SoupURI *suri;
gboolean ok = FALSE;
- ESourceGroup *group = e_source_peek_group (t->source);
/* always return TRUE if this isn't a weather source */
- if (strncmp (e_source_group_peek_base_uri (group), "weather", 7))
+ if (!e_plugin_util_is_group_proto (e_source_peek_group (t->source), "weather"))
return TRUE;
- uri = e_uri_new (e_source_get_uri (t->source));
+ suri = soup_uri_new (e_source_get_uri (t->source));
/* make sure that the protocol is weather:// and that the path isn't empty */
- ok = (uri->path && strlen (uri->path));
- e_uri_free (uri);
+ ok = suri && suri->path && *suri->path;
+ if (suri)
+ soup_uri_free (suri);
return ok;
}
diff --git a/plugins/default-source/Makefile.am b/plugins/default-source/Makefile.am
index 6f4a9043d1..8afa604ec4 100644
--- a/plugins/default-source/Makefile.am
+++ b/plugins/default-source/Makefile.am
@@ -17,6 +17,7 @@ liborg_gnome_default_source_la_SOURCES = default-source.c
liborg_gnome_default_source_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
liborg_gnome_default_source_la_LIBADD = \
+ $(top_builddir)/e-util/libeutil.la \
$(EVOLUTION_CALENDAR_LIBS) \
$(EVOLUTION_ADDRESSBOOK_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/plugins/default-source/default-source.c b/plugins/default-source/default-source.c
index 1d8a7e0299..db8423aec6 100644
--- a/plugins/default-source/default-source.c
+++ b/plugins/default-source/default-source.c
@@ -22,12 +22,12 @@
#include <gtk/gtk.h>
#include <e-util/e-config.h>
+#include <e-util/e-plugin-util.h>
#include <calendar/gui/e-cal-config.h>
#include <libedataserver/e-source.h>
#include <addressbook/gui/widgets/eab-config.h>
#include <libebook/e-book.h>
#include <libecal/e-cal.h>
-#include <libedataserver/e-source.h>
#include <glib/gi18n.h>
#include <string.h>
@@ -62,71 +62,30 @@ commit_default_book (EPlugin *epl, EConfigTarget *target)
}
-static void
-default_source_changed (GtkWidget *check_box, ESource *source)
-{
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_box)))
- e_source_set_property (source, "default", "true");
- else
- e_source_set_property (source, "default", NULL);
-}
-
-static void
-autocomplete_book_changed (GtkWidget *check_box, ESource *source)
-{
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_box)))
- e_source_set_property (source, "completion", "true");
- else
- e_source_set_property (source, "completion", NULL);
-}
-
GtkWidget *
org_gnome_default_book (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- GtkWidget *widget;
- ESource *source;
EABConfigTargetSource *book_target;
if (data->old)
return data->old;
- widget = gtk_check_button_new_with_mnemonic (_("Mark as _default address book"));
+
book_target = (EABConfigTargetSource *) data->target;
- source = book_target->source;
- if (e_source_get_property (source, "default"))
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
- else
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
- gtk_container_add (GTK_CONTAINER (data->parent), widget);
-
- g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled", G_CALLBACK (default_source_changed), source);
- gtk_widget_show (widget);
- return widget;
+ return e_plugin_util_add_check (data->parent, _("Mark as _default address book"), book_target->source, "default", "true", NULL);
}
GtkWidget *
org_gnome_autocomplete_book (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- GtkWidget *widget;
- ESource *source;
EABConfigTargetSource *book_target;
if (data->old)
return data->old;
- widget = gtk_check_button_new_with_mnemonic (_("A_utocomplete with this address book"));
book_target = (EABConfigTargetSource *) data->target;
- source = book_target->source;
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), e_source_get_property (source, "completion") && g_str_equal (e_source_get_property (source, "completion"), "true"));
- gtk_container_add (GTK_CONTAINER (data->parent), widget);
-
- g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled", G_CALLBACK (autocomplete_book_changed), source);
- gtk_widget_show (widget);
-
- return widget;
+ return e_plugin_util_add_check (data->parent, _("A_utocomplete with this address book"), book_target->source, "completion", "true", NULL);
}
static const gchar *
@@ -149,26 +108,12 @@ GtkWidget *org_gnome_default_cal (EPlugin *epl, EConfigHookItemFactoryData *data
GtkWidget *
org_gnome_default_cal (EPlugin *epl, EConfigHookItemFactoryData *data)
{
- GtkWidget *widget;
- ESource *source;
ECalConfigTargetSource *cal_target;
- gint i;
if (data->old)
return data->old;
- cal_target = (ECalConfigTargetSource *) data->target;
- source = cal_target->source;
- widget = gtk_check_button_new_with_mnemonic (get_calendar_option_caption (cal_target->source_type));
- if (e_source_get_property (source, "default"))
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
- else
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
-
- i = ((GtkTable *)data->parent)->nrows;
- gtk_table_attach((GtkTable *)data->parent, widget, 1, 2, i, i+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ cal_target = (ECalConfigTargetSource *) data->target;
- g_signal_connect (GTK_TOGGLE_BUTTON (widget), "toggled", G_CALLBACK (default_source_changed), source);
- gtk_widget_show (widget);
- return widget;
+ return e_plugin_util_add_check (data->parent, get_calendar_option_caption (cal_target->source_type), cal_target->source, "default", "true", NULL);
}
diff --git a/plugins/google-account-setup/google-source.c b/plugins/google-account-setup/google-source.c
index 9452422902..26b80f0ec8 100644
--- a/plugins/google-account-setup/google-source.c
+++ b/plugins/google-account-setup/google-source.c
@@ -34,6 +34,7 @@
#include <e-util/e-config.h>
#include <e-util/e-plugin.h>
+#include <e-util/e-plugin-util.h>
#include <calendar/gui/e-cal-config.h>
#include <calendar/gui/e-cal-event.h>
@@ -303,85 +304,6 @@ user_changed (GtkEntry *editable, ESource *source)
init_combo_values (GTK_COMBO_BOX (g_object_get_data (G_OBJECT (editable), "CalendarCombo")), _("Default"), NULL);
}
-static gchar *
-get_refresh_minutes (GtkWidget *spin, GtkWidget *combobox)
-{
- gint setting = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (combobox))) {
- case 0:
- /* minutes */
- break;
- case 1:
- /* hours */
- setting *= 60;
- break;
- case 2:
- /* days */
- setting *= 1440;
- break;
- case 3:
- /* weeks - is this *really* necessary? */
- setting *= 10080;
- break;
- default:
- g_warning ("Time unit out of range");
- break;
- }
-
- return g_strdup_printf ("%d", setting);
-}
-
-static void
-spin_changed (GtkSpinButton *spin, ECalConfigTargetSource *t)
-{
- gchar *refresh_str;
- GtkWidget *combobox;
-
- combobox = g_object_get_data (G_OBJECT(spin), "combobox");
-
- refresh_str = get_refresh_minutes ((GtkWidget *)spin, combobox);
- e_source_set_property (t->source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-combobox_changed (GtkComboBox *combobox, ECalConfigTargetSource *t)
-{
- gchar *refresh_str;
- GtkWidget *spin;
-
- spin = g_object_get_data (G_OBJECT(combobox), "spin");
-
- refresh_str = get_refresh_minutes (spin, (GtkWidget *)combobox);
- e_source_set_property (t->source, "refresh", refresh_str);
- g_free (refresh_str);
-}
-
-static void
-set_refresh_time (ESource *source, GtkWidget *spin, GtkWidget *combobox)
-{
- gint time;
- gint item_num = 0;
- const gchar *refresh_str = e_source_get_property (source, "refresh");
- time = refresh_str ? atoi (refresh_str) : 30;
-
- if (time && !(time % 10080)) {
- /* weeks */
- item_num = 3;
- time /= 10080;
- } else if (time && !(time % 1440)) {
- /* days */
- item_num = 2;
- time /= 1440;
- } else if (time && !(time % 60)) {
- /* hours */
- item_num = 1;
- time /= 60;
- }
- gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), item_num);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), time);
-}
-
enum {
COL_COLOR = 0, /* GDK_TYPE_COLOR */
COL_TITLE, /* G_TYPE_STRING */
@@ -656,7 +578,6 @@ plugin_google (EPlugin *epl,
EUri *euri;
GtkWidget *parent;
GtkWidget *widget;
- GtkWidget *luser;
GtkWidget *user;
GtkWidget *label;
GtkWidget *combo;
@@ -666,7 +587,7 @@ plugin_google (EPlugin *epl,
GtkCellRenderer *renderer;
GtkListStore *store;
- GtkWidget *combobox, *spin, *hbox;
+ GtkWidget *hbox;
source = t->source;
group = e_source_peek_group (source);
@@ -695,70 +616,22 @@ plugin_google (EPlugin *epl,
/* Build up the UI */
parent = data->parent;
- row = GTK_TABLE (parent)->nrows;
-
- luser = gtk_label_new_with_mnemonic (_("User_name:"));
- gtk_widget_show (luser);
- gtk_misc_set_alignment (GTK_MISC (luser), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent),
- luser, 0, 1,
- row + 1, row + 2,
- GTK_FILL, 0, 0, 0);
- user = gtk_entry_new ();
- gtk_widget_show (user);
+ user = e_plugin_util_add_entry (parent, _("User_name:"), NULL, NULL);
gtk_entry_set_text (GTK_ENTRY (user), username ? username : "");
- gtk_table_attach (GTK_TABLE (parent), user,
- 1, 2, row + 1, row + 2,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (luser), user);
-
- label = gtk_label_new_with_mnemonic (_("Re_fresh:"));
- gtk_widget_show (label);
- gtk_misc_set_alignment (GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (parent),
- label,
- 0, 1,
- row + 2, row + 3,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_widget_show (hbox);
-
- spin = gtk_spin_button_new_with_range (1, 100, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL(label), spin);
- gtk_widget_show (spin);
- gtk_box_pack_start (GTK_BOX(hbox), spin, FALSE, TRUE, 0);
-
- if (!e_source_get_property (source, "refresh"))
- e_source_set_property (source, "refresh", "30");
-
- combobox = gtk_combo_box_new_text ();
- gtk_widget_show (combobox);
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("minutes"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("hours"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("days"));
- gtk_combo_box_append_text (GTK_COMBO_BOX (combobox), _("weeks"));
- set_refresh_time (source, spin, combobox);
- gtk_box_pack_start (GTK_BOX (hbox), combobox, FALSE, TRUE, 0);
-
- g_object_set_data (G_OBJECT (combobox), "spin", spin);
- g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (combobox_changed), t);
- g_object_set_data (G_OBJECT (spin), "combobox", combobox);
- g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (spin_changed), t);
-
- gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row + 2, row + 3, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
g_signal_connect (G_OBJECT (user),
"changed",
G_CALLBACK (user_changed),
source);
+ e_plugin_util_add_refresh (parent, _("Re_fresh:"), source, "refresh");
+
+ row = GTK_TABLE (parent)->nrows;
+
label = gtk_label_new_with_mnemonic (_("Cal_endar:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row + 3, row + 4, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+ gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row + 1, GTK_FILL | GTK_EXPAND, 0, 0, 0);
store = gtk_list_store_new (
NUM_COLUMNS,
@@ -798,7 +671,7 @@ plugin_google (EPlugin *epl,
gtk_widget_set_sensitive (label, username && *username);
gtk_widget_show_all (hbox);
- gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row + 3, row + 4, GTK_FILL | GTK_EXPAND, 0, 0, 0);
+ gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row, row + 1, GTK_FILL | GTK_EXPAND, 0, 0, 0);
return widget;
}
diff --git a/plugins/google-account-setup/org-gnome-evolution-google.eplug.xml b/plugins/google-account-setup/org-gnome-evolution-google.eplug.xml
index afccbd3fb7..8eefe3dfce 100644
--- a/plugins/google-account-setup/org-gnome-evolution-google.eplug.xml
+++ b/plugins/google-account-setup/org-gnome-evolution-google.eplug.xml
@@ -8,7 +8,7 @@
<hook class="org.gnome.evolution.calendar.config:1.0">
<group target="source" id="org.gnome.evolution.calendar.calendarProperties">
- <item type="item_table" path="00.general/00.source/15.google" factory="plugin_google"/>
+ <item type="item_table" path="00.general/00.source/99.google" factory="plugin_google"/>
</group>
</hook>
<hook class="org.gnome.evolution.calendar.events:1.0">
@@ -17,7 +17,7 @@
<hook class="org.gnome.evolution.addressbook.config:1.0">
<group target="source" id="com.novell.evolution.addressbook.config.accountEditor">
- <item type="item" path="00.general/10.display/00.google" factory="plugin_google_contacts"/>
+ <item type="item" path="00.general/10.display/99.google" factory="plugin_google_contacts"/>
</group>
</hook>
</e-plugin>
diff --git a/plugins/webdav-account-setup/Makefile.am b/plugins/webdav-account-setup/Makefile.am
index f1096df75f..305d4ff06d 100644
--- a/plugins/webdav-account-setup/Makefile.am
+++ b/plugins/webdav-account-setup/Makefile.am
@@ -15,6 +15,7 @@ liborg_gnome_evolution_webdav_la_SOURCES = \
webdav-contacts-source.c
liborg_gnome_evolution_webdav_la_LIBADD = \
+ $(top_builddir)/e-util/libeutil.la \
$(EPLUGIN_LIBS) \
$(EVOLUTION_ADDRESSBOOK_LIBS) \
$(GNOME_PLATFORM_LIBS)
diff --git a/plugins/webdav-account-setup/webdav-contacts-source.c b/plugins/webdav-account-setup/webdav-contacts-source.c
index 990a541cc9..9f35d0bd54 100644
--- a/plugins/webdav-account-setup/webdav-contacts-source.c
+++ b/plugins/webdav-account-setup/webdav-contacts-source.c
@@ -31,11 +31,11 @@
#include <e-util/e-config.h>
#include <e-util/e-plugin.h>
+#include <e-util/e-plugin-util.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>
#define BASE_URI "webdav://"
@@ -96,48 +96,12 @@ remove_webdav_contacts_source_group(void)
g_object_unref(source_list);
}
-/* stolen from caldav plugin which stole it from calendar-weather eplugin */
-static gchar *
-print_uri_noproto(EUri *uri)
-{
- gchar *uri_noproto;
-
- if (uri->port != 0)
- uri_noproto = g_strdup_printf(
- "%s%s%s%s%s%s%s:%d%s%s%s",
- uri->user ? uri->user : "",
- uri->authmech ? ";auth=" : "",
- uri->authmech ? uri->authmech : "",
- uri->passwd ? ":" : "",
- uri->passwd ? uri->passwd : "",
- uri->user ? "@" : "",
- uri->host ? uri->host : "",
- uri->port,
- uri->path ? uri->path : "",
- uri->query ? "?" : "",
- uri->query ? uri->query : "");
- else
- uri_noproto = g_strdup_printf(
- "%s%s%s%s%s%s%s%s%s%s",
- uri->user ? uri->user : "",
- uri->authmech ? ";auth=" : "",
- uri->authmech ? uri->authmech : "",
- uri->passwd ? ":" : "",
- uri->passwd ? uri->passwd : "",
- uri->user ? "@" : "",
- uri->host ? uri->host : "",
- uri->path ? uri->path : "",
- uri->query ? "?" : "",
- uri->query ? uri->query : "");
- return uri_noproto;
-}
-
static void
set_ui_from_source(ui_data *data)
{
ESource *source = data->source;
const gchar *url = e_source_get_uri(source);
- EUri *uri = e_uri_new(url);
+ SoupURI *suri = soup_uri_new (url);
gchar *url_ui;
const gchar *property;
gboolean use_ssl;
@@ -159,75 +123,66 @@ set_ui_from_source(ui_data *data)
gtk_toggle_button_set_active(data->avoid_ifmatch_toggle, avoid_ifmatch);
/* it's really a http or https protocol */
- g_free(uri->protocol);
- uri->protocol = g_strdup(use_ssl ? "https" : "http");
+ if (suri)
+ soup_uri_set_scheme (suri, use_ssl ? "https" : "http");
/* remove user/username and set user field */
- if (uri->user != NULL) {
- gtk_entry_set_text(data->username_entry, uri->user);
- g_free(uri->user);
- uri->user = NULL;
+ if (suri && suri->user != NULL) {
+ gtk_entry_set_text (data->username_entry, suri->user);
+ soup_uri_set_user (suri, NULL);
} else {
gtk_entry_set_text(data->username_entry, "");
}
- url_ui = e_uri_to_string(uri, TRUE);
- gtk_entry_set_text(data->url_entry, url_ui);
+ if (suri)
+ url_ui = soup_uri_to_string (suri, FALSE);
+ else
+ url_ui = g_strdup ("");
+ gtk_entry_set_text (data->url_entry, url_ui);
+ g_free (url_ui);
- g_free(url_ui);
- e_uri_free(uri);
+ if (suri)
+ soup_uri_free (suri);
}
static void
-set_source_from_ui(ui_data *data)
+set_source_from_ui (ui_data *data)
{
ESource *source = data->source;
gboolean avoid_ifmatch = gtk_toggle_button_get_active(data->avoid_ifmatch_toggle);
const gchar *url = gtk_entry_get_text(data->url_entry);
- EUri *uri = e_uri_new(url);
+ SoupURI *suri = soup_uri_new (url);
gchar *url_noprotocol;
gboolean use_ssl;
+ if (!suri)
+ return;
+
e_source_set_property(source, "avoid_ifmatch", avoid_ifmatch ? "1" : "0");
/* put username into uri */
- g_free(uri->user);
- uri->user = g_strdup(gtk_entry_get_text(data->username_entry));
+ soup_uri_set_user (suri, gtk_entry_get_text (data->username_entry));
- if (uri->user[0] != '\0') {
+ if (suri->user && *suri->user) {
e_source_set_property(source, "auth", "plain/password");
- e_source_set_property(source, "username", uri->user);
+ e_source_set_property(source, "username", suri->user);
} else {
e_source_set_property(source, "auth", NULL);
e_source_set_property(source, "username", NULL);
}
/* set use_ssl based on protocol in URL */
- if (strcmp(uri->protocol, "https") == 0) {
+ if (suri->scheme && g_str_equal (suri->scheme, "https")) {
use_ssl = TRUE;
} else {
use_ssl = FALSE;
}
e_source_set_property(source, "use_ssl", use_ssl ? "1" : "0");
- url_noprotocol = print_uri_noproto(uri);
- e_source_set_relative_uri(source, url_noprotocol);
- g_free(url_noprotocol);
- e_uri_free(uri);
-}
-
-static void
-on_entry_changed(GtkEntry *entry, gpointer user_data)
-{
- (void) entry;
- set_source_from_ui(user_data);
-}
-
-static void
-on_toggle_changed(GtkToggleButton *tb, gpointer user_data)
-{
- (void) tb;
- set_source_from_ui(user_data);
+ url_noprotocol = e_plugin_util_uri_no_proto (suri);
+ e_source_set_relative_uri (source, url_noprotocol);
+ g_free (url_noprotocol);
+ soup_uri_free (suri);
}
static void
@@ -246,8 +201,6 @@ plugin_webdav_contacts(EPlugin *epl, EConfigHookItemFactoryData *data)
{
EABConfigTargetSource *t = (EABConfigTargetSource *) data->target;
ESource *source;
- ESourceGroup *group;
- const gchar *base_uri;
GtkWidget *parent;
GtkWidget *vbox;
@@ -261,13 +214,10 @@ plugin_webdav_contacts(EPlugin *epl, EConfigHookItemFactoryData *data)
ui_data *uidata;
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), "wwidget", NULL);
- if (strcmp(base_uri, BASE_URI) != 0) {
+ if (!e_plugin_util_is_group_proto (e_source_peek_group (source), BASE_URI)) {
return NULL;
}
@@ -330,12 +280,9 @@ plugin_webdav_contacts(EPlugin *epl, EConfigHookItemFactoryData *data)
g_object_set_data_full(G_OBJECT(epl), "wwidget", uidata, destroy_ui_data);
g_signal_connect (uidata->box, "destroy", G_CALLBACK (gtk_widget_destroyed), &uidata->box);
- g_signal_connect(G_OBJECT(uidata->username_entry), "changed",
- G_CALLBACK(on_entry_changed), uidata);
- g_signal_connect(G_OBJECT(uidata->url_entry), "changed",
- G_CALLBACK(on_entry_changed), uidata);
- g_signal_connect(G_OBJECT(uidata->avoid_ifmatch_toggle), "toggled",
- G_CALLBACK(on_toggle_changed), uidata);
+ g_signal_connect_swapped (G_OBJECT(uidata->username_entry), "changed", G_CALLBACK (set_source_from_ui), uidata);
+ g_signal_connect_swapped (G_OBJECT(uidata->url_entry), "changed", G_CALLBACK (set_source_from_ui), uidata);
+ g_signal_connect_swapped (G_OBJECT(uidata->avoid_ifmatch_toggle), "toggled", G_CALLBACK (set_source_from_ui), uidata);
return NULL;
}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6488dd4df6..ba833a0b67 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -155,6 +155,7 @@ e-util/e-module.c
e-util/e-non-intrusive-error-dialog.c
e-util/e-non-intrusive-error-dialog.h
e-util/e-plugin.c
+e-util/e-plugin-util.c
e-util/e-print.c
e-util/e-signature.c
e-util/e-system.error.xml