mirror of
https://github.com/overte-org/overte.git
synced 2025-05-10 11:31:43 +02:00
115 lines
5.1 KiB
C++
115 lines
5.1 KiB
C++
//
|
|
// GlobalServicesScriptingInterface.cpp
|
|
// interface/src/scripting
|
|
//
|
|
// Created by Thijs Wenker on 9/10/14.
|
|
// Copyright 2014 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
#include "AccountManager.h"
|
|
#include "XmppClient.h"
|
|
|
|
#include "GlobalServicesScriptingInterface.h"
|
|
|
|
GlobalServicesScriptingInterface::GlobalServicesScriptingInterface() {
|
|
AccountManager& accountManager = AccountManager::getInstance();
|
|
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() {
|
|
static GlobalServicesScriptingInterface sharedInstance;
|
|
return &sharedInstance;
|
|
}
|
|
|
|
bool GlobalServicesScriptingInterface::isConnected() {
|
|
#ifdef HAVE_QXMPP
|
|
return XmppClient::getInstance().getXMPPClient().isConnected();
|
|
#else
|
|
return false;
|
|
#endif // HAVE_QXMPP
|
|
}
|
|
|
|
QScriptValue GlobalServicesScriptingInterface::chat(const QString& message) {
|
|
#ifdef HAVE_QXMPP
|
|
if (XmppClient::getInstance().getXMPPClient().isConnected()) {
|
|
const QXmppMucRoom* publicChatRoom = XmppClient::getInstance().getPublicChatRoom();
|
|
QXmppMessage messageObject;
|
|
messageObject.setTo(publicChatRoom->jid());
|
|
messageObject.setType(QXmppMessage::GroupChat);
|
|
messageObject.setBody(message);
|
|
return XmppClient::getInstance().getXMPPClient().sendPacket(messageObject);
|
|
}
|
|
#endif // HAVE_QXMPP
|
|
return false;
|
|
}
|
|
|
|
QString GlobalServicesScriptingInterface::getMyUsername() {
|
|
return AccountManager::getInstance().getAccountInfo().getUsername();
|
|
}
|
|
|
|
QStringList GlobalServicesScriptingInterface::getOnlineUsers() {
|
|
#ifdef HAVE_QXMPP
|
|
if (XmppClient::getInstance().getXMPPClient().isConnected()) {
|
|
QStringList usernames;
|
|
const QXmppMucRoom* publicChatRoom = XmppClient::getInstance().getPublicChatRoom();
|
|
foreach(const QString& participant, XmppClient::getInstance().getPublicChatRoom()->participants()) {
|
|
usernames.append(participant.right(participant.count() - 1 - publicChatRoom->jid().count()));
|
|
}
|
|
return usernames;
|
|
}
|
|
#endif // HAVE_QXMPP
|
|
return QStringList();
|
|
}
|
|
|
|
void GlobalServicesScriptingInterface::loggedOut() {
|
|
emit GlobalServicesScriptingInterface::disconnected(QString("logout"));
|
|
}
|
|
|
|
#ifdef HAVE_QXMPP
|
|
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());
|
|
}
|
|
#endif // HAVE_QXMPP
|