~aleteoryx/muditaos

0eb1fd03e56cedef8df68eb04043db1dd6e327b3 — Przemyslaw Brudny 5 years ago 491e4fb
[EGD-3985] Removed unique_ptr to vector for DatabaseModel updateRecords Method.
27 files changed, 37 insertions(+), 57 deletions(-)

M changelog.md
M module-apps/DatabaseModel.hpp
M module-apps/application-calendar/models/AllEventsModel.cpp
M module-apps/application-calendar/models/AllEventsModel.hpp
M module-apps/application-calllog/CalllogModel.cpp
M module-apps/application-calllog/CalllogModel.hpp
M module-apps/application-calllog/windows/CallLogMainWindow.cpp
M module-apps/application-messages/models/BaseThreadsRecordModel.cpp
M module-apps/application-messages/models/BaseThreadsRecordModel.hpp
M module-apps/application-messages/models/SMSThreadModel.cpp
M module-apps/application-messages/models/SMSThreadModel.hpp
M module-apps/application-messages/models/ThreadsModel.cpp
M module-apps/application-messages/models/ThreadsSearchResultsModel.cpp
M module-apps/application-messages/widgets/SMSTemplateModel.cpp
M module-apps/application-messages/widgets/SMSTemplateModel.hpp
M module-apps/application-messages/windows/SMSTemplatesWindow.cpp
M module-apps/application-notes/NotesModel.cpp
M module-apps/application-notes/NotesModel.hpp
M module-apps/application-notes/windows/NotesMainWindow.cpp
M module-apps/application-phonebook/models/PhonebookModel.cpp
M module-apps/application-phonebook/models/PhonebookModel.hpp
M module-apps/application-phonebook/windows/PhonebookMainWindow.cpp
M module-db/Interface/ThreadRecord.cpp
M module-db/Interface/ThreadRecord.hpp
M module-db/queries/messages/sms/QuerySMSGetForList.hpp
M module-db/tests/ThreadRecord_tests.cpp
M module-gui/gui/widgets/ListView.cpp
M changelog.md => changelog.md +1 -0
@@ 21,6 21,7 @@
* `[db]` Fixed database corruption issues on abrupt phone reset.
* `[audio]` Fix audio looping.
* `[phonebook]` Fix phone freezing when contacts database is empty.
* `[phonebook]` Contacts list rebuilding in place not from start.

### Other


M module-apps/DatabaseModel.hpp => module-apps/DatabaseModel.hpp +4 -4
@@ 29,14 29,14 @@ namespace app
            clear();
        }

        virtual bool updateRecords(std::unique_ptr<std::vector<T>> dbRecords)
        virtual bool updateRecords(std::vector<T> dbRecords)
        {
            modelIndex = 0;
            records.clear();

            if (dbRecords != nullptr) {
                for (uint32_t i = 0; i < dbRecords->size(); i++) {
                    records.push_back(std::make_shared<T>(dbRecords.get()->operator[](i)));
            if (!dbRecords.empty()) {
                for (uint32_t i = 0; i < dbRecords.size(); i++) {
                    records.push_back(std::make_shared<T>(dbRecords[i]));
                }

                return true;

M module-apps/application-calendar/models/AllEventsModel.cpp => module-apps/application-calendar/models/AllEventsModel.cpp +4 -5
@@ 52,7 52,7 @@ gui::ListItem *AllEventsModel::getItem(gui::Order order)
    return item;
}

bool AllEventsModel::updateRecords(std::unique_ptr<std::vector<EventsRecord>> records)
bool AllEventsModel::updateRecords(std::vector<EventsRecord> records)
{
    DatabaseModel::updateRecords(std::move(records));
    list->onProviderDataUpdate();


@@ 64,14 64,13 @@ auto AllEventsModel::handleQueryResponse(db::QueryResult *queryResult) -> bool
    auto response = dynamic_cast<db::query::events::GetAllLimitedResult *>(queryResult);
    assert(response != nullptr);

    auto records_data = response->getResult();
    auto records = *response->getResult();
    list->setElementsCount(*response->getCountResult());
    auto records = std::make_unique<std::vector<EventsRecord>>(records_data->begin(), records_data->end());

    auto app = dynamic_cast<app::ApplicationCalendar *>(application);
    assert(application != nullptr);

    if (records->empty()) {
    if (records.empty()) {

        if (app->getEquivalentToEmptyWindow() == EquivalentWindow::AllEventsWindow) {
            app->switchToNoEventsWindow(utils::localize.get("app_calendar_title_main"));


@@ 79,7 78,7 @@ auto AllEventsModel::handleQueryResponse(db::QueryResult *queryResult) -> bool
    }
    auto eventShift = app->getEventShift();
    if (eventShift) {
        for (auto &record : *records) {
        for (auto &record : records) {
            record.date_from += hours(eventShift);
            record.date_till += hours(eventShift);
        }

M module-apps/application-calendar/models/AllEventsModel.hpp => module-apps/application-calendar/models/AllEventsModel.hpp +1 -1
@@ 14,7 14,7 @@ class AllEventsModel : public app::DatabaseModel<EventsRecord>, public gui::List
    virtual ~AllEventsModel() override = default;

    void requestRecords(const uint32_t offset, const uint32_t limit) override;
    bool updateRecords(std::unique_ptr<std::vector<EventsRecord>> records) override;
    bool updateRecords(std::vector<EventsRecord> records) override;

    auto handleQueryResponse(db::QueryResult *) -> bool;
    // virtual methods for ListViewProvider

M module-apps/application-calllog/CalllogModel.cpp => module-apps/application-calllog/CalllogModel.cpp +1 -9
@@ 1,11 1,3 @@
/*
 * @file CalllogModel.cpp
 * @author Aleksander Rudnik (aleksander.rudnik@mudita.com)
 * @date 23.09.2019
 * @brief Call Log Model
 * @copyright Copyright (C) 2019 mudita.com
 * @details
 */
#include "CalllogModel.hpp"
#include "InputEvent.hpp"
#include "ListView.hpp"


@@ 31,7 23,7 @@ void CalllogModel::requestRecords(const uint32_t offset, const uint32_t limit)
    DBServiceAPI::CalllogGetLimitOffset(application, offset, limit);
}

bool CalllogModel::updateRecords(std::unique_ptr<std::vector<CalllogRecord>> records)
bool CalllogModel::updateRecords(std::vector<CalllogRecord> records)
{
#if DEBUG_DB_MODEL_DATA == 1
    LOG_DEBUG("Offset: %" PRIu32 ", Limit: %" PRIu32 " Count: %" PRIu32 "", offset, limit, count);

M module-apps/application-calllog/CalllogModel.hpp => module-apps/application-calllog/CalllogModel.hpp +1 -1
@@ 26,7 26,7 @@ class CalllogModel : public app::DatabaseModel<CalllogRecord>, public gui::ListI
    CalllogModel(app::Application *app);

    // virtual methods
    bool updateRecords(std::unique_ptr<std::vector<CalllogRecord>> records) override;
    bool updateRecords(std::vector<CalllogRecord> records) override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;

    // virtual methods for ListViewProvider

M module-apps/application-calllog/windows/CallLogMainWindow.cpp => module-apps/application-calllog/windows/CallLogMainWindow.cpp +1 -5
@@ 70,11 70,7 @@ namespace gui
    bool CallLogMainWindow::onDatabaseMessage(sys::Message *msgl)
    {
        DBCalllogResponseMessage *msg = reinterpret_cast<DBCalllogResponseMessage *>(msgl);
        if (calllogModel->updateRecords(std::move(msg->records))) {
            return true;
        }

        return false;
        return calllogModel->updateRecords(std::move(*msg->records));
    }

} /* namespace gui */

M module-apps/application-messages/models/BaseThreadsRecordModel.cpp => module-apps/application-messages/models/BaseThreadsRecordModel.cpp +1 -1
@@ 13,7 13,7 @@ unsigned int BaseThreadsRecordModel::requestRecordsCount()
    return recordsCount;
}

bool BaseThreadsRecordModel::updateRecords(std::unique_ptr<std::vector<ThreadRecord>> records)
bool BaseThreadsRecordModel::updateRecords(std::vector<ThreadRecord> records)
{
    DatabaseModel::updateRecords(std::move(records));
    list->onProviderDataUpdate();

M module-apps/application-messages/models/BaseThreadsRecordModel.hpp => module-apps/application-messages/models/BaseThreadsRecordModel.hpp +1 -1
@@ 15,7 15,7 @@ class BaseThreadsRecordModel : public app::DatabaseModel<ThreadRecord>, public g
    BaseThreadsRecordModel(app::Application *app);

    unsigned int requestRecordsCount() override;
    bool updateRecords(std::unique_ptr<std::vector<ThreadRecord>> records) override;
    bool updateRecords(std::vector<ThreadRecord> records) override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;

    app::Application *getApplication(void)

M module-apps/application-messages/models/SMSThreadModel.cpp => module-apps/application-messages/models/SMSThreadModel.cpp +2 -4
@@ 54,7 54,7 @@ void SMSThreadModel::requestRecords(uint32_t offset, uint32_t limit)
    DBServiceAPI::GetQuery(application, db::Interface::Name::SMS, std::move(query));
}

bool SMSThreadModel::updateRecords(std::unique_ptr<std::vector<SMSRecord>> records)
bool SMSThreadModel::updateRecords(std::vector<SMSRecord> records)
{
    DatabaseModel::updateRecords(std::move(records));
    list->onProviderDataUpdate();


@@ 85,9 85,7 @@ auto SMSThreadModel::handleQueryResponse(db::QueryResult *queryResult) -> bool
        smsInput->displayDraftMessage();
    }

    auto records = std::make_unique<std::vector<SMSRecord>>(records_data.begin(), records_data.end());

    return this->updateRecords(std::move(records));
    return this->updateRecords(std::move(records_data));
}

void SMSThreadModel::addReturnNumber()

M module-apps/application-messages/models/SMSThreadModel.hpp => module-apps/application-messages/models/SMSThreadModel.hpp +1 -1
@@ 23,7 23,7 @@ class SMSThreadModel : public app::DatabaseModel<SMSRecord>, public gui::ListIte
    auto handleQueryResponse(db::QueryResult *) -> bool;

    unsigned int requestRecordsCount() override;
    bool updateRecords(std::unique_ptr<std::vector<SMSRecord>> records) override;
    bool updateRecords(std::vector<SMSRecord> records) override;
    void requestRecords(uint32_t offset, uint32_t limit) override;
    unsigned int getMinimalItemHeight() const override;
    gui::ListItem *getItem(gui::Order order) override;

M module-apps/application-messages/models/ThreadsModel.cpp => module-apps/application-messages/models/ThreadsModel.cpp +2 -1
@@ 6,6 6,7 @@
#include "application-messages/widgets/ThreadItem.hpp"
#include "application-messages/windows/ThreadWindowOptions.hpp"
#include <module-services/service-db/api/DBServiceAPI.hpp>
#include <module-db/queries/messages/threads/QueryThreadsGet.hpp>

ThreadsModel::ThreadsModel(app::Application *app) : BaseThreadsRecordModel(app)
{}


@@ 67,6 68,6 @@ auto ThreadsModel::handleQueryResponse(db::QueryResult *queryResult) -> bool
    assert(msgResponse != nullptr);

    auto records_data = msgResponse->getResults();
    auto records      = std::make_unique<std::vector<ThreadRecord>>(records_data.begin(), records_data.end());
    auto records      = std::vector<ThreadRecord>(records_data.begin(), records_data.end());
    return this->updateRecords(std::move(records));
}

M module-apps/application-messages/models/ThreadsSearchResultsModel.cpp => module-apps/application-messages/models/ThreadsSearchResultsModel.cpp +1 -1
@@ 64,7 64,7 @@ namespace gui::model
        assert(msgResponse != nullptr);

        auto records_data = msgResponse->getResults();
        auto records      = std::make_unique<std::vector<ThreadRecord>>(records_data.begin(), records_data.end());
        auto records      = std::vector<ThreadRecord>(records_data.begin(), records_data.end());

        if (msgResponse->getMax() == 0) {


M module-apps/application-messages/widgets/SMSTemplateModel.cpp => module-apps/application-messages/widgets/SMSTemplateModel.cpp +1 -1
@@ 23,7 23,7 @@ void SMSTemplateModel::requestRecords(const uint32_t offset, const uint32_t limi
    DBServiceAPI::SMSTemplateGetLimitOffset(application, offset, limit);
}

bool SMSTemplateModel::updateRecords(std::unique_ptr<std::vector<SMSTemplateRecord>> records)
bool SMSTemplateModel::updateRecords(std::vector<SMSTemplateRecord> records)
{
    if (DatabaseModel::updateRecords(std::move(records))) {
        list->onProviderDataUpdate();

M module-apps/application-messages/widgets/SMSTemplateModel.hpp => module-apps/application-messages/widgets/SMSTemplateModel.hpp +1 -1
@@ 14,7 14,7 @@ class SMSTemplateModel : public app::DatabaseModel<SMSTemplateRecord>, public gu
    virtual ~SMSTemplateModel() = default;

    unsigned int requestRecordsCount() override;
    bool updateRecords(std::unique_ptr<std::vector<SMSTemplateRecord>> records) override;
    bool updateRecords(std::vector<SMSTemplateRecord> records) override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;

    unsigned int getMinimalItemHeight() const override;

M module-apps/application-messages/windows/SMSTemplatesWindow.cpp => module-apps/application-messages/windows/SMSTemplatesWindow.cpp +1 -5
@@ 104,11 104,7 @@ namespace gui
    bool SMSTemplatesWindow::onDatabaseMessage(sys::Message *msgl)
    {
        auto msg = dynamic_cast<DBSMSTemplateResponseMessage *>(msgl);
        if (msg && smsTemplateModel->updateRecords(std::move(msg->records))) {
            return true;
        }

        return false;
        return msg && smsTemplateModel->updateRecords(*msg->records);
    }

} /* namespace gui */

M module-apps/application-notes/NotesModel.cpp => module-apps/application-notes/NotesModel.cpp +1 -1
@@ 26,7 26,7 @@ void NotesModel::requestRecords(const uint32_t offset, const uint32_t limit)
    DBServiceAPI::NotesGetLimitOffset(application, offset, limit);
}

bool NotesModel::updateRecords(std::unique_ptr<std::vector<NotesRecord>> records)
bool NotesModel::updateRecords(std::vector<NotesRecord> records)
{
#if DEBUG_DB_MODEL_DATA == 1
    LOG_DEBUG("Offset: %" PRIu32 ", Limit: %" PRIu32 " Count: %" PRIu32 "", offset, limit, count);

M module-apps/application-notes/NotesModel.hpp => module-apps/application-notes/NotesModel.hpp +1 -1
@@ 26,7 26,7 @@ class NotesModel : public app::DatabaseModel<NotesRecord>, public gui::ListItemP
    NotesModel(app::Application *app);

    // virtual methods
    bool updateRecords(std::unique_ptr<std::vector<NotesRecord>> records) override;
    bool updateRecords(std::vector<NotesRecord> records) override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;

    // virtual methods for ListViewProvider

M module-apps/application-notes/windows/NotesMainWindow.cpp => module-apps/application-notes/windows/NotesMainWindow.cpp +1 -4
@@ 85,10 85,7 @@ namespace gui
    bool NotesMainWindow::onDatabaseMessage(sys::Message *msgl)
    {
        DBNotesResponseMessage *msg = reinterpret_cast<DBNotesResponseMessage *>(msgl);
        if (notesModel->updateRecords(std::move(msg->records)))
            return true;

        return false;
        return notesModel->updateRecords(std::move(*msg->records));
    }

} /* namespace gui */

M module-apps/application-phonebook/models/PhonebookModel.cpp => module-apps/application-phonebook/models/PhonebookModel.cpp +2 -2
@@ 85,7 85,7 @@ auto PhonebookModel::requestLetterMap() -> ContactsMapData
    return contactMapData;
}

auto PhonebookModel::updateRecords(std::unique_ptr<std::vector<ContactRecord>> records) -> bool
auto PhonebookModel::updateRecords(std::vector<ContactRecord> records) -> bool
{

#if DEBUG_DB_MODEL_DATA == 1


@@ 170,7 170,7 @@ auto PhonebookModel::handleQueryResponse(db::QueryResult *queryResult) -> bool
    auto contactsResponse = dynamic_cast<db::query::ContactGetResult *>(queryResult);
    assert(contactsResponse != nullptr);

    auto records = std::make_unique<std::vector<ContactRecord>>(contactsResponse->getRecords());
    auto records = std::vector<ContactRecord>(contactsResponse->getRecords());

    return this->updateRecords(std::move(records));
}

M module-apps/application-phonebook/models/PhonebookModel.hpp => module-apps/application-phonebook/models/PhonebookModel.hpp +1 -1
@@ 31,7 31,7 @@ class PhonebookModel : public app::DatabaseModel<ContactRecord>, public gui::Lis
    ~PhonebookModel() override = default;

    // virtual methods from DatabaseModel
    auto updateRecords(std::unique_ptr<std::vector<ContactRecord>> records) -> bool override;
    auto updateRecords(std::vector<ContactRecord> records) -> bool override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;
    auto requestLetterMap() -> ContactsMapData;


M module-apps/application-phonebook/windows/PhonebookMainWindow.cpp => module-apps/application-phonebook/windows/PhonebookMainWindow.cpp +4 -4
@@ 62,6 62,10 @@ namespace gui
                                                  phonebookModel);
        setFocusItem(contactsList);

        phonebookModel->letterMap = phonebookModel->requestLetterMap();
        phonebookModel->setDisplayMode(static_cast<uint32_t>(ContactDisplayMode::SortedByLetter));
        contactsList->rebuildList(style::listview::RebuildType::Full);

        bottomBar->setActive(BottomBar::Side::LEFT, true);
        bottomBar->setActive(BottomBar::Side::CENTER, true);
        bottomBar->setActive(BottomBar::Side::RIGHT, true);


@@ 91,10 95,6 @@ namespace gui
    {
        LOG_INFO("onBeforeShow");

        phonebookModel->letterMap = phonebookModel->requestLetterMap();
        phonebookModel->setDisplayMode(static_cast<uint32_t>(ContactDisplayMode::SortedByLetter));
        contactsList->rebuildList(style::listview::RebuildType::Full, 0);

        auto contactRequest = dynamic_cast<PhonebookSearchReuqest *>(data);
        requestedSearch     = contactRequest != nullptr;
        if (requestedSearch) {

M module-db/Interface/ThreadRecord.cpp => module-db/Interface/ThreadRecord.cpp +1 -0
@@ 6,6 6,7 @@
#include <queries/messages/threads/QueryThreadGetByNumber.hpp>
#include <queries/messages/threads/QueryThreadGetByContactID.hpp>
#include <queries/messages/threads/QueryThreadRemove.hpp>
#include <queries/messages/threads/QueryThreadsGet.hpp>

#include <cassert>
#include <log/log.hpp>

M module-db/Interface/ThreadRecord.hpp => module-db/Interface/ThreadRecord.hpp +0 -1
@@ 5,7 5,6 @@
#include "module-db/Databases/ContactsDB.hpp"
#include "module-db/Common/Common.hpp"
#include "module-db/queries/messages/threads/QueryThreadsSearch.hpp"
#include "module-db/queries/messages/threads/QueryThreadsGet.hpp"
#include "module-db/queries/messages/threads/QueryThreadMarkAsRead.hpp"
#include <PhoneNumber.hpp>


M module-db/queries/messages/sms/QuerySMSGetForList.hpp => module-db/queries/messages/sms/QuerySMSGetForList.hpp +0 -1
@@ 1,6 1,5 @@
#pragma once

#include <Tables/ThreadsTable.hpp>
#include <Common/Query.hpp>
#include <string>
#include "Interface/SMSRecord.hpp"

M module-db/tests/ThreadRecord_tests.cpp => module-db/tests/ThreadRecord_tests.cpp +1 -0
@@ 12,6 12,7 @@
#include "queries/messages/threads/QueryThreadGetByContactID.hpp"
#include "queries/messages/threads/QueryThreadGetByNumber.hpp"
#include "queries/messages/threads/QueryThreadRemove.hpp"
#include "queries/messages/threads/QueryThreadsGet.hpp"
#include "queries/messages/sms/QuerySMSGetLastByThreadID.hpp"
#include "vfs.hpp"


M module-gui/gui/widgets/ListView.cpp => module-gui/gui/widgets/ListView.cpp +1 -1
@@ 341,10 341,10 @@ namespace gui
        setFocusItem(body);

        if (storedFocusIndex != 0) {

            if (!body->setFocusOnElement(storedFocusIndex)) {
                body->setFocusOnLastElement();
            }
            storedFocusIndex = 0;
        }

        if (focusOnLastItem) {