diff options
author | Louis Rilling <l.rilling@av7.net> | 2012-12-19 22:32:27 +0100 |
---|---|---|
committer | David Bremner <bremner@debian.org> | 2013-09-03 20:41:51 -0300 |
commit | a9b2135c75874f871fa8e97c8fca965654577772 (patch) | |
tree | b3133b2749df30817bfbbfdd0c89cc970aa9b09d /lib | |
parent | 4229966dce6588f3d890ac648a059e31747f3bd5 (diff) |
tags_to_maildir_flags: Don't rename if no flags change
notmuch_message_tags_to_maildir_flags() unconditionally moves messages from
maildir directory "new/" to maildir directory "cur/", which makes messages lose
their "new" status in the MUA. However some users want to keep this "new"
status after, for instance, an auto-tagging of new messages.
However, as Austin mentioned and according to the maildir specification,
messages living in "new/" are not allowed to have flags, even if mutt allows it
to happen. For this reason, this patch prevents moving messages from "new/" to
"cur/", only if no flags have to be changed. It's hopefully enough to satisfy
mutt (and maybe other MUAs showing the "new" status) users checking the "new"
status.
Changelog:
* v2: Fix bool type as well as NULL returned despite having no errors (Austin
Clements)
* v4: Tag the related test (contributed by Michal Sojka) as working
Signed-off-by: Louis Rilling <l.rilling@av7.net>
[Condition for keeping messages in new/ was extended to satisfy all
tests from the previous patch. -Michal Sojka]
[Added by David Bremner, to keep the tests passing at each commit]
update insert tests for new maildir synchronization rules
As of id:1355952747-27350-4-git-send-email-sojkam1@fel.cvut.cz
we are more conservative about moving messages from ./new to ./cur.
This updates the insert tests to match
Diffstat (limited to 'lib')
-rw-r--r-- | lib/message.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/message.cc b/lib/message.cc index c4261e61..1b463795 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1195,7 +1195,9 @@ _get_maildir_flag_actions (notmuch_message_t *message, * compute the new maildir filename. * * If the existing filename is in the directory "new", the new - * filename will be in the directory "cur". + * filename will be in the directory "cur", except for the case when + * no flags are changed and the existing filename does not contain + * maildir info (starting with ",2:"). * * After a sequence of ":2," in the filename, any subsequent * single-character flags will be added or removed according to the @@ -1218,6 +1220,7 @@ _new_maildir_filename (void *ctx, char *filename_new, *dir; char flag_map[128]; int flags_in_map = 0; + notmuch_bool_t flags_changed = FALSE; unsigned int i; char *s; @@ -1258,6 +1261,7 @@ _new_maildir_filename (void *ctx, if (flag_map[flag] == 0) { flag_map[flag] = 1; flags_in_map++; + flags_changed = TRUE; } } @@ -1266,9 +1270,16 @@ _new_maildir_filename (void *ctx, if (flag_map[flag]) { flag_map[flag] = 0; flags_in_map--; + flags_changed = TRUE; } } + /* Messages in new/ without maildir info can be kept in new/ if no + * flags have changed. */ + dir = (char *) _filename_is_in_maildir (filename); + if (dir && STRNCMP_LITERAL (dir, "new/") == 0 && !*info && !flags_changed) + return talloc_strdup (ctx, filename); + filename_new = (char *) talloc_size (ctx, info - filename + strlen (":2,") + flags_in_map + 1); |