aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers')
-rw-r--r--camel/providers/imap/camel-imap-folder.c51
-rw-r--r--camel/providers/imap/camel-imap-store.c40
2 files changed, 39 insertions, 52 deletions
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
index 5b31517f24..6c38eb3cf5 100644
--- a/camel/providers/imap/camel-imap-folder.c
+++ b/camel/providers/imap/camel-imap-folder.c
@@ -186,7 +186,7 @@ camel_imap_folder_new (CamelStore *parent, char *folder_name, CamelException *ex
{
CamelFolder *folder = CAMEL_FOLDER (gtk_object_new (camel_imap_folder_get_type (), NULL));
- CF_CLASS (folder)->init (folder, parent, NULL, "INBOX", "/", FALSE, ex);
+ CF_CLASS (folder)->init (folder, parent, NULL, folder_name, "/", FALSE, ex);
return folder;
}
@@ -383,49 +383,6 @@ imap_expunge (CamelFolder *folder, CamelException *ex)
#if 0
static gboolean
-imap_exists (CamelFolder *folder, CamelException *ex)
-{
- /* make sure the folder exists */
- GPtrArray *lsub;
- gboolean exists = FALSE;
- int i, max;
-
- g_return_val_if_fail (folder != NULL, FALSE);
-
- /* check if the imap file path is determined */
- if (!folder->full_name) {
- camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
- "undetermined folder file path. Maybe use set_name ?");
- return FALSE;
- }
-
- /* check if the imap dir path is determined */
- if (!folder->full_name) {
- camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
- "undetermined folder directory path. Maybe use set_name ?");
- return FALSE;
- }
-
- /* Get a listing of the folders that exist */
- lsub = imap_get_subfolder_names (folder, ex);
-
- /* look to see if any of those subfolders match... */
- max = lsub->len;
- for (i = 0; i < max; i++) {
- if (!strcmp (g_ptr_array_index (lsub, i), folder->full_name)) {
- exists = TRUE;
- break;
- }
- }
-
- g_ptr_array_free (lsub, TRUE);
-
- return exists;
-}
-#endif
-
-#if 0
-static gboolean
imap_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
{
/* TODO: code this & what should this do? delete messages or the folder? */
@@ -488,13 +445,13 @@ imap_get_message_count (CamelFolder *folder, CamelException *ex)
folder_path = g_strdup (folder->full_name);
status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
- &result, "STATUS %s (MESSAGES)", folder->full_name);
+ &result, "STATUS %s (MESSAGES)", folder_path);
if (status != CAMEL_IMAP_OK) {
CamelService *service = CAMEL_SERVICE (folder->parent_store);
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- "Could not get message count from IMAP "
- "server %s: %s.", service->url->host,
+ "Could not get message count for %s from IMAP "
+ "server %s: %s.", folder_path, service->url->host,
status == CAMEL_IMAP_ERR ? result :
"Unknown error");
g_free (result);
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index c3416533f4..863501487b 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -318,6 +318,33 @@ camel_imap_store_get_toplevel_dir (CamelImapStore *store)
}
static gboolean
+imap_folder_exists (CamelFolder *folder)
+{
+ CamelStore *store = CAMEL_STORE (folder->parent_store);
+ CamelURL *url = CAMEL_SERVICE (store)->url;
+ gchar *result, *folder_path;
+ gint status;
+
+ if (url && url->path && strcmp (folder->full_name, "INBOX"))
+ folder_path = g_strdup_printf ("%s/%s", url->path + 1, folder->full_name);
+ else
+ folder_path = g_strdup (folder->full_name);
+
+ status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), NULL,
+ &result, "EXAMINE %s", folder_path);
+
+ if (status != CAMEL_IMAP_OK) {
+ g_free (result);
+ g_free (folder_path);
+ return FALSE;
+ }
+ g_free (folder_path);
+ g_free (result);
+
+ return TRUE;
+}
+
+static gboolean
imap_create (CamelFolder *folder, CamelException *ex)
{
CamelStore *store = CAMEL_STORE (folder->parent_store);
@@ -335,8 +362,8 @@ imap_create (CamelFolder *folder, CamelException *ex)
if (!strcmp (folder->full_name, "INBOX"))
return TRUE;
-
- if (camel_folder_get_subfolder (folder->parent_folder, folder->name, FALSE, ex))
+
+ if (imap_folder_exists (folder))
return TRUE;
/* create the directory for the subfolder */
@@ -374,11 +401,14 @@ get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelEx
g_return_val_if_fail (store != NULL, NULL);
g_return_val_if_fail (folder_name != NULL, NULL);
- folder_path = g_strdup (folder_name);
+ if (!strcmp (folder_name, "/"))
+ folder_path = g_strdup ("INBOX");
+ else
+ folder_path = g_strdup (folder_name);
+
new_folder = camel_imap_folder_new (store, folder_path, ex);
- if (!imap_create (new_folder, ex)) {
- /* we should set an exception */
+ if (create && !imap_create (new_folder, ex)) {
return NULL;
}