From 807173ae0a776cd0952d2d24f9c78289eca4cd34 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 12 Sep 2014 02:17:36 +0200 Subject: [PATCH] the GlobalServices Events are functional now --- .../GlobalServicesScriptingInterface.cpp | 50 ++++++++++++++++++- .../GlobalServicesScriptingInterface.h | 7 +++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.cpp b/interface/src/scripting/GlobalServicesScriptingInterface.cpp index d28e96fa45..8c117a4a11 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.cpp +++ b/interface/src/scripting/GlobalServicesScriptingInterface.cpp @@ -16,9 +16,43 @@ GlobalServicesScriptingInterface::GlobalServicesScriptingInterface() { AccountManager& accountManager = AccountManager::getInstance(); - connect(&accountManager, &AccountManager::usernameChanged, this, - &GlobalServicesScriptingInterface::myUsernameChanged); + connect(&accountManager, &AccountManager::usernameChanged, this, &GlobalServicesScriptingInterface::myUsernameChanged); + connect(&accountManager, &AccountManager::logoutComplete, this, &GlobalServicesScriptingInterface::loggedOut); +#ifdef HAVE_QXMPP + const XmppClient& xmppClient = XmppClient::getInstance(); + connect(&xmppClient, &XmppClient::joinedPublicChatRoom, this, &GlobalServicesScriptingInterface::connected); + connect(&xmppClient, &XmppClient::joinedPublicChatRoom, this, &GlobalServicesScriptingInterface::onConnected); + const QXmppClient& qxmppClient = XmppClient::getInstance().getXMPPClient(); + connect(&qxmppClient, &QXmppClient::messageReceived, this, &GlobalServicesScriptingInterface::messageReceived); +#endif // HAVE_QXMPP +} +GlobalServicesScriptingInterface::~GlobalServicesScriptingInterface() { + AccountManager& accountManager = AccountManager::getInstance(); + disconnect(&accountManager, &AccountManager::usernameChanged, this, &GlobalServicesScriptingInterface::myUsernameChanged); + disconnect(&accountManager, &AccountManager::logoutComplete, this, &GlobalServicesScriptingInterface::loggedOut); +#ifdef HAVE_QXMPP + const XmppClient& xmppClient = XmppClient::getInstance(); + disconnect(&xmppClient, &XmppClient::joinedPublicChatRoom, this, &GlobalServicesScriptingInterface::connected); + disconnect(&xmppClient, &XmppClient::joinedPublicChatRoom, this, &GlobalServicesScriptingInterface::onConnected); + const QXmppClient& qxmppClient = XmppClient::getInstance().getXMPPClient(); + disconnect(&qxmppClient, &QXmppClient::messageReceived, this, &GlobalServicesScriptingInterface::messageReceived); + const QXmppMucRoom* publicChatRoom = XmppClient::getInstance().getPublicChatRoom(); + disconnect(publicChatRoom, &QXmppMucRoom::participantsChanged, this, &GlobalServicesScriptingInterface::participantsChanged); +#endif // HAVE_QXMPP +} + +void GlobalServicesScriptingInterface::onConnected() { +#ifdef HAVE_QXMPP + const QXmppMucRoom* publicChatRoom = XmppClient::getInstance().getPublicChatRoom(); + connect(publicChatRoom, &QXmppMucRoom::participantsChanged, this, &GlobalServicesScriptingInterface::participantsChanged, Qt::UniqueConnection); +#endif // HAVE_QXMPP +} + +void GlobalServicesScriptingInterface::participantsChanged() { +#ifdef HAVE_QXMPP + emit GlobalServicesScriptingInterface::onlineUsersChanged(this->getOnlineUsers()); +#endif // HAVE_QXMPP } GlobalServicesScriptingInterface* GlobalServicesScriptingInterface::getInstance() { @@ -64,4 +98,16 @@ QStringList GlobalServicesScriptingInterface::getOnlineUsers() { } #endif // HAVE_QXMPP return QStringList(); +} + +void GlobalServicesScriptingInterface::loggedOut() { + emit GlobalServicesScriptingInterface::disconnected(QString("logout")); +} + +void GlobalServicesScriptingInterface::messageReceived(const QXmppMessage& message) { + if (message.type() != QXmppMessage::GroupChat) { + return; + } + const QXmppMucRoom* publicChatRoom = XmppClient::getInstance().getPublicChatRoom(); + emit GlobalServicesScriptingInterface::incomingMessage(message.from().right(message.from().count() - 1 - publicChatRoom->jid().count()), message.body()); } \ No newline at end of file diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.h b/interface/src/scripting/GlobalServicesScriptingInterface.h index 9ab8a26923..370ba1ade9 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.h +++ b/interface/src/scripting/GlobalServicesScriptingInterface.h @@ -32,6 +32,7 @@ class GlobalServicesScriptingInterface : public QObject { Q_PROPERTY(QString myUsername READ getMyUsername) Q_PROPERTY(QStringList onlineUsers READ getOnlineUsers) GlobalServicesScriptingInterface(); + ~GlobalServicesScriptingInterface(); public: static GlobalServicesScriptingInterface* getInstance(); @@ -42,6 +43,12 @@ public: public slots: QScriptValue chat(const QString& message); +private slots: + void loggedOut(); + void onConnected(); + void participantsChanged(); + void messageReceived(const QXmppMessage& message); + signals: void connected(); void disconnected(const QString& reason);