mirror of
https://github.com/overte-org/overte.git
synced 2025-05-09 03:58:52 +02:00
178 lines
7.2 KiB
C++
178 lines
7.2 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 "Application.h"
|
|
#include "ResourceCache.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
|
|
|
|
_downloading = false;
|
|
connect(Application::getInstance(), &Application::renderingInWorldInterface,
|
|
this, &GlobalServicesScriptingInterface::checkDownloadInfo);
|
|
}
|
|
|
|
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();
|
|
QString username = message.from().right(message.from().count() - 1 - publicChatRoom->jid().count());
|
|
emit GlobalServicesScriptingInterface::incomingMessage(username, message.body());
|
|
}
|
|
#endif // HAVE_QXMPP
|
|
|
|
|
|
DownloadInfoResult::DownloadInfoResult() :
|
|
downloading(QList<float>()),
|
|
pending(0.0f)
|
|
{
|
|
}
|
|
|
|
QScriptValue DownloadInfoResultToScriptValue(QScriptEngine* engine, const DownloadInfoResult& result) {
|
|
QScriptValue object = engine->newObject();
|
|
|
|
QScriptValue array = engine->newArray(result.downloading.count());
|
|
for (int i = 0; i < result.downloading.count(); i += 1) {
|
|
array.setProperty(i, result.downloading[i]);
|
|
}
|
|
|
|
object.setProperty("downloading", array);
|
|
object.setProperty("pending", result.pending);
|
|
return object;
|
|
}
|
|
|
|
void DownloadInfoResultFromScriptValue(const QScriptValue& object, DownloadInfoResult& result) {
|
|
QList<QVariant> downloading = object.property("downloading").toVariant().toList();
|
|
result.downloading.clear();
|
|
for (int i = 0; i < downloading.count(); i += 1) {
|
|
result.downloading.append(downloading[i].toFloat());
|
|
}
|
|
|
|
result.pending = object.property("pending").toVariant().toFloat();
|
|
}
|
|
|
|
DownloadInfoResult GlobalServicesScriptingInterface::getDownloadInfo() {
|
|
DownloadInfoResult result;
|
|
foreach(Resource* resource, ResourceCache::getLoadingRequests()) {
|
|
result.downloading.append(resource->getProgress() * 100.0f);
|
|
}
|
|
result.pending = ResourceCache::getPendingRequestCount();
|
|
return result;
|
|
}
|
|
|
|
void GlobalServicesScriptingInterface::checkDownloadInfo() {
|
|
DownloadInfoResult downloadInfo = getDownloadInfo();
|
|
bool downloading = downloadInfo.downloading.count() > 0 || downloadInfo.pending > 0;
|
|
|
|
// Emit signal if downloading or have just finished.
|
|
if (downloading || _downloading) {
|
|
_downloading = downloading;
|
|
emit downloadInfoChanged(downloadInfo);
|
|
}
|
|
}
|
|
|
|
void GlobalServicesScriptingInterface::updateDownloadInfo() {
|
|
emit downloadInfoChanged(getDownloadInfo());
|
|
}
|