summaryrefslogtreecommitdiffstats
path: root/src/tagrulesdialog.cpp
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-13 10:42:56 +0200
committerDanilo M. <danix@danix.xyz>2026-08-13 10:42:56 +0200
commit2d451e35e95a580d0e81c2e1bf7220d879490864 (patch)
tree39e2a03c7757db4eacab5582dff94762c04e8126 /src/tagrulesdialog.cpp
parentc396853a9290314ab657ac4414a21f26dc1fa6d5 (diff)
downloadqtmaildir-2d451e35e95a580d0e81c2e1bf7220d879490864.tar.gz
qtmaildir-2d451e35e95a580d0e81c2e1bf7220d879490864.zip
docs: record items 75-78 and design the rule builder
The standing backlog reconciliation found four unrecorded entries in the user's notes, all fallout from item 44's rules dialog now that it is in daily use: the window forgets its geometry and column widths (75), every field is free text (76), a rule cannot be previewed against the thread list (77), and there is no way to build a rule from something visible in a message (78). Each cause is verified in the code rather than copied from the note. Item 76 then went through a brainstorming pass and has a design. The shape is Thunderbird's filter window, which the user supplied as the reference: field and operator dropdowns, +/- buttons per row, an all/any radio, and a separate "but not" block. The structural point is that Thunderbird owns its filter format and this project does not. The storage is a notmuch query string shared with mailctl and executed by the post-new hook, so the builder is a view over a string rather than a store. That decides the rest: the stored format is untouched and this stays a single-repo change; a query the builder cannot represent still opens, saves and runs, in a text mode every rule carries; and the string is rewritten only when the rows actually changed, compared against the parsed value rather than tracked with a dirty flag, which Qt sets during programmatic population. Measured against the seventeen rules in the live store, sixteen are flat and one nests an or group inside an and chain, which is what the exclusion block exists for. The parser is strict by design: it recognises a query whole or rejects it whole, because a lenient parser that salvages what it understands is how a not clause gets dropped and a filter silently widens.
Diffstat (limited to 'src/tagrulesdialog.cpp')
0 files changed, 0 insertions, 0 deletions