M module-apps/application-messages/ApplicationMessages.cpp => module-apps/application-messages/ApplicationMessages.cpp +22 -5
@@ 326,8 326,9 @@ namespace app
return succeed;
}
- std::pair<SMSRecord, bool> ApplicationMessages::createDraft(const utils::PhoneNumber::View &number,
- const UTF8 &body)
+ void ApplicationMessages::createDraft(const utils::PhoneNumber::View &number,
+ const UTF8 &body,
+ std::function<void(const SMSRecord &)> onSuccess)
{
assert(!body.empty()); // precondition check.
@@ 338,14 339,30 @@ namespace app
record.date = std::time(nullptr);
using db::query::SMSAdd;
- const auto [success, _] =
- DBServiceAPI::GetQuery(this, db::Interface::Name::SMS, std::make_unique<SMSAdd>(record));
- return std::make_pair(record, success);
+ auto query = std::make_unique<db::query::SMSAdd>(record);
+ auto task = app::AsyncQuery::createFromQuery(std::move(query), db::Interface::Name::SMS);
+ task->setCallback([onSuccess](auto response) {
+ using db::query::SMSAddResult;
+ if (auto result = static_cast<SMSAddResult *>(response); result->succeed()) {
+ if (onSuccess) {
+ onSuccess(result->record);
+ }
+ return true;
+ }
+
+ LOG_ERROR("Failed to add an SMS record to the DB.");
+ return false;
+ });
+ task->execute(this, this);
}
bool ApplicationMessages::removeDraft(const SMSRecord &record)
{
using db::query::SMSRemove;
+ if (!record.isValid()) {
+ LOG_ERROR("Draft SMS is invalid.");
+ return false;
+ }
const auto [succeed, _] =
DBServiceAPI::GetQuery(this, db::Interface::Name::SMS, std::make_unique<SMSRemove>(record.ID));
return succeed;
M module-apps/application-messages/include/application-messages/ApplicationMessages.hpp => module-apps/application-messages/include/application-messages/ApplicationMessages.hpp +3 -1
@@ 55,7 55,9 @@ namespace app
bool ignoreCurrentWindowOnStack = false);
bool handleSendSmsFromThread(const utils::PhoneNumber::View &number, const UTF8 &body);
- std::pair<SMSRecord, bool> createDraft(const utils::PhoneNumber::View &number, const UTF8 &body);
+ void createDraft(const utils::PhoneNumber::View &number,
+ const UTF8 &body,
+ std::function<void(const SMSRecord &)> onSuccess = {});
bool updateDraft(SMSRecord &record, const UTF8 &body);
bool removeDraft(const SMSRecord &record);
M module-apps/application-messages/models/SMSThreadModel.cpp => module-apps/application-messages/models/SMSThreadModel.cpp +1 -2
@@ 103,10 103,9 @@ void SMSThreadModel::addReturnNumber()
auto app = dynamic_cast<app::ApplicationMessages *>(application);
assert(app != nullptr);
assert(smsInput->number != nullptr);
- if (app->handleSendSmsFromThread(*smsInput->number, smsInput->inputText->getText())) {
+ if (!app->handleSendSmsFromThread(*smsInput->number, smsInput->inputText->getText())) {
LOG_ERROR("handleSendSmsFromThread failed");
}
- smsInput->inputText->clear();
smsInput->clearDraftMessage();
return true;
};
M module-apps/application-messages/widgets/SMSInputWidget.cpp => module-apps/application-messages/widgets/SMSInputWidget.cpp +1 -4
@@ 161,10 161,7 @@ namespace gui
app->updateDraft(draft.value(), inputText);
}
else {
- const auto &[draft, success] = app->createDraft(*number, inputText);
- if (success) {
- this->draft = draft;
- }
+ app->createDraft(*number, inputText, [this](const SMSRecord &record) { draft = record; });
}
}
M module-db/queries/messages/sms/QuerySMSAdd.cpp => module-db/queries/messages/sms/QuerySMSAdd.cpp +5 -0
@@ 22,4 22,9 @@ namespace db::query
{
return "SMSAddResult"s;
}
+
+ bool SMSAddResult::succeed() const noexcept
+ {
+ return result;
+ }
} // namespace db::query
M module-db/queries/messages/sms/QuerySMSAdd.hpp => module-db/queries/messages/sms/QuerySMSAdd.hpp +3 -0
@@ 25,6 25,9 @@ namespace db::query
explicit SMSAddResult(const SMSRecord &_record, bool _result);
[[nodiscard]] std::string debugInfo() const override;
+
+ [[nodiscard]] bool succeed() const noexcept;
+
SMSRecord record;
bool result;
};