aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-13 20:14:25 +0200
committerDanilo M. <danix@danix.xyz>2026-08-13 20:14:25 +0200
commit9be1b13b91188cf44a40c6786a83de034988cdbd (patch)
tree7e5339fbb7e71d29498405f9d4b1c4188f5ab4c3 /src
parenta7872cf56b7f313881f0d5e50d548ffdb5ba68b9 (diff)
downloadqtmaildir-9be1b13b91188cf44a40c6786a83de034988cdbd.tar.gz
qtmaildir-9be1b13b91188cf44a40c6786a83de034988cdbd.zip
fix(queries): stop writing keys that carry no information
Saving a generated entry wrote `"query": ""` and `"flat": true` alongside its generator. Both reload correctly, so nothing was broken, but queries.json is meant to be hand-edited and each redundant key is one more thing to read past. A generated entry has no query of its own, and the sent generator already implies flat. Written now only when they say something, which is the rule `pinned` and `account` already followed: `query` is skipped for a generated entry in favour of `generated`, and `flat` is skipped when the generator implies it. Omitting `flat` is only safe because loadSavedQueries() reapplies it from the generator, so the two are coupled: the mutation that stops reapplying it fails this test and one other, in both suites. That is deliberate, since a round-trip test can otherwise pass while quietly writing less than it reads. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src')
-rw-r--r--src/config.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/config.cpp b/src/config.cpp
index 9edba50..ae26555 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -589,16 +589,24 @@ bool Config::saveSavedQueries() const
QJsonArray array;
for (const SavedQuery &query : m_savedQueries) {
+ // Only what carries information. The file is hand-editable, so a key
+ // that always holds the same value, or one the generator already
+ // implies, is just something the reader has to skip past. Same reason
+ // `pinned` and `account` are written only when set.
QJsonObject object;
object.insert(QStringLiteral("name"), query.name);
- object.insert(QStringLiteral("query"), query.query);
+ if (query.isGenerated()) {
+ object.insert(QStringLiteral("generated"), query.generated);
+ } else {
+ object.insert(QStringLiteral("query"), query.query);
+ }
if (query.pinned)
object.insert(QStringLiteral("pinned"), true);
if (!query.account.isEmpty())
object.insert(QStringLiteral("account"), query.account);
- if (query.isGenerated())
- object.insert(QStringLiteral("generated"), query.generated);
- if (query.flat)
+ // Skipped when the generator already implies it, which loadSavedQueries
+ // reapplies on the way back in.
+ if (query.flat && query.generated != QStringLiteral("sent"))
object.insert(QStringLiteral("flat"), true);
for (auto it = query.unknown.begin(); it != query.unknown.end(); ++it)
object.insert(it.key(), it.value());