diff --git a/src/blackcore/context_application.cpp b/src/blackcore/context_application.cpp index 34a4ab145..27a98c726 100644 --- a/src/blackcore/context_application.cpp +++ b/src/blackcore/context_application.cpp @@ -4,6 +4,7 @@ #include "blackcore/context_settings.h" #include "blackcore/input_manager.h" #include "blackmisc/statusmessage.h" +#include "blackmisc/loghandler.h" #include #include @@ -34,6 +35,11 @@ namespace BlackCore IContextApplication::IContextApplication(CRuntimeConfig::ContextMode mode, CRuntime *runtime) : CContext(mode, runtime) { + connect(CLogHandler::instance(), &CLogHandler::localMessageLogged, this, [this](const CStatusMessage &message) + { + this->logMessage(message, {}); + }); + changeSettings(IContextSettings::SettingsHotKeys); } diff --git a/src/blackcore/context_application.h b/src/blackcore/context_application.h index 3345bb011..b53ef1edd 100644 --- a/src/blackcore/context_application.h +++ b/src/blackcore/context_application.h @@ -11,6 +11,7 @@ #include "blackcore/context.h" #include "blackmisc/statusmessagelist.h" #include "blackmisc/eveventhotkeyfunction.h" +#include "blackmisc/evoriginator.h" #include #include @@ -86,7 +87,13 @@ namespace BlackCore //! A component changes void componentChanged(uint component, uint action); + //! A log message was logged + void messageLogged(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin); + public slots: + //! Log a log message + //! \note Not pure because it can be called from the base class constructor. + virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin) { Q_UNUSED(message); Q_UNUSED(origin); } //! \brief Ping a token, used to check if application is alive virtual qint64 ping(qint64 token) const = 0; diff --git a/src/blackcore/context_application_impl.cpp b/src/blackcore/context_application_impl.cpp index 4e07b8f3d..557233994 100644 --- a/src/blackcore/context_application_impl.cpp +++ b/src/blackcore/context_application_impl.cpp @@ -8,6 +8,7 @@ #include "input_manager.h" #include "blackmisc/settingutilities.h" #include "blackmisc/logmessage.h" +#include "blackmisc/loghandler.h" #include #include @@ -22,6 +23,18 @@ namespace BlackCore IContextApplication(mode, runtime) {} + /* + * Log a message + */ + void CContextApplication::logMessage(const CStatusMessage &message, const Event::COriginator &origin) + { + if (!origin.isFromSameProcess()) + { + CLogHandler::instance()->logRemoteMessage(message); + } + emit this->messageLogged(message, origin); + } + /* * Ping, is DBus alive? */ diff --git a/src/blackcore/context_application_impl.h b/src/blackcore/context_application_impl.h index 59d3c0777..511eb1715 100644 --- a/src/blackcore/context_application_impl.h +++ b/src/blackcore/context_application_impl.h @@ -25,6 +25,9 @@ namespace BlackCore friend class IContextApplication; public slots: + //! \copydoc IContextApplication::logMessage + virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin) override; + //! \copydoc IContextApplication::ping() virtual qint64 ping(qint64 token) const override; diff --git a/src/blackcore/context_application_proxy.cpp b/src/blackcore/context_application_proxy.cpp index 9a143e391..6ba5e0333 100644 --- a/src/blackcore/context_application_proxy.cpp +++ b/src/blackcore/context_application_proxy.cpp @@ -6,6 +6,7 @@ #include "blackcore/context_application_proxy.h" #include "blackcore/input_manager.h" #include "blackmisc/blackmiscfreefunctions.h" +#include "blackmisc/loghandler.h" #include #include #include @@ -25,6 +26,14 @@ namespace BlackCore CInputManager *inputManager = CInputManager::getInstance(); connect(inputManager, &CInputManager::hotkeyFuncEvent, this, &CContextApplicationProxy::processHotkeyFuncEvent); inputManager->setEventForwarding(true); + + connect(this, &IContextApplication::messageLogged, this, [](const CStatusMessage &message, const Event::COriginator &origin) + { + if (!origin.isFromSameProcess()) + { + CLogHandler::instance()->logRemoteMessage(message); + } + }); } /* @@ -34,11 +43,22 @@ namespace BlackCore { // signals originating from impl side bool s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(), + "messageLogged", this, SIGNAL(messageLogged(BlackMisc::CStatusMessage,BlackMisc::Event::COriginator))); + Q_ASSERT(s); + s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(), "componentChanged", this, SIGNAL(componentChanged(uint, uint))); Q_ASSERT(s); } + /* + * Log a message + */ + void CContextApplicationProxy::logMessage(const CStatusMessage &message, const Event::COriginator &origin) + { + this->m_dBusInterface->callDBus(QLatin1Literal("logMessage"), message, origin); + } + /* * Ping, is DBus alive? */ diff --git a/src/blackcore/context_application_proxy.h b/src/blackcore/context_application_proxy.h index 1e6713a27..8b3839a7f 100644 --- a/src/blackcore/context_application_proxy.h +++ b/src/blackcore/context_application_proxy.h @@ -24,6 +24,9 @@ namespace BlackCore virtual ~CContextApplicationProxy() {} public slots: + //! \copydoc IContextApplication::logMessage + virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::Event::COriginator &origin) override; + //! \copydoc IContextApplication::ping() virtual qint64 ping(qint64 token) const override;