aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/gpg/GpgCommandExecutor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/function/gpg/GpgCommandExecutor.cpp')
-rw-r--r--src/core/function/gpg/GpgCommandExecutor.cpp43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/core/function/gpg/GpgCommandExecutor.cpp b/src/core/function/gpg/GpgCommandExecutor.cpp
index ba2b7e02..582f8afa 100644
--- a/src/core/function/gpg/GpgCommandExecutor.cpp
+++ b/src/core/function/gpg/GpgCommandExecutor.cpp
@@ -99,12 +99,19 @@ Thread::Task *GpgCommandExecutor::build_task(const ExecuteContext &context) {
auto &interact_function = context.interact_func;
auto &callback = context.callback;
+ const std::string joined_argument = std::accumulate(
+ std::begin(arguments), std::end(arguments), std::string(),
+ [](const std::string &a, const std::string &b) -> std::string {
+ return a + (a.length() > 0 ? " " : "") + b;
+ });
+
SPDLOG_DEBUG("building task: called cmd {} arguments size: {}", cmd,
arguments.size());
Thread::Task::TaskCallback result_callback =
[](int rtn, Thread::DataObjectPtr data_object) {
- SPDLOG_DEBUG("data object use count: {}", data_object->GetObjectSize());
+ SPDLOG_DEBUG("data object args count: {}",
+ data_object->GetObjectSize());
if (!data_object->Check<int, std::string, std::string,
GpgCommandExecutorCallback>())
throw std::runtime_error("invalid data object size");
@@ -117,12 +124,13 @@ Thread::Task *GpgCommandExecutor::build_task(const ExecuteContext &context) {
auto callback =
Thread::ExtractParams<GpgCommandExecutorCallback>(data_object, 3);
+ SPDLOG_DEBUG("data object args got, exit_code: {}", exit_code);
// call callback
callback(exit_code, process_stdout, process_stderr);
};
Thread::Task::TaskRunnable runner =
- [](Thread::DataObjectPtr data_object) -> int {
+ [joined_argument](Thread::DataObjectPtr data_object) -> int {
SPDLOG_DEBUG("process runner called, data object size: {}",
data_object->GetObjectSize());
@@ -133,7 +141,6 @@ Thread::Task *GpgCommandExecutor::build_task(const ExecuteContext &context) {
// get arguments
auto cmd = Thread::ExtractParams<std::string>(data_object, 0);
- SPDLOG_DEBUG("get cmd: {}", cmd);
auto arguments =
Thread::ExtractParams<std::vector<std::string>>(data_object, 1);
auto interact_func =
@@ -142,6 +149,7 @@ Thread::Task *GpgCommandExecutor::build_task(const ExecuteContext &context) {
Thread::ExtractParams<GpgCommandExecutorCallback>(data_object, 3);
auto *cmd_process = new QProcess();
+ cmd_process->moveToThread(QThread::currentThread());
cmd_process->setProcessChannelMode(QProcess::MergedChannels);
QObject::connect(cmd_process, &QProcess::started,
@@ -157,16 +165,27 @@ Thread::Task *GpgCommandExecutor::build_task(const ExecuteContext &context) {
QObject::connect(
cmd_process, qOverload<int, QProcess::ExitStatus>(&QProcess::finished),
[=](int, QProcess::ExitStatus status) {
+ int exit_code = cmd_process->exitCode();
if (status == QProcess::NormalExit)
SPDLOG_DEBUG(
- "proceess finished, succeed in executing command: {}, exit "
- "status: {}",
- cmd, status);
+ "proceess finished, succeed in executing command: {} {}, exit "
+ "code: {}",
+ cmd, joined_argument, exit_code);
else
SPDLOG_ERROR(
- "proceess finished, error in executing command: {}, exit "
- "status: {}",
- cmd, status);
+ "proceess finished, error in executing command: {} {}, exit "
+ "code: {}",
+ cmd, joined_argument, exit_code);
+ std::string process_stdout =
+ cmd_process->readAllStandardOutput().toStdString(),
+ process_stderr =
+ cmd_process->readAllStandardError().toStdString();
+
+ cmd_process->close();
+ cmd_process->deleteLater();
+
+ data_object->Swap(
+ {exit_code, process_stdout, process_stderr, callback});
});
cmd_process->setProgram(QString::fromStdString(cmd));
@@ -195,12 +214,6 @@ Thread::Task *GpgCommandExecutor::build_task(const ExecuteContext &context) {
return 0;
};
- const std::string joined_argument = std::accumulate(
- std::begin(arguments), std::end(arguments), std::string(),
- [](const std::string &a, const std::string &b) -> std::string {
- return a + (a.length() > 0 ? " " : "") + b;
- });
-
return new Thread::Task(
std::move(runner),
(boost::format("Execute(%1%){%2%}") % cmd % joined_argument).str(),