diff options
author | Saturneric <[email protected]> | 2021-12-02 22:30:34 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-12-02 22:30:34 +0000 |
commit | 1a8626dfb31df145f32ad5ceaa480fbd2a0a42bf (patch) | |
tree | 73ff7ce9492c2da3e049b82a4c63908f82d6be20 /src/ui/UserInterfaceUtils.cpp | |
parent | Fixed. (diff) | |
download | GpgFrontend-1a8626dfb31df145f32ad5ceaa480fbd2a0a42bf.tar.gz GpgFrontend-1a8626dfb31df145f32ad5ceaa480fbd2a0a42bf.zip |
Fixed
1. Fixed Known Issues.
Diffstat (limited to 'src/ui/UserInterfaceUtils.cpp')
-rw-r--r-- | src/ui/UserInterfaceUtils.cpp | 43 |
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 |