diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-26 15:40:11 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-26 15:40:11 +0200 |
| commit | 1b9188fff9b767192d5d1c62d64df81d2af2fe4d (patch) | |
| tree | b70a415cb2749b1879ac84035d50a6742648fad3 /src/businesssenders.cpp | |
| parent | 67cc7bf2357980c51bc345855d9a8d69ff9a7a9f (diff) | |
| download | qtmaildir-1b9188fff9b767192d5d1c62d64df81d2af2fe4d.tar.gz qtmaildir-1b9188fff9b767192d5d1c62d64df81d2af2fe4d.zip | |
feat: read the business-senders list
Diffstat (limited to 'src/businesssenders.cpp')
| -rw-r--r-- | src/businesssenders.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/businesssenders.cpp b/src/businesssenders.cpp new file mode 100644 index 0000000..13a9374 --- /dev/null +++ b/src/businesssenders.cpp @@ -0,0 +1,78 @@ +/* + * qtmaildir - a Qt6 mail client for notmuch-indexed Maildirs + * Copyright (C) 2026 Danilo M. <danix@danix.xyz> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "businesssenders.h" + +#include <QDir> +#include <QFile> +#include <QStandardPaths> +#include <QTextStream> + +namespace BusinessSenders { + +List parse(const QString &contents) +{ + List list; + const QStringList lines = contents.split(QLatin1Char('\n')); + for (const QString &raw : lines) { + const QString line = raw.trimmed(); + // A commented entry is the reject gesture: it stays in the file so it + // is never proposed again, and it is not applied. + if (line.isEmpty() || line.startsWith(QLatin1Char('#'))) + continue; + + const QString entry = line.toLower(); + if (entry.startsWith(QLatin1Char('@'))) + list.domains.insert(entry.mid(1)); + else + list.addresses.insert(entry); + } + return list; +} + +List load(const QString &path) +{ + QFile file(path); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return List(); + return parse(QString::fromUtf8(file.readAll())); +} + +bool contains(const List &list, const QString &address) +{ + const QString lowered = address.trimmed().toLower(); + if (lowered.isEmpty()) + return false; + if (list.addresses.contains(lowered)) + return true; + + const int at = lowered.indexOf(QLatin1Char('@')); + if (at < 0) + return false; + return list.domains.contains(lowered.mid(at + 1)); +} + +QString defaultPath() +{ + const QString base = QStandardPaths::writableLocation( + QStandardPaths::GenericConfigLocation); + return QDir(base).filePath( + QStringLiteral("qtmaildir/business-senders")); +} + +} // namespace BusinessSenders |
