aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog8
-rw-r--r--mail/component-factory.c37
2 files changed, 36 insertions, 9 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 03127fd54f..4cc9afca4a 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,11 @@
+2002-09-18 Not Zed <NotZed@Ximian.com>
+
+ * component-factory.c (notify_listener_exception): helper to map a
+ camel excpeiton to a listener result.
+ (storage_create_folder): Use above to return more meaningful error.
+ (storage_remove_folder): "
+ (storage_xfer_folder): ". For #28209.
+
2002-09-17 Jeffrey Stedfast <fejj@ximian.com>
* mail-display.c (mail_display_render): Use e_strftime_fix_am_pm
diff --git a/mail/component-factory.c b/mail/component-factory.c
index a7aa0fa8a4..ca18001533 100644
--- a/mail/component-factory.c
+++ b/mail/component-factory.c
@@ -1100,6 +1100,30 @@ notify_listener (const Bonobo_Listener listener,
}
static void
+notify_listener_exception(const Bonobo_Listener listener, CamelException *ex)
+{
+ GNOME_Evolution_Storage_Result result;
+
+ switch(camel_exception_get_id(ex)) {
+ case CAMEL_EXCEPTION_SERVICE_UNAVAILABLE:
+ result = GNOME_Evolution_Storage_NOT_ONLINE;
+ break;
+ case CAMEL_EXCEPTION_NONE:
+ result = GNOME_Evolution_Storage_OK;
+ break;
+ case CAMEL_EXCEPTION_FOLDER_INVALID_PATH:
+ case CAMEL_EXCEPTION_SERVICE_URL_INVALID:
+ result = GNOME_Evolution_Storage_INVALID_URI;
+ break;
+ default:
+ result = GNOME_Evolution_Storage_GENERIC_ERROR;
+ break;
+ }
+
+ notify_listener(listener, result);
+}
+
+static void
storage_create_folder (EvolutionStorage *storage,
const Bonobo_Listener listener,
const char *path,
@@ -1142,9 +1166,8 @@ storage_create_folder (EvolutionStorage *storage,
root = camel_store_create_folder (store, NULL, name, &ex);
if (camel_exception_is_set (&ex)) {
- /* FIXME: do better than this */
+ notify_listener_exception(listener, &ex);
camel_exception_clear (&ex);
- notify_listener (listener, GNOME_Evolution_Storage_INVALID_URI);
return;
}
@@ -1234,11 +1257,10 @@ storage_remove_folder (EvolutionStorage *storage,
notify_listener (listener, GNOME_Evolution_Storage_OK);
return;
- exception:
- /* FIXME: do better than this... */
+exception:
+ notify_listener_exception(listener, &ex);
camel_exception_clear (&ex);
camel_store_free_folder_info (store, root);
- notify_listener (listener, GNOME_Evolution_Storage_INVALID_URI);
}
static void
@@ -1265,10 +1287,7 @@ storage_xfer_folder (EvolutionStorage *storage,
if (remove_source) {
d(printf("trying to rename\n"));
camel_store_rename_folder(store, src, dst, &ex);
- if (camel_exception_is_set(&ex))
- notify_listener (listener, GNOME_Evolution_Storage_GENERIC_ERROR);
- else
- notify_listener (listener, GNOME_Evolution_Storage_OK);
+ notify_listener_exception(listener, &ex);
} else {
d(printf("No remove, can't rename\n"));
/* FIXME: Implement folder 'copy' for remote stores */