// // UsersScriptingInterface.cpp // libraries/script-engine/src // // Created by Stephen Birarda on 2016-07-11. // Copyright 2016 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 "UsersScriptingInterface.h" #include #include #include UsersScriptingInterface::UsersScriptingInterface() { // emit a signal when kick permissions have changed auto nodeList = DependencyManager::get(); connect(nodeList.data(), &LimitedNodeList::canKickChanged, this, &UsersScriptingInterface::canKickChanged); connect(nodeList.data(), &NodeList::ignoreRadiusEnabledChanged, this, &UsersScriptingInterface::ignoreRadiusEnabledChanged); connect(nodeList.data(), &NodeList::usernameFromIDReply, this, &UsersScriptingInterface::usernameFromIDReply); } void UsersScriptingInterface::ignore(const QUuid& nodeID, bool ignoreEnabled) { // ask the NodeList to ignore this user (based on the session ID of their node) DependencyManager::get()->ignoreNodeBySessionID(nodeID, ignoreEnabled); } bool UsersScriptingInterface::getIgnoreStatus(const QUuid& nodeID) { // ask the NodeList for the Ignore status associated with the given session ID return DependencyManager::get()->isIgnoringNode(nodeID); } void UsersScriptingInterface::personalMute(const QUuid& nodeID, bool muteEnabled) { // ask the NodeList to mute the user with the given session ID // "Personal Mute" only applies one way and is not global DependencyManager::get()->personalMuteNodeBySessionID(nodeID, muteEnabled); } bool UsersScriptingInterface::getPersonalMuteStatus(const QUuid& nodeID) { // ask the NodeList for the Personal Mute status associated with the given session ID return DependencyManager::get()->isPersonalMutingNode(nodeID); } void UsersScriptingInterface::setAvatarGain(const QUuid& nodeID, float gain) { // ask the NodeList to set the gain of the specified avatar DependencyManager::get()->setAvatarGain(nodeID, gain); } float UsersScriptingInterface::getAvatarGain(const QUuid& nodeID) { return DependencyManager::get()->getAvatarGain(nodeID); } void UsersScriptingInterface::kick(const QUuid& nodeID) { bool waitingForKickResponse = _kickResponseLock.resultWithReadLock([&] { return _waitingForKickResponse; }); if (getCanKick() && !waitingForKickResponse) { auto avatarHashMap = DependencyManager::get(); auto avatar = avatarHashMap->getAvatarBySessionID(nodeID); QString userName; if (avatar) { userName = avatar->getSessionDisplayName(); } else { userName = nodeID.toString(); } QString kickMessage = "Do you wish to kick " + userName + " from your domain"; ModalDialogListener* dlg = OffscreenUi::asyncQuestion("Kick User", kickMessage, QMessageBox::Yes | QMessageBox::No); if (dlg->getDialogItem()) { QObject::connect(dlg, &ModalDialogListener::response, this, [=] (QVariant answer) { QObject::disconnect(dlg, &ModalDialogListener::response, this, nullptr); bool yes = (static_cast(answer.toInt()) == QMessageBox::Yes); // ask the NodeList to kick the user with the given session ID if (yes) { DependencyManager::get()->kickNodeBySessionID(nodeID); } _kickResponseLock.withWriteLock([&] { _waitingForKickResponse = false; }); }); _kickResponseLock.withWriteLock([&] { _waitingForKickResponse = true; }); } } } void UsersScriptingInterface::mute(const QUuid& nodeID) { // ask the NodeList to mute the user with the given session ID DependencyManager::get()->muteNodeBySessionID(nodeID); } void UsersScriptingInterface::requestUsernameFromID(const QUuid& nodeID) { // ask the Domain Server via the NodeList for the username associated with the given session ID DependencyManager::get()->requestUsernameFromSessionID(nodeID); } bool UsersScriptingInterface::getCanKick() { // ask the NodeList to return our ability to kick return DependencyManager::get()->getThisNodeCanKick(); } void UsersScriptingInterface::toggleIgnoreRadius() { DependencyManager::get()->toggleIgnoreRadius(); } void UsersScriptingInterface::enableIgnoreRadius() { DependencyManager::get()->enableIgnoreRadius(); } void UsersScriptingInterface::disableIgnoreRadius() { DependencyManager::get()->disableIgnoreRadius(); } bool UsersScriptingInterface::getIgnoreRadiusEnabled() { return DependencyManager::get()->getIgnoreRadiusEnabled(); } bool UsersScriptingInterface::getRequestsDomainListData() { return DependencyManager::get()->getRequestsDomainListData(); } void UsersScriptingInterface::setRequestsDomainListData(bool isRequesting) { DependencyManager::get()->setRequestsDomainListData(isRequesting); }