refs #432, register and unregister functions in GUI

* removed old ping functions
* removed old notify functions, replace by new ones
This commit is contained in:
Klaus Basan
2015-05-27 04:09:50 +02:00
parent d9440ad4a6
commit a66cd14031
5 changed files with 81 additions and 96 deletions

View File

@@ -17,7 +17,7 @@
#include "blackmisc/statusmessagelist.h" #include "blackmisc/statusmessagelist.h"
#include "blackmisc/audio/voiceroomlist.h" #include "blackmisc/audio/voiceroomlist.h"
#include "blackmisc/eveventhotkeyfunction.h" #include "blackmisc/eveventhotkeyfunction.h"
#include "blackmisc/originator.h" #include "blackmisc/originatorlist.h"
#include <QObject> #include <QObject>
#include <QReadWriteLock> #include <QReadWriteLock>
@@ -36,9 +36,7 @@ namespace BlackCore
{ {
class CInputManager; class CInputManager;
/*! //! Application context interface
* Application context interface
*/
class BLACKCORE_EXPORT IContextApplication : public CContext class BLACKCORE_EXPORT IContextApplication : public CContext
{ {
Q_OBJECT Q_OBJECT
@@ -49,20 +47,6 @@ namespace BlackCore
IContextApplication(CRuntimeConfig::ContextMode mode, CRuntime *runtime); IContextApplication(CRuntimeConfig::ContextMode mode, CRuntime *runtime);
public: public:
//! Parts of the application
enum Application : uint
{
ApplicationGui,
ApplicationCore
};
//! State of application
enum Actions : uint
{
ApplicationStarts,
ApplicationStops
};
//! Service name //! Service name
static const QString &InterfaceName() static const QString &InterfaceName()
{ {
@@ -88,7 +72,7 @@ namespace BlackCore
signals: signals:
//! A component changes //! A component changes
void componentChanged(uint component, uint action); void registrationChanged();
//! A log message was logged //! A log message was logged
//! \note Used with CLogMessage, do not use directly //! \note Used with CLogMessage, do not use directly
@@ -103,23 +87,26 @@ namespace BlackCore
//! \note this is the function which relays CLogMessage via DBus //! \note this is the function which relays CLogMessage via DBus
virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::COriginator &origin) { Q_UNUSED(message); Q_UNUSED(origin); } virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::COriginator &origin) { Q_UNUSED(message); Q_UNUSED(origin); }
//! Ping a token, used to check if application is alive //! Register application, can also be used for ping
virtual qint64 ping(qint64 token) const = 0; virtual BlackMisc::COriginator registerApplication(const BlackMisc::COriginator &application) = 0;
//! A component has changed its state //! Unregister application
virtual void notifyAboutComponentChange(uint component, uint action) = 0; virtual void unregisterApplication(const BlackMisc::COriginator &application) = 0;
//! All registered applications
virtual BlackMisc::COriginatorList getRegisteredApplications() const = 0;
//! Remote enabled version of writing a text file //! Remote enabled version of writing a text file
virtual bool writeToFile(const QString &fileName, const QString &content) = 0; virtual bool writeToFile(const QString &fileName, const QString &content) = 0;
//! Remote enabled version of reading a text file //! Remote enabled version of reading a text file
virtual QString readFromFile(const QString &fileName) = 0; virtual QString readFromFile(const QString &fileName) const = 0;
//! Remote enabled version of deleting a file //! Remote enabled version of deleting a file
virtual bool removeFile(const QString &fileName) = 0; virtual bool removeFile(const QString &fileName) = 0;
//! Remote enabled version of file exists //! Remote enabled version of file exists
virtual bool existsFile(const QString &fileName) = 0; virtual bool existsFile(const QString &fileName) const = 0;
//! Process remote event //! Process remote event
virtual void processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event) = 0; virtual void processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event) = 0;

View File

@@ -40,20 +40,9 @@ namespace BlackCore
emit this->messageLogged(message, origin); emit this->messageLogged(message, origin);
} }
qint64 CContextApplication::ping(qint64 token) const
{
return token;
}
void CContextApplication::notifyAboutComponentChange(uint component, uint action)
{
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << QString::number(component) << QString::number(action);
this->componentChanged(component, action);
}
bool CContextApplication::writeToFile(const QString &fileName, const QString &content) bool CContextApplication::writeToFile(const QString &fileName, const QString &content)
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << fileName << content.left(25); if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << fileName << content.left(25); }
if (fileName.isEmpty()) { return false; } if (fileName.isEmpty()) { return false; }
QFile file(fileName); QFile file(fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) if (file.open(QIODevice::WriteOnly | QIODevice::Text))
@@ -68,9 +57,30 @@ namespace BlackCore
} }
} }
QString CContextApplication::readFromFile(const QString &fileName) COriginator CContextApplication::registerApplication(const COriginator &application)
{ {
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << fileName; if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << application; }
this->m_registeredApplications.replaceOrAdd(application, application);
emit registrationChanged();
return application;
}
void CContextApplication::unregisterApplication(const COriginator &application)
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << application; }
int r = this->m_registeredApplications.remove(application);
if (r > 0) { emit registrationChanged(); }
}
COriginatorList CContextApplication::getRegisteredApplications() const
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
return m_registeredApplications;
}
QString CContextApplication::readFromFile(const QString &fileName) const
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << fileName; }
QFile file(fileName); QFile file(fileName);
QString content; QString content;
if (fileName.isEmpty()) return content; if (fileName.isEmpty()) return content;
@@ -85,12 +95,14 @@ namespace BlackCore
bool CContextApplication::removeFile(const QString &fileName) bool CContextApplication::removeFile(const QString &fileName)
{ {
if (fileName.isEmpty()) return false; if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << fileName; }
if (fileName.isEmpty()) { return false; }
return QFile::remove(fileName); return QFile::remove(fileName);
} }
bool CContextApplication::existsFile(const QString &fileName) bool CContextApplication::existsFile(const QString &fileName) const
{ {
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << fileName; }
if (fileName.isEmpty()) return false; if (fileName.isEmpty()) return false;
return QFile::exists(fileName); return QFile::exists(fileName);
} }

View File

@@ -14,6 +14,7 @@
#include "context_application.h" #include "context_application.h"
#include "context_runtime.h" #include "context_runtime.h"
#include "dbus_server.h" #include "dbus_server.h"
#include "blackmisc/originatorlist.h"
namespace BlackCore namespace BlackCore
{ {
@@ -31,23 +32,26 @@ namespace BlackCore
//! \copydoc IContextApplication::logMessage //! \copydoc IContextApplication::logMessage
virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::COriginator &origin) override; virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::COriginator &origin) override;
//! \copydoc IContextApplication::ping()
virtual qint64 ping(qint64 token) const override;
//! \copydoc IContextApplication::notifyAboutComponentChange
virtual void notifyAboutComponentChange(uint component, uint action) override;
//! \copydoc IContextApplication::writeToFile //! \copydoc IContextApplication::writeToFile
virtual bool writeToFile(const QString &fileName, const QString &content) override; virtual bool writeToFile(const QString &fileName, const QString &content) override;
//! \copydoc IContextApplication::registerApplication
virtual BlackMisc::COriginator registerApplication(const BlackMisc::COriginator &application) override;
//! \copydoc IContextApplication::unRegisterApplication
virtual void unregisterApplication(const BlackMisc::COriginator &application) override;
//! \copydoc IContextApplication::getRegisteredApplications
virtual BlackMisc::COriginatorList getRegisteredApplications() const override;
//! \copydoc IContextApplication::readFromFile //! \copydoc IContextApplication::readFromFile
virtual QString readFromFile(const QString &fileName) override; virtual QString readFromFile(const QString &fileName) const override;
//! \copydoc IContextApplication::removeFile //! \copydoc IContextApplication::removeFile
virtual bool removeFile(const QString &fileName) override; virtual bool removeFile(const QString &fileName) override;
//! \copydoc IContextApplication::existsFile //! \copydoc IContextApplication::existsFile
virtual bool existsFile(const QString &fileName) override; virtual bool existsFile(const QString &fileName) const override;
//! \copydoc IContextApplication::processHotkeyFuncEvent //! \copydoc IContextApplication::processHotkeyFuncEvent
virtual void processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event) override; virtual void processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event) override;
@@ -58,6 +62,9 @@ namespace BlackCore
//! Register myself in DBus, fail safe //! Register myself in DBus, fail safe
CContextApplication *registerWithDBus(CDBusServer *server); CContextApplication *registerWithDBus(CDBusServer *server);
private:
BlackMisc::COriginatorList m_registeredApplications;
}; };
} // namespace } // namespace

View File

@@ -11,6 +11,7 @@
#include "blackcore/input_manager.h" #include "blackcore/input_manager.h"
#include "blackmisc/blackmiscfreefunctions.h" #include "blackmisc/blackmiscfreefunctions.h"
#include "blackmisc/loghandler.h" #include "blackmisc/loghandler.h"
#include "blackmisc/originatorlist.h"
#include <QObject> #include <QObject>
#include <QMetaEnum> #include <QMetaEnum>
#include <QDBusConnection> #include <QDBusConnection>
@@ -19,10 +20,6 @@ using namespace BlackMisc;
namespace BlackCore namespace BlackCore
{ {
/*
* Constructor for DBus
*/
CContextApplicationProxy::CContextApplicationProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextApplication(mode, runtime), m_dBusInterface(nullptr) CContextApplicationProxy::CContextApplicationProxy(const QString &serviceName, QDBusConnection &connection, CRuntimeConfig::ContextMode mode, CRuntime *runtime) : IContextApplication(mode, runtime), m_dBusInterface(nullptr)
{ {
this->m_dBusInterface = new CGenericDBusInterface(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(), connection, this); this->m_dBusInterface = new CGenericDBusInterface(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(), connection, this);
@@ -44,9 +41,6 @@ namespace BlackCore
}); });
} }
/*
* Connect for signals
*/
void CContextApplicationProxy::relaySignals(const QString &serviceName, QDBusConnection &connection) void CContextApplicationProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
{ {
// signals originating from impl side // signals originating from impl side
@@ -54,7 +48,7 @@ namespace BlackCore
"messageLogged", this, SIGNAL(messageLogged(BlackMisc::CStatusMessage, BlackMisc::COriginator))); "messageLogged", this, SIGNAL(messageLogged(BlackMisc::CStatusMessage, BlackMisc::COriginator)));
Q_ASSERT(s); Q_ASSERT(s);
s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(), s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(),
"componentChanged", this, SIGNAL(componentChanged(uint, uint))); "registrationChanged", this, SIGNAL(registrationChanged()));
Q_ASSERT(s); Q_ASSERT(s);
s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(), s = connection.connect(serviceName, IContextApplication::ObjectPath(), IContextApplication::InterfaceName(),
"fakedSetComVoiceRoom", this, SIGNAL(fakedSetComVoiceRoom(BlackMisc::Audio::CVoiceRoomList))); "fakedSetComVoiceRoom", this, SIGNAL(fakedSetComVoiceRoom(BlackMisc::Audio::CVoiceRoomList)));
@@ -62,64 +56,47 @@ namespace BlackCore
Q_UNUSED(s); Q_UNUSED(s);
} }
/*
* Log a message
*/
void CContextApplicationProxy::logMessage(const CStatusMessage &message, const COriginator &origin) void CContextApplicationProxy::logMessage(const CStatusMessage &message, const COriginator &origin)
{ {
this->m_dBusInterface->callDBus(QLatin1Literal("logMessage"), message, origin); this->m_dBusInterface->callDBus(QLatin1Literal("logMessage"), message, origin);
} }
/* BlackMisc::COriginator CContextApplicationProxy::registerApplication(const COriginator &application)
* Ping, is DBus alive?
*/
qint64 CContextApplicationProxy::ping(qint64 token) const
{ {
qint64 t = this->m_dBusInterface->callDBusRet<qint64>(QLatin1Literal("ping"), token); return this->m_dBusInterface->callDBusRet<BlackMisc::COriginator>(QLatin1Literal("registerApplication"), application);
return t;
} }
/* void CContextApplicationProxy::unregisterApplication(const COriginator &application)
* Component has changed
*/
void CContextApplicationProxy::notifyAboutComponentChange(uint component, uint action)
{ {
this->m_dBusInterface->callDBus(QLatin1Literal("notifyAboutComponentChange"), component, action); this->m_dBusInterface->callDBus(QLatin1Literal("unregisterApplication"), application);
}
BlackMisc::COriginatorList CContextApplicationProxy::getRegisteredApplications() const
{
return this->m_dBusInterface->callDBusRet<BlackMisc::COriginatorList>(QLatin1Literal("getRegisteredApplications"));
} }
/*
* To file
*/
bool CContextApplicationProxy::writeToFile(const QString &fileName, const QString &content) bool CContextApplicationProxy::writeToFile(const QString &fileName, const QString &content)
{ {
if (fileName.isEmpty()) return false; if (fileName.isEmpty()) { return false; }
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("writeToFile"), fileName, content); return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("writeToFile"), fileName, content);
} }
/* QString CContextApplicationProxy::readFromFile(const QString &fileName) const
* From file
*/
QString CContextApplicationProxy::readFromFile(const QString &fileName)
{ {
if (fileName.isEmpty()) return ""; if (fileName.isEmpty()) { return ""; }
return this->m_dBusInterface->callDBusRet<QString>(QLatin1Literal("readFromFile"), fileName); return this->m_dBusInterface->callDBusRet<QString>(QLatin1Literal("readFromFile"), fileName);
} }
/*
* Delete file
*/
bool CContextApplicationProxy::removeFile(const QString &fileName) bool CContextApplicationProxy::removeFile(const QString &fileName)
{ {
if (fileName.isEmpty()) return false; if (fileName.isEmpty()) { return false; }
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("removeFile"), fileName); return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("removeFile"), fileName);
} }
/* bool CContextApplicationProxy::existsFile(const QString &fileName) const
* Check file
*/
bool CContextApplicationProxy::existsFile(const QString &fileName)
{ {
if (fileName.isEmpty()) return false; if (fileName.isEmpty()) { return false; }
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("existsFile"), fileName); return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("existsFile"), fileName);
} }

View File

@@ -28,23 +28,26 @@ namespace BlackCore
//! \copydoc IContextApplication::logMessage //! \copydoc IContextApplication::logMessage
virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::COriginator &origin) override; virtual void logMessage(const BlackMisc::CStatusMessage &message, const BlackMisc::COriginator &origin) override;
//! \copydoc IContextApplication::ping() //! \copydoc IContextApplication::registerApplication
virtual qint64 ping(qint64 token) const override; virtual BlackMisc::COriginator registerApplication(const BlackMisc::COriginator &application) override;
//! \copydoc IContextApplication::notifyAboutComponentChange //! \copydoc IContextApplication::unRegisterApplication
virtual void notifyAboutComponentChange(uint component, uint action) override; virtual void unregisterApplication(const BlackMisc::COriginator &application) override;
//! \copydoc IContextApplication::getRegisteredApplications
virtual BlackMisc::COriginatorList getRegisteredApplications() const override;
//! \copydoc IContextApplication::writeToFile //! \copydoc IContextApplication::writeToFile
virtual bool writeToFile(const QString &fileName, const QString &content) override; virtual bool writeToFile(const QString &fileName, const QString &content) override;
//! \copydoc IContextApplication::readFromFile //! \copydoc IContextApplication::readFromFile
virtual QString readFromFile(const QString &fileName) override; virtual QString readFromFile(const QString &fileName) const override;
//! \copydoc IContextApplication::removeFile //! \copydoc IContextApplication::removeFile
virtual bool removeFile(const QString &fileName) override; virtual bool removeFile(const QString &fileName) override;
//! \copydoc IContextApplication::existsFile //! \copydoc IContextApplication::existsFile
virtual bool existsFile(const QString &fileName) override; virtual bool existsFile(const QString &fileName) const override;
//! \copydoc IContextApplication::processHotkeyFuncEvent //! \copydoc IContextApplication::processHotkeyFuncEvent
virtual void processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event) override; virtual void processHotkeyFuncEvent(const BlackMisc::Event::CEventHotkeyFunction &event) override;
@@ -60,7 +63,6 @@ namespace BlackCore
BlackMisc::CGenericDBusInterface *m_dBusInterface; BlackMisc::CGenericDBusInterface *m_dBusInterface;
//! Relay connection signals to local signals //! Relay connection signals to local signals
//! No idea why this has to be wired and is not done automatically
void relaySignals(const QString &serviceName, QDBusConnection &connection); void relaySignals(const QString &serviceName, QDBusConnection &connection);
}; };
} }