diff options
| -rw-r--r-- | .github/workflows/release-qt5.yml | 2 | ||||
| -rw-r--r-- | .github/workflows/release.yml | 1 | ||||
| -rw-r--r-- | README.md | 71 | ||||
| -rw-r--r-- | resource/appstream/com.bktus.gpgfrontend.appdata.xml | 26 | ||||
| -rw-r--r-- | resource/appstream/com.bktus.gpgfrontend.metainfo.xml | 26 | ||||
| -rw-r--r-- | src/core/thread/Task.cpp | 2 | ||||
| -rw-r--r-- | src/core/thread/TaskRunner.cpp | 27 |
7 files changed, 88 insertions, 67 deletions
diff --git a/.github/workflows/release-qt5.yml b/.github/workflows/release-qt5.yml index 0a8e1688..d0f7b633 100644 --- a/.github/workflows/release-qt5.yml +++ b/.github/workflows/release-qt5.yml @@ -45,7 +45,7 @@ jobs: build: strategy: matrix: - os: ["ubuntu-22.04", "windows-2019"] + os: ["ubuntu-22.04", "windows-2022"] runs-on: ${{ matrix.os }} continue-on-error: true steps: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a11b27b3..852a9580 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,6 @@ jobs: "macos-13", "macos-14", "macos-15", - "windows-2019", "windows-2022", ] runs-on: ${{ matrix.os }} @@ -7,39 +7,38 @@ [](https://github.com/saturneric/GpgFrontend/actions/workflows/testing-nightly.yml) [](https://deepwiki.com/saturneric/GpgFrontend) -**GpgFrontend** is a modern, cross-platform, open-source GUI for OpenPGP -encryption—simple enough for beginners, powerful enough for experts, and -portable enough for everyone who values security and flexibility. +GpgFrontend is a modern, cross-platform open-source GUI for OpenPGP encryption. +It’s easy enough for beginners, powerful enough for experts and portable for +anyone who values security and flexibility. <img width="100" height="100" align="right" style="position: absolute;right: 0;padding: 12px;top:12px;z-index: 1000;" src="https://image.cdn.bktus.com/i/2024/02/24/248b2e18-a120-692e-e6bc-42ca30be9011.webp" alt="GpgFrontend"/> **Key Features:** -- **One-click Encryption & Signing** — Quickly encrypt, decrypt, and digitally - sign your texts, files, and emails with ease. -- **Easy Installation** — Available via Homebrew, Flatpak, GitHub Releases, - winget, AUR, Microsoft Store, and more. -- **True Cross-platform Experience** — Native support for Windows, macOS, Linux, - and buildable on FreeBSD. -- **Fully Portable Across OS** — Run directly from a USB drive; seamlessly move - your keys and settings between Windows and Linux without hassle. -- **Secure & Simple Key Transfer** — Easily move your keys and configurations - safely between devices. -- **Multiple Independent Key Databases** — Effortlessly handle keys and - identities for different roles, projects, or teams. -- **Comprehensive Algorithm Support** — RSA, DSA, EdDSA, ECDSA (NIST, - Brainpool), ECDH, and many more via the latest GnuPG. - -❤️ **Like GpgFrontend?** -Star ⭐ it on GitHub, report issues, or even contribute code—every action -supports privacy and security for all. +1. One-click encryption and signing: Quickly encrypt, decrypt and digitally sign + texts, files and emails +2. Easy installation: Available via Homebrew, Flatpak, GitHub Releases, winget, + AUR, Microsoft Store and more +3. True cross-platform experience: Native support for Windows, macOS and Linux; + can also be built on FreeBSD +4. Fully portable: Run directly from a USB drive and move keys and settings + between Windows and Linux without hassle +5. Secure key transfer: Safely migrate your keys and configurations across + devices +6. Multiple independent key databases: Manage keys and identities separately for + different roles, projects or teams +7. Comprehensive algorithm support: Includes RSA, DSA, EdDSA, ECDSA (NIST, + Brainpool), ECDH and other algorithms via the latest GnuPG + +If you like GpgFrontend, please star ⭐ it on GitHub, report issues or contribute +code to help advance privacy and security for everyone. ## Table of Contents - [GpgFrontend](#gpgfrontend) - [Table of Contents](#table-of-contents) - [User Manual](#user-manual) - - [Developer Document](#developer-document) + - [Developer Wiki](#developer-wiki) - [Language Support](#language-support) - [Supported Languages](#supported-languages) - [Modules](#modules) @@ -52,22 +51,26 @@ supports privacy and security for all. ## User Manual -GpgFrontend provides documentations on its main features. If you want to know -how to install, please read the [User -Manual](https://www.gpgfrontend.bktus.com/overview/glance) instead of README. +For detailed instructions on installation, usage, and troubleshooting, please +refer to the official [User +Manual](https://www.gpgfrontend.bktus.com/overview/glance). The User Manual is +the primary and most up-to-date resource for all users. It provides +comprehensive guidance beyond what is found in the README, ensuring you have the +latest information and best practices. -The code for the user manual is maintained in [this -repository](https://github.com/saturneric/GpgFrontend-Manual.git). +The source code for the user manual is maintained in this +[repository](https://github.com/saturneric/GpgFrontend-Manual.git). -## Developer Document +## Developer Wiki -You can view the developer documentations that is synchronized with the current -latest develop code. [Developer Document](https://doxygen.gpgfrontend.bktus.com) -will help you understand the source code and get involved more quickly in the -process of contributing to open source. +[An AI-assisted Wiki](https://deepwiki.com/saturneric/GpgFrontend) has been +generated through automated analysis of the GpgFrontend source code. This Wiki +offers a comprehensive overview of the project’s technical architecture, design +principles, and major components. The information provided is highly accurate, +making it an excellent resource for both new and experienced contributors. -The code for the developer documentations is maintained in [this -repository](https://github.com/saturneric/GpgFrontend-Doxygen.git). +I strongly recommend reading the Wiki carefully before exploring the source +code in depth. ## Language Support diff --git a/resource/appstream/com.bktus.gpgfrontend.appdata.xml b/resource/appstream/com.bktus.gpgfrontend.appdata.xml index 3f818608..8ea04ace 100644 --- a/resource/appstream/com.bktus.gpgfrontend.appdata.xml +++ b/resource/appstream/com.bktus.gpgfrontend.appdata.xml @@ -52,24 +52,32 @@ <screenshots> <screenshot type="default"> - <image>https://image.cdn.bktus.com/i/2024/02/14/056f1017-331f-ef69-93a6-c49f1d233f8d.png</image> - <caption>Main Window</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/1d53089c71f47c9c039bdb070d1526feb7ab6792.png</image> + <caption>Default Workspace</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/8b891c88-2335-63d8-4f78-2d0dffea763c.png</image> - <caption>Subkey Management</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/4d59e0a14bbac37f2d7c7ffc3a0cdb4439df4c26.png</image> + <caption>Verify Signature of File</caption> + </screenshot> + <screenshot> + <image>https://image.cdn.bktus.com/i/2025/06/25/b1590e858f7480578b9584d3d9ecafddc54772e6.png</image> + <caption>Verify Signature of Email</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/704717c6-e2bc-c5f3-e69e-dcc9a588dde4.png</image> + <image>https://image.cdn.bktus.com/i/2025/06/25/ae4de317dd6ae3d799dc6544c77ffc1e8550926d.png</image> + <caption>Encrypt Text</caption> + </screenshot> + <screenshot> + <image>https://image.cdn.bktus.com/i/2025/06/25/94c2c33b11c612d502ab226c0aa89c96809f98d5.png</image> <caption>Key Generation</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/d8e79f1c-7d07-c550-b1d7-36c33a901056.png</image> - <caption>Verify Signature of File</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/438adc94e18d9bdf66c2e92272e0c1c36e6bdb48.png</image> + <caption>Key Information</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/f1ef687a-a232-23e3-776d-c03e88c62dca.png</image> - <caption>Import Key(s) From Key Server</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/72cbd33f559d53f5591eb2690e1dd998f35752b4.png</image> + <caption>Key Structure</caption> </screenshot> </screenshots> diff --git a/resource/appstream/com.bktus.gpgfrontend.metainfo.xml b/resource/appstream/com.bktus.gpgfrontend.metainfo.xml index d3cd58b2..eb9c00a3 100644 --- a/resource/appstream/com.bktus.gpgfrontend.metainfo.xml +++ b/resource/appstream/com.bktus.gpgfrontend.metainfo.xml @@ -48,24 +48,32 @@ <screenshots> <screenshot type="default"> - <image>https://image.cdn.bktus.com/i/2024/02/14/056f1017-331f-ef69-93a6-c49f1d233f8d.png</image> - <caption>Main Window</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/1d53089c71f47c9c039bdb070d1526feb7ab6792.png</image> + <caption>Default Workspace</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/8b891c88-2335-63d8-4f78-2d0dffea763c.png</image> - <caption>Subkey Management</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/4d59e0a14bbac37f2d7c7ffc3a0cdb4439df4c26.png</image> + <caption>Verify Signature of File</caption> + </screenshot> + <screenshot> + <image>https://image.cdn.bktus.com/i/2025/06/25/b1590e858f7480578b9584d3d9ecafddc54772e6.png</image> + <caption>Verify Signature of Email</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/704717c6-e2bc-c5f3-e69e-dcc9a588dde4.png</image> + <image>https://image.cdn.bktus.com/i/2025/06/25/ae4de317dd6ae3d799dc6544c77ffc1e8550926d.png</image> + <caption>Encrypt Text</caption> + </screenshot> + <screenshot> + <image>https://image.cdn.bktus.com/i/2025/06/25/94c2c33b11c612d502ab226c0aa89c96809f98d5.png</image> <caption>Key Generation</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/d8e79f1c-7d07-c550-b1d7-36c33a901056.png</image> - <caption>Verify Signature of File</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/438adc94e18d9bdf66c2e92272e0c1c36e6bdb48.png</image> + <caption>Key Information</caption> </screenshot> <screenshot> - <image>https://image.cdn.bktus.com/i/2024/02/14/f1ef687a-a232-23e3-776d-c03e88c62dca.png</image> - <caption>Import Key(s) From Key Server</caption> + <image>https://image.cdn.bktus.com/i/2025/06/25/72cbd33f559d53f5591eb2690e1dd998f35752b4.png</image> + <caption>Key Structure</caption> </screenshot> </screenshots> diff --git a/src/core/thread/Task.cpp b/src/core/thread/Task.cpp index f34a38b9..a8fb3d62 100644 --- a/src/core/thread/Task.cpp +++ b/src/core/thread/Task.cpp @@ -192,7 +192,7 @@ Task::~Task() = default; * * @return QString */ -QString Task::GetFullID() const { return p_->GetFullID(); } +auto Task::GetFullID() const -> QString { return p_->GetFullID(); } QString Task::GetUUID() const { return p_->GetUUID(); } diff --git a/src/core/thread/TaskRunner.cpp b/src/core/thread/TaskRunner.cpp index c7d92382..8caf2e2a 100644 --- a/src/core/thread/TaskRunner.cpp +++ b/src/core/thread/TaskRunner.cpp @@ -48,20 +48,23 @@ class TaskRunner::Impl : public QThread { task->SafelyRun(); } - auto RegisterTask(const QString& name, const Task::TaskRunnable& runnerable, - const Task::TaskCallback& cb, - DataObjectPtr params) -> Task::TaskHandler { - auto* raw_task = new Task(runnerable, name, std::move(params), cb); + auto RegisterTask(const QString& name, const Task::TaskRunnable& runnable, + const Task::TaskCallback& cb, DataObjectPtr params) + -> Task::TaskHandler { + auto* raw_task = new Task(runnable, name, std::move(params), cb); raw_task->setParent(nullptr); raw_task->moveToThread(this); - connect(raw_task, &Task::SignalRun, this, [this, raw_task]() { - pending_tasks_[raw_task->GetFullID()] = raw_task; - }); + const auto full_id = raw_task->GetFullID(); - connect(raw_task, &Task::SignalTaskEnd, this, [this, raw_task]() { - pending_tasks_.remove(raw_task->GetFullID()); - }); + connect(raw_task, &Task::SignalRun, this, + [this, task = QPointer<Task>(raw_task), full_id]() { + if (task == nullptr) return; + pending_tasks_[full_id] = task; + }); + + connect(raw_task, &Task::SignalTaskEnd, this, + [this, full_id]() { pending_tasks_.remove(full_id); }); return Task::TaskHandler(raw_task); } @@ -136,8 +139,8 @@ auto TaskRunner::IsRunning() -> bool { return p_->isRunning(); } auto TaskRunner::RegisterTask(const QString& name, const Task::TaskRunnable& runnable, - const Task::TaskCallback& cb, - DataObjectPtr p_pbj) -> Task::TaskHandler { + const Task::TaskCallback& cb, DataObjectPtr p_pbj) + -> Task::TaskHandler { return p_->RegisterTask(name, runnable, cb, p_pbj); } } // namespace GpgFrontend::Thread |
