0.8.5claws172
authorChristoph Hohmann <reboot@gmx.ch>
Wed, 20 Nov 2002 13:42:51 +0000 (13:42 +0000)
committerChristoph Hohmann <reboot@gmx.ch>
Wed, 20 Nov 2002 13:42:51 +0000 (13:42 +0000)
* src/imap.c
        fix MsgInfo retrieval for IMAP draft and queue folders
        (closes bug [ 619558 ] Draft saving on IMAP box issue)

ChangeLog.claws
configure.in
src/imap.c

index 637a18f..6f0c2e4 100644 (file)
@@ -1,17 +1,21 @@
+2002-11-20 [christoph] 0.8.5claws172
+
+       * src/imap.c
+               fix MsgInfo retrieval for IMAP draft and queue folders
+               (closes bug [ 619558 ] Draft saving on IMAP box issue)
+
 2002-11-19 [christoph] 0.8.5claws171
 
        * src/compose.c
                fix segfault, when draft saving does not get
                the MsgInfo of the new message
-               (closes bug [ 640699 ] Claws170: crash drafting
-                mail ( IMAP ))
+               (closes bug [ 640699 ] Claws170: crash drafting mail ( IMAP ))
 
 2002-11-19 [christoph] 0.8.5claws170
 
        * src/procmsg.c
                add parameter check for flag setting function
-               (closes bug [ 640619 ] Claws169: crash
-                - drafting a mail (IMAP))
+               (closes bug [ 640619 ] Claws169: crash - drafting a mail (IMAP))
 
 2002-11-18 [paul]      0.8.5claws169
 
index f760c8d..a6c034c 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=8
 MICRO_VERSION=5
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws171
+EXTRA_VERSION=claws172
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index ce77e61..117c97e 100644 (file)
@@ -3291,10 +3291,35 @@ gint imap_get_num_list(Folder *folder, FolderItem *_item, GSList **msgnum_list)
        return nummsgs;
 }
 
+static MsgInfo *imap_parse_msg(const gchar *file, FolderItem *item)
+{
+       MsgInfo *msginfo;
+       MsgFlags flags;
+
+       flags.perm_flags = MSG_NEW|MSG_UNREAD;
+       flags.tmp_flags = 0;
+
+       g_return_val_if_fail(item != NULL, NULL);
+       g_return_val_if_fail(file != NULL, NULL);
+
+       if (item->stype == F_QUEUE) {
+               MSG_SET_TMP_FLAGS(flags, MSG_QUEUED);
+       } else if (item->stype == F_DRAFT) {
+               MSG_SET_TMP_FLAGS(flags, MSG_DRAFT);
+       }
+
+       msginfo = procheader_parse_file(file, flags, FALSE, FALSE);
+       if (!msginfo) return NULL;
+
+       msginfo->folder = item;
+
+       return msginfo;
+}
+
+
 MsgInfo *imap_get_msginfo(Folder *folder, FolderItem *item, gint uid)
 {
        IMAPSession *session;
-       GSList *list;
        MsgInfo *msginfo = NULL;
 
        g_return_val_if_fail(folder != NULL, NULL);
@@ -3303,13 +3328,27 @@ MsgInfo *imap_get_msginfo(Folder *folder, FolderItem *item, gint uid)
        session = imap_session_get(folder);
        g_return_val_if_fail(session != NULL, NULL);
 
-       list = imap_get_uncached_messages(session, item, uid, uid);
-       if (list) {
-               msginfo = (MsgInfo *)list->data;
-               list->data = NULL;
-       }
-       procmsg_msg_list_free(list);
+       if (!(item->stype == F_QUEUE || item->stype == F_DRAFT)) {
+               GSList *list;
 
+               list = imap_get_uncached_messages(session, item, uid, uid);
+               if (list) {
+                       msginfo = (MsgInfo *)list->data;
+                       list->data = NULL;
+               }
+               procmsg_msg_list_free(list);
+       } else {
+               gchar *file;
+
+               file = imap_fetch_msg(folder, item, uid);
+               if (file != NULL) {
+                       msginfo = imap_parse_msg(file, item);
+                       if (msginfo != NULL)
+                               msginfo->msgnum = uid;
+                       g_free(file);
+               }
+       }
+       
        return msginfo;
 }