// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 //! \file #ifndef SWIFT_CORE_CONTEXT_CONTEXTAPPLICATION_PROXY_H #define SWIFT_CORE_CONTEXT_CONTEXTAPPLICATION_PROXY_H #include #include #include #include #include #include "core/context/contextapplication.h" #include "core/corefacadeconfig.h" #include "core/swiftcoreexport.h" #include "misc/statusmessage.h" #include "misc/valuecache.h" // clazy:excludeall=const-signal-or-slot class QDBusConnection; namespace swift::misc { class CGenericDBusInterface; } namespace swift::core { class CCoreFacade; namespace context { //! Application context proxy //! \ingroup dbus class SWIFT_CORE_EXPORT CContextApplicationProxy : public IContextApplication { Q_OBJECT friend class IContextApplication; public: //! Destructor ~CContextApplicationProxy() override = default; public slots: //! \copydoc swift::core::context::IContextApplication::changeSettings void changeSettings(const swift::misc::CValueCachePacket &settings, const swift::misc::CIdentifier &origin) override; //! \copydoc swift::core::context::IContextApplication::getAllSettings swift::misc::CValueCachePacket getAllSettings() const override; //! \copydoc swift::core::context::IContextApplication::getUnsavedSettingsKeys QStringList getUnsavedSettingsKeys() const override; //! \copydoc swift::core::context::IContextApplication::getUnsavedSettingsKeysDescribed swift::core::context::CSettingsDictionary getUnsavedSettingsKeysDescribed() const override; //! \copydoc swift::core::context::IContextApplication::synchronizeLocalSettings void synchronizeLocalSettings() override; //! \copydoc swift::core::context::IContextApplication::saveSettings swift::misc::CStatusMessage saveSettings(const QString &keyPrefix = {}) override; //! \copydoc swift::core::context::IContextApplication::saveSettingsByKey swift::misc::CStatusMessage saveSettingsByKey(const QStringList &keys) override; //! \copydoc swift::core::context::IContextApplication::loadSettings swift::misc::CStatusMessage loadSettings() override; //! \copydoc swift::core::context::IContextApplication::registerHotkeyActions void registerHotkeyActions(const QStringList &actions, const swift::misc::CIdentifier &origin) override; //! \copydoc swift::core::context::IContextApplication::callHotkeyActionRemotely void callHotkeyActionRemotely(const QString &action, bool argument, const swift::misc::CIdentifier &origin) override; //! \copydoc swift::core::context::IContextApplication::registerApplication swift::misc::CIdentifier registerApplication(const swift::misc::CIdentifier &application) override; //! \copydoc swift::core::context::IContextApplication::unregisterApplication void unregisterApplication(const swift::misc::CIdentifier &application) override; //! \copydoc swift::core::context::IContextApplication::getRegisteredApplications swift::misc::CIdentifierList getRegisteredApplications() const override; //! \copydoc swift::core::context::IContextApplication::getApplicationIdentifier swift::misc::CIdentifier getApplicationIdentifier() const override; //! Used to test if there is a core running? //! \note creates and connects via proxy object, so not meant for very frequent tests //! \sa CDBusServer::isDBusAvailable as lightweight, but less accurate alternative static bool isContextResponsive(const QString &dbusAddress, QString &msg, int timeoutMs = 1500); protected: //! Constructor CContextApplicationProxy(CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime) : IContextApplication(mode, runtime) {} //! DBus version constructor CContextApplicationProxy(const QString &serviceName, QDBusConnection &connection, CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime); private: swift::misc::CGenericDBusInterface *m_dBusInterface = nullptr; //!< interface QSet m_proxyPingIdentifiers; //!< automatically ping the implementing side QTimer m_pingTimer; //! Relay connection signals to local signals void relaySignals(const QString &serviceName, QDBusConnection &connection); //! Ping/heartbeat identifiers void reRegisterApplications(); void processRemoteHotkeyActionCall(const QString &action, bool argument, const swift::misc::CIdentifier &origin); }; } // namespace context } // namespace swift::core #endif // SWIFT_CORE_CONTEXT_CONTEXTAPPLICATION_PROXY_H