aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/UserInterfaceUtils.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2025-01-26 18:17:20 +0000
committersaturneric <[email protected]>2025-01-26 18:18:10 +0000
commit92e1ed7b3fd5360278d41db087518b6c5af80b3e (patch)
tree577edfa58889d97a0b3ec1f2c045b9d6fe9cff70 /src/ui/UserInterfaceUtils.cpp
parentfix: 'std::future' is defined in header '<future>' (diff)
downloadGpgFrontend-92e1ed7b3fd5360278d41db087518b6c5af80b3e.tar.gz
GpgFrontend-92e1ed7b3fd5360278d41db087518b6c5af80b3e.zip
feat: allow file batch operations
Diffstat (limited to '')
-rw-r--r--src/ui/UserInterfaceUtils.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp
index 33d72d8d..ea5bb3d9 100644
--- a/src/ui/UserInterfaceUtils.cpp
+++ b/src/ui/UserInterfaceUtils.cpp
@@ -216,6 +216,41 @@ void CommonUtils::WaitForOpera(QWidget *parent,
looper.exec();
}
+void CommonUtils::WaitForMultipleOperas(
+ QWidget *parent, const QString &waiting_dialog_title,
+ const QContainer<OperaWaitingCb> &operas) {
+ QEventLoop looper;
+ QPointer<WaitingDialog> const dialog =
+ new WaitingDialog(waiting_dialog_title, true, parent);
+ connect(dialog, &QDialog::finished, &looper, &QEventLoop::quit);
+ connect(dialog, &QDialog::finished, dialog, &QDialog::deleteLater);
+ dialog->show();
+
+ std::atomic<int> remaining_tasks(static_cast<int>(operas.size()));
+ const auto tasks_count = operas.size();
+
+ for (const auto &opera : operas) {
+ QTimer::singleShot(64, parent, [=, &remaining_tasks]() {
+ opera([dialog, &remaining_tasks, tasks_count]() {
+ if (dialog == nullptr) return;
+
+ const auto pg_value =
+ static_cast<double>(tasks_count - remaining_tasks + 1) * 100.0 /
+ static_cast<double>(tasks_count);
+ emit dialog->SignalUpdateValue(static_cast<int>(pg_value));
+ QCoreApplication::processEvents();
+
+ if (--remaining_tasks == 0) {
+ dialog->close();
+ dialog->accept();
+ }
+ });
+ });
+ }
+
+ looper.exec();
+}
+
void CommonUtils::RaiseMessageBox(QWidget *parent, GpgError err) {
GpgErrorDesc desc = DescribeGpgErrCode(err);
GpgErrorCode err_code = CheckGpgError2ErrCode(err);
@@ -326,7 +361,7 @@ void CommonUtils::SlotExecuteGpgCommand(
const QStringList &arguments,
const std::function<void(QProcess *)> &interact_func) {
QEventLoop looper;
- auto *dialog = new WaitingDialog(tr("Processing"), nullptr);
+ auto *dialog = new WaitingDialog(tr("Processing"), false);
dialog->show();
auto *gpg_process = new QProcess(&looper);
gpg_process->setProcessChannelMode(QProcess::MergedChannels);