* Mail to self @ 2018-10-27 11:48 Leo Gaspard 2018-10-27 19:58 ` David Bremner 0 siblings, 1 reply; 9+ messages in thread From: Leo Gaspard @ 2018-10-27 11:48 UTC (permalink / raw) To: notmuch Hello, I'm looking for a way to have notmuch consider, when it finds both an unread and a read mail with the same Message-Id (eg. sending a mail to self from a phone), that the mail is unread (because I'd rather have too many mails unread than miss important mail, and it's also useful for tests). Do you see any way of having notmuch do this? Cheers, Leo ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mail to self 2018-10-27 11:48 Mail to self Leo Gaspard @ 2018-10-27 19:58 ` David Bremner 2018-10-28 7:31 ` Leo Gaspard 0 siblings, 1 reply; 9+ messages in thread From: David Bremner @ 2018-10-27 19:58 UTC (permalink / raw) To: Leo Gaspard, notmuch Leo Gaspard <leo@gaspard.io> writes: > Hello, > > I'm looking for a way to have notmuch consider, when it finds both an > unread and a read mail with the same Message-Id (eg. sending a mail to > self from a phone), that the mail is unread (because I'd rather have too > many mails unread than miss important mail, and it's also useful for > tests). > > Do you see any way of having notmuch do this? After a discussion on IRC, my understanding is the following. The underlying behaviour that Leo is objecting to is that if any one file with a given message-id has the ,S maildir flag, then when notmuch syncs maildir flags to tags, it will remove the unread tag from that message-id. After some back and forth and thinking about it, I think notmuch's current behaviour is actually correct (given the constraint that tags attach to message-ids). You could argue for different ways of resolving conflicts for maildir flags in general, but the ",S" or "seen" flag has fairly natural common sense semantics. d ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mail to self 2018-10-27 19:58 ` David Bremner @ 2018-10-28 7:31 ` Leo Gaspard 2018-10-28 12:04 ` Gregor Zattler 0 siblings, 1 reply; 9+ messages in thread From: Leo Gaspard @ 2018-10-28 7:31 UTC (permalink / raw) To: David Bremner, notmuch > After a discussion on IRC, my understanding is the following. The > underlying behaviour that Leo is objecting to is that if any one file > with a given message-id has the ,S maildir flag, then when notmuch syncs > maildir flags to tags, it will remove the unread tag from that > message-id. After some back and forth and thinking about it, I think > notmuch's current behaviour is actually correct (given the constraint > that tags attach to message-ids). You could argue for different ways of > resolving conflicts for maildir flags in general, but the ",S" or "seen" > flag has fairly natural common sense semantics. I can confirm this is my issue. My thinking is that if any file does not have the ,S maildir flag, then I would prefer the mail to be marked as unread, as a read mail that is spuriously marked as unread is a small inconvenience, while an unread mail that is spuriously marked as read can have huge consequences. Actually, I just noticed while writing this mail that I had setup a sieve filter for duplicate email that put them in a “Duplicate” folder and automatically marks them as “read”, so that at the same time they wouldn't bother me in the thunderbird interface but I could still check dovecot's duplicate detection didn't have false positives. This behaviour of notmuch thus made me miss 9 emails in the 2 weeks I've been using it, the oldest being 12 days ago, without any warning. Well, now I know about it and can try to change my setup (except I can't really touch this sieve filter as other people rely on it), but… If this is a willing choice, I'd be glad were it revisited :) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mail to self 2018-10-28 7:31 ` Leo Gaspard @ 2018-10-28 12:04 ` Gregor Zattler 2018-10-28 15:14 ` Leo Gaspard ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Gregor Zattler @ 2018-10-28 12:04 UTC (permalink / raw) To: notmuch Hi Leo, notmuch users and developers, I too filter emails into different folders. And I used to filter some emails in several folders in order to find them in different contexts. * Leo Gaspard <notmuchmail.org@leo.gaspard.io> [2018-10-28; 16:31]: > I can confirm this is my issue. My thinking is that if any file does not > have the ,S maildir flag, then I would prefer the mail to be marked as > unread, as a read mail that is spuriously marked as unread is a small > inconvenience, while an unread mail that is spuriously marked as read > can have huge consequences. For me, when I filtered emails in several folders and read them with mutt (1) it was the other way around: I wished for the possibility to mark them as read in all folders if read in one. I think your reasoning is also sound but only iff tags would belong to files, but they belong to messages. > Actually, I just noticed while writing this mail that I had setup a > sieve filter for duplicate email that put them in a "Duplicate" folder > and automatically marks them as "read", so that at the same time they > wouldn't bother me in the thunderbird interface but I could still check > dovecot's duplicate detection didn't have false positives. > > This behaviour of notmuch thus made me miss 9 emails in the 2 weeks I've > been using it, the oldest being 12 days ago, without any warning. Well, > now I know about it and can try to change my setup (except I can't > really touch this sieve filter as other people rely on it), but... But why would you tag a message (as opposed to a file) as "unread" because it's a duplicate? If it's somehow important to you to know that a certain email your read via notmuch is a duplicate, why not tag it as "duplicate" instead? I suppose you do this filtering in case you read those emails with a file/folders based client. But would you actually "read" emails in a duplicate folder? I too have a duplicate folder and it was useful some times in order to investigate problems with my processing of incoming emails, but I do not read them in order to understand the meaning of some message a human sent me. Since I also filter emails in folders my searches heavily relay on the path the message is in with the "path:" search prefix. These is true for all mailing lists, for instance. For the specific case of the duplicates folder: It's simply not in the same maildir notmuch indexes and therefore there is no issue with them for me. My procmail scripts first do a backup of an incoming email, later they filter duplicates in a duplicates folder and when an email actually is delivered in the maildir hierarchy notmuch indexes, then it is also backed up in a third backup folder for post-processed emails. These three special folders are directories under my ~/.procmail directory and are not indexed by notmuch. HTH, Gregor -- -... --- .-. . -.. ..--.. ...-.- ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mail to self 2018-10-28 12:04 ` Gregor Zattler @ 2018-10-28 15:14 ` Leo Gaspard 2018-10-30 16:45 ` Leo Gaspard 2018-10-30 16:49 ` Leo Gaspard 2 siblings, 0 replies; 9+ messages in thread From: Leo Gaspard @ 2018-10-28 15:14 UTC (permalink / raw) To: Gregor Zattler, notmuch Hi Gregor, Gregor Zattler <telegraph@gmx.net> writes: > For me, when I filtered emails in several folders and read them > with mutt (1) it was the other way around: I wished for the > possibility to mark them as read in all folders if read in one. This isn't incompatible, and I'm not wishing that notmuch stop marking as read per-message. However, I *am* wishing that when some other tool marked one of the message files as read and not the other, notmuch takes the safe route of marking the overall message as unread in its database. > But why would you tag a message (as opposed to a file) as > "unread" because it's a duplicate? Because usual folder-based applications display an unread marker with the number of unread messages near the folder, and this is a useless visual disturbance for the people for whom I administer the mail server. > If it's somehow important to you to know that a certain email > your read via notmuch is a duplicate, why not tag it as > "duplicate" instead? This is not a problem in notmuch (notmuch anyway just assumes that duplicates with the same Message-ID will never happen, which in my opinion is a bit optimistic, but I guess this design point is not going to change anyway and so am not going to argue further), but it is a problem with folder-based applications. When using a folder-based application, I don't want a Duplicates folder always popping up in my folder list with new messages until I read them, I want a Duplicates folder only to debug when things go weird and messages appear missing. > For the specific case of the duplicates folder: [...] Yes, now that I'm aware of this issue I can adapt my setup, likely by not indexing the duplicates folder indeed. However, I still think this is a big footgun, and take my missing 9 emails in the first 2 weeks of notmuch as proof of it. Just to repeat it at the end so my objective is clear: What I am wishing for is that when some tool outside of notmuch marked one of the message files as read and not the other, upon `synchronize_flags` notmuch takes the safe route of marking the overall message as unread in its database. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mail to self 2018-10-28 12:04 ` Gregor Zattler 2018-10-28 15:14 ` Leo Gaspard @ 2018-10-30 16:45 ` Leo Gaspard 2018-10-30 16:49 ` Leo Gaspard 2 siblings, 0 replies; 9+ messages in thread From: Leo Gaspard @ 2018-10-30 16:45 UTC (permalink / raw) To: Gregor Zattler, notmuch (sorry for sending twice, had the wrong From: line once again, hopefully I have fixed my client by adding this address to `user.other_email` now) Hi Gregor, Gregor Zattler <telegraph@gmx.net> writes: > For me, when I filtered emails in several folders and read them > with mutt (1) it was the other way around: I wished for the > possibility to mark them as read in all folders if read in one. This isn't incompatible, and I'm not wishing that notmuch stop marking as read per-message. However, I *am* wishing that when some other tool marked one of the message files as read and not the other, notmuch takes the safe route of marking the overall message as unread in its database. > But why would you tag a message (as opposed to a file) as > "unread" because it's a duplicate? Because usual folder-based applications display an unread marker with the number of unread messages near the folder, and this is a useless visual disturbance for the people for whom I administer the mail server. > If it's somehow important to you to know that a certain email > your read via notmuch is a duplicate, why not tag it as > "duplicate" instead? This is not a problem in notmuch (notmuch anyway just assumes that duplicates with the same Message-ID will never happen, which in my opinion is a bit optimistic, but I guess this design point is not going to change anyway and so am not going to argue further), but it is a problem with folder-based applications. When using a folder-based application, I don't want a Duplicates folder always popping up in my folder list with new messages until I read them, I want a Duplicates folder only to debug when things go weird and messages appear missing. > For the specific case of the duplicates folder: [...] Yes, now that I'm aware of this issue I can adapt my setup, likely by not indexing the duplicates folder indeed. However, I still think this is a big footgun, and take my missing 9 emails in the first 2 weeks of notmuch as proof of it. Just to repeat it at the end so my objective is clear: What I am wishing for is that when some tool outside of notmuch marked one of the message files as read and not the other, upon `synchronize_flags` notmuch takes the safe route of marking the overall message as unread in its database. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Mail to self 2018-10-28 12:04 ` Gregor Zattler 2018-10-28 15:14 ` Leo Gaspard 2018-10-30 16:45 ` Leo Gaspard @ 2018-10-30 16:49 ` Leo Gaspard 2018-10-30 17:15 ` [PATCH 0/1] notmuch: be conservative and prefer marking too many messages as unread than too few notmuchmail.org 2 siblings, 1 reply; 9+ messages in thread From: Leo Gaspard @ 2018-10-30 16:49 UTC (permalink / raw) To: Gregor Zattler, notmuch (sorry for sending twice, had the wrong From: line once again, hopefully I have fixed my client by adding this address to `user.other_email` now… need some time to adapt, sorry) Hi Gregor, Gregor Zattler <telegraph@gmx.net> writes: > For me, when I filtered emails in several folders and read them > with mutt (1) it was the other way around: I wished for the > possibility to mark them as read in all folders if read in one. This isn't incompatible, and I'm not wishing that notmuch stop marking as read per-message. However, I *am* wishing that when some other tool marked one of the message files as read and not the other, notmuch takes the safe route of marking the overall message as unread in its database. > But why would you tag a message (as opposed to a file) as > "unread" because it's a duplicate? Because usual folder-based applications display an unread marker with the number of unread messages near the folder, and this is a useless visual disturbance for the people for whom I administer the mail server. > If it's somehow important to you to know that a certain email > your read via notmuch is a duplicate, why not tag it as > "duplicate" instead? This is not a problem in notmuch (notmuch anyway just assumes that duplicates with the same Message-ID will never happen, which in my opinion is a bit optimistic, but I guess this design point is not going to change anyway and so am not going to argue further), but it is a problem with folder-based applications. When using a folder-based application, I don't want a Duplicates folder always popping up in my folder list with new messages until I read them, I want a Duplicates folder only to debug when things go weird and messages appear missing. > For the specific case of the duplicates folder: [...] Yes, now that I'm aware of this issue I can adapt my setup, likely by not indexing the duplicates folder indeed. However, I still think this is a big footgun, and take my missing 9 emails in the first 2 weeks of notmuch as proof of it. Just to repeat it at the end so my objective is clear: What I am wishing for is that when some tool outside of notmuch marked one of the message files as read and not the other, upon `synchronize_flags` notmuch takes the safe route of marking the overall message as unread in its database. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/1] notmuch: be conservative and prefer marking too many messages as unread than too few 2018-10-30 16:49 ` Leo Gaspard @ 2018-10-30 17:15 ` notmuchmail.org 2018-10-30 17:15 ` [PATCH 1/1] " notmuchmail.org 0 siblings, 1 reply; 9+ messages in thread From: notmuchmail.org @ 2018-10-30 17:15 UTC (permalink / raw) To: notmuch From: Léo Gaspard <notmuchmail.org@leo.gaspard.io> Here a patch that does what I want, hopefully this makes what I expected from notmuch to be more explicit. Note: it is not ready for integration yet, as the “Removing info from filename leaves tags unchanged” test should likely not add “unread” back. If I hear something positive about it that makes me think it has a chance of going upstream I will try to adapt it, otherwise I will just continue running my local notmuch instance with it applied. Cheers :) Leo Léo Gaspard (1): notmuch: be conservative and prefer marking too many messages as unread than too few lib/message.cc | 18 +++++++++++++++++- test/T340-maildir-sync.sh | 29 +++++++++++++++++++---------- 2 files changed, 36 insertions(+), 11 deletions(-) -- 2.18.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/1] notmuch: be conservative and prefer marking too many messages as unread than too few 2018-10-30 17:15 ` [PATCH 0/1] notmuch: be conservative and prefer marking too many messages as unread than too few notmuchmail.org @ 2018-10-30 17:15 ` notmuchmail.org 0 siblings, 0 replies; 9+ messages in thread From: notmuchmail.org @ 2018-10-30 17:15 UTC (permalink / raw) To: notmuch From: Léo Gaspard <notmuchmail.org@leo.gaspard.io> When two maildir flags have different flags, currently the behavior is to take the union of the all the flags. For unread, this means that if an email has duplicate files, that it is read, and that then on eg. a mobile device one of the files is marked as unread (but not the other), then notmuch won't catch this and keep the message as read. This patch makes notmuch consider that when a message has both a file marked read and a file marked unread from maildir, then it will be treated as unread for notmuch. --- lib/message.cc | 18 +++++++++++++++++- test/T340-maildir-sync.sh | 29 +++++++++++++++++++---------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/lib/message.cc b/lib/message.cc index 6f2f6345..90bbb32a 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1,6 +1,7 @@ /* message.cc - Results of message-based searches from a notmuch database * * Copyright © 2009 Carl Worth + * Copyright © 2018 Leo Gaspard * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,7 +16,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see https://www.gnu.org/licenses/ . * - * Author: Carl Worth <cworth@cworth.org> + * Authors: Carl Worth <cworth@cworth.org> + * Leo Gaspard <leo@gaspard.io> */ #include "notmuch-private.h" @@ -1682,6 +1684,7 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) { notmuch_status_t status; unsigned i; + int num_read_flags; _ensure_maildir_flags (message, true); /* If none of the filenames have any maildir info field (not even @@ -1695,6 +1698,8 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) return status; for (i = 0; i < ARRAY_SIZE(flag2tag); i++) { + if (flag2tag[i].flag == 'S') + continue; if ((strchr (message->maildir_flags, flag2tag[i].flag) != NULL) ^ flag2tag[i].inverse) @@ -1706,6 +1711,17 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message) if (status) return status; } + num_read_flags = 0; + for (i = 0; message->maildir_flags[i] != '\0'; ++i) + if (message->maildir_flags[i] == 'S') + ++num_read_flags; + if (notmuch_message_count_files (message) == num_read_flags) + status = notmuch_message_remove_tag (message, "unread"); + else + status = notmuch_message_add_tag (message, "unread"); + if (status) + return status; + status = notmuch_message_thaw (message); return status; diff --git a/test/T340-maildir-sync.sh b/test/T340-maildir-sync.sh index 7fece5f2..88acab3b 100755 --- a/test/T340-maildir-sync.sh +++ b/test/T340-maildir-sync.sh @@ -121,16 +121,16 @@ test_expect_equal "$output" "thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; R No new mail. Detected 1 file rename. thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Removing S flag (inbox unread)" -test_begin_subtest "Removing info from filename leaves tags unchanged" +test_begin_subtest "Removing info from filename leaves tags unchanged (but re-adds unread)" add_message [subject]='"Message to lose maildir info"' [filename]='message-to-lose-maildir-info' [dir]=cur -notmuch tag -unread subject:"Message to lose maildir info" -mv "$MAIL_DIR/cur/message-to-lose-maildir-info:2,S" "$MAIL_DIR/cur/message-without-maildir-info" +notmuch tag -unread +replied subject:"Message to lose maildir info" +mv "$MAIL_DIR/cur/message-to-lose-maildir-info:2,RS" "$MAIL_DIR/cur/message-without-maildir-info" output=$(NOTMUCH_NEW) output+=" " output+=$(notmuch search subject:"Message to lose maildir info" | notmuch_search_sanitize) test_expect_equal "$output" "No new mail. Detected 1 file rename. -thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Message to lose maildir info (inbox)" +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Message to lose maildir info (inbox replied unread)" test_begin_subtest "Can remove unread tag from message in non-maildir directory" add_message [subject]='"Non-maildir message"' [dir]=notmaildir [filename]='non-maildir-message' @@ -155,27 +155,36 @@ notmuch restore --input=dump.txt output=$(ls $MAIL_DIR/cur) test_expect_equal "$output" "$expected" -test_begin_subtest 'Adding flags to duplicate message tags the mail' +test_begin_subtest 'Adding flags to duplicate message tags the mail (except for unread)' add_message [subject]='"Duplicated message"' [dir]=cur [filename]='duplicated-message:2,' cp "$MAIL_DIR/cur/duplicated-message:2," "$MAIL_DIR/cur/duplicated-message-copy:2,RS" NOTMUCH_NEW > output notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output test_expect_equal "$(< output)" "No new mail. +thread:XXX 2001-01-05 [1/1(2)] Notmuch Test Suite; Duplicated message (inbox replied unread)" + +test_begin_subtest 'Adding flags to all duplicate messages tags the mail' +add_message [subject]='"Duplicated message"' [dir]=cur [filename]='duplicated-message:2,' +cp "$MAIL_DIR/cur/duplicated-message:2," "$MAIL_DIR/cur/duplicated-message-copy:2,RS" +mv "$MAIL_DIR/cur/duplicated-message:2," "$MAIL_DIR/cur/duplicated-message:2,S" +NOTMUCH_NEW > output +notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output +test_expect_equal "$(< output)" "No new mail. Detected 1 file rename. thread:XXX 2001-01-05 [1/1(2)] Notmuch Test Suite; Duplicated message (inbox replied)" -test_begin_subtest "Adding duplicate message without flags does not remove tags" +test_begin_subtest "Adding duplicate message without flags does not remove tags (but adds unread)" cp "$MAIL_DIR/cur/duplicated-message-copy:2,RS" "$MAIL_DIR/cur/duplicated-message-another-copy:2," NOTMUCH_NEW > output notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output test_expect_equal "$(< output)" "No new mail. -thread:XXX 2001-01-05 [1/1(3)] Notmuch Test Suite; Duplicated message (inbox replied)" +thread:XXX 2001-01-05 [1/1(3)] Notmuch Test Suite; Duplicated message (inbox replied unread)" test_begin_subtest "Tag changes modify flags of multiple files" notmuch tag -replied subject:"Duplicated message" (cd $MAIL_DIR/cur/; ls duplicated*) > actual -test_expect_equal "$(< actual)" "duplicated-message-another-copy:2,S -duplicated-message-copy:2,S -duplicated-message:2,S" +test_expect_equal "$(< actual)" "duplicated-message-another-copy:2, +duplicated-message-copy:2, +duplicated-message:2," test_begin_subtest "Synchronizing tag changes preserves unsupported maildir flags" add_message [subject]='"Unsupported maildir flags"' [dir]=cur [filename]='unsupported-maildir-flags:2,FSZxyz' -- 2.18.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-10-30 17:16 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-10-27 11:48 Mail to self Leo Gaspard 2018-10-27 19:58 ` David Bremner 2018-10-28 7:31 ` Leo Gaspard 2018-10-28 12:04 ` Gregor Zattler 2018-10-28 15:14 ` Leo Gaspard 2018-10-30 16:45 ` Leo Gaspard 2018-10-30 16:49 ` Leo Gaspard 2018-10-30 17:15 ` [PATCH 0/1] notmuch: be conservative and prefer marking too many messages as unread than too few notmuchmail.org 2018-10-30 17:15 ` [PATCH 1/1] " notmuchmail.org
Code repositories for project(s) associated with this public inbox https://yhetil.org/notmuch.git/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).