diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp --- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp +++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp @@ -62,7 +62,8 @@ promise->resolve(std::move(draft)); }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -87,7 +88,8 @@ } }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -117,7 +119,8 @@ } }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -157,7 +160,8 @@ promise->resolve(std::move(jsiDrafts)); }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -179,7 +183,8 @@ promise->resolve(jsi::Value::undefined()); }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -309,7 +314,8 @@ promise->resolve(std::move(jsiMessages)); }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -400,7 +406,8 @@ } }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -432,7 +439,7 @@ jsi::Value CommCoreModule::getAllThreads(jsi::Runtime &rt) { return createPromiseAsJSIValue( rt, [=](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([=, &innerRt]() { + taskType job = [=, &innerRt]() { std::string error; std::vector threadsVector; size_t numThreads; @@ -511,7 +518,9 @@ } promise->resolve(std::move(jsiThreads)); }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); }; @@ -695,7 +704,7 @@ } return createPromiseAsJSIValue( rt, [=](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([=]() { + taskType job = [=]() { std::string error = operationsError; if (!error.size()) { try { @@ -716,7 +725,9 @@ promise->resolve(jsi::Value::undefined()); } }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -759,7 +770,7 @@ return createPromiseAsJSIValue( rt, [=](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([=]() { + taskType job = [=]() { crypto::Persist persist; std::string error; try { @@ -791,22 +802,25 @@ if (persist.isEmpty()) { crypto::Persist newPersist = this->cryptoModule->storeAsB64(storedSecretKey.value()); - GlobalDBSingleton::instance.scheduleOrRun([=]() { - std::string error; - try { - DatabaseManager::getQueryExecutor().storeOlmPersistData( - newPersist); - } catch (std::system_error &e) { - error = e.what(); - } - this->jsInvoker_->invokeAsync([=]() { - if (error.size()) { - promise->reject(error); - return; - } - promise->resolve(jsi::Value::undefined()); - }); - }); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + [=]() { + std::string error; + try { + DatabaseManager::getQueryExecutor().storeOlmPersistData( + newPersist); + } catch (std::system_error &e) { + error = e.what(); + } + this->jsInvoker_->invokeAsync([=]() { + if (error.size()) { + promise->reject(error); + return; + } + promise->resolve(jsi::Value::undefined()); + }); + }, + promise, + this->jsInvoker_); } else { this->cryptoModule->restoreFromB64( @@ -820,7 +834,9 @@ }); } }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -906,30 +922,31 @@ rt, [this, notifyToken](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun( - [this, notifyToken, promise]() { - std::string error; - try { - DatabaseManager::getQueryExecutor().setNotifyToken(notifyToken); - } catch (std::system_error &e) { - error = e.what(); - } + taskType job = [this, notifyToken, promise]() { + std::string error; + try { + DatabaseManager::getQueryExecutor().setNotifyToken(notifyToken); + } catch (std::system_error &e) { + error = e.what(); + } - this->jsInvoker_->invokeAsync([error, promise]() { - if (error.size()) { - promise->reject(error); - } else { - promise->resolve(jsi::Value::undefined()); - } - }); - }); + this->jsInvoker_->invokeAsync([error, promise]() { + if (error.size()) { + promise->reject(error); + } else { + promise->resolve(jsi::Value::undefined()); + } + }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } jsi::Value CommCoreModule::clearNotifyToken(jsi::Runtime &rt) { return createPromiseAsJSIValue( rt, [this](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([this, promise]() { + taskType job = [this, promise]() { std::string error; try { DatabaseManager::getQueryExecutor().clearNotifyToken(); @@ -943,7 +960,9 @@ promise->resolve(jsi::Value::undefined()); } }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); }; @@ -954,9 +973,7 @@ rt, [this, currentUserID](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([this, - promise, - currentUserID]() { + taskType job = [this, promise, currentUserID]() { std::string error; try { DatabaseManager::getQueryExecutor().setCurrentUserID(currentUserID); @@ -970,14 +987,16 @@ promise->resolve(jsi::Value::undefined()); } }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } jsi::Value CommCoreModule::getCurrentUserID(jsi::Runtime &rt) { return createPromiseAsJSIValue( rt, [this](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([this, &innerRt, promise]() { + taskType job = [this, &innerRt, promise]() { std::string error; std::string result; try { @@ -992,7 +1011,9 @@ promise->resolve(jsi::String::createFromUtf8(innerRt, result)); } }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } @@ -1033,14 +1054,15 @@ } }); }; - GlobalDBSingleton::instance.scheduleOrRun(job); + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); } jsi::Value CommCoreModule::getDeviceID(jsi::Runtime &rt) { return createPromiseAsJSIValue( rt, [this](jsi::Runtime &innerRt, std::shared_ptr promise) { - GlobalDBSingleton::instance.scheduleOrRun([this, &innerRt, promise]() { + taskType job = [this, &innerRt, promise]() { std::string error; std::string result; try { @@ -1055,7 +1077,9 @@ promise->resolve(jsi::String::createFromUtf8(innerRt, result)); } }); - }); + }; + GlobalDBSingleton::instance.scheduleOrRunCancellable( + job, promise, this->jsInvoker_); }); }