~aleteoryx/muditaos

c36bfa70d16b44dd8def1933c56e845cf021a71b — Lefucjusz 2 years ago f05106a
[MOS-943] Remove old factory reset mechanism

Removed old factory reset mechanism that is
no longer needed after UDM.
Fixed accessing previously moved variable.
Minor cleanups.
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);