diff options
| author | saturneric <[email protected]> | 2026-09-24 22:31:28 +0200 |
|---|---|---|
| committer | saturneric <[email protected]> | 2026-09-24 22:31:28 +0200 |
| commit | e1a60bb1405457da13b4050f912831805403419e (patch) | |
| tree | c75a6d0298d326aa065afbe855bceb16506a0764 /src/m_key_server_sync/KeyServerBatchLogic.h | |
| parent | fix(email): persist IMAP state on close (diff) | |
| download | modules-e1a60bb1405457da13b4050f912831805403419e.tar.gz modules-e1a60bb1405457da13b4050f912831805403419e.zip | |
feat(key-server): add batch key operations
- support batch refresh and publish actions for key selections
- add publication status checking through the key server
- manage request ownership, spacing, cancellation, and summaries
- normalize duplicate keys and combine fetched blocks for import
- add UI actions for selected keys and key detail views
- add unit tests for batch logic and optional test integration
Diffstat (limited to 'src/m_key_server_sync/KeyServerBatchLogic.h')
| -rw-r--r-- | src/m_key_server_sync/KeyServerBatchLogic.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/m_key_server_sync/KeyServerBatchLogic.h b/src/m_key_server_sync/KeyServerBatchLogic.h new file mode 100644 index 0000000..439ef87 --- /dev/null +++ b/src/m_key_server_sync/KeyServerBatchLogic.h @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric <[email protected]> starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include <QByteArray> +#include <QList> +#include <QString> +#include <QStringList> +#include <optional> + +/** + * @file KeyServerBatchLogic.h + * @brief The decisions a batch of key-server operations makes, without the + * network or the SDK, so they can be tested on their own. + */ +namespace KeyServerBatchLogic { + +/// One key a batch acts on: the part of the Host's key reference it needs. +struct BatchKey { + qint64 channel = 0; + QString key_id; + QString fingerprint; +}; + +/** + * @brief The keys a command was given, as one list. + * + * A command is given either one key (the key details dialog) or a selection + * (a key list). Both together are merged; a key named twice, by fingerprint, + * is acted on once, in the order it was first named. Keys without a + * fingerprint are dropped: there is nothing to fetch or publish them by. + */ +auto Normalise(const std::optional<BatchKey>& key, + const std::optional<QList<BatchKey>>& keys) -> QList<BatchKey>; + +/** + * @brief Several fetched key blocks as one import payload. + * + * One import means one dialog for the whole batch. Each block ends in a + * newline so the next one's armor header starts on a line of its own; empty + * blocks are skipped. + */ +auto JoinForImport(const QList<QByteArray>& blocks) -> QByteArray; + +/// What a finished refresh says, e.g. "3 of 4 keys fetched" plus failures. +auto RefreshSummary(int fetched, int total, const QStringList& failures) + -> QString; + +/// What a finished publish says, e.g. "2 of 2 keys published" plus failures. +auto PublishSummary(int published, int total, const QString& host, + const QStringList& failures) -> QString; + +} // namespace KeyServerBatchLogic |
