aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/utils/AsyncUtils.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-01-19 13:54:26 +0000
committersaturneric <[email protected]>2024-01-19 13:54:26 +0000
commit5baef3c4a3b947d3275e9ce44cfb7a68984f6cca (patch)
tree78ea7c8caeb4336d99596ae665061bb7f25611f1 /src/core/utils/AsyncUtils.cpp
parentfix: slove discovered faults and bugs (diff)
downloadGpgFrontend-5baef3c4a3b947d3275e9ce44cfb7a68984f6cca.tar.gz
GpgFrontend-5baef3c4a3b947d3275e9ce44cfb7a68984f6cca.zip
fix: solve discovered bugs and improve ui operations
Diffstat (limited to 'src/core/utils/AsyncUtils.cpp')
-rw-r--r--src/core/utils/AsyncUtils.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/core/utils/AsyncUtils.cpp b/src/core/utils/AsyncUtils.cpp
index 40c2ece1..9ce94247 100644
--- a/src/core/utils/AsyncUtils.cpp
+++ b/src/core/utils/AsyncUtils.cpp
@@ -123,4 +123,32 @@ auto RunIOOperaAsync(const OperaRunnable& runnable,
handler.Start();
return handler;
}
+
+auto RunOperaAsync(const OperaRunnable& runnable,
+ const OperationCallback& callback, const QString& operation)
+ -> Thread::Task::TaskHandler {
+ auto handler =
+ Thread::TaskRunnerGetter::GetInstance()
+ .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_Default)
+ ->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 rtn, const DataObjectPtr& data_object) {
+ if (rtn < 0) {
+ callback(-1, ExtractParams<DataObjectPtr>(data_object, 1));
+ } else {
+ callback(ExtractParams<GFError>(data_object, 0),
+ ExtractParams<DataObjectPtr>(data_object, 1));
+ }
+ },
+ TransferParams());
+ handler.Start();
+ return handler;
+}
} // namespace GpgFrontend \ No newline at end of file