~aleteoryx/muditaos

d0c5f08c88ec4852e2877af6808ca35df064c388 — Piotr Tański 4 years ago e942a94
[EGD-7528] Fix for removing SMS drafts

SMS drafts are now properly removed.
They will not be displayed anymore once the SMS is sent from the thread.
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;
    };