store folder and message-id of message forwarding to in queue header and set forward...
authorPaul Mangan <paul@claws-mail.org>
Wed, 15 Jan 2003 13:19:59 +0000 (13:19 +0000)
committerPaul Mangan <paul@claws-mail.org>
Wed, 15 Jan 2003 13:19:59 +0000 (13:19 +0000)
ChangeLog.claws
configure.ac
src/compose.c
src/compose.h
src/procmsg.c

index 1d60240..6298884 100644 (file)
@@ -1,3 +1,10 @@
+2003-01-15 [paul]      0.8.8claws103
+
+       * src/compose.[ch]
+         src/procmsg.c
+               store folder and message-id of message forwarding
+               to in queue header and set forward flag after sending
+
 2003-01-15 [paul]      0.8.8claws102
 
        * sync with 0.8.8cvs8
index 588b0a6..0d4d15c 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=8
 MICRO_VERSION=8
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws102
+EXTRA_VERSION=claws103
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index be28caa..442bcca 100644 (file)
@@ -693,6 +693,7 @@ Compose *compose_generic_new(PrefsAccount *account, const gchar *mailto, FolderI
        ifactory = gtk_item_factory_from_widget(compose->menubar);
 
        compose->replyinfo = NULL;
+       compose->fwdinfo   = NULL;
 
        text = GTK_STEXT(compose->text);
        gtk_stext_freeze(text);
@@ -935,13 +936,12 @@ Compose *compose_forward(PrefsAccount *account, MsgInfo *msginfo,
        }
        g_return_val_if_fail(account != NULL, NULL);
 
-       MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_REPLIED);
-       MSG_SET_PERM_FLAGS(msginfo->flags, MSG_FORWARDED);
-       if (MSG_IS_IMAP(msginfo->flags))
-               imap_msg_unset_perm_flags(msginfo, MSG_REPLIED);
-
        compose = compose_create(account, COMPOSE_FORWARD);
 
+       compose->fwdinfo = procmsg_msginfo_get_full_info(msginfo);
+       if (!compose->fwdinfo)
+               compose->fwdinfo = procmsg_msginfo_copy(msginfo);
+
        if (msginfo->subject && *msginfo->subject) {
                gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), "Fw: ");
                gtk_entry_append_text(GTK_ENTRY(compose->subject_entry),
@@ -1192,6 +1192,7 @@ Compose *compose_redirect(PrefsAccount *account, MsgInfo *msginfo)
        ifactory = gtk_item_factory_from_widget(compose->menubar);
 
        compose->replyinfo = NULL;
+       compose->fwdinfo = NULL;
 
        compose_show_first_last_header(compose, TRUE);
 
@@ -3648,6 +3649,14 @@ static gint compose_queue_sub(Compose *compose, gint *msgnum, FolderItem **item,
                fprintf(fp, "RMID:%s\x7f%d\x7f%s\n", folderid, compose->replyinfo->msgnum, compose->replyinfo->msgid);
                g_free(folderid);
        }
+       /* Message-ID of message forwarding to */
+       if ((compose->fwdinfo != NULL) && (compose->fwdinfo->msgid != NULL)) {
+               gchar *folderid;
+               
+               folderid = folder_item_get_identifier(compose->fwdinfo->folder);
+               fprintf(fp, "FMID:%s\x7f%d\x7f%s\n", folderid, compose->fwdinfo->msgnum, compose->fwdinfo->msgid);
+               g_free(folderid);
+       }
        fprintf(fp, "\n");
 
        while (fgets(buf, sizeof(buf), src_fp) != NULL) {
@@ -4871,6 +4880,7 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
 
        compose->targetinfo = NULL;
        compose->replyinfo  = NULL;
+       compose->fwdinfo    = NULL;
 
        compose->replyto     = NULL;
        compose->cc          = NULL;
@@ -5222,6 +5232,7 @@ static void compose_destroy(Compose *compose)
 
        procmsg_msginfo_free(compose->targetinfo);
        procmsg_msginfo_free(compose->replyinfo);
+       procmsg_msginfo_free(compose->fwdinfo);
 
        g_free(compose->replyto);
        g_free(compose->cc);
index 886847d..a0da889 100644 (file)
@@ -140,6 +140,7 @@ struct _Compose
 
        MsgInfo *targetinfo;
        MsgInfo *replyinfo;
+       MsgInfo *fwdinfo;
 
        GtkWidget *header_table;
        GSList    *header_list;
index dbdd876..7dabf8d 100644 (file)
@@ -1218,6 +1218,7 @@ enum
        Q_NEWS_ACCOUNT_ID  = 5,
        Q_SAVE_COPY_FOLDER = 6,
        Q_REPLY_MESSAGE_ID = 7,
+       Q_FWD_MESSAGE_ID   = 8
 };
 
 gint procmsg_send_message_queue(const gchar *file)
@@ -1230,6 +1231,7 @@ gint procmsg_send_message_queue(const gchar *file)
                                       {"NAID:", NULL, FALSE},
                                       {"SCF:",  NULL, FALSE},
                                       {"RMID:", NULL, FALSE},
+                                      {"FMID:", NULL, FALSE},
                                       {NULL,    NULL, FALSE}};
        FILE *fp;
        gint filepos;
@@ -1240,6 +1242,7 @@ gint procmsg_send_message_queue(const gchar *file)
        GSList *newsgroup_list = NULL;
        gchar *savecopyfolder = NULL;
        gchar *replymessageid = NULL;
+       gchar *fwdmessageid = NULL;
        gchar buf[BUFFSIZE];
        gint hnum;
        PrefsAccount *mailac = NULL, *newsac = NULL;
@@ -1281,6 +1284,9 @@ gint procmsg_send_message_queue(const gchar *file)
                case Q_REPLY_MESSAGE_ID:
                        if (!replymessageid) replymessageid = g_strdup(p);
                        break;
+               case Q_FWD_MESSAGE_ID:
+                       if (!fwdmessageid) fwdmessageid = g_strdup(p);
+                       break;
                }
        }
        filepos = ftell(fp);
@@ -1400,11 +1406,14 @@ gint procmsg_send_message_queue(const gchar *file)
                procmsg_save_to_outbox(outbox, file, TRUE);
        }
 
-       if (replymessageid != NULL) {
+       if (replymessageid != NULL || fwdmessageid != NULL) {
                gchar **tokens;
                FolderItem *item;
                
-               tokens = g_strsplit(replymessageid, "\x7f", 0);
+               if (replymessageid != NULL)
+                       tokens = g_strsplit(replymessageid, "\x7f", 0);
+               else
+                       tokens = g_strsplit(fwdmessageid, "\x7f", 0);
                item = folder_find_item_from_identifier(tokens[0]);
                if (item != NULL) {
                        MsgInfo *msginfo;
@@ -1420,9 +1429,14 @@ gint procmsg_send_message_queue(const gchar *file)
                        }
                        
                        if (msginfo != NULL) {
-                               procmsg_msginfo_unset_flags(msginfo, MSG_FORWARDED, 0);
-                               procmsg_msginfo_set_flags(msginfo, MSG_REPLIED, 0);
-
+                               if (replymessageid != NULL) {
+                                       procmsg_msginfo_unset_flags(msginfo, MSG_FORWARDED, 0);
+                                       procmsg_msginfo_set_flags(msginfo, MSG_REPLIED, 0);
+                               } 
+                               else {
+                                       procmsg_msginfo_unset_flags(msginfo, MSG_REPLIED, 0);
+                                       procmsg_msginfo_set_flags(msginfo, MSG_FORWARDED, 0);
+                               }
                                procmsg_msginfo_free(msginfo);
                        }
                }
@@ -1431,6 +1445,7 @@ gint procmsg_send_message_queue(const gchar *file)
 
        g_free(savecopyfolder);
        g_free(replymessageid);
+       g_free(fwdmessageid);
        
        return (newsval != 0 ? newsval : mailval);
 }