diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-02 17:21:47 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-02 17:21:47 +0200 |
| commit | b61ce428d81871fbbc6261f274f20785db9d1c38 (patch) | |
| tree | b1ebcf1da244a31ec1c991be42d0062d776ba1b4 /src/config.h | |
| parent | db1eb37b26f9ac14be4e1a4e5edbf5b6e77f8db7 (diff) | |
| download | qtmaildir-b61ce428d81871fbbc6261f274f20785db9d1c38.tar.gz qtmaildir-b61ce428d81871fbbc6261f274f20785db9d1c38.zip | |
feat: add Config with account, query, and sync parsing
Accounts use [account.work] rather than [account/work]: QSettings' INI
backend treats "/" as its own hierarchical group separator, so a literal
slash in a section header parses as a nested group and trips
QSettings::FormatError, silently breaking childGroups() enumeration. A
dot carries no such meaning and keeps the format flat.
Saved-query order is alphabetical (QSettings::childKeys() sorts), not
file order; documented in code and tests rather than left to a false
assumption.
Diffstat (limited to 'src/config.h')
| -rw-r--r-- | src/config.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..f037db5 --- /dev/null +++ b/src/config.h @@ -0,0 +1,62 @@ +#pragma once + +#include <QList> +#include <QString> +#include <QStringList> + +/// One mail account. notmuch has no concept of accounts; it sees a single flat +/// tree. An account is therefore a path prefix within that tree plus an +/// identity. +struct Account +{ + QString key; ///< INI group suffix, e.g. "work" from [account/work]. + QString name; + QString address; + QString maildir; ///< Relative to notmuch's database.path. + QString drafts; ///< Unused in v1; send is v2. + + bool isValid() const { return !key.isEmpty() && !maildir.isEmpty(); } + + /// Restricts a notmuch query to this account's subtree. + QString scopedQuery(const QString &query) const; +}; + +struct SavedQuery +{ + QString name; + QString query; +}; + +/// Reads ~/.config/qtmaildir/qtmaildir.conf. +/// +/// The Maildir path is deliberately NOT configurable here: notmuch already +/// stores it as database.path and libnotmuch reads it. Duplicating it would +/// allow the GUI to index a different tree than the CLI. +class Config +{ +public: + /// Path used when load() is called with no argument. + static QString defaultPath(); + + void load(const QString &path); + + QList<Account> accounts() const { return m_accounts; } + Account account(const QString &key) const; + QList<SavedQuery> savedQueries() const { return m_savedQueries; } + + /// Empty when unset; the caller disables the Sync button in that case. + QString syncCommand() const { return m_syncCommand; } + + /// Optional alternate notmuch config file. Empty means "let notmuch decide". + QString notmuchConfig() const { return m_notmuchConfig; } + + /// Non-fatal problems, shown once in a startup banner. + QStringList warnings() const { return m_warnings; } + +private: + QList<Account> m_accounts; + QList<SavedQuery> m_savedQueries; + QString m_syncCommand; + QString m_notmuchConfig; + QStringList m_warnings; +}; |
