diff options
author | Saturneric <[email protected]> | 2021-08-19 04:28:57 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-08-19 04:28:57 +0000 |
commit | d9822971050c5b796a1a5a7b4a45bfd9a00e0d88 (patch) | |
tree | b8759e6ea881a370e8fea667b5adf8facf9d4082 /src/gpg/gpg_context/GpgContext.cpp | |
parent | Bugs Fixed; Improve Functions; (diff) | |
download | GpgFrontend-d9822971050c5b796a1a5a7b4a45bfd9a00e0d88.tar.gz GpgFrontend-d9822971050c5b796a1a5a7b4a45bfd9a00e0d88.zip |
Bugs Fixed; Improve Functions;
Diffstat (limited to 'src/gpg/gpg_context/GpgContext.cpp')
-rw-r--r-- | src/gpg/gpg_context/GpgContext.cpp | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/gpg/gpg_context/GpgContext.cpp b/src/gpg/gpg_context/GpgContext.cpp index 50de03a1..f7bbbe37 100644 --- a/src/gpg/gpg_context/GpgContext.cpp +++ b/src/gpg/gpg_context/GpgContext.cpp @@ -23,6 +23,7 @@ */ #include "gpg/GpgContext.h" +#include "ui/WaitingDialog.h" #include <functional> #include <unistd.h> /* contains read/write */ @@ -251,30 +252,28 @@ namespace GpgME { } /** return type should be gpgme_error_t*/ - QProcess *GpgContext::executeGpgCommand(const QStringList &arguments, QByteArray *stdOut, QByteArray *stdErr, - const std::function<void(QProcess *)> &interactFunc) { - QStringList args; - args << arguments; - - auto *gpgProcess = new QProcess(this); - - gpgProcess->setReadChannel(QProcess::StandardOutput); - connect(gpgProcess, SIGNAL(finished(int, QProcess::ExitStatus)), - gpgProcess, SLOT(deleteLater())); - connect(gpgProcess, &QProcess::readyReadStandardOutput, this, [gpgProcess, interactFunc]() { - qDebug() << "Function Called" << &gpgProcess; - // interactFunc(gpgProcess); + void + GpgContext::executeGpgCommand(const QStringList &arguments, const std::function<void(QProcess *)> &interactFunc) { + QEventLoop looper; + auto dialog = new WaitingDialog(tr("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, []() -> void { qDebug("Error in Process"); }); + connect(gpgProcess, &QProcess::errorOccurred, &looper, &QEventLoop::quit); + connect(gpgProcess, &QProcess::started, []() -> void { qDebug() << "Gpg Process Started Success"; }); + connect(gpgProcess, &QProcess::readyReadStandardOutput, [interactFunc, gpgProcess]() { + qDebug() << "Function Called"; + interactFunc(gpgProcess); }); + gpgProcess->setProgram(info.appPath); + gpgProcess->setArguments(arguments); + gpgProcess->start(); + looper.exec(); + dialog->close(); - gpgProcess->start(info.appPath, args); - - if (gpgProcess->waitForStarted()) { - qDebug() << "Gpg Process Started Success"; - } else { - qDebug() << "Gpg Process Started Failed"; - } - - return gpgProcess; } |