aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/UserInterfaceUtils.cpp
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2021-12-02 22:30:34 +0000
committerSaturneric <[email protected]>2021-12-02 22:30:34 +0000
commit1a8626dfb31df145f32ad5ceaa480fbd2a0a42bf (patch)
tree73ff7ce9492c2da3e049b82a4c63908f82d6be20 /src/ui/UserInterfaceUtils.cpp
parentFixed. (diff)
downloadGpgFrontend-1a8626dfb31df145f32ad5ceaa480fbd2a0a42bf.tar.gz
GpgFrontend-1a8626dfb31df145f32ad5ceaa480fbd2a0a42bf.zip
Fixed
1. Fixed Known Issues.
Diffstat (limited to 'src/ui/UserInterfaceUtils.cpp')
-rw-r--r--src/ui/UserInterfaceUtils.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp
index 395d292e..e8f27d2c 100644
--- a/src/ui/UserInterfaceUtils.cpp
+++ b/src/ui/UserInterfaceUtils.cpp
@@ -125,4 +125,47 @@ void CommonUtils::slotImportKeyFromClipboard(QWidget* parent) {
cb->text(QClipboard::Clipboard).toUtf8().toStdString());
}
+void CommonUtils::slotExecuteGpgCommand(
+ const QStringList& arguments,
+ const std::function<void(QProcess*)>& interact_func) {
+ QEventLoop looper;
+ auto dialog = new WaitingDialog(_("Processing"), nullptr);
+ dialog->show();
+ auto* gpgProcess = new QProcess(&looper);
+ gpgProcess->setProcessChannelMode(QProcess::MergedChannels);
+
+ connect(gpgProcess, qOverload<int, QProcess::ExitStatus>(&QProcess::finished),
+ &looper, &QEventLoop::quit);
+ connect(gpgProcess, qOverload<int, QProcess::ExitStatus>(&QProcess::finished),
+ dialog, &WaitingDialog::deleteLater);
+ connect(gpgProcess, &QProcess::errorOccurred, &looper, &QEventLoop::quit);
+ connect(gpgProcess, &QProcess::started,
+ []() -> void { LOG(ERROR) << "Gpg Process Started Success"; });
+ connect(gpgProcess, &QProcess::readyReadStandardOutput,
+ [interact_func, gpgProcess]() { interact_func(gpgProcess); });
+ connect(gpgProcess, &QProcess::errorOccurred, this, [=]() -> void {
+ LOG(ERROR) << "Error in Process";
+ dialog->close();
+ QMessageBox::critical(nullptr, _("Failure"),
+ _("Failed to execute command."));
+ });
+ connect(gpgProcess, qOverload<int, QProcess::ExitStatus>(&QProcess::finished),
+ this, [=](int, QProcess::ExitStatus status) {
+ dialog->close();
+ if (status == QProcess::NormalExit)
+ QMessageBox::information(nullptr, _("Success"),
+ _("Succeed in executing command."));
+ else
+ QMessageBox::information(nullptr, _("Warning"),
+ _("Finished executing command."));
+ });
+
+ gpgProcess->setProgram(GpgContext::GetInstance().GetInfo().AppPath.c_str());
+ gpgProcess->setArguments(arguments);
+ gpgProcess->start();
+ looper.exec();
+ dialog->close();
+ dialog->deleteLater();
+}
+
} // namespace GpgFrontend::UI \ No newline at end of file