From 5baef3c4a3b947d3275e9ce44cfb7a68984f6cca Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 19 Jan 2024 21:54:26 +0800 Subject: fix: solve discovered bugs and improve ui operations --- src/core/utils/AsyncUtils.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/core/utils/AsyncUtils.cpp') 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(data_object, 1)); + } else { + callback(ExtractParams(data_object, 0), + ExtractParams(data_object, 1)); + } + }, + TransferParams()); + handler.Start(); + return handler; +} } // namespace GpgFrontend \ No newline at end of file -- cgit v1.2.3