diff --git a/src/mu-msg-file.c b/src/mu-msg-file.c index f18aaa3a..2976c6ad 100644 --- a/src/mu-msg-file.c +++ b/src/mu-msg-file.c @@ -49,46 +49,12 @@ static gboolean init_file_metadata (MuMsgFile *self, const char* path, static gboolean init_mime_msg (MuMsgFile *msg, const char *path, GError **err); -/* note, we do the gmime initialization here rather than in - * mu-runtime, because this way we don't need mu-runtime for simple - * cases -- such as our unit tests */ -static gboolean _gmime_initialized = FALSE; - -static void -gmime_init (void) -{ - g_return_if_fail (!_gmime_initialized); - -#ifdef GMIME_ENABLE_RFC2047_WORKAROUNDS - g_mime_init(GMIME_ENABLE_RFC2047_WORKAROUNDS); -#else - g_mime_init(0); -#endif /* GMIME_ENABLE_RFC2047_WORKAROUNDS */ - - _gmime_initialized = TRUE; -} - -static void -gmime_uninit (void) -{ - g_return_if_fail (_gmime_initialized); - - g_mime_shutdown(); - _gmime_initialized = FALSE; -} - - MuMsgFile* mu_msg_file_new (const char* filepath, const char *mdir, GError **err) { MuMsgFile *self; g_return_val_if_fail (filepath, NULL); - - if (G_UNLIKELY(!_gmime_initialized)) { - gmime_init (); - g_atexit (gmime_uninit); - } self = g_slice_new0 (MuMsgFile); diff --git a/src/mu-msg.c b/src/mu-msg.c index 2613f9ee..45a944d3 100644 --- a/src/mu-msg.c +++ b/src/mu-msg.c @@ -36,11 +36,47 @@ #include "mu-maildir.h" +/* note, we do the gmime initialization here rather than in + * mu-runtime, because this way we don't need mu-runtime for simple + * cases -- such as our unit tests. Also note that we need gmime init + * even for the doc backend, as we use the address parsing functions + * also there. */ +static gboolean _gmime_initialized = FALSE; + +static void +gmime_init (void) +{ + g_return_if_fail (!_gmime_initialized); + +#ifdef GMIME_ENABLE_RFC2047_WORKAROUNDS + g_mime_init(GMIME_ENABLE_RFC2047_WORKAROUNDS); +#else + g_mime_init(0); +#endif /* GMIME_ENABLE_RFC2047_WORKAROUNDS */ + + _gmime_initialized = TRUE; +} + +static void +gmime_uninit (void) +{ + g_return_if_fail (_gmime_initialized); + + g_mime_shutdown(); + _gmime_initialized = FALSE; +} + + static MuMsg* msg_new (void) { MuMsg *self; - + + if (G_UNLIKELY(!_gmime_initialized)) { + gmime_init (); + g_atexit (gmime_uninit); + } + self = g_slice_new0 (MuMsg); self->_refcount = 1; @@ -546,7 +582,7 @@ addresses_foreach (const char* addrs, MuMsgContactType ctype, MuMsgContactForeachFunc func, gpointer user_data) { InternetAddressList *addrlist; - + if (!addrs) return; diff --git a/src/mu-msg.h b/src/mu-msg.h index 3c47dc56..6c58b104 100644 --- a/src/mu-msg.h +++ b/src/mu-msg.h @@ -368,18 +368,23 @@ int mu_msg_cmp (MuMsg *m1, MuMsg *m2, MuMsgFieldId mfid); gboolean mu_msg_is_readable (MuMsg *self); +struct _MuMsgIterThreadInfo; + + /** * convert the msg to a Lisp symbolic expression (for further processing in * e.g. emacs) * * @param msg a valid message + * @param ti thread info for the current message, or NULL * @param dbonly if TRUE, only include message fields which can be * obtained from the database (this is much faster if the MuMsg is * database-backed, so no file needs to be opened) * * @return a string with the sexp (free with g_free) or NULL in case of error */ -char* mu_msg_to_sexp (MuMsg *msg, gboolean dbonly); +char* mu_msg_to_sexp (MuMsg *msg, const struct _MuMsgIterThreadInfo *ti, + gboolean dbonly); /** * move a message to another maildir