aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog13
-rw-r--r--camel/providers/imap4/camel-imap4-folder.c19
-rw-r--r--camel/providers/imap4/camel-imap4-store.c10
3 files changed, 35 insertions, 7 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 67442996ed..d3baec3e57 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,5 +1,18 @@
2004-06-04 Jeffrey Stedfast <fejj@novell.com>
+ * providers/imap4/camel-imap4-folder.c (camel_imap4_folder_new):
+ Initialise the folder->summary and force an update of the message
+ info cache by selecting the folder and flushing the updates to the
+ imap4 summary object.
+
+ * providers/imap4/camel-imap4-store.c (imap4_get_folder_info):
+ Lock the connect_lock before we check if the engine is NULL and
+ after we connect (assuming we need to), initialise the engine
+ pointer again.
+ (imap4_get_folder_info): Doh. Need to escape the "'s in the LIST
+ command string.
+ (imap4_get_folder): Same.
+
* camel-stream-buffer.c (stream_flush): Fixed to work
properly. After we've flushed the buffer, we want to set sbf->ptr
to sbf->buf, we don't want to do sbf->ptr += written, that'll just
diff --git a/camel/providers/imap4/camel-imap4-folder.c b/camel/providers/imap4/camel-imap4-folder.c
index ebc75330de..ef70c82634 100644
--- a/camel/providers/imap4/camel-imap4-folder.c
+++ b/camel/providers/imap4/camel-imap4-folder.c
@@ -172,6 +172,7 @@ camel_imap4_folder_new (CamelStore *store, const char *full_name, CamelException
{
CamelIMAP4Folder *imap_folder;
char *utf7_name, *name, *p;
+ CamelFolder *folder;
char sep;
if (!(p = strrchr (full_name, '/')))
@@ -197,11 +198,23 @@ camel_imap4_folder_new (CamelStore *store, const char *full_name, CamelException
utf7_name = camel_utf8_utf7 (utf7_name);
- imap_folder = (CamelIMAP4Folder *) camel_object_new (CAMEL_TYPE_IMAP4_FOLDER);
- camel_folder_construct ((CamelFolder *) imap_folder, store, full_name, name);
+ folder = (CamelFolder *) imap_folder = (CamelIMAP4Folder *) camel_object_new (CAMEL_TYPE_IMAP4_FOLDER);
+ camel_folder_construct (folder, store, full_name, name);
imap_folder->utf7_name = utf7_name;
- return (CamelFolder *) imap_folder;
+ folder->summary = camel_imap4_summary_new (folder);
+
+ if (camel_imap4_engine_select_folder (((CamelIMAP4Store *) store)->engine, folder, ex) == -1) {
+ camel_object_unref (folder);
+ folder = NULL;
+ }
+
+ if (camel_imap4_summary_flush_updates (folder->summary, ex) == -1) {
+ camel_object_unref (folder);
+ folder = NULL;
+ }
+
+ return folder;
}
diff --git a/camel/providers/imap4/camel-imap4-store.c b/camel/providers/imap4/camel-imap4-store.c
index 4c8d701ecf..e9caff509a 100644
--- a/camel/providers/imap4/camel-imap4-store.c
+++ b/camel/providers/imap4/camel-imap4-store.c
@@ -693,7 +693,7 @@ imap4_get_folder (CamelStore *store, const char *folder_name, guint32 flags, Cam
/* make sure the folder exists - try LISTing it? */
utf7_name = imap4_folder_utf7_name (store, folder_name, '\0');
- ic = camel_imap4_engine_queue (engine, NULL, "LIST "" %S\r\n", utf7_name);
+ ic = camel_imap4_engine_queue (engine, NULL, "LIST \"\" %S\r\n", utf7_name);
camel_imap4_command_register_untagged (ic, "LIST", camel_imap4_untagged_list);
ic->user_data = array = g_ptr_array_new ();
g_free (utf7_name);
@@ -1001,9 +1001,13 @@ imap4_get_folder_info (CamelStore *store, const char *top, guint32 flags, CamelE
char *pattern;
int id, i;
+ CAMEL_SERVICE_LOCK (store, connect_lock);
+
if (engine == NULL) {
if (!camel_service_connect ((CamelService *) store, ex))
return NULL;
+
+ engine = ((CamelIMAP4Store *) store)->engine;
}
if (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED)
@@ -1014,10 +1018,8 @@ imap4_get_folder_info (CamelStore *store, const char *top, guint32 flags, CamelE
if (top == NULL)
top = "";
- CAMEL_SERVICE_LOCK (store, connect_lock);
-
pattern = imap4_folder_utf7_name (store, top, (flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) ? '*' : '%');
- ic = camel_imap4_engine_queue (engine, NULL, "%s "" %S\r\n", cmd, pattern);
+ ic = camel_imap4_engine_queue (engine, NULL, "%s \"\" %S\r\n", cmd, pattern);
camel_imap4_command_register_untagged (ic, cmd, camel_imap4_untagged_list);
ic->user_data = array = g_ptr_array_new ();