diff options
author | Gaute Hope <eg@gaute.vetsj.com> | 2018-10-28 09:48:55 +0100 |
---|---|---|
committer | Gaute Hope <eg@gaute.vetsj.com> | 2018-10-28 09:48:55 +0100 |
commit | b6563eb4e4b264f7d8bfc4053f9f6369fed4ec34 (patch) | |
tree | 76e2c131b5c36f8bfb2de17df0b5e26d42aaf1a1 | |
parent | f2cdd34365fce0056442306d89672edfe5597c32 (diff) |
fix #587: only messages that are being read should be processed
-rw-r--r-- | src/compose_message.cc | 15 | ||||
-rw-r--r-- | src/message_thread.cc | 84 | ||||
-rw-r--r-- | src/message_thread.hh | 11 | ||||
-rw-r--r-- | src/modes/edit_message.cc | 6 |
4 files changed, 98 insertions, 18 deletions
diff --git a/src/compose_message.cc b/src/compose_message.cc index ce57953..9633008 100644 --- a/src/compose_message.cc +++ b/src/compose_message.cc @@ -261,7 +261,7 @@ namespace Astroid { void ComposeMessage::load_message (ustring _mid, ustring fname) { set_id (_mid); - Message msg (_mid, fname); + UnprocessedMessage msg (_mid, fname); Account * from = astroid->accounts->get_account_for_address (msg.sender); if (from == NULL) { @@ -291,15 +291,6 @@ namespace Astroid { /* make message ready to be sent */ LOG (debug) << "cm: finalize.."; - /* again: ripped more or less from ner */ - - /* - FILE * file = fopen(_messageFile.c_str(), "r"); - GMimeStream * stream = g_mime_stream_file_new(file); - GMimeParser * parser = g_mime_parser_new_with_stream(stream); - GMimeMessage * message = g_mime_parser_construct_message(parser); - */ - /* set user agent */ ustring ua = ""; @@ -783,7 +774,7 @@ namespace Astroid { if (content_type == "message/rfc822") { LOG (debug) << "cm: attachment is mime message."; - message = refptr<Message> (new Message(fname.c_str ())); + message = refptr<Message> (new UnprocessedMessage(fname.c_str ())); is_mime_message = true; @@ -825,7 +816,7 @@ namespace Astroid { content_type = "message/rfc822"; is_mime_message = true; - message = refptr<Message> (new Message(GMIME_MESSAGE(c->mime_object))); + message = refptr<Message> (new UnprocessedMessage(GMIME_MESSAGE(c->mime_object))); g_object_ref (c->mime_object); // should be cleaned by Message : Glib::Object diff --git a/src/message_thread.cc b/src/message_thread.cc index e562127..a9c7712 100644 --- a/src/message_thread.cc +++ b/src/message_thread.cc @@ -90,7 +90,7 @@ namespace Astroid { tags = nmmsg->tags; } - Message::Message (GMimeMessage * _msg) { + Message::Message (GMimeMessage * _msg) : Message () { LOG (info) << "msg: loading message from GMimeMessage."; in_notmuch = false; has_file = false; @@ -99,7 +99,7 @@ namespace Astroid { load_message (_msg); } - Message::Message (GMimeStream * s) { + Message::Message (GMimeStream * s) : Message () { LOG (info) << "msg: loading message from GMimeStream."; in_notmuch = false; has_file = false; @@ -192,7 +192,9 @@ namespace Astroid { } else { GMimeStream * stream = NULL; # ifndef DISABLE_PLUGINS - stream = astroid->plugin_manager->astroid_extension->process (fname.c_str()); + if (process) { + stream = astroid->plugin_manager->astroid_extension->process (fname.c_str()); + } # endif if (stream == NULL) { GError *err = NULL; (void) (err); // not used in GMime 2. @@ -873,6 +875,82 @@ namespace Astroid { { } + /********************** + * UnprocessedMessage * + **********************/ + UnprocessedMessage::UnprocessedMessage (ustring _fname) : Message () { + + LOG (info) << "msg: loading message from file: " << fname; + fname = _fname; + has_file = true; + process = false; + load_message_from_file (fname); + } + + UnprocessedMessage::UnprocessedMessage ( + ustring _mid, + ustring _fname) + : Message () + { + mid = _mid; + fname = _fname; + process = false; // must be set before load_message_from_file + has_file = true; + + LOG (info) << "msg: loading message from file (mid supplied): " << fname; + load_message_from_file (fname); + }; + + UnprocessedMessage::UnprocessedMessage (GMimeStream * s) : Message () { + LOG (info) << "msg: loading message from GMimeStream."; + in_notmuch = false; + has_file = false; + process = false; + missing_content = false; + + g_object_ref (s); + GMimeParser * parser = g_mime_parser_new_with_stream (s); + GMimeMessage * _message = g_mime_parser_construct_message (parser, g_mime_parser_options_get_default ()); + + load_message (_message); + + g_object_unref (_message); + g_object_unref (s); + g_object_unref (parser); + } + + UnprocessedMessage::UnprocessedMessage (GMimeMessage * _msg) : Message () { + LOG (info) << "msg: loading message from GMimeMessage."; + in_notmuch = false; + has_file = false; + process = false; + missing_content = false; + + load_message (_msg); + } + + UnprocessedMessage::UnprocessedMessage (notmuch_message_t *message, int _level) : Message () { + /* The caller must make sure the message pointer + * is valid and not destroyed while initializing */ + + mid = notmuch_message_get_message_id (message); + tid = notmuch_message_get_thread_id (message); + in_notmuch = true; + has_file = true; + level = _level; + process = false; + + nmmsg = refptr<NotmuchMessage> (new NotmuchMessage (message)); + + LOG (info) << "msg: loading mid: " << mid; + + fname = nmmsg->filename; + LOG (info) << "msg: filename: " << fname; + + load_message_from_file (fname); + tags = nmmsg->tags; + } + /* -------- * MessageThread * -------- diff --git a/src/message_thread.hh b/src/message_thread.hh index eca9225..f3b6ee3 100644 --- a/src/message_thread.hh +++ b/src/message_thread.hh @@ -108,6 +108,7 @@ namespace Astroid { type_signal_message_changed m_signal_message_changed; bool subject_is_different = true; + bool process = true; }; /* exceptions */ @@ -117,6 +118,15 @@ namespace Astroid { }; + class UnprocessedMessage : public Message { + public: + UnprocessedMessage (ustring _fname); + UnprocessedMessage (ustring _mid, ustring _fname); + UnprocessedMessage (GMimeStream *); + UnprocessedMessage (GMimeMessage *); + UnprocessedMessage (notmuch_message_t *, int _level); + }; + class MessageThread : public Glib::Object { public: MessageThread (); @@ -148,5 +158,6 @@ namespace Astroid { void add_message (refptr<Chunk>); void add_message (refptr<Message>); }; + } diff --git a/src/modes/edit_message.cc b/src/modes/edit_message.cc index 07285fa..c4bd0ff 100644 --- a/src/modes/edit_message.cc +++ b/src/modes/edit_message.cc @@ -342,7 +342,7 @@ namespace Astroid { assert (g_mime_stream_mem_get_owner (GMIME_STREAM_MEM(m)) == true); c->write (m); - main_window->add_mode (new RawMessage (main_window, refptr<Message>(new Message(m)))); + main_window->add_mode (new RawMessage (main_window, refptr<Message>(new UnprocessedMessage(m)))); g_object_unref (m); @@ -397,7 +397,7 @@ namespace Astroid { if (msg != NULL) { LOG (debug) << "em: attaching: " << mid; - refptr<Message> mmsg = refptr<Message> (new Message (msg, 0)); + refptr<Message> mmsg = refptr<Message> (new UnprocessedMessage (msg, 0)); add_attachment (new ComposeMessage::Attachment (mmsg)); } else { @@ -815,7 +815,7 @@ namespace Astroid { c->write (m); auto msgt = refptr<MessageThread>(new MessageThread()); - msgt->add_message (refptr<Message>(new Message(m))); + msgt->add_message (refptr<Message>(new UnprocessedMessage(m))); thread_view->load_message_thread (msgt); g_object_unref (m); |