2005-01-27 [colin] 1.0.0cvs17
authorColin Leroy <colin@colino.net>
Thu, 27 Jan 2005 11:02:36 +0000 (11:02 +0000)
committerColin Leroy <colin@colino.net>
Thu, 27 Jan 2005 11:02:36 +0000 (11:02 +0000)
* src/procmsg.c
* src/procmsg.h
Add a way to dump message/rfc822 MimeInfos to MsgInfos...
* src/compose.c
... And use it to be able to reply to the currently
selected MimeInfo.

ChangeLog.claws
PATCHSETS
configure.ac
src/compose.c
src/procmsg.c
src/procmsg.h

index e2fc3b8..8b13445 100644 (file)
@@ -1,3 +1,12 @@
+2005-01-27 [colin]     1.0.0cvs17
+
+       * src/procmsg.c
+       * src/procmsg.h
+               Add a way to dump message/rfc822 MimeInfos to MsgInfos...
+       * src/compose.c
+               ... And use it to be able to reply to the currently 
+               selected MimeInfo.
+
 2005-01-27 [colin]     1.0.0cvs16
 
        * src/messageview.c
index 3e391d0..3fa3ed1 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.466 -r 1.467 src/compose.c; ) > 1.0.0cvs14.patchset
 ( cvs diff -u -r 1.456 -r 1.457 ChangeLog; cvs diff -u -r 1.451 -r 1.452 ChangeLog.jp; cvs diff -u -r 1.3 -r 1.4 src/common/template.c; ) > 1.0.0cvs15.patchset
 ( cvs diff -u -r 1.129 -r 1.130 src/messageview.c; cvs diff -u -r 1.457 -r 1.458 src/summaryview.c; cvs diff -u -r 1.467 -r 1.468 src/compose.c; cvs diff -u -r 1.57 -r 1.58 src/compose.h; cvs diff -u -r 1.56 -r 1.57 src/toolbar.c; cvs diff -u -r 1.316 -r 1.317 src/mainwindow.c; ) > 1.0.0cvs16.patchset
+( cvs diff -u -r 1.175 -r 1.176 src/procmsg.c; cvs diff -u -r 1.72 -r 1.73 src/procmsg.h; cvs diff -u -r 1.468 -r 1.469 src/compose.c; ) > 1.0.0cvs17.patchset
index 82e0411..0fd311f 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=16
+EXTRA_VERSION=17
 EXTRA_RELEASE=
 
 if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
index 78c7478..e6bd909 100644 (file)
@@ -6919,10 +6919,6 @@ static void compose_add_field_list( Compose *compose, GList *listAddress ) {
        }
 }
 
-/*
- * End of Source.
- */
-
 void compose_reply_from_messageview(MessageView *msgview, GSList *msginfo_list, 
                                    guint action)
 {
@@ -6932,7 +6928,27 @@ void compose_reply_from_messageview(MessageView *msgview, GSList *msginfo_list,
 
        g_return_if_fail(msginfo_list != NULL);
 
+       if (g_slist_length(msginfo_list) == 1) {
+               MimeInfo *mimeinfo = messageview_get_selected_mime_part(msgview);
+               MsgInfo *orig_msginfo = (MsgInfo *)msginfo_list->data;
+               
+               if (mimeinfo != NULL && mimeinfo->type == MIMETYPE_MESSAGE && 
+                   !g_ascii_strcasecmp(mimeinfo->subtype, "rfc822")) {
+                       
+                       MsgInfo *tmp_msginfo = procmsg_msginfo_new_from_mimeinfo(
+                                               orig_msginfo, mimeinfo);
+                       if (tmp_msginfo != NULL) {
+                               g_slist_free(msginfo_list);
+                               msginfo_list = g_slist_append(NULL, tmp_msginfo);
+                       } 
+               }
+       }
+
        body = messageview_get_selection(msgview);
        compose_reply_mode((ComposeMode)action, msginfo_list, body);
        g_free(body);
 }
+
+/*
+ * End of Source.
+ */
index dd7ad64..1d9018e 100644 (file)
@@ -894,8 +894,12 @@ MsgInfo *procmsg_msginfo_get_full_info(MsgInfo *msginfo)
 
        if (msginfo == NULL) return NULL;
 
-       file = procmsg_get_message_file(msginfo);
-       if (!file) {
+       file = procmsg_get_message_file_path(msginfo);
+       if (!file || !is_file_exist(file)) {
+               g_free(file);
+               file = procmsg_get_message_file(msginfo);
+       }
+       if (!file || !is_file_exist(file)) {
                g_warning("procmsg_msginfo_get_full_info(): can't get message file.\n");
                return NULL;
        }
@@ -1642,3 +1646,37 @@ gboolean procmsg_msginfo_filter(MsgInfo *msginfo)
 
        return FALSE;
 }
+
+MsgInfo *procmsg_msginfo_new_from_mimeinfo(MsgInfo *src_msginfo, MimeInfo *mimeinfo)
+{
+       MsgInfo *tmp_msginfo = NULL;
+       MsgFlags flags = {0, 0};
+       
+       
+       if (!mimeinfo || mimeinfo->type != MIMETYPE_MESSAGE ||
+           g_ascii_strcasecmp(mimeinfo->subtype, "rfc822")) {
+               g_warning("procmsg_msginfo_new_from_mimeinfo(): unsuitable mimeinfo");
+               return NULL;
+       }
+                   
+       if (mimeinfo->content == MIMECONTENT_MEM) {
+               gchar *tmpfile = get_tmp_file();
+               str_write_to_file(mimeinfo->data.mem, tmpfile);
+               g_free(mimeinfo->data.mem);
+               mimeinfo->content == MIMECONTENT_FILE;
+               mimeinfo->data.filename = g_strdup(tmpfile);
+               g_free(tmpfile);
+       }
+
+       tmp_msginfo = procheader_parse_file(mimeinfo->data.filename,
+                               flags, TRUE, FALSE);
+
+       if (tmp_msginfo != NULL) {
+               tmp_msginfo->folder = src_msginfo->folder;
+               tmp_msginfo->plaintext_file = g_strdup(mimeinfo->data.filename);
+       } else {
+               g_warning("procmsg_msginfo_new_from_mimeinfo(): Can't generate new msginfo");
+       }
+       
+       return tmp_msginfo;
+}
index e79e5af..19a8c12 100644 (file)
@@ -305,5 +305,8 @@ void procmsg_update_unread_children (MsgInfo        *info,
 void procmsg_msginfo_set_to_folder     (MsgInfo        *msginfo,
                                         FolderItem     *to_folder);
 gboolean procmsg_msginfo_filter                (MsgInfo        *msginfo);
+MsgInfo *procmsg_msginfo_new_from_mimeinfo
+                                       (MsgInfo        *src_msginfo, 
+                                        MimeInfo       *mimeinfo);
 
 #endif /* __PROCMSG_H__ */