summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGaute Hope <eg@gaute.vetsj.com>2018-10-28 09:48:55 +0100
committerGaute Hope <eg@gaute.vetsj.com>2018-10-28 09:48:55 +0100
commitb6563eb4e4b264f7d8bfc4053f9f6369fed4ec34 (patch)
tree76e2c131b5c36f8bfb2de17df0b5e26d42aaf1a1
parentf2cdd34365fce0056442306d89672edfe5597c32 (diff)
fix #587: only messages that are being read should be processed
-rw-r--r--src/compose_message.cc15
-rw-r--r--src/message_thread.cc84
-rw-r--r--src/message_thread.hh11
-rw-r--r--src/modes/edit_message.cc6
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);