// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "agents/file_indexer/FileIndexerAgent.hpp" #include "agents/settings/SettingsAgent.hpp" #include "service-db/DatabaseAgent.hpp" #include "service-db/DBNotificationMessage.hpp" #include "service-db/DBServiceName.hpp" #include "service-fileindexer/Constants.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class AlarmsDB; class AlarmsRecordInterface; class CalllogDB; class CalllogRecordInterface; class ContactRecordInterface; class ContactsDB; class CountryCodeRecordInterface; class CountryCodesDB; class DatabaseAgent; class NotesDB; class NotesRecordInterface; class NotificationsDB; class NotificationsRecordInterface; class SMSRecordInterface; class SMSTemplateRecordInterface; class SettingsDB; class SmsDB; class ThreadRecordInterface; namespace Quotes { class QuotesAgent; } class ServiceDB : public sys::Service { private: std::unique_ptr smsDB; std::unique_ptr contactsDB; std::unique_ptr alarmsDB; std::unique_ptr notesDB; std::unique_ptr calllogDB; std::unique_ptr countryCodesDB; std::unique_ptr notificationsDB; std::unique_ptr quotesDB; std::unique_ptr smsRecordInterface; std::unique_ptr threadRecordInterface; std::unique_ptr smsTemplateRecordInterface; std::unique_ptr contactRecordInterface; std::unique_ptr alarmsRecordInterface; std::unique_ptr notesRecordInterface; std::unique_ptr calllogRecordInterface; std::unique_ptr countryCodeRecordInterface; std::unique_ptr notificationsRecordInterface; std::unique_ptr quotesRecordInterface; protected: db::Interface *getInterface(db::Interface::Name interface); std::set> databaseAgents; public: ServiceDB(); ~ServiceDB() override; sys::MessagePointer DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp) override; sys::ReturnCodes InitHandler() override; sys::ReturnCodes DeinitHandler() override; void ProcessCloseReason(sys::CloseReason closeReason) override; sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) final; bool StoreIntoBackup(const std::filesystem::path &backupPath); void sendUpdateNotification(db::Interface::Name interface, db::Query::Type type); }; namespace sys { template <> struct ManifestTraits { static auto GetManifest() -> ServiceManifest { ServiceManifest manifest; manifest.name = service::name::db; #if ENABLE_FILEINDEXER_SERVICE manifest.dependencies = {service::name::file_indexer.data()}; #endif manifest.timeout = std::chrono::minutes{1}; return manifest; } }; } // namespace sys