From 4b6063397ffcc13f38757e7052e3dc6649d9703c Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 11 Nov 2010 00:18:35 -0800 Subject: [PATCH] Fix notmuch_message_maildir_flags_to_tags to iterate over filenames As documented, this function now iterates over all filenames for the message, computing a logical OR of the flags set on the filenames, then uses the final result to set tags on the message. This change fixes 3 of the 10 maildir-sync tests that have been failing since being added. --- lib/message.cc | 57 ++++++++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/lib/message.cc b/lib/message.cc index 83e05191..ee52672a 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -859,53 +859,40 @@ notmuch_message_remove_tag (notmuch_message_t *message, const char *tag) return NOTMUCH_STATUS_SUCCESS; } -/* XXX: Needs to iterate over all message filenames. */ notmuch_status_t notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) { - const char *flags, *p; - char f; - bool valid, unread; - unsigned i; + const char *flags; notmuch_status_t status; + notmuch_filenames_t *filenames; const char *filename; + char *combined_flags = talloc_strdup (message, ""); + unsigned i; - filename = notmuch_message_get_filename (message); + for (filenames = notmuch_message_get_filenames (message); + notmuch_filenames_valid (filenames); + notmuch_filenames_move_to_next (filenames)) + { + filename = notmuch_filenames_get (filenames); - flags = strstr (filename, ":2,"); - if (!flags) - return NOTMUCH_STATUS_FILE_NOT_EMAIL; - flags += 3; - - /* Check that the letters are valid Maildir flags */ - f = 0; - valid = true; - for (p=flags; valid && *p; p++) { - switch (*p) { - case 'P': - case 'R': - case 'S': - case 'T': - case 'D': - case 'F': - if (*p > f) f=*p; - else valid = false; - break; - default: - valid = false; - } - } - if (!valid) { - fprintf (stderr, "Warning: Invalid maildir flags in filename %s\n", filename); - return NOTMUCH_STATUS_FILE_NOT_EMAIL; + flags = strstr (filename, ":2,"); + if (! flags) + continue; + + flags += 3; + + combined_flags = talloc_strdup_append (combined_flags, flags); } status = notmuch_message_freeze (message); if (status) return status; - unread = true; + for (i = 0; i < ARRAY_SIZE(flag2tag); i++) { - if ((strchr (flags, flag2tag[i].flag) != NULL) ^ flag2tag[i].inverse) { + if ((strchr (combined_flags, flag2tag[i].flag) != NULL) + ^ + flag2tag[i].inverse) + { status = notmuch_message_add_tag (message, flag2tag[i].tag); } else { status = notmuch_message_remove_tag (message, flag2tag[i].tag); @@ -915,6 +902,8 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) } status = notmuch_message_thaw (message); + talloc_free (combined_flags); + return status; } -- 2.26.2