diff options
author | Jeffrey Stedfast <fejj@helixcode.com> | 2000-06-08 05:57:27 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2000-06-08 05:57:27 +0800 |
commit | c19352fd53ba876a150ff4324aebb0dc06e9e190 (patch) | |
tree | db5b2045221f7f6ca3bd0c862333a92697876b04 /camel/providers/imap/camel-imap-store.c | |
parent | 9da3c9d23193030efac42e063ed207322bc710a9 (diff) | |
download | gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.tar gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.tar.gz gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.tar.bz2 gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.tar.lz gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.tar.xz gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.tar.zst gsoc2013-evolution-c19352fd53ba876a150ff4324aebb0dc06e9e190.zip |
Added rules to build camel-imap-stream
2000-06-07 Jeffrey Stedfast <fejj@helixcode.com>
* providers/imap/Makefile.am: Added rules to build
camel-imap-stream
* providers/imap/camel-imap-store.c (get_folder): Update.
Moved imap_create here.
* providers/imap/camel-imap-folder.c (delete_messages): Remove.
(imap_create): Removed.
(imap_delete): Removed.
(imap_exists): Removed.
* providers/imap/camel-imap-stream.h: Added typedef's for the stream
* providers/imap/camel-imap-stream.c: Modified to build cleanly
svn path=/trunk/; revision=3468
Diffstat (limited to 'camel/providers/imap/camel-imap-store.c')
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 78 |
1 files changed, 62 insertions, 16 deletions
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index 54ce3c570c..5c57a8911d 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -52,16 +52,15 @@ static CamelServiceClass *service_class = NULL; static void finalize (GtkObject *object); - +static gboolean imap_create (CamelFolder *folder, CamelException *ex); static gboolean imap_connect (CamelService *service, CamelException *ex); static gboolean imap_disconnect (CamelService *service, CamelException *ex); static GList *query_auth_types (CamelService *service, CamelException *ex); static void free_auth_types (CamelService *service, GList *authtypes); -static CamelFolder *get_folder (CamelStore *store, const char *folder_name, +static CamelFolder *get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelException *ex); -static char *get_folder_name (CamelStore *store, const char *folder_name, - CamelException *ex); +static char *get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex); static void camel_imap_store_class_init (CamelImapStoreClass *camel_imap_store_class) @@ -320,28 +319,75 @@ camel_imap_store_get_toplevel_dir (CamelImapStore *store) return url->path; } +static gboolean +imap_create (CamelFolder *folder, CamelException *ex) +{ + CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder); + const gchar *folder_file_path, *folder_dir_path; + gboolean folder_already_exists; + gchar *result; + gint status; + + g_return_val_if_fail (folder != NULL, FALSE); + + /* get the paths of what we need to create */ + folder_file_path = imap_folder->folder_file_path; + folder_dir_path = imap_folder->folder_dir_path; + + if (!(folder_file_path || folder_dir_path)) { + camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID, + "invalid folder path. Use set_name ?"); + return FALSE; + } + + /* if the folder already exists, simply return */ + folder_already_exists = camel_folder_exists (folder, ex); + if (camel_exception_get_id (ex)) + return FALSE; + + if (folder_already_exists) + return TRUE; -static CamelFolder -*get_folder (CamelStore *store, const char *folder_name, CamelException *ex) + /* create the directory for the subfolder */ + status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result, + "CREATE %s", imap_folder->folder_file_path); + + if (status != CAMEL_IMAP_OK) { + CamelService *service = CAMEL_SERVICE (folder->parent_store); + camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, + "Could not CREATE %s on IMAP server %s: %s.", + imap_folder->folder_file_path, + service->url->host, + status == CAMEL_IMAP_ERR ? result : + "Unknown error"); + g_free (result); + return FALSE; + } + + g_free(result); + + return TRUE; +} + +static CamelFolder * +get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelException *ex) { CamelImapFolder *new_imap_folder; CamelFolder *new_folder; - new_imap_folder = gtk_type_new (CAMEL_IMAP_FOLDER_TYPE); + new_imap_folder = gtk_type_new (CAMEL_IMAP_FOLDER_TYPE); new_folder = CAMEL_FOLDER (new_imap_folder); - - /* XXX We shouldn't be passing NULL here, but it's equivalent to - * what was there before, and there's no - * CamelImapFolder::get_subfolder yet anyway... - */ CAMEL_FOLDER_CLASS (new_folder)->init (new_folder, store, NULL, folder_name, '/', ex); - - return new_folder; + + if (imap_create (new_folder, ex)) + return new_folder; + + return NULL; } -static gchar -*get_folder_name (CamelStore *store, const char *folder_name, +static gchar * +get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex) { return g_strdup (folder_name); |