aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/utils/AsyncUtils.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-01-15 18:01:59 +0000
committersaturneric <[email protected]>2024-01-15 18:01:59 +0000
commit5adbd09fcb24f829ee110a5d387269aee13c558c (patch)
treea58983c7ce002d59d512341a73fa84cdd1b7a9da /src/core/utils/AsyncUtils.cpp
parentfix: slove the languange settings issue (diff)
downloadGpgFrontend-5adbd09fcb24f829ee110a5d387269aee13c558c.tar.gz
GpgFrontend-5adbd09fcb24f829ee110a5d387269aee13c558c.zip
feat: upgrade threading system and make it clearer
Diffstat (limited to 'src/core/utils/AsyncUtils.cpp')
-rw-r--r--src/core/utils/AsyncUtils.cpp73
1 files changed, 39 insertions, 34 deletions
diff --git a/src/core/utils/AsyncUtils.cpp b/src/core/utils/AsyncUtils.cpp
index f5289b19..15979f2b 100644
--- a/src/core/utils/AsyncUtils.cpp
+++ b/src/core/utils/AsyncUtils.cpp
@@ -38,7 +38,7 @@ namespace GpgFrontend {
auto RunGpgOperaAsync(GpgOperaRunnable runnable, GpgOperationCallback callback,
const QString& operation, const QString& minial_version)
- -> std::tuple<QPointer<Thread::Task>, Thread::Task::TaskTrigger> {
+ -> Thread::Task::TaskHandler {
const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>(
"core", "gpgme.ctx.gnupg_version", minial_version);
GF_CORE_LOG_DEBUG("got gnupg version from rt: {}", gnupg_version);
@@ -46,45 +46,50 @@ auto RunGpgOperaAsync(GpgOperaRunnable runnable, GpgOperationCallback callback,
if (CompareSoftwareVersion(gnupg_version, "2.0.15") < 0) {
GF_CORE_LOG_ERROR("operator not support");
callback(GPG_ERR_NOT_SUPPORTED, TransferParams());
- return {nullptr, {}};
+ return Thread::Task::TaskHandler(nullptr);
}
- return Thread::TaskRunnerGetter::GetInstance()
- .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_GPG)
- ->RegisterTask(
- operation,
- [=](const DataObjectPtr& data_object) -> int {
- auto custom_data_object = TransferParams();
- GpgError err = runnable(custom_data_object);
+ auto handler =
+ Thread::TaskRunnerGetter::GetInstance()
+ .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_GPG)
+ ->RegisterTask(
+ operation,
+ [=](const DataObjectPtr& data_object) -> int {
+ auto custom_data_object = TransferParams();
+ GpgError err = runnable(custom_data_object);
- data_object->Swap({err, custom_data_object});
- return 0;
- },
- [=](int, const DataObjectPtr& data_object) {
- callback(ExtractParams<GpgError>(data_object, 0),
- ExtractParams<DataObjectPtr>(data_object, 1));
- },
- TransferParams());
+ data_object->Swap({err, custom_data_object});
+ return 0;
+ },
+ [=](int, const DataObjectPtr& data_object) {
+ callback(ExtractParams<GpgError>(data_object, 0),
+ ExtractParams<DataObjectPtr>(data_object, 1));
+ },
+ TransferParams());
+ handler.Start();
+ return handler;
}
auto RunIOOperaAsync(OperaRunnable runnable, OperationCallback callback,
- const QString& operation)
- -> std::tuple<QPointer<Thread::Task>, Thread::Task::TaskTrigger> {
- return Thread::TaskRunnerGetter::GetInstance()
- .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_IO)
- ->RegisterTask(
- operation,
- [=](const DataObjectPtr& data_object) -> int {
- auto custom_data_object = TransferParams();
- GpgError err = runnable(custom_data_object);
+ const QString& operation) -> Thread::Task::TaskHandler {
+ auto handler =
+ Thread::TaskRunnerGetter::GetInstance()
+ .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_IO)
+ ->RegisterTask(
+ operation,
+ [=](const DataObjectPtr& data_object) -> int {
+ auto custom_data_object = TransferParams();
+ GpgError err = runnable(custom_data_object);
- data_object->Swap({err, custom_data_object});
- return 0;
- },
- [=](int, const DataObjectPtr& data_object) {
- callback(ExtractParams<GFError>(data_object, 0),
- ExtractParams<DataObjectPtr>(data_object, 1));
- },
- TransferParams());
+ data_object->Swap({err, custom_data_object});
+ return 0;
+ },
+ [=](int, const DataObjectPtr& data_object) {
+ callback(ExtractParams<GFError>(data_object, 0),
+ ExtractParams<DataObjectPtr>(data_object, 1));
+ },
+ TransferParams());
+ handler.Start();
+ return handler;
}
} // namespace GpgFrontend \ No newline at end of file