From 2d4da7ba714004415fff784294b5bbb5338dc5af Mon Sep 17 00:00:00 2001 From: Kalila L Date: Mon, 21 Jun 2021 13:22:48 -0400 Subject: [PATCH 01/27] Add disable domain port auto discovery by assignment client option. --- assignment-client/src/AssignmentClient.cpp | 24 ++++++++++++------- assignment-client/src/AssignmentClient.h | 7 +++--- assignment-client/src/AssignmentClientApp.cpp | 19 +++++++++++---- assignment-client/src/AssignmentClientApp.h | 2 ++ .../src/AssignmentClientMonitor.cpp | 12 +++++++--- .../src/AssignmentClientMonitor.h | 6 +++-- libraries/networking/src/NodeList.cpp | 18 +++++++------- libraries/networking/src/NodeList.h | 5 +++- 8 files changed, 62 insertions(+), 31 deletions(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index adc7f5e3c5..8e44cdd157 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -44,7 +44,8 @@ const long long ASSIGNMENT_REQUEST_INTERVAL_MSECS = 1 * 1000; AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QString assignmentPool, quint16 listenPort, QUuid walletUUID, QString assignmentServerHostname, - quint16 assignmentServerPort, quint16 assignmentMonitorPort) : + quint16 assignmentServerPort, quint16 assignmentMonitorPort, + bool disableDomainPortAutoDiscovery) : _assignmentServerHostname(DEFAULT_ASSIGNMENT_SERVER_HOSTNAME) { LogUtils::init(); @@ -89,6 +90,13 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri _assignmentServerSocket.setObjectName("AssignmentServer"); nodeList->setAssignmentServerSocket(_assignmentServerSocket); + if (disableDomainPortAutoDiscovery == true) { + _disableDomainPortAutoDiscovery = disableDomainPortAutoDiscovery; + qCDebug(assignment_client) << "Disabling domain port auto discovery by the assignment client due to parsed command line parameter."; + } + + nodeList->setDomainPortAutoDiscovery(_disableDomainPortAutoDiscovery); + qCDebug(assignment_client) << "Assignment server socket is" << _assignmentServerSocket; // call a timer function every ASSIGNMENT_REQUEST_INTERVAL_MSECS to ask for assignment, if required @@ -164,7 +172,7 @@ void AssignmentClient::setUpStatusToMonitor() { void AssignmentClient::sendStatusPacketToACM() { // tell the assignment client monitor what this assignment client is doing (if anything) auto nodeList = DependencyManager::get(); - + quint8 assignmentType = Assignment::Type::AllTypes; if (_currentAssignment) { @@ -175,7 +183,7 @@ void AssignmentClient::sendStatusPacketToACM() { statusPacket->write(_childAssignmentUUID.toRfc4122()); statusPacket->writePrimitive(assignmentType); - + nodeList->sendPacket(std::move(statusPacket), _assignmentClientMonitorSocket); } @@ -185,7 +193,7 @@ void AssignmentClient::sendAssignmentRequest() { auto nodeList = DependencyManager::get(); - if (_assignmentServerHostname == "localhost") { + if (_assignmentServerHostname == "localhost" && _disableDomainPortAutoDiscovery == false) { // we want to check again for the local domain-server port in case the DS has restarted quint16 localAssignmentServerPort; if (nodeList->getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, localAssignmentServerPort)) { @@ -270,10 +278,10 @@ void AssignmentClient::handleCreateAssignmentPacket(QSharedPointer message) { const HifiSockAddr& senderSockAddr = message->getSenderSockAddr(); - + if (senderSockAddr.getAddress() == QHostAddress::LocalHost || senderSockAddr.getAddress() == QHostAddress::LocalHostIPv6) { - + qCDebug(assignment_client) << "AssignmentClientMonitor at" << senderSockAddr << "requested stop via PacketType::StopNode."; QCoreApplication::quit(); } else { @@ -307,7 +315,7 @@ void AssignmentClient::handleAuthenticationRequest() { void AssignmentClient::assignmentCompleted() { crash::annotations::setShutdownState(true); - + // we expect that to be here the previous assignment has completely cleaned up assert(_currentAssignment.isNull()); @@ -328,6 +336,6 @@ void AssignmentClient::assignmentCompleted() { nodeList->setOwnerType(NodeType::Unassigned); nodeList->reset("Assignment completed"); nodeList->resetNodeInterestSet(); - + _isAssigned = false; } diff --git a/assignment-client/src/AssignmentClient.h b/assignment-client/src/AssignmentClient.h index 28464bc222..d40f0964d1 100644 --- a/assignment-client/src/AssignmentClient.h +++ b/assignment-client/src/AssignmentClient.h @@ -23,9 +23,9 @@ class AssignmentClient : public QObject { Q_OBJECT public: AssignmentClient(Assignment::Type requestAssignmentType, QString assignmentPool, - quint16 listenPort, - QUuid walletUUID, QString assignmentServerHostname, quint16 assignmentServerPort, - quint16 assignmentMonitorPort); + quint16 listenPort, QUuid walletUUID, QString assignmentServerHostname, + quint16 assignmentServerPort, quint16 assignmentMonitorPort, + bool disableDomainPortAutoDiscovery); ~AssignmentClient(); private slots: @@ -53,6 +53,7 @@ private: QTimer _requestTimer; // timer for requesting and assignment QTimer _statsTimerACM; // timer for sending stats to assignment client monitor QUuid _childAssignmentUUID = QUuid::createUuid(); + bool _disableDomainPortAutoDiscovery { false }; protected: HifiSockAddr _assignmentClientMonitorSocket; diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index 1dd050fcb9..49674f5728 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -4,6 +4,7 @@ // // Created by Seth Alves on 2/19/15. // Copyright 2015 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -44,7 +45,7 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : // parse command-line QCommandLineParser parser; - parser.setApplicationDescription("High Fidelity Assignment Client"); + parser.setApplicationDescription("Vircadia Assignment Client"); const QCommandLineOption helpOption = parser.addHelpOption(); const QCommandLineOption versionOption = parser.addVersionOption(); @@ -54,8 +55,8 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : type = static_cast(static_cast(type) + 1)) { typeDescription.append(QStringLiteral("\n%1 | %2").arg(QString::number(type), Assignment::typeToString(type))); } - const QCommandLineOption clientTypeOption(ASSIGNMENT_TYPE_OVERRIDE_OPTION, typeDescription, "type"); + const QCommandLineOption clientTypeOption(ASSIGNMENT_TYPE_OVERRIDE_OPTION, typeDescription, "type"); parser.addOption(clientTypeOption); const QCommandLineOption poolOption(ASSIGNMENT_POOL_OPTION, "set assignment pool", "pool-name"); @@ -99,6 +100,9 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : const QCommandLineOption logDirectoryOption(ASSIGNMENT_LOG_DIRECTORY, "directory to store logs", "log-directory"); parser.addOption(logDirectoryOption); + const QCommandLineOption disableDomainPortAutoDiscoveryOption(ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY, "disable automatic discovery of the domain server port"); + parser.addOption(disableDomainPortAutoDiscoveryOption); + const QCommandLineOption parentPIDOption(PARENT_PID_OPTION, "PID of the parent process", "parent-pid"); parser.addOption(parentPIDOption); @@ -151,11 +155,14 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : } QString logDirectory; - if (parser.isSet(logDirectoryOption)) { logDirectory = parser.value(logDirectoryOption); } + bool disableDomainPortAutoDiscovery = false; + if (parser.isSet(disableDomainPortAutoDiscoveryOption)) { + disableDomainPortAutoDiscovery = true; + } Assignment::Type requestAssignmentType = Assignment::AllTypes; if (argumentVariantMap.contains(ASSIGNMENT_TYPE_OVERRIDE_OPTION)) { @@ -250,13 +257,15 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : AssignmentClientMonitor* monitor = new AssignmentClientMonitor(numForks, minForks, maxForks, requestAssignmentType, assignmentPool, listenPort, childMinListenPort, walletUUID, assignmentServerHostname, - assignmentServerPort, httpStatusPort, logDirectory); + assignmentServerPort, httpStatusPort, logDirectory, + disableDomainPortAutoDiscovery); monitor->setParent(this); connect(this, &QCoreApplication::aboutToQuit, monitor, &AssignmentClientMonitor::aboutToQuit); } else { AssignmentClient* client = new AssignmentClient(requestAssignmentType, assignmentPool, listenPort, walletUUID, assignmentServerHostname, - assignmentServerPort, monitorPort); + assignmentServerPort, monitorPort, + disableDomainPortAutoDiscovery); client->setParent(this); connect(this, &QCoreApplication::aboutToQuit, client, &AssignmentClient::aboutToQuit); } diff --git a/assignment-client/src/AssignmentClientApp.h b/assignment-client/src/AssignmentClientApp.h index 1b50922980..e48e05f4f0 100644 --- a/assignment-client/src/AssignmentClientApp.h +++ b/assignment-client/src/AssignmentClientApp.h @@ -4,6 +4,7 @@ // // Created by Seth Alves on 2/19/15. // Copyright 2015 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -28,6 +29,7 @@ const QString ASSIGNMENT_MAX_FORKS_OPTION = "max"; const QString ASSIGNMENT_CLIENT_MONITOR_PORT_OPTION = "monitor-port"; const QString ASSIGNMENT_HTTP_STATUS_PORT = "http-status-port"; const QString ASSIGNMENT_LOG_DIRECTORY = "log-directory"; +const QString ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY = "disable-domain-port-auto-discovery"; class AssignmentClientApp : public QCoreApplication { Q_OBJECT diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 68c0dfc9fd..811a731707 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -4,6 +4,7 @@ // // Created by Stephen Birarda on 1/10/2014. // Copyright 2014 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -41,7 +42,8 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen const unsigned int maxAssignmentClientForks, Assignment::Type requestAssignmentType, QString assignmentPool, quint16 listenPort, quint16 childMinListenPort, QUuid walletUUID, QString assignmentServerHostname, - quint16 assignmentServerPort, quint16 httpStatusServerPort, QString logDirectory) : + quint16 assignmentServerPort, quint16 httpStatusServerPort, QString logDirectory, + bool disableDomainPortAutoDiscovery) : _httpManager(QHostAddress::LocalHost, httpStatusServerPort, "", this), _numAssignmentClientForks(numAssignmentClientForks), _minAssignmentClientForks(minAssignmentClientForks), @@ -51,7 +53,8 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen _walletUUID(walletUUID), _assignmentServerHostname(assignmentServerHostname), _assignmentServerPort(assignmentServerPort), - _childMinListenPort(childMinListenPort) + _childMinListenPort(childMinListenPort), + _disableDomainPortAutoDiscovery(disableDomainPortAutoDiscovery) { qDebug() << "_requestAssignmentType =" << _requestAssignmentType; @@ -198,6 +201,9 @@ void AssignmentClientMonitor::spawnChildClient() { _childArguments.append("--" + ASSIGNMENT_TYPE_OVERRIDE_OPTION); _childArguments.append(QString::number(_requestAssignmentType)); } + if (_disableDomainPortAutoDiscovery != false) { + _childArguments.append("--" + ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY); + } if (listenPort) { _childArguments.append("-" + ASSIGNMENT_CLIENT_LISTEN_PORT_OPTION); @@ -266,7 +272,7 @@ void AssignmentClientMonitor::spawnChildClient() { stderrPath = stderrPathTemp; stderrFilename = stderrFilenameTemp; } - + qDebug() << "Child stdout being written to: " << stdoutFilename; qDebug() << "Child stderr being written to: " << stderrFilename; } diff --git a/assignment-client/src/AssignmentClientMonitor.h b/assignment-client/src/AssignmentClientMonitor.h index f5355476b7..20d4a6767b 100644 --- a/assignment-client/src/AssignmentClientMonitor.h +++ b/assignment-client/src/AssignmentClientMonitor.h @@ -4,6 +4,7 @@ // // Created by Stephen Birarda on 1/10/2014. // Copyright 2014 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -27,7 +28,7 @@ extern const char* NUM_FORKS_PARAMETER; struct ACProcess { - QProcess* process; // looks like a dangling pointer, but is parented by the AssignmentClientMonitor + QProcess* process; // looks like a dangling pointer, but is parented by the AssignmentClientMonitor QString logStdoutPath; QString logStderrPath; }; @@ -39,7 +40,7 @@ public: const unsigned int maxAssignmentClientForks, Assignment::Type requestAssignmentType, QString assignmentPool, quint16 listenPort, quint16 childMinListenPort, QUuid walletUUID, QString assignmentServerHostname, quint16 assignmentServerPort, quint16 httpStatusServerPort, - QString logDirectory); + QString logDirectory, bool disableDomainPortAutoDiscovery); ~AssignmentClientMonitor(); void stopChildProcesses(); @@ -80,6 +81,7 @@ private: QSet _childListenPorts; bool _wantsChildFileLogging { false }; + bool _disableDomainPortAutoDiscovery { false }; }; #endif // hifi_AssignmentClientMonitor_h diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index a975302699..cf443367a4 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -377,7 +377,7 @@ void NodeList::sendDomainServerCheckIn() { // if so we need to make sure we have an up-to-date local port in case it restarted if (domainSockAddr.getAddress() == QHostAddress::LocalHost - || hostname == "localhost") { + || hostname == "localhost" && _domainPortAutoDiscovery == true) { quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, domainPort); @@ -534,7 +534,7 @@ void NodeList::sendDomainServerCheckIn() { sendPacket(std::move(packetCopy), domainSockAddr); } sendPacket(std::move(domainPacket), domainSockAddr); - + } } @@ -661,7 +661,7 @@ void NodeList::handleICEConnectionToDomainServer() { _domainHandler.getICEClientID(), _domainHandler.getPendingDomainID()); } -} +} void NodeList::pingPunchForDomainServer() { // make sure if we're here that we actually still need to ping the domain-server @@ -713,7 +713,7 @@ void NodeList::processDomainServerConnectionTokenPacket(QSharedPointer message) { - // parse header information + // parse header information QDataStream packetStream(message->getMessage()); // grab the domain's ID from the beginning of the packet @@ -794,7 +794,7 @@ void NodeList::processDomainServerList(QSharedPointer message) if (_domainHandler.isConnected() && _domainHandler.getUUID() != domainUUID) { // Received packet from different domain. - qWarning() << "IGNORING DomainList packet from" << domainUUID << "while connected to" + qWarning() << "IGNORING DomainList packet from" << domainUUID << "while connected to" << _domainHandler.getUUID() << ": sent " << pingLagTime << " msec ago."; qWarning(networking) << "DomainList request lag (interface->ds): " << domainServerRequestLag << "msec"; qWarning(networking) << "DomainList server processing time: " << domainServerCheckinProcessingTime << "usec"; @@ -821,9 +821,9 @@ void NodeList::processDomainServerList(QSharedPointer message) setSessionLocalID(newLocalID); setSessionUUID(newUUID); - // FIXME: Remove this call to requestDomainSettings() and reinstate the one in DomainHandler::setIsConnected(), in version + // FIXME: Remove this call to requestDomainSettings() and reinstate the one in DomainHandler::setIsConnected(), in version // 2021.2.0. (New protocol version implies a domain server upgrade.) - if (!_domainHandler.isConnected() + if (!_domainHandler.isConnected() && _domainHandler.getScheme() == URL_SCHEME_HIFI && !_domainHandler.getHostname().isEmpty()) { // We're about to connect but we need the domain settings (in particular, the node permissions) in order to adjust the // canRezAvatarEntities permission above before using the permissions in determining whether or not to connect without @@ -831,7 +831,7 @@ void NodeList::processDomainServerList(QSharedPointer message) _domainHandler.requestDomainSettings(); } - // Don't continue login to the domain if have avatar entities and don't have permissions to rez them, unless user has OKed + // Don't continue login to the domain if have avatar entities and don't have permissions to rez them, unless user has OKed // continuing login. if (!newPermissions.can(NodePermissions::Permission::canRezAvatarEntities) && (!adjustedPermissions || !_domainHandler.canConnectWithoutAvatarEntities())) { @@ -920,7 +920,7 @@ void NodeList::pingPunchForInactiveNode(const SharedNodePointer& node) { if (node->getConnectionAttempts() > 0 && node->getConnectionAttempts() % NUM_DEBUG_CONNECTION_ATTEMPTS == 0) { qCDebug(networking) << "No response to UDP hole punch pings for node" << node->getUUID() << "in last 2 s."; } - + auto nodeID = node->getUUID(); // send the ping packet to the local and public sockets for this node diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 59b3815fba..685b998269 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -70,6 +70,8 @@ public: void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; } void sendAssignment(Assignment& assignment); + void setDomainPortAutoDiscovery(bool enabled = true) { _domainPortAutoDiscovery = enabled; }; + void setIsShuttingDown(bool isShuttingDown) { _isShuttingDown = isShuttingDown; } void ignoreNodesInRadius(bool enabled = true); @@ -105,7 +107,7 @@ public: public slots: void reset(QString reason, bool skipDomainHandlerReset = false); void resetFromDomainHandler() { reset("Reset from Domain Handler", true); } - + void sendDomainServerCheckIn(); void handleDSPathQuery(const QString& newPath); @@ -180,6 +182,7 @@ private: bool _requestsDomainListData { false }; bool _sendDomainServerCheckInEnabled { true }; + bool _domainPortAutoDiscovery { true }; mutable QReadWriteLock _ignoredSetLock; tbb::concurrent_unordered_set _ignoredNodeIDs; From d1cf862e45db1a955a46b62353c9b3b5a1715755 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Fri, 25 Jun 2021 01:45:31 -0400 Subject: [PATCH 02/27] Update vircadia-assignment-client.service --- pkg-scripts/vircadia-assignment-client.service | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg-scripts/vircadia-assignment-client.service b/pkg-scripts/vircadia-assignment-client.service index 9c86e4e874..c53fa5ddc7 100644 --- a/pkg-scripts/vircadia-assignment-client.service +++ b/pkg-scripts/vircadia-assignment-client.service @@ -1,5 +1,5 @@ [Unit] -Description=Assignment client service for Vircadia server +Description=Assignment client service for the Vircadia Server After=network.target PartOf=vircadia-server.target @@ -12,7 +12,7 @@ User=vircadia Group=vircadia #LimitCORE=infinity #ExecStart=/opt/vircadia/assignment-client -n 6 -ExecStart=/opt/vircadia/assignment-client --min 6 --max 20 +ExecStart=/opt/vircadia/assignment-client --min 6 --max 20 --disable-domain-port-auto-discovery [Install] WantedBy=multi-user.target From 42a4e3b186ee7b0a52fd6b8931144049380721b4 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Fri, 25 Jun 2021 01:45:49 -0400 Subject: [PATCH 03/27] Update vircadia-assignment-client@.service --- pkg-scripts/vircadia-assignment-client@.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg-scripts/vircadia-assignment-client@.service b/pkg-scripts/vircadia-assignment-client@.service index 4684947426..ec8158b6db 100644 --- a/pkg-scripts/vircadia-assignment-client@.service +++ b/pkg-scripts/vircadia-assignment-client@.service @@ -14,7 +14,7 @@ User=vircadia Group=vircadia #LimitCORE=infinity #ExecStart=/opt/vircadia/assignment-client -n 6 -ExecStart=/opt/vircadia/assignment-client --min 6 --max 20 --server-port $HIFI_DOMAIN_SERVER_PORT +ExecStart=/opt/vircadia/assignment-client --min 6 --max 20 --server-port $HIFI_DOMAIN_SERVER_PORT --disable-domain-port-auto-discovery [Install] WantedBy=multi-user.target From a217f80ee3415433529811d2c92cac054eec85a2 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Sun, 27 Jun 2021 04:14:21 -0400 Subject: [PATCH 04/27] Update NodeList.cpp --- libraries/networking/src/NodeList.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index cf443367a4..41900d6130 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -376,8 +376,8 @@ void NodeList::sendDomainServerCheckIn() { // is this our localhost domain-server? // if so we need to make sure we have an up-to-date local port in case it restarted - if (domainSockAddr.getAddress() == QHostAddress::LocalHost - || hostname == "localhost" && _domainPortAutoDiscovery == true) { + if ((domainSockAddr.getAddress() == QHostAddress::LocalHost || hostname == "localhost") + && _domainPortAutoDiscovery == true) { quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, domainPort); From 88b9b7468e3b8dc89f504dcc69b7ee9de2359174 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Sun, 27 Jun 2021 04:31:14 -0400 Subject: [PATCH 05/27] CR. --- assignment-client/src/AssignmentClient.cpp | 2 +- libraries/networking/src/NodeList.cpp | 2 +- libraries/networking/src/NodeList.h | 4 ++-- pkg-scripts/vircadia-assignment-client.service | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 8e44cdd157..29125fee6f 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -95,7 +95,7 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri qCDebug(assignment_client) << "Disabling domain port auto discovery by the assignment client due to parsed command line parameter."; } - nodeList->setDomainPortAutoDiscovery(_disableDomainPortAutoDiscovery); + nodeList->disableDomainPortAutoDiscovery(_disableDomainPortAutoDiscovery); qCDebug(assignment_client) << "Assignment server socket is" << _assignmentServerSocket; diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 41900d6130..3d28457633 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -377,7 +377,7 @@ void NodeList::sendDomainServerCheckIn() { // if so we need to make sure we have an up-to-date local port in case it restarted if ((domainSockAddr.getAddress() == QHostAddress::LocalHost || hostname == "localhost") - && _domainPortAutoDiscovery == true) { + && _domainPortAutoDiscovery == false) { quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, domainPort); diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 685b998269..9c47abbd9f 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -70,7 +70,7 @@ public: void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; } void sendAssignment(Assignment& assignment); - void setDomainPortAutoDiscovery(bool enabled = true) { _domainPortAutoDiscovery = enabled; }; + void disableDomainPortAutoDiscovery(bool disabled = false) { _domainPortAutoDiscovery = disabled; }; void setIsShuttingDown(bool isShuttingDown) { _isShuttingDown = isShuttingDown; } @@ -182,7 +182,7 @@ private: bool _requestsDomainListData { false }; bool _sendDomainServerCheckInEnabled { true }; - bool _domainPortAutoDiscovery { true }; + bool _domainPortAutoDiscovery { false }; mutable QReadWriteLock _ignoredSetLock; tbb::concurrent_unordered_set _ignoredNodeIDs; diff --git a/pkg-scripts/vircadia-assignment-client.service b/pkg-scripts/vircadia-assignment-client.service index c53fa5ddc7..d8b64be416 100644 --- a/pkg-scripts/vircadia-assignment-client.service +++ b/pkg-scripts/vircadia-assignment-client.service @@ -12,7 +12,7 @@ User=vircadia Group=vircadia #LimitCORE=infinity #ExecStart=/opt/vircadia/assignment-client -n 6 -ExecStart=/opt/vircadia/assignment-client --min 6 --max 20 --disable-domain-port-auto-discovery +ExecStart=/opt/vircadia/assignment-client --min 6 --max 20 [Install] WantedBy=multi-user.target From 241c54919d82e3381174c23cbca009c7a056fab1 Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Thu, 15 Jul 2021 22:19:58 -0400 Subject: [PATCH 06/27] Apply suggestions from code review Co-authored-by: David Rowe --- assignment-client/src/AssignmentClient.cpp | 2 +- assignment-client/src/AssignmentClientMonitor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 29125fee6f..3eb3c83b83 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -193,7 +193,7 @@ void AssignmentClient::sendAssignmentRequest() { auto nodeList = DependencyManager::get(); - if (_assignmentServerHostname == "localhost" && _disableDomainPortAutoDiscovery == false) { + if (_assignmentServerHostname == "localhost" && !_disableDomainPortAutoDiscovery) { // we want to check again for the local domain-server port in case the DS has restarted quint16 localAssignmentServerPort; if (nodeList->getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, localAssignmentServerPort)) { diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 811a731707..43d788f5d1 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -201,7 +201,7 @@ void AssignmentClientMonitor::spawnChildClient() { _childArguments.append("--" + ASSIGNMENT_TYPE_OVERRIDE_OPTION); _childArguments.append(QString::number(_requestAssignmentType)); } - if (_disableDomainPortAutoDiscovery != false) { + if (_disableDomainPortAutoDiscovery) { _childArguments.append("--" + ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY); } From f795418fd7c7b115244e52622d83f95e4fd5ab36 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Fri, 16 Jul 2021 04:23:21 -0400 Subject: [PATCH 07/27] Update supporter info for README.md. --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b84849b205..a4067e30ab 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,16 @@ Vircadia consists of many projects and codebases with its unifying structure's g There are many contributors to Vircadia. Code writers, reviewers, testers, documentation writers, modelers, and general supporters of the project are all integral to its development and success towards its goals. Find out how you can [contribute](CONTRIBUTING.md)! -### [Supporters](https://github.com/sponsors/digisomni/) +### Support -| [Karol Suprynowicz - 74hc595](https://github.com/ksuprynowicz) | +You can support the Vircadia project financially through [GitHub Sponsors](https://github.com/sponsors/digisomni/). + +You can also support individual active contributors by visiting each repository, this is the main Vircadia repository's [list of active contributors](https://vircadia.com/contributors-redirector/?redirect=vircadia/vircadia). Click on a contributor's profile to see if they accept donations! + +Keep in mind that Vircadia consists of multiple smaller projects that might have different active contributors. This is a [a non-exhaustive list](https://github.com/vircadia). + +#### Supporters of the Vircadia Project + +| [Karol Suprynowicz - 74hc595](https://github.com/ksuprynowicz) | | --- | -|

[![ksuprynowicz](https://avatars.githubusercontent.com/u/11568651?s=64&v=4)](https://github.com/ksuprynowicz)

+|

[![ksuprynowicz](https://avatars.githubusercontent.com/u/11568651?s=64&v=4)](https://github.com/ksuprynowicz)

\ No newline at end of file From 11e1e0c201f75b530de52558f17c6c6bbf894d08 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Fri, 16 Jul 2021 04:33:59 -0400 Subject: [PATCH 08/27] Update image for supporter: ksuprynowicz. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4067e30ab..c1cd8323e9 100644 --- a/README.md +++ b/README.md @@ -85,4 +85,4 @@ Keep in mind that Vircadia consists of multiple smaller projects that might have | [Karol Suprynowicz - 74hc595](https://github.com/ksuprynowicz) | | --- | -|

[![ksuprynowicz](https://avatars.githubusercontent.com/u/11568651?s=64&v=4)](https://github.com/ksuprynowicz)

\ No newline at end of file +|

[ksuprynowicz](https://github.com/ksuprynowicz)

\ No newline at end of file From 8d19d0826812a62eca7f145a6987a32fdb81aa03 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Fri, 6 Aug 2021 18:44:53 +0200 Subject: [PATCH 09/27] Fix QDir::operator= is deprecated --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 759a96388d..3c26587d1e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1965,7 +1965,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } QString scriptsSwitch = QString("--").append(SCRIPTS_SWITCH); - _defaultScriptsLocation = getCmdOption(argc, constArgv, scriptsSwitch.toStdString().c_str()); + _defaultScriptsLocation.setPath(getCmdOption(argc, constArgv, scriptsSwitch.toStdString().c_str())); // Make sure we don't time out during slow operations at startup updateHeartbeat(); From 24ab523acc1175ec1164a847ed7ddfc816f477ac Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Fri, 6 Aug 2021 23:26:02 +0200 Subject: [PATCH 10/27] Replace deprecated QAbstractsocket::error with QAbstractSocket::errorOccurred --- libraries/networking/src/LimitedNodeList.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 65e391d467..d45aca2f89 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -1224,8 +1224,7 @@ void LimitedNodeList::updateLocalSocket() { QTcpSocket* localIPTestSocket = new QTcpSocket; connect(localIPTestSocket, &QTcpSocket::connected, this, &LimitedNodeList::connectedForLocalSocketTest); - connect(localIPTestSocket, static_cast(&QTcpSocket::error), - this, &LimitedNodeList::errorTestingLocalSocket); + connect(localIPTestSocket, &QTcpSocket::errorOccurred, this, &LimitedNodeList::errorTestingLocalSocket); // attempt to connect to our reliable host localIPTestSocket->connectToHost(RELIABLE_LOCAL_IP_CHECK_HOST, RELIABLE_LOCAL_IP_CHECK_PORT); From eb146fa434f3f0259051ad100576ceeeec5a3453 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 08:34:58 +0000 Subject: [PATCH 11/27] Bump path-parse from 1.0.6 to 1.0.7 in /screenshare Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] --- screenshare/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/screenshare/package-lock.json b/screenshare/package-lock.json index 6bb34b21a5..16a9828357 100644 --- a/screenshare/package-lock.json +++ b/screenshare/package-lock.json @@ -1014,9 +1014,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "pend": { From ae9f2aa1ee6724f855744b399fc4f684a2c81208 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Thu, 12 Aug 2021 22:53:24 +0200 Subject: [PATCH 12/27] Update slots to the new syntax, use QAbstractSocket::errorOccurred --- libraries/embedded-webserver/src/HTTPConnection.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/embedded-webserver/src/HTTPConnection.cpp b/libraries/embedded-webserver/src/HTTPConnection.cpp index 4c00ba676c..5932c7ed56 100644 --- a/libraries/embedded-webserver/src/HTTPConnection.cpp +++ b/libraries/embedded-webserver/src/HTTPConnection.cpp @@ -124,9 +124,9 @@ HTTPConnection::HTTPConnection(QTcpSocket* socket, HTTPManager* parentManager) : _socket->setParent(this); // connect initial slots - connect(socket, SIGNAL(readyRead()), SLOT(readRequest())); - connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(deleteLater())); - connect(socket, SIGNAL(disconnected()), SLOT(deleteLater())); + connect(socket, &QAbstractSocket::readyRead, this, &HTTPConnection::readRequest); + connect(socket, &QAbstractSocket::errorOccurred, this, &HTTPConnection::deleteLater); + connect(socket, &QAbstractSocket::disconnected, this, &HTTPConnection::deleteLater); } HTTPConnection::~HTTPConnection() { From 8a8093e529e9653cf7817c18caa1531190bd64be Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Thu, 12 Aug 2021 23:49:44 +0200 Subject: [PATCH 13/27] Log the location of the primary resources file Also emit the full path to the file in the exception --- interface/src/Application.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 349e1db18f..a078cb265a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -805,11 +805,13 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { { const QString resourcesBinaryFile = PathUtils::getRccPath(); + qCInfo(interfaceapp) << "Loading primary resources from" << resourcesBinaryFile; + if (!QFile::exists(resourcesBinaryFile)) { - throw std::runtime_error("Unable to find primary resources"); + throw std::runtime_error(QString("Unable to find primary resources from '%1'").arg(resourcesBinaryFile).toStdString()); } if (!QResource::registerResource(resourcesBinaryFile)) { - throw std::runtime_error("Unable to load primary resources"); + throw std::runtime_error(QString("Unable to load primary resources from '%1'").arg(resourcesBinaryFile).toStdString()); } } From 019e012f2ef6dcfca16425eb6b824dea1eb586cb Mon Sep 17 00:00:00 2001 From: Kalila <69767640+digisomni@users.noreply.github.com> Date: Thu, 12 Aug 2021 23:01:13 -0400 Subject: [PATCH 14/27] Apply suggestions from code review Co-authored-by: Heather Anderson --- assignment-client/src/AssignmentClient.cpp | 2 +- libraries/networking/src/NodeList.cpp | 2 +- libraries/networking/src/NodeList.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 1f18709a91..d8dac8ef36 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -91,7 +91,7 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri _assignmentServerSocket.setObjectName("AssignmentServer"); nodeList->setAssignmentServerSocket(_assignmentServerSocket); - if (disableDomainPortAutoDiscovery == true) { + if (disableDomainPortAutoDiscovery) { _disableDomainPortAutoDiscovery = disableDomainPortAutoDiscovery; qCDebug(assignment_client) << "Disabling domain port auto discovery by the assignment client due to parsed command line parameter."; } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 1e07e14803..5f066b3eb3 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -377,7 +377,7 @@ void NodeList::sendDomainServerCheckIn() { // if so we need to make sure we have an up-to-date local port in case it restarted if ((domainSockAddr.getAddress() == QHostAddress::LocalHost || hostname == "localhost") - && _domainPortAutoDiscovery == false) { + && _domainPortAutoDiscovery) { quint16 domainPort = DEFAULT_DOMAIN_SERVER_PORT; getLocalServerPortFromSharedMemory(DOMAIN_SERVER_LOCAL_PORT_SMEM_KEY, domainPort); diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 1c01d384cc..fa6781c4bd 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -71,7 +71,7 @@ public: void setAssignmentServerSocket(const SockAddr& serverSocket) { _assignmentServerSocket = serverSocket; } void sendAssignment(Assignment& assignment); - void disableDomainPortAutoDiscovery(bool disabled = false) { _domainPortAutoDiscovery = disabled; }; + void disableDomainPortAutoDiscovery(bool disabled = false) { _domainPortAutoDiscovery = !disabled; }; void setIsShuttingDown(bool isShuttingDown) { _isShuttingDown = isShuttingDown; } @@ -183,7 +183,7 @@ private: bool _requestsDomainListData { false }; bool _sendDomainServerCheckInEnabled { true }; - bool _domainPortAutoDiscovery { false }; + bool _domainPortAutoDiscovery { true }; mutable QReadWriteLock _ignoredSetLock; tbb::concurrent_unordered_set _ignoredNodeIDs; From e4cb87ba5d91091e6722808de6f0e541ff13a943 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Thu, 12 Aug 2021 23:02:39 -0400 Subject: [PATCH 15/27] CR. --- pkg-scripts/vircadia-assignment-client.service | 2 +- pkg-scripts/vircadia-assignment-client@.service | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg-scripts/vircadia-assignment-client.service b/pkg-scripts/vircadia-assignment-client.service index d8b64be416..be5b450519 100644 --- a/pkg-scripts/vircadia-assignment-client.service +++ b/pkg-scripts/vircadia-assignment-client.service @@ -1,5 +1,5 @@ [Unit] -Description=Assignment client service for the Vircadia Server +Description=Assignment client service for the Vircadia server After=network.target PartOf=vircadia-server.target diff --git a/pkg-scripts/vircadia-assignment-client@.service b/pkg-scripts/vircadia-assignment-client@.service index ec8158b6db..4595bbf9f7 100644 --- a/pkg-scripts/vircadia-assignment-client@.service +++ b/pkg-scripts/vircadia-assignment-client@.service @@ -1,5 +1,5 @@ [Unit] -Description=Assignment client service for Vircadia server +Description=Assignment client service for the Vircadia server After=network.target PartOf=vircadia-server@%i.target From 76010bf650f36e83f943a91289b3666becf4fe78 Mon Sep 17 00:00:00 2001 From: Kalila L Date: Fri, 13 Aug 2021 10:29:16 -0400 Subject: [PATCH 16/27] Update help text for disable domain server port auto discovery option. --- assignment-client/src/AssignmentClientApp.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index 49674f5728..41d0de7f9a 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -100,7 +100,8 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : const QCommandLineOption logDirectoryOption(ASSIGNMENT_LOG_DIRECTORY, "directory to store logs", "log-directory"); parser.addOption(logDirectoryOption); - const QCommandLineOption disableDomainPortAutoDiscoveryOption(ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY, "disable automatic discovery of the domain server port"); + const QCommandLineOption disableDomainPortAutoDiscoveryOption(ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY, + "assignment clients automatically search for the domain server on the local machine, if networking is being managed, then disable automatic discovery of the domain server port"); parser.addOption(disableDomainPortAutoDiscoveryOption); const QCommandLineOption parentPIDOption(PARENT_PID_OPTION, "PID of the parent process", "parent-pid"); From 1122156d3a09afadcf2f3d50914d6d1a2d7db1bf Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 15 Aug 2021 22:07:00 -0400 Subject: [PATCH 17/27] Add secondary red class button Add secondary red class button for "Set Rotation to Zero" button --- scripts/system/html/css/edit-style.css | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css index 5aea382d63..d912cd5d4c 100644 --- a/scripts/system/html/css/edit-style.css +++ b/scripts/system/html/css/edit-style.css @@ -479,7 +479,22 @@ input[type=button].secondary, button.hifi-edit-button.secondary { background: linear-gradient(#343434 20%, #000 100%); cursor: pointer; } - +input[type=button].secondary_red, button.hifi-edit-button.secondary_red { + font-family: Raleway-Bold; + font-size: 10px; + text-transform: uppercase; + vertical-align: top; + height: 18px; + min-width: 60px; + padding: 0 14px; + margin-right: 6px; + border-radius: 4px; + border: none; + color: #fff; + background-color: #94132e; + background: linear-gradient(#d42043 20%, #94132e 100%); + cursor: pointer; +} input[type=button]:enabled:hover, button.hifi-edit-button:enabled:hover { background: linear-gradient(#000, #000); border: none; From 0d39eea2a671f867437247d82be883a319aa8537 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 15 Aug 2021 22:08:46 -0400 Subject: [PATCH 18/27] Add "Set Rotation to Zero" Add a "Set Rotation to Zero" button in properties tab (Spatial section) of the create app. --- scripts/system/create/edit.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 614bd5fd59..727f8ca28d 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -2656,6 +2656,24 @@ var PropertiesTool = function (opts) { } else { audioFeedback.rejection(); } + } else if (data.action === "setRotationToZero") { + if (selectionManager.selections.length === 1 && SelectionManager.hasUnlockedSelection()) { + selectionManager.saveProperties(); + var parentState = getParentState(selectionManager.selections[0]); + if ((parentState === "PARENT_CHILDREN" || parentState === "CHILDREN") && selectionDisplay.getSpaceMode() === "local" ) { + Entities.editEntity(selectionManager.selections[0], { + localRotation: Quat.IDENTITY + }); + } else { + Entities.editEntity(selectionManager.selections[0], { + rotation: Quat.IDENTITY + }); + } + pushCommandForSelections(); + selectionManager._update(false, this); + } else { + audioFeedback.rejection(); + } } } else if (data.type === "propertiesPageReady") { updateSelections(true); From 494740f819eabfcddb28c04e05d73e75d2071574 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Sun, 15 Aug 2021 22:09:27 -0400 Subject: [PATCH 19/27] Add a "Set Rotation to Zero" button Add a "Set Rotation to Zero" button in properties tab (Spatial section) of the create app. --- .../html/js/entityProperties.js | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index 65e14d7203..82015c6350 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -1383,7 +1383,8 @@ const GROUPS = [ { type: "buttons", buttons: [ { id: "copyRotation", label: "Copy Rotation", className: "secondary", onClick: copyRotationProperty }, - { id: "pasteRotation", label: "Paste Rotation", className: "secondary", onClick: pasteRotationProperty } ], + { id: "pasteRotation", label: "Paste Rotation", className: "secondary", onClick: pasteRotationProperty }, + { id: "setRotationToZero", label: "Set Rotation to Zero", className: "secondary_red", onClick: setRotationToZeroProperty }], propertyID: "copyPasteRotation" }, { @@ -1874,10 +1875,16 @@ function setCopyPastePositionAndRotationAvailability (selectionLength, islocked) if (selectionLength > 0 && !islocked) { $('#property-copyPastePosition-button-pastePosition').attr('disabled', false); - $('#property-copyPasteRotation-button-pasteRotation').attr('disabled', false); + $('#property-copyPasteRotation-button-pasteRotation').attr('disabled', false); + if (selectionLength === 1) { + $('#property-copyPasteRotation-button-setRotationToZero').attr('disabled', false); + } else { + $('#property-copyPasteRotation-button-setRotationToZero').attr('disabled', true); + } } else { $('#property-copyPastePosition-button-pastePosition').attr('disabled', true); - $('#property-copyPasteRotation-button-pasteRotation').attr('disabled', true); + $('#property-copyPasteRotation-button-pasteRotation').attr('disabled', true); + $('#property-copyPasteRotation-button-setRotationToZero').attr('disabled', true); } } @@ -3273,7 +3280,12 @@ function pasteRotationProperty() { action: "pasteRotation" })); } - +function setRotationToZeroProperty() { + EventBridge.emitWebEvent(JSON.stringify({ + type: "action", + action: "setRotationToZero" + })); +} /** * USER DATA FUNCTIONS */ From b61d978b0a5e17db785ed871a2643cd6408d4ef5 Mon Sep 17 00:00:00 2001 From: Alezia Kurdis <60075796+AleziaKurdis@users.noreply.github.com> Date: Tue, 17 Aug 2021 21:48:12 -0400 Subject: [PATCH 20/27] Change the label for "Reset Rotation" Change the label for "Reset Rotation" --- .../system/create/entityProperties/html/js/entityProperties.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js index 82015c6350..ff538af016 100644 --- a/scripts/system/create/entityProperties/html/js/entityProperties.js +++ b/scripts/system/create/entityProperties/html/js/entityProperties.js @@ -1384,7 +1384,7 @@ const GROUPS = [ type: "buttons", buttons: [ { id: "copyRotation", label: "Copy Rotation", className: "secondary", onClick: copyRotationProperty }, { id: "pasteRotation", label: "Paste Rotation", className: "secondary", onClick: pasteRotationProperty }, - { id: "setRotationToZero", label: "Set Rotation to Zero", className: "secondary_red", onClick: setRotationToZeroProperty }], + { id: "setRotationToZero", label: "Reset Rotation", className: "secondary_red", onClick: setRotationToZeroProperty }], propertyID: "copyPasteRotation" }, { From 0cf71bd3e13e70ee8c9dda6ca9557e8115cf1338 Mon Sep 17 00:00:00 2001 From: SilverfishVR <53531160+SilverfishVR@users.noreply.github.com> Date: Wed, 18 Aug 2021 22:19:10 +0200 Subject: [PATCH 21/27] make HUD bubble/shield button optional Adds an menu item in "Settings" to toggle the HUD shield/bubble button on or off. Shield button remains available in the tablet or toolbar, it is called "HUD shield button" but suggestions are welcome fixes https://github.com/vircadia/vircadia/issues/1210 --- scripts/system/bubble.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/scripts/system/bubble.js b/scripts/system/bubble.js index eca3b3dcd4..0c019f4e4b 100644 --- a/scripts/system/bubble.js +++ b/scripts/system/bubble.js @@ -46,6 +46,27 @@ }); } + //create a menu item in "Setings" to toggle the bubble/shield HUD button + var menuItemName = "HUD shield button"; + Menu.addMenuItem({ + menuName: "Settings", + menuItemName: menuItemName, + isCheckable: true, + isChecked: AvatarInputs.showBubbleTools + }); + Menu.menuItemEvent.connect(onToggleHudShieldButton); + AvatarInputs.showBubbleToolsChanged.connect(showBubbleToolsChanged); + + function onToggleHudShieldButton(menuItem) { + if (menuItem == menuItemName) { + AvatarInputs.setShowBubbleTools(Menu.isOptionChecked(menuItem)) + }; + } + + function showBubbleToolsChanged(show) { + Menu.setIsOptionChecked(menuItemName, show); + } + // Make the bubble overlay visible, set its position, and play the sound function createOverlays() { var nowTimestamp = Date.now(); @@ -191,6 +212,9 @@ // Cleanup the tablet button and overlays when script is stopped Script.scriptEnding.connect(function () { + Menu.menuItemEvent.disconnect(onToggleHudShieldButton); + AvatarInputs.showBubbleToolsChanged.disconnect(showBubbleToolsChanged); + Menu.removeMenuItem("Settings", menuItemName); button.clicked.disconnect(Users.toggleIgnoreRadius); if (tablet) { tablet.removeButton(button); From 481125f97857f78147c5a9024f2e5b143f649ce7 Mon Sep 17 00:00:00 2001 From: Martin Allerton Date: Wed, 18 Aug 2021 23:54:23 +0100 Subject: [PATCH 22/27] Explore app metaverse api updates Blended the metaverse api places data in to the list with the beacon data. Also lightened the icons at the top as they were a little lost. --- scripts/communityScripts/explore/explore.html | 138 +++++++++++++----- .../libraries/axios/axios.min.js | 3 + 2 files changed, 103 insertions(+), 38 deletions(-) create mode 100644 scripts/communityScripts/libraries/axios/axios.min.js diff --git a/scripts/communityScripts/explore/explore.html b/scripts/communityScripts/explore/explore.html index c147dba134..747e969daa 100644 --- a/scripts/communityScripts/explore/explore.html +++ b/scripts/communityScripts/explore/explore.html @@ -13,8 +13,18 @@ #component-templates { display: none; } + + .thumbnailItem .d-flex { + background: rgba(0, 0, 0, 0.2); + backdrop-filter: blur(5px); + text-shadow: 1px 1px 2px black, 0 0 25px black, 0 0 5px black; + } + + .thumbnailItemHover .d-flex { + background: rgba(100, 100, 100, 0.2); + } - +
@@ -22,7 +32,7 @@ @@ -30,7 +40,7 @@ mdi-close - Add Location + Add Location Beacon Save @@ -101,30 +111,28 @@ @@ -230,7 +238,7 @@ Go Home @@ -238,7 +246,7 @@ Go Back @@ -246,14 +254,14 @@ Go Forward + mdi-map-marker-plus + -->
@@ -286,22 +294,76 @@ +