aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/caldav
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 /plugins/caldav
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
Diffstat (limited to 'plugins/caldav')
-rw-r--r--plugins/caldav/caldav-source.c365
1 files changed, 47 insertions, 318 deletions
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;
}
-