[evolution] Bug #629636 - Doesn't recognize local ESource-s



commit 2a772badda42e30da739c944c29b80bcdbb58b1b
Author: Milan Crha <mcrha redhat com>
Date:   Wed Sep 29 10:43:04 2010 +0200

    Bug #629636 - Doesn't recognize local ESource-s

 addressbook/gui/widgets/eab-gui-util.c   |   23 +++++++++++++++++++++--
 calendar/gui/dialogs/calendar-setup.c    |    2 +-
 mail/em-utils.c                          |    2 +-
 modules/addressbook/addressbook-config.c |    4 ++--
 4 files changed, 25 insertions(+), 6 deletions(-)
---
diff --git a/addressbook/gui/widgets/eab-gui-util.c b/addressbook/gui/widgets/eab-gui-util.c
index 4cf5219..a40a3a3 100644
--- a/addressbook/gui/widgets/eab-gui-util.c
+++ b/addressbook/gui/widgets/eab-gui-util.c
@@ -74,11 +74,30 @@ eab_load_error_dialog (GtkWidget *parent, ESource *source, const GError *error)
                                  "to download its contents.");
 	}
 
-	else if (uri && !strncmp (uri, "file:", 5)) {
-		gchar *path = g_filename_from_uri (uri, NULL, NULL);
+	else if (uri && g_str_has_prefix (uri, "local:")) {
+		const gchar *user_data_dir;
+		const gchar *source_dir;
+		gchar *mangled_source_dir;
+		gchar *path;
+
+		user_data_dir = e_get_user_data_dir ();
+		source_dir = e_source_peek_relative_uri (source);
+
+		if (!source_dir || !g_str_equal (source_dir, "system"))
+			source_dir = e_source_peek_uid (source);
+
+		/* Mangle the URI to not contain invalid characters. */
+		mangled_source_dir = g_strdelimit (g_strdup (source_dir), ":/", '_');
+
+		path = g_build_filename (
+			user_data_dir, "addressbook", mangled_source_dir, NULL);
+
+		g_free (mangled_source_dir);
+
 		label = g_strdup_printf (
 			_("This address book cannot be opened.  Please check that the "
 			  "path %s exists and that permissions are set to access it."), path);
+
 		g_free (path);
 		label_string = label;
 	}
diff --git a/calendar/gui/dialogs/calendar-setup.c b/calendar/gui/dialogs/calendar-setup.c
index b21c027..5df14cf 100644
--- a/calendar/gui/dialogs/calendar-setup.c
+++ b/calendar/gui/dialogs/calendar-setup.c
@@ -259,7 +259,7 @@ eccp_general_offline (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidg
 	const gchar *offline_sync;
 	guint row;
 	const gchar *base_uri = e_source_group_peek_base_uri (sdialog->source_group);
-	gboolean is_local = base_uri && (g_str_has_prefix (base_uri, "file://") || g_str_has_prefix (base_uri, "contacts://"));
+	gboolean is_local = base_uri && (g_str_has_prefix (base_uri, "local:") || g_str_has_prefix (base_uri, "contacts://"));
 	offline_sync =  e_source_get_property (sdialog->source, "offline_sync");
 	if (old)
 		return old;
diff --git a/mail/em-utils.c b/mail/em-utils.c
index cf00c73..c7b7020 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -1703,7 +1703,7 @@ search_address_in_addressbooks (const gchar *address, gboolean local_only, gbool
 		if (!group)
 			continue;
 
-		if (local_only && !(e_source_group_peek_base_uri (group) && g_str_has_prefix (e_source_group_peek_base_uri (group), "file://")))
+		if (local_only && !(e_source_group_peek_base_uri (group) && g_str_has_prefix (e_source_group_peek_base_uri (group), "local:")))
 			continue;
 
 		for (s = e_source_group_peek_sources (group); s; s = g_slist_next (s)) {
diff --git a/modules/addressbook/addressbook-config.c b/modules/addressbook/addressbook-config.c
index b275590..0c0bda4 100644
--- a/modules/addressbook/addressbook-config.c
+++ b/modules/addressbook/addressbook-config.c
@@ -609,7 +609,7 @@ eabc_general_use_in_cal (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkW
 	if (group)
 		base_uri = e_source_group_peek_base_uri (group);
 
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (use_in_cal_setting), (use_in_cal && g_str_equal (use_in_cal, "1")) || (!use_in_cal && base_uri && g_str_has_prefix (base_uri, "file://")));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (use_in_cal_setting), (use_in_cal && g_str_equal (use_in_cal, "1")) || (!use_in_cal && base_uri && g_str_has_prefix (base_uri, "local:")));
 
 	g_signal_connect (use_in_cal_setting, "toggled", G_CALLBACK (use_in_cal_changed_cb), sdialog);
 
@@ -630,7 +630,7 @@ eabc_general_offline (EConfig *ec, EConfigItem *item, GtkWidget *parent, GtkWidg
 	const gchar *offline_sync;
 	gboolean is_local_book;
 
-	is_local_book = g_str_has_prefix (e_source_group_peek_base_uri (sdialog->source_group), "file:");
+	is_local_book = g_str_has_prefix (e_source_group_peek_base_uri (sdialog->source_group), "local:");
 	offline_sync =  e_source_get_property (sdialog->source, "offline_sync");
 	if (old)
 		return old;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]