From f65a2d78c6cb123fd94b173aa4e877f22d314d4c Mon Sep 17 00:00:00 2001 From: bertrand Date: Tue, 22 Feb 2000 11:16:36 +0000 Subject: fix to show a sample correct implementation. 2000-02-22 bertrand * message-list.c (message_list_set_folder): fix to show a sample correct implementation. * camel-folder.c (camel_folder_get_subfolder): (camel_folder_create): (camel_folder_delete): (camel_folder_delete_messages): (camel_folder_list_subfolders): (camel_folder_expunge): (camel_folder_get_message_by_number): (camel_folder_get_message_count): (camel_folder_append_message): (camel_folder_copy_message_to): (camel_folder_get_summary): (camel_folder_get_message_uid): (camel_folder_get_message_by_uid): (camel_folder_get_uid_list): Check folder state (open/close) and raise an exception if it is not ok. * providers/mbox/camel-mbox-folder.c (_create): create the file and the path with two different names. * camel-folder.c (_create): handle the case when the folder name starts with '/' * camel-exception.c (camel_exception_new): use (void) instead of () in decl. * camel-exception.h: cosmetic fixes. * camel-exception.c (camel_exception_init): new routine. Fix a bug in mail/message-list.c * camel-folder.h: cosmetic changes. * camel-stream-b64.c (reset__static): added a reset method. Thanks message-browser to find so much bugs :) * providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): readd Unicode libs. Fixes and exception handling in camel-folder. Fixes in mail/evolution-mail to make it not segfault and to demonstrate a correct implementation. svn path=/trunk/; revision=1902 --- mail/ChangeLog | 5 +++++ mail/folder-browser.c | 5 ++++- mail/message-list.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 49 insertions(+), 3 deletions(-) (limited to 'mail') diff --git a/mail/ChangeLog b/mail/ChangeLog index a4ba0b1fce..f16399f24c 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,8 @@ +2000-02-22 bertrand + + * message-list.c (message_list_set_folder): + fix to show a sample correct implementation. + 2000-02-21 Matt Loper * Makefile.am: added -lunicode to evolution_mail_LDADD. diff --git a/mail/folder-browser.c b/mail/folder-browser.c index e6fe8d496a..85a09395a8 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -65,7 +65,10 @@ folder_browser_load_folder (FolderBrowser *fb, const char *name) gtk_object_unref (GTK_OBJECT (fb->folder)); fb->folder = new_folder; - + + camel_folder_exists (new_folder, NULL); + printf ("In folder browser, folder = %p\n", new_folder); + message_list_set_folder (fb->message_list, new_folder); return TRUE; diff --git a/mail/message-list.c b/mail/message-list.c index 7da9b9fa8b..6f571c1029 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -457,19 +457,57 @@ void message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder) { CamelException ex; - + gboolean folder_exists; + g_return_if_fail (message_list != NULL); g_return_if_fail (camel_folder != NULL); g_return_if_fail (IS_MESSAGE_LIST (message_list)); g_return_if_fail (CAMEL_IS_FOLDER (camel_folder)); g_return_if_fail (camel_folder_has_summary_capability (camel_folder, &ex)); + + camel_exception_init (&ex); + if (message_list->folder) gtk_object_unref (GTK_OBJECT (message_list->folder)); message_list->folder = camel_folder; - message_list->folder_summary = camel_folder_get_summary (camel_folder, &ex); + folder_exists = camel_folder_exists (camel_folder, NULL); + + if (camel_exception_get_id (&ex)) { + printf ("Unable to test for folder existence \n"); + return; + } + + if (!folder_exists) { + g_warning ("Folder does not exist, creating it\n"); + /* + if you don't want the directory to be created + automatically here remove this. + */ + camel_folder_create (camel_folder, &ex); + if (camel_exception_get_id (&ex)) { + printf ("Unable to create folder\n"); + return; + } + + } + + + camel_folder_open (camel_folder, FOLDER_OPEN_RW, &ex); + if (camel_exception_get_id (&ex)) { + printf ("Unable to open folder\n"); + return; + } + + message_list->folder_summary = camel_folder_get_summary (camel_folder, &ex); + if (camel_exception_get_id (&ex)) { + printf ("Unable to get summary \n"); + return; + } + + gtk_object_ref (GTK_OBJECT (camel_folder)); printf ("Modelo cambio!\n"); -- cgit v1.2.3