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) {