diff options
author | saturneric <[email protected]> | 2024-01-19 13:54:26 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-01-19 13:54:26 +0000 |
commit | 5baef3c4a3b947d3275e9ce44cfb7a68984f6cca (patch) | |
tree | 78ea7c8caeb4336d99596ae665061bb7f25611f1 /src/core/utils/AsyncUtils.cpp | |
parent | fix: slove discovered faults and bugs (diff) | |
download | GpgFrontend-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.cpp | 28 |
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 |