diff --git a/src/mu-maildir.c b/src/mu-maildir.c index dedbd384..1b586946 100644 --- a/src/mu-maildir.c +++ b/src/mu-maildir.c @@ -337,8 +337,7 @@ ignore_dir_entry (struct dirent *entry, unsigned char d_type) return TRUE; /* ignore '.#evolution */ - if ((name[1] == '#') && - (strcmp (name, ".#evolution"))) + if ((name[1] == '#') && (strcmp (name, ".#evolution"))) return TRUE; return FALSE; @@ -683,22 +682,12 @@ mu_maildir_get_flags_from_path (const char *path) !(info && info[0] == '2' && info[1] == ',')) goto leave; - for (cursor = info + 2; *cursor; ++cursor) { - switch (*cursor) { - case 'P': flags |= MU_MSG_FLAG_PASSED; break; - case 'T': flags |= MU_MSG_FLAG_TRASHED; break; - case 'R': flags |= MU_MSG_FLAG_REPLIED; break; - case 'S': flags |= MU_MSG_FLAG_SEEN; break; - case 'D': flags |= MU_MSG_FLAG_DRAFT; break; - case 'F': flags |= MU_MSG_FLAG_FLAGGED; break; - default: break; /* ignore */ - } - } + for (cursor = info + 2; *cursor; ++cursor) + flags |= mu_msg_flag_from_file_char (*cursor); /* the UNREAD pseudo flag => NEW OR NOT SEEN */ if (!(flags & MU_MSG_FLAG_SEEN)) - flags |= MU_MSG_FLAG_UNREAD; - + flags |= MU_MSG_FLAG_UNREAD; leave: g_free(info); return flags; diff --git a/src/mu-msg-file.c b/src/mu-msg-file.c index 4bb9b7a5..0d9ed106 100644 --- a/src/mu-msg-file.c +++ b/src/mu-msg-file.c @@ -763,20 +763,16 @@ mu_msg_file_get_str_field (MuMsgFile *self, MuMsgFieldId mfid, gboolean *do_free switch (mfid) { - case MU_MSG_FIELD_ID_BCC: - *do_free = TRUE; + case MU_MSG_FIELD_ID_BCC: *do_free = TRUE; return get_recipient (self, GMIME_RECIPIENT_TYPE_BCC); - case MU_MSG_FIELD_ID_BODY_TEXT: - *do_free = TRUE; + case MU_MSG_FIELD_ID_BODY_TEXT: *do_free = TRUE; return get_body (self, FALSE); - case MU_MSG_FIELD_ID_BODY_HTML: - *do_free = TRUE; + case MU_MSG_FIELD_ID_BODY_HTML: *do_free = TRUE; return get_body (self, TRUE); - case MU_MSG_FIELD_ID_CC: - *do_free = TRUE; + case MU_MSG_FIELD_ID_CC: *do_free = TRUE; return get_recipient (self, GMIME_RECIPIENT_TYPE_CC); case MU_MSG_FIELD_ID_FROM: @@ -788,8 +784,7 @@ mu_msg_file_get_str_field (MuMsgFile *self, MuMsgFieldId mfid, gboolean *do_free case MU_MSG_FIELD_ID_SUBJECT: return (char*)g_mime_message_get_subject (self->_mime_msg); - case MU_MSG_FIELD_ID_TO: - *do_free = TRUE; + case MU_MSG_FIELD_ID_TO: *do_free = TRUE; return get_recipient (self, GMIME_RECIPIENT_TYPE_TO); case MU_MSG_FIELD_ID_MSGID: @@ -798,8 +793,7 @@ mu_msg_file_get_str_field (MuMsgFile *self, MuMsgFieldId mfid, gboolean *do_free case MU_MSG_FIELD_ID_MAILDIR: return self->_maildir; - case MU_MSG_FIELD_ID_REFS: - *do_free = TRUE; + case MU_MSG_FIELD_ID_REFS: *do_free = TRUE; return get_references_str (self); default: diff --git a/src/mu-msg-flags.c b/src/mu-msg-flags.c index 8189aa4a..6d7e4848 100644 --- a/src/mu-msg-flags.c +++ b/src/mu-msg-flags.c @@ -1,3 +1,5 @@ +/* -*-mode: c; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-*/ + /* ** Copyright (C) 2008-2010 Dirk-Jan C. Binnema ** @@ -55,7 +57,7 @@ mu_msg_flag_from_char (char k) case 'd': return MU_MSG_FLAG_DRAFT; case 'f': return MU_MSG_FLAG_FLAGGED; - /* NEW OR NOT SEEN */ + /* NEW OR NOT SEEN */ case 'u': return MU_MSG_FLAG_UNREAD; case 'z': return MU_MSG_FLAG_SIGNED; @@ -67,11 +69,28 @@ mu_msg_flag_from_char (char k) } } +MuMsgFlags +mu_msg_flag_from_file_char (char k) +{ + switch (g_ascii_tolower(k)) { + case 'n': return MU_MSG_FLAG_NEW; + case 'p': return MU_MSG_FLAG_PASSED; + case 'r': return MU_MSG_FLAG_REPLIED; + case 's': return MU_MSG_FLAG_SEEN; + case 't': return MU_MSG_FLAG_TRASHED; + case 'd': return MU_MSG_FLAG_DRAFT; + case 'f': return MU_MSG_FLAG_FLAGGED; + default: return 0; + } +} + const char* mu_msg_flag_name (MuMsgFlags flag) -{ +{ switch (flag) { + + /* real maildir flags */ case MU_MSG_FLAG_NEW: return "new"; case MU_MSG_FLAG_PASSED: return "passed"; case MU_MSG_FLAG_REPLIED: return "replied"; @@ -80,7 +99,7 @@ mu_msg_flag_name (MuMsgFlags flag) case MU_MSG_FLAG_DRAFT: return "draft"; case MU_MSG_FLAG_FLAGGED: return "flagged"; - /* ie., NEW or NOT SEEN */ + /* ie., NEW or NOT SEEN */ case MU_MSG_FLAG_UNREAD: return "unread"; case MU_MSG_FLAG_SIGNED: return "signed"; @@ -104,7 +123,7 @@ mu_msg_flag_char (MuMsgFlags flag) case MU_MSG_FLAG_DRAFT: return 'd'; case MU_MSG_FLAG_FLAGGED: return 'f'; - /* NEW OR NOT SEEN */ + /* NEW OR NOT SEEN */ case MU_MSG_FLAG_UNREAD: return 'u'; case MU_MSG_FLAG_SIGNED: return 'z'; diff --git a/src/mu-msg-flags.h b/src/mu-msg-flags.h index 0b500fda..cbe9614a 100644 --- a/src/mu-msg-flags.h +++ b/src/mu-msg-flags.h @@ -95,6 +95,23 @@ MuMsgFlags mu_msg_flags_from_str (const char* str) G_GNUC_PURE; */ MuMsgFlags mu_msg_flags_from_char (char c) G_GNUC_CONST; + +/** + * convert the char-per-flag description into a MuMsgFlags value. The + * difference is that with 'mu_msg_flags_from_char' is that this + * function only cares about the chars that are part of the + * Maildir-standard (ie., in files), and that is ignores unknown chars + * (returns 0), rather than printing warnings + * + * @param c a character + * + * @return a MuMSgFlags value, or 0 if the char is not known as a + * maildir char + */ +MuMsgFlags mu_msg_flag_from_file_char (char k) G_GNUC_CONST; + + + /** * get a string for a given set of flags, OR'ed in * @param flags; one character per flag: diff --git a/src/mu-output.c b/src/mu-output.c index 9e07b4af..549b7ea6 100644 --- a/src/mu-output.c +++ b/src/mu-output.c @@ -325,28 +325,25 @@ mu_output_json (MuMsgIter *iter, size_t *count) mu_msg_iter_next (myiter), ++mycount) { MuMsg *msg; + + if (!(msg = mu_msg_iter_get_msg (iter, NULL))) + return FALSE; if (mycount != 0) g_print (",\n"); - - msg = mu_msg_iter_get_msg (iter, NULL); /* don't unref */ - if (!msg) - return FALSE; - + g_print ("\t\t{\n"); print_attr_json ("from", mu_msg_get_from (msg), TRUE); print_attr_json ("to", mu_msg_get_to (msg),TRUE); print_attr_json ("cc", mu_msg_get_cc (msg),TRUE); - print_attr_json ("subject", mu_msg_get_subject (msg), - TRUE); + print_attr_json ("subject", mu_msg_get_subject (msg), TRUE); g_print ("\t\t\t\"date\":%u,\n", (unsigned) mu_msg_get_date (msg)); g_print ("\t\t\t\"size\":%u,\n", (unsigned) mu_msg_get_size (msg)); print_attr_json ("msgid", mu_msg_get_msgid (msg),TRUE); print_attr_json ("path", mu_msg_get_path (msg),TRUE); - print_attr_json ("maildir", mu_msg_get_maildir (msg), - FALSE); + print_attr_json ("maildir", mu_msg_get_maildir (msg), FALSE); g_print ("\t\t}"); } g_print ("\t]\n}\n"); @@ -387,23 +384,19 @@ mu_output_sexp (MuMsgIter *iter, size_t *count) mu_msg_iter_next (myiter), ++mycount) { MuMsg *msg; + if (!(msg = mu_msg_iter_get_msg (iter, NULL))) /* don't unref */ + return FALSE; if (mycount != 0) g_print ("\n"); - - msg = mu_msg_iter_get_msg (iter, NULL); /* don't unref */ - if (!msg) - return FALSE; g_print (" (:message\n"); print_attr_sexp ("from", mu_msg_get_from (msg),TRUE); print_attr_sexp ("to", mu_msg_get_to (msg),TRUE); print_attr_sexp ("cc", mu_msg_get_cc (msg),TRUE); print_attr_sexp ("subject", mu_msg_get_subject (msg),TRUE); - g_print (" (:date %u)\n", - (unsigned) mu_msg_get_date (msg)); - g_print (" (:size %u)\n", - (unsigned) mu_msg_get_size (msg)); + g_print (" (:date %u)\n", (unsigned) mu_msg_get_date (msg)); + g_print (" (:size %u)\n", (unsigned) mu_msg_get_size (msg)); print_attr_sexp ("msgid", mu_msg_get_msgid (msg),TRUE); print_attr_sexp ("path", mu_msg_get_path (msg),TRUE); print_attr_sexp ("maildir", mu_msg_get_maildir (msg),FALSE);