M module-services/service-db/ServiceDBCommon.cpp => module-services/service-db/ServiceDBCommon.cpp +21 -40
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <service-db/DBNotificationMessage.hpp>
@@ 9,9 9,12 @@
#include <purefs/filesystem_paths.hpp>
#include <log/log.hpp>
-static const auto service_db_stack = 1024 * 24;
+namespace
+{
+ constexpr auto serviceDbStackSize = 1024 * 24;
+}
-ServiceDBCommon::ServiceDBCommon() : sys::Service(service::name::db, "", service_db_stack, sys::ServicePriority::Idle)
+ServiceDBCommon::ServiceDBCommon() : sys::Service(service::name::db, "", serviceDbStackSize, sys::ServicePriority::Idle)
{
LOG_INFO("[ServiceDB] Initializing");
}
@@ 25,17 28,18 @@ db::Interface *ServiceDBCommon::getInterface(db::Interface::Name interface)
sys::MessagePointer ServiceDBCommon::DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp)
{
std::shared_ptr<sys::ResponseMessage> responseMsg;
- auto type = static_cast<MessageType>(msgl->messageType);
+ const auto type = static_cast<MessageType>(msgl->messageType);
switch (type) {
case MessageType::DBQuery: {
- auto msg = dynamic_cast<db::QueryMessage *>(msgl);
+ const auto msg = dynamic_cast<db::QueryMessage *>(msgl);
assert(msg);
- db::Interface *interface = getInterface(msg->getInterface());
+
+ const auto interface = getInterface(msg->getInterface());
assert(interface != nullptr);
- auto query = msg->getQuery();
- auto queryType = query->type;
- auto result = interface->runQuery(std::move(query));
- std::optional<uint32_t> id;
+
+ const std::shared_ptr<db::Query> query(std::move(msg->getQuery()));
+ auto result = interface->runQuery(query);
+ std::optional<std::uint32_t> id;
if (result != nullptr) {
id = result->getRecordID();
}
@@ 43,7 47,7 @@ sys::MessagePointer ServiceDBCommon::DataReceivedHandler(sys::DataMessage *msgl,
LOG_WARN("There is no response associated with query: %s!", query ? query->debugInfo().c_str() : "");
}
responseMsg = std::make_shared<db::QueryResponse>(std::move(result));
- sendUpdateNotification(msg->getInterface(), queryType, id);
+ sendUpdateNotification(msg->getInterface(), query->type, id);
} break;
default:
@@ 68,37 72,14 @@ sys::ReturnCodes ServiceDBCommon::InitHandler()
sys::ReturnCodes ServiceDBCommon::DeinitHandler()
{
- Database::deinitialize();
- return sys::ReturnCodes::Success;
-}
-
-void ServiceDBCommon::ProcessCloseReason(sys::CloseReason closeReason)
-{
- if (closeReason == sys::CloseReason::FactoryReset) {
- for (auto &dbAgent : databaseAgents) {
- dbAgent->unRegisterMessages();
- }
- factoryReset();
+ for (auto &dbAgent : databaseAgents) {
+ dbAgent->unRegisterMessages();
}
-}
-void ServiceDBCommon::factoryReset() const
-{
- constexpr std::array fileExtensions = {".db", ".db-journal", ".db-wal"};
-
- LOG_INFO("Performing DB factory reset...");
- const auto userOSPath = purefs::dir::getUserDiskPath();
- for (const auto &f : std::filesystem::directory_iterator(userOSPath)) {
- if (const auto it = std::find(fileExtensions.begin(), fileExtensions.end(), f.path().extension());
- it != fileExtensions.end()) {
- if (const auto removeStatus = std::filesystem::remove(f.path()); !removeStatus) {
- LOG_ERROR("Unable to delete file: %s", f.path().c_str());
- }
- else {
- LOG_INFO("File deleted: %s", f.path().c_str());
- }
- }
+ if (const auto isSuccess = Database::deinitialize(); !isSuccess) {
+ return sys::ReturnCodes::Failure;
}
+ return sys::ReturnCodes::Success;
}
sys::ReturnCodes ServiceDBCommon::SwitchPowerModeHandler(const sys::ServicePowerMode mode)
@@ 109,7 90,7 @@ sys::ReturnCodes ServiceDBCommon::SwitchPowerModeHandler(const sys::ServicePower
void ServiceDBCommon::sendUpdateNotification(db::Interface::Name interface,
db::Query::Type type,
- std::optional<uint32_t> recordId)
+ std::optional<std::uint32_t> recordId)
{
auto notificationMessage = std::make_shared<db::NotificationMessage>(interface, type, recordId);
bus.sendMulticast(notificationMessage, sys::BusChannel::ServiceDBNotifications);
M module-services/service-db/include/service-db/ServiceDBCommon.hpp => module-services/service-db/include/service-db/ServiceDBCommon.hpp +2 -7
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 11,9 11,6 @@
class ServiceDBCommon : public sys::Service
{
- private:
- void factoryReset() const;
-
protected:
virtual db::Interface *getInterface(db::Interface::Name interface);
std::set<std::unique_ptr<DatabaseAgent>> databaseAgents;
@@ 27,9 24,7 @@ class ServiceDBCommon : public sys::Service
sys::ReturnCodes DeinitHandler() override;
- void ProcessCloseReason(sys::CloseReason closeReason) override;
-
- sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) final;
+ sys::ReturnCodes SwitchPowerModeHandler(sys::ServicePowerMode mode) final;
void sendUpdateNotification(db::Interface::Name interface, db::Query::Type type, std::optional<uint32_t> recordId);
};
M products/PurePhone/services/db/ServiceDB.cpp => products/PurePhone/services/db/ServiceDB.cpp +12 -11
@@ 76,6 76,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
if (responseMsg) {
return responseMsg;
}
+
auto type = static_cast<MessageType>(msgl->messageType);
switch (type) {
@@ 85,7 86,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactAdd: {
auto time = utils::time::Scoped("DBContactAdd");
- DBContactMessage *msg = reinterpret_cast<DBContactMessage *>(msgl);
+ auto msg = static_cast<DBContactMessage *>(msgl);
auto ret = contactRecordInterface->Add(msg->record);
auto record = std::make_unique<std::vector<ContactRecord>>();
record->push_back(msg->record);
@@ 96,7 97,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactGetByID: {
auto time = utils::time::Scoped("DBContactGetByID");
- DBContactMessage *msg = reinterpret_cast<DBContactMessage *>(msgl);
+ auto msg = static_cast<DBContactMessage *>(msgl);
auto ret = (msg->withTemporary ? contactRecordInterface->GetByIdWithTemporary(msg->record.ID)
: contactRecordInterface->GetByID(msg->record.ID));
auto records = std::make_unique<std::vector<ContactRecord>>();
@@ 107,7 108,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactGetBySpeedDial: {
auto time = utils::time::Scoped("DBContactGetBySpeedDial");
- DBContactMessage *msg = reinterpret_cast<DBContactMessage *>(msgl);
+ auto msg = static_cast<DBContactMessage *>(msgl);
auto ret = contactRecordInterface->GetBySpeedDial(msg->record.speeddial);
responseMsg = std::make_shared<DBContactResponseMessage>(std::move(ret),
true,
@@ 120,7 121,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactMatchByNumber: {
auto time = utils::time::Scoped("DBContactMatchByNumber");
- auto *msg = dynamic_cast<DBContactNumberMessage *>(msgl);
+ auto msg = static_cast<DBContactNumberMessage *>(msgl);
auto ret = contactRecordInterface->MatchByNumber(msg->numberView);
if (ret.has_value()) {
@@ 135,7 136,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBMatchContactNumberBesidesOfContactID: {
auto time = utils::time::Scoped("DBMatchContactNumberBesidesOfContactID");
- auto *msg = dynamic_cast<DBMatchContactNumberBesidesOfContactIDMessage *>(msgl);
+ auto msg = static_cast<DBMatchContactNumberBesidesOfContactIDMessage *>(msgl);
auto ret = contactRecordInterface->MatchByNumber(msg->numberView,
ContactRecordInterface::CreateTempContact::False,
utils::PhoneNumber::Match::POSSIBLE,
@@ 153,7 154,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactMatchByNumberID: {
auto time = utils::time::Scoped("DBContactMatchByNumberID");
- auto *msg = dynamic_cast<DBMatchContactByNumberIDMessage *>(msgl);
+ auto msg = static_cast<DBMatchContactByNumberIDMessage *>(msgl);
auto ret = contactRecordInterface->GetByNumberID(msg->numberID);
if (ret.has_value()) {
responseMsg = std::make_shared<DBContactNumberResponseMessage>(
@@ 166,7 167,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactRemove: {
auto time = utils::time::Scoped("DBContactRemove");
- DBContactMessage *msg = reinterpret_cast<DBContactMessage *>(msgl);
+ auto msg = static_cast<DBContactMessage *>(msgl);
auto ret = contactRecordInterface->RemoveByID(msg->id);
responseMsg = std::make_shared<DBContactResponseMessage>(nullptr, ret);
sendUpdateNotification(db::Interface::Name::Contact, db::Query::Type::Delete, msg->id);
@@ 174,7 175,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBContactUpdate: {
auto time = utils::time::Scoped("DBContactUpdate");
- DBContactMessage *msg = reinterpret_cast<DBContactMessage *>(msgl);
+ auto msg = static_cast<DBContactMessage *>(msgl);
auto ret = contactRecordInterface->Update(msg->record);
responseMsg = std::make_shared<DBContactResponseMessage>(nullptr, ret);
sendUpdateNotification(db::Interface::Name::Contact, db::Query::Type::Update, msg->record.ID);
@@ 186,7 187,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBCalllogAdd: {
auto time = utils::time::Scoped("DBCalllogAdd");
- DBCalllogMessage *msg = reinterpret_cast<DBCalllogMessage *>(msgl);
+ auto msg = static_cast<DBCalllogMessage *>(msgl);
auto record = std::make_unique<std::vector<CalllogRecord>>();
msg->record.ID = DB_ID_NONE;
auto ret = calllogRecordInterface->Add(msg->record);
@@ 202,7 203,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBCalllogRemove: {
auto time = utils::time::Scoped("DBCalllogRemove");
- DBCalllogMessage *msg = reinterpret_cast<DBCalllogMessage *>(msgl);
+ auto msg = static_cast<DBCalllogMessage *>(msgl);
auto ret = calllogRecordInterface->RemoveByID(msg->id);
responseMsg = std::make_shared<DBCalllogResponseMessage>(nullptr, ret);
sendUpdateNotification(db::Interface::Name::Calllog, db::Query::Type::Delete, msg->id);
@@ 210,7 211,7 @@ sys::MessagePointer ServiceDB::DataReceivedHandler(sys::DataMessage *msgl, sys::
case MessageType::DBCalllogUpdate: {
auto time = utils::time::Scoped("DBCalllogUpdate");
- DBCalllogMessage *msg = reinterpret_cast<DBCalllogMessage *>(msgl);
+ auto msg = static_cast<DBCalllogMessage *>(msgl);
auto ret = calllogRecordInterface->Update(msg->record);
responseMsg = std::make_shared<DBCalllogResponseMessage>(nullptr, ret);
sendUpdateNotification(db::Interface::Name::Calllog, db::Query::Type::Update, msg->record.ID);