mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-05 20:16:28 +02:00
Merge branch 'master' into dev/webapp-master-update
This commit is contained in:
commit
b1050dc83a
42 changed files with 394 additions and 173 deletions
|
@ -337,6 +337,13 @@ if (BUILD_GPU_FRAME_PLAYER_ONLY)
|
|||
add_subdirectory(tools/gpu-frame-player)
|
||||
else()
|
||||
|
||||
if (SCREENSHARE)
|
||||
add_subdirectory(screenshare)
|
||||
endif()
|
||||
|
||||
# BUILD_TOOLS option will be handled inside the tools's CMakeLists.txt because 'scribe' tool is required for build anyway
|
||||
add_subdirectory(tools)
|
||||
|
||||
# add subdirectories for all targets
|
||||
if (BUILD_SERVER)
|
||||
add_subdirectory(assignment-client)
|
||||
|
@ -363,13 +370,6 @@ if (BUILD_CLIENT OR BUILD_SERVER)
|
|||
add_subdirectory(server-console)
|
||||
endif()
|
||||
|
||||
if (SCREENSHARE)
|
||||
add_subdirectory(screenshare)
|
||||
endif()
|
||||
|
||||
# BUILD_TOOLS option will be handled inside the tools's CMakeLists.txt because 'scribe' tool is required for build anyway
|
||||
add_subdirectory(tools)
|
||||
|
||||
endif()
|
||||
|
||||
if (BUILD_TESTS)
|
||||
|
|
14
README.md
14
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) |
|
||||
| --- |
|
||||
| <p align="center">[](https://github.com/ksuprynowicz)</p>
|
||||
| <p align="center">[<img src="https://vircadia.com/wp-content/uploads/2021/07/74hc595_profile_2-1.png" width="80" alt="ksuprynowicz" />](https://github.com/ksuprynowicz)</p>
|
|
@ -46,7 +46,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();
|
||||
|
@ -91,6 +92,13 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri
|
|||
_assignmentServerSocket.setObjectName("AssignmentServer");
|
||||
nodeList->setAssignmentServerSocket(_assignmentServerSocket);
|
||||
|
||||
if (disableDomainPortAutoDiscovery) {
|
||||
_disableDomainPortAutoDiscovery = disableDomainPortAutoDiscovery;
|
||||
qCDebug(assignment_client) << "Disabling domain port auto discovery by the assignment client due to parsed command line parameter.";
|
||||
}
|
||||
|
||||
nodeList->disableDomainPortAutoDiscovery(_disableDomainPortAutoDiscovery);
|
||||
|
||||
qCDebug(assignment_client) << "Assignment server socket is" << _assignmentServerSocket;
|
||||
|
||||
// call a timer function every ASSIGNMENT_REQUEST_INTERVAL_MSECS to ask for assignment, if required
|
||||
|
@ -179,7 +187,7 @@ void AssignmentClient::setUpStatusToMonitor() {
|
|||
void AssignmentClient::sendStatusPacketToACM() {
|
||||
// tell the assignment client monitor what this assignment client is doing (if anything)
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
|
||||
|
||||
quint8 assignmentType = Assignment::Type::AllTypes;
|
||||
|
||||
if (_currentAssignment) {
|
||||
|
@ -190,7 +198,7 @@ void AssignmentClient::sendStatusPacketToACM() {
|
|||
|
||||
statusPacket->write(_childAssignmentUUID.toRfc4122());
|
||||
statusPacket->writePrimitive(assignmentType);
|
||||
|
||||
|
||||
nodeList->sendPacket(std::move(statusPacket), _assignmentClientMonitorSocket);
|
||||
}
|
||||
|
||||
|
@ -200,7 +208,7 @@ void AssignmentClient::sendAssignmentRequest() {
|
|||
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
|
||||
if (_assignmentServerHostname == "localhost") {
|
||||
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)) {
|
||||
|
@ -285,10 +293,10 @@ void AssignmentClient::handleCreateAssignmentPacket(QSharedPointer<ReceivedMessa
|
|||
|
||||
void AssignmentClient::handleStopNodePacket(QSharedPointer<ReceivedMessage> message) {
|
||||
const SockAddr& 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 {
|
||||
|
@ -322,7 +330,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());
|
||||
|
||||
|
@ -343,7 +351,7 @@ void AssignmentClient::assignmentCompleted() {
|
|||
nodeList->setOwnerType(NodeType::Unassigned);
|
||||
nodeList->reset("Assignment completed");
|
||||
nodeList->resetNodeInterestSet();
|
||||
|
||||
|
||||
_isAssigned = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,9 +26,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();
|
||||
|
||||
public slots:
|
||||
|
@ -63,6 +63,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:
|
||||
SockAddr _assignmentClientMonitorSocket;
|
||||
|
|
|
@ -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<Assignment::Type>(static_cast<int>(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,10 @@ 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,
|
||||
"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");
|
||||
parser.addOption(parentPIDOption);
|
||||
|
||||
|
@ -151,11 +156,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 +258,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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -42,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),
|
||||
|
@ -52,7 +53,8 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen
|
|||
_walletUUID(walletUUID),
|
||||
_assignmentServerHostname(assignmentServerHostname),
|
||||
_assignmentServerPort(assignmentServerPort),
|
||||
_childMinListenPort(childMinListenPort)
|
||||
_childMinListenPort(childMinListenPort),
|
||||
_disableDomainPortAutoDiscovery(disableDomainPortAutoDiscovery)
|
||||
{
|
||||
qDebug() << "_requestAssignmentType =" << _requestAssignmentType;
|
||||
|
||||
|
@ -199,6 +201,9 @@ void AssignmentClientMonitor::spawnChildClient() {
|
|||
_childArguments.append("--" + ASSIGNMENT_TYPE_OVERRIDE_OPTION);
|
||||
_childArguments.append(QString::number(_requestAssignmentType));
|
||||
}
|
||||
if (_disableDomainPortAutoDiscovery) {
|
||||
_childArguments.append("--" + ASSIGNMENT_DISABLE_DOMAIN_AUTO_PORT_DISCOVERY);
|
||||
}
|
||||
|
||||
if (listenPort) {
|
||||
_childArguments.append("-" + ASSIGNMENT_CLIENT_LISTEN_PORT_OPTION);
|
||||
|
@ -267,7 +272,7 @@ void AssignmentClientMonitor::spawnChildClient() {
|
|||
stderrPath = stderrPathTemp;
|
||||
stderrFilename = stderrFilenameTemp;
|
||||
}
|
||||
|
||||
|
||||
qDebug() << "Child stdout being written to: " << stdoutFilename;
|
||||
qDebug() << "Child stderr being written to: " << stderrFilename;
|
||||
}
|
||||
|
|
|
@ -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<quint16> _childListenPorts;
|
||||
|
||||
bool _wantsChildFileLogging { false };
|
||||
bool _disableDomainPortAutoDiscovery { false };
|
||||
};
|
||||
|
||||
#endif // hifi_AssignmentClientMonitor_h
|
||||
|
|
|
@ -196,7 +196,7 @@ endif()
|
|||
print("https://github.com/vircadia/vircadia/tree/master/tools/qt-builder")
|
||||
print("")
|
||||
print("Alternatively, you can try building against the system Qt by setting the VIRCADIA_USE_SYSTEM_QT environment variable.")
|
||||
print("You'll need to install the development packages, and to have Qt 5.15.0 or newer. ")
|
||||
print("You'll need to install the development packages, and to have Qt 5.15.0 or later.")
|
||||
|
||||
def writeConfig(self):
|
||||
print("Writing cmake config to {}".format(self.configFilePath))
|
||||
|
|
|
@ -19,35 +19,35 @@ endfunction()
|
|||
|
||||
set(CUSTOM_INTERFACE_QRC_PATHS "")
|
||||
|
||||
find_npm()
|
||||
find_package(
|
||||
Qt5 COMPONENTS
|
||||
Gui Widgets Multimedia Network Qml Quick Script Svg
|
||||
${PLATFORM_QT_COMPONENTS}
|
||||
WebChannel WebSockets
|
||||
)
|
||||
|
||||
if (BUILD_TOOLS AND NPM_EXECUTABLE)
|
||||
add_custom_qrc_path(CUSTOM_INTERFACE_QRC_PATHS "${CMAKE_SOURCE_DIR}/tools/jsdoc/out/hifiJSDoc.json" "auto-complete/hifiJSDoc.json")
|
||||
|
||||
if (BUILD_TOOLS AND JSDOC_ENABLED)
|
||||
message(STATUS "JSDoc enabled, depending on jsdoc")
|
||||
add_custom_qrc_path(CUSTOM_INTERFACE_QRC_PATHS "${CMAKE_BINARY_DIR}/tools/jsdoc/out/hifiJSDoc.json" "auto-complete/hifiJSDoc.json")
|
||||
endif ()
|
||||
|
||||
set(RESOURCES_QRC ${CMAKE_CURRENT_BINARY_DIR}/resources.qrc)
|
||||
set(RESOURCES_RCC ${CMAKE_CURRENT_SOURCE_DIR}/compiledResources/resources.rcc)
|
||||
set(RESOURCES_RCC ${CMAKE_CURRENT_BINARY_DIR}/resources.rcc)
|
||||
generate_qrc(OUTPUT ${RESOURCES_QRC} PATH ${CMAKE_CURRENT_SOURCE_DIR}/resources CUSTOM_PATHS ${CUSTOM_INTERFACE_QRC_PATHS} GLOBS *)
|
||||
|
||||
if (ANDROID)
|
||||
# on Android, don't compress the rcc binary
|
||||
add_custom_command(
|
||||
OUTPUT ${RESOURCES_RCC}
|
||||
DEPENDS ${RESOURCES_QRC} ${GENERATE_QRC_DEPENDS}
|
||||
COMMAND "${RCC_BINARY}"
|
||||
ARGS ${RESOURCES_QRC} -no-compress -binary -o ${RESOURCES_RCC}
|
||||
)
|
||||
qt5_add_binary_resources(resources "${RESOURCES_QRC}" DESTINATION "${RESOURCES_RCC}" OPTIONS -no-compress)
|
||||
else ()
|
||||
add_custom_command(
|
||||
OUTPUT ${RESOURCES_RCC}
|
||||
DEPENDS ${RESOURCES_QRC} ${GENERATE_QRC_DEPENDS}
|
||||
COMMAND "${RCC_BINARY}"
|
||||
ARGS ${RESOURCES_QRC} -binary -o ${RESOURCES_RCC}
|
||||
)
|
||||
qt5_add_binary_resources(resources "${RESOURCES_QRC}" DESTINATION "${RESOURCES_RCC}")
|
||||
endif()
|
||||
|
||||
if (BUILD_TOOLS AND JSDOC_ENABLED)
|
||||
add_dependencies(resources jsdoc)
|
||||
endif()
|
||||
|
||||
list(APPEND GENERATE_QRC_DEPENDS ${RESOURCES_RCC})
|
||||
add_custom_target(resources ALL DEPENDS ${GENERATE_QRC_DEPENDS})
|
||||
|
||||
# set a default root dir for each of our optional externals if it was not passed
|
||||
set(OPTIONAL_EXTERNALS "LeapMotion")
|
||||
|
@ -96,13 +96,6 @@ else ()
|
|||
list(REMOVE_ITEM INTERFACE_SRCS ${SPEECHRECOGNIZER_CPP})
|
||||
endif ()
|
||||
|
||||
find_package(
|
||||
Qt5 COMPONENTS
|
||||
Gui Widgets Multimedia Network Qml Quick Script Svg
|
||||
${PLATFORM_QT_COMPONENTS}
|
||||
WebChannel WebSockets
|
||||
)
|
||||
|
||||
# grab the ui files in resources/ui
|
||||
file (GLOB_RECURSE QT_UI_FILES ui/*.ui)
|
||||
source_group("UI Files" FILES ${QT_UI_FILES})
|
||||
|
@ -191,13 +184,7 @@ else ()
|
|||
add_executable(${TARGET_NAME} ${INTERFACE_SRCS} ${QM})
|
||||
endif ()
|
||||
|
||||
|
||||
if (BUILD_TOOLS AND NPM_EXECUTABLE)
|
||||
# require JSDoc to be build before interface is deployed
|
||||
add_dependencies(resources jsdoc)
|
||||
endif()
|
||||
|
||||
if (WIN32 OR APPLE)
|
||||
if (NOT ANDROID)
|
||||
add_dependencies(${TARGET_NAME} resources)
|
||||
endif()
|
||||
|
||||
|
@ -343,10 +330,6 @@ if (APPLE)
|
|||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${CMAKE_SOURCE_DIR}/scripts"
|
||||
"${RESOURCES_DEV_DIR}/scripts"
|
||||
# copy JSDoc files beside the executable
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${CMAKE_SOURCE_DIR}/tools/jsdoc/out"
|
||||
"${RESOURCES_DEV_DIR}/jsdoc"
|
||||
# copy the resources files beside the executable
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
|
||||
"${RESOURCES_RCC}"
|
||||
|
@ -378,6 +361,13 @@ if (APPLE)
|
|||
)
|
||||
endif()
|
||||
|
||||
if (JSDOC_ENABLED)
|
||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
||||
# copy JSDoc files beside the executable
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${JSDOC_OUTPUT_PATH}"
|
||||
"${RESOURCES_DEV_DIR}/jsdoc")
|
||||
endif()
|
||||
# call the fixup_interface macro to add required bundling commands for installation
|
||||
fixup_interface()
|
||||
|
||||
|
@ -387,9 +377,6 @@ else()
|
|||
|
||||
# copy the resources files beside the executable
|
||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
|
||||
"${RESOURCES_RCC}"
|
||||
"${INTERFACE_EXEC_DIR}"
|
||||
# FIXME, the edit script code loads HTML from the scripts folder
|
||||
# which in turn relies on CSS that refers to the fonts. In theory
|
||||
# we should be able to modify the CSS to reference the QRC path to
|
||||
|
@ -407,11 +394,18 @@ else()
|
|||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
|
||||
"${PROJECT_SOURCE_DIR}/resources/serverless/redirect.json"
|
||||
"${RESOURCES_DEV_DIR}/serverless/redirect.json"
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
|
||||
"${RESOURCES_RCC}"
|
||||
"${INTERFACE_EXEC_DIR}/resources.rcc"
|
||||
)
|
||||
|
||||
if (JSDOC_ENABLED)
|
||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
||||
# copy JSDoc files beside the executable
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${CMAKE_SOURCE_DIR}/tools/jsdoc/out"
|
||||
"${INTERFACE_EXEC_DIR}/jsdoc"
|
||||
)
|
||||
"${JSDOC_OUTPUT_PATH}"
|
||||
"${INTERFACE_EXEC_DIR}/jsdoc")
|
||||
endif()
|
||||
|
||||
# link target to external libraries
|
||||
if (WIN32)
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1965,7 +1967,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();
|
||||
|
@ -3264,12 +3266,12 @@ void Application::initializeUi() {
|
|||
auto newValidator = [=](const QUrl& url) -> bool {
|
||||
QString whitelistPrefix = "[WHITELIST ENTITY SCRIPTS]";
|
||||
QList<QString> safeURLS = { "" };
|
||||
safeURLS += qEnvironmentVariable("EXTRA_WHITELIST").trimmed().split(QRegExp("\\s*,\\s*"), QString::SkipEmptyParts);
|
||||
safeURLS += qEnvironmentVariable("EXTRA_WHITELIST").trimmed().split(QRegExp("\\s*,\\s*"), Qt::SkipEmptyParts);
|
||||
|
||||
// PULL SAFEURLS FROM INTERFACE.JSON Settings
|
||||
|
||||
QVariant raw = Setting::Handle<QVariant>("private/settingsSafeURLS").get();
|
||||
QStringList settingsSafeURLS = raw.toString().trimmed().split(QRegExp("\\s*[,\r\n]+\\s*"), QString::SkipEmptyParts);
|
||||
QStringList settingsSafeURLS = raw.toString().trimmed().split(QRegExp("\\s*[,\r\n]+\\s*"), Qt::SkipEmptyParts);
|
||||
safeURLS += settingsSafeURLS;
|
||||
|
||||
// END PULL SAFEURLS FROM INTERFACE.JSON Settings
|
||||
|
@ -8846,19 +8848,19 @@ void Application::initPlugins(const QStringList& arguments) {
|
|||
parser.parse(arguments);
|
||||
|
||||
if (parser.isSet(display)) {
|
||||
auto preferredDisplays = parser.value(display).split(',', QString::SkipEmptyParts);
|
||||
auto preferredDisplays = parser.value(display).split(',', Qt::SkipEmptyParts);
|
||||
qInfo() << "Setting prefered display plugins:" << preferredDisplays;
|
||||
PluginManager::getInstance()->setPreferredDisplayPlugins(preferredDisplays);
|
||||
}
|
||||
|
||||
if (parser.isSet(disableDisplays)) {
|
||||
auto disabledDisplays = parser.value(disableDisplays).split(',', QString::SkipEmptyParts);
|
||||
auto disabledDisplays = parser.value(disableDisplays).split(',', Qt::SkipEmptyParts);
|
||||
qInfo() << "Disabling following display plugins:" << disabledDisplays;
|
||||
PluginManager::getInstance()->disableDisplays(disabledDisplays);
|
||||
}
|
||||
|
||||
if (parser.isSet(disableInputs)) {
|
||||
auto disabledInputs = parser.value(disableInputs).split(',', QString::SkipEmptyParts);
|
||||
auto disabledInputs = parser.value(disableInputs).split(',', Qt::SkipEmptyParts);
|
||||
qInfo() << "Disabling following input plugins:" << disabledInputs;
|
||||
PluginManager::getInstance()->disableInputs(disabledInputs);
|
||||
}
|
||||
|
|
|
@ -827,10 +827,10 @@ Menu::Menu() {
|
|||
});
|
||||
|
||||
// Help > Vircadia Forum
|
||||
/* action = addActionToQMenuAndActionHash(helpMenu, "Online Forums");
|
||||
action = addActionToQMenuAndActionHash(helpMenu, "Community Support");
|
||||
connect(action, &QAction::triggered, qApp, [] {
|
||||
QDesktopServices::openUrl(NetworkingConstants::HELP_FORUM_URL));
|
||||
}); */
|
||||
QDesktopServices::openUrl(NetworkingConstants::HELP_COMMUNITY_URL);
|
||||
});
|
||||
|
||||
// Help > Scripting Reference
|
||||
action = addActionToQMenuAndActionHash(helpMenu, "Online Script Reference");
|
||||
|
|
|
@ -7,3 +7,7 @@ include_hifi_library_headers(hfm)
|
|||
include_hifi_library_headers(image)
|
||||
|
||||
target_nsight()
|
||||
|
||||
if (WIN32)
|
||||
add_compile_definitions(_USE_MATH_DEFINES)
|
||||
endif()
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -19,3 +19,6 @@ include_hifi_library_headers(graphics-scripting) # for Forward.h
|
|||
target_bullet()
|
||||
target_polyvox()
|
||||
|
||||
if (WIN32)
|
||||
add_compile_definitions(_USE_MATH_DEFINES)
|
||||
endif()
|
||||
|
|
|
@ -9,3 +9,7 @@ include_hifi_library_headers(ktx)
|
|||
include_hifi_library_headers(material-networking)
|
||||
include_hifi_library_headers(procedural)
|
||||
link_hifi_libraries(shared shaders networking octree avatars graphics model-networking)
|
||||
|
||||
if (WIN32)
|
||||
add_compile_definitions(_USE_MATH_DEFINES)
|
||||
endif()
|
||||
|
|
|
@ -68,7 +68,7 @@ EntityTree::~EntityTree() {
|
|||
}
|
||||
|
||||
void EntityTree::setEntityScriptSourceWhitelist(const QString& entityScriptSourceWhitelist) {
|
||||
_entityScriptSourceWhitelist = entityScriptSourceWhitelist.split(',', QString::SkipEmptyParts);
|
||||
_entityScriptSourceWhitelist = entityScriptSourceWhitelist.split(',', Qt::SkipEmptyParts);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,3 +11,7 @@ if (UNIX AND NOT APPLE)
|
|||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(image Threads::Threads)
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
add_compile_definitions(_USE_MATH_DEFINES)
|
||||
endif()
|
||||
|
|
|
@ -59,7 +59,7 @@ void AssetResourceRequest::doSend() {
|
|||
// We'll either have a hash or an ATP path to a file (that maps to a hash)
|
||||
if (urlIsAssetHash(_url)) {
|
||||
// We've detected that this is a hash - simply use AssetClient to request that asset
|
||||
auto parts = _url.path().split(".", QString::SkipEmptyParts);
|
||||
auto parts = _url.path().split(".", Qt::SkipEmptyParts);
|
||||
auto hash = parts.length() > 0 ? parts[0] : "";
|
||||
|
||||
requestHash(hash);
|
||||
|
|
|
@ -1237,8 +1237,7 @@ void LimitedNodeList::updateLocalSocket() {
|
|||
QTcpSocket* localIPTestSocket = new QTcpSocket;
|
||||
|
||||
connect(localIPTestSocket, &QTcpSocket::connected, this, &LimitedNodeList::connectedForLocalSocketTest);
|
||||
connect(localIPTestSocket, static_cast<void(QTcpSocket::*)(QAbstractSocket::SocketError)>(&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);
|
||||
|
|
|
@ -71,8 +71,9 @@ namespace NetworkingConstants {
|
|||
const unsigned short STUN_SERVER_DEFAULT_PORT = 19302;
|
||||
#endif
|
||||
|
||||
const QUrl HELP_DOCS_URL { "https://docs.vircadia.com" };
|
||||
const QUrl HELP_FORUM_URL { "https://forum.vircadia.com" };
|
||||
const QUrl HELP_COMMUNITY_URL{ "https://vircadia.com/#community" };
|
||||
const QUrl HELP_DOCS_URL{ "https://docs.vircadia.com" };
|
||||
const QUrl HELP_FORUM_URL{ "https://forum.vircadia.com" };
|
||||
const QUrl HELP_SCRIPTING_REFERENCE_URL{ "https://apidocs.vircadia.dev/" };
|
||||
const QUrl HELP_RELEASE_NOTES_URL{ "https://docs.vircadia.com/release-notes.html" };
|
||||
const QUrl HELP_BUG_REPORT_URL{ "https://github.com/vircadia/vircadia/issues" };
|
||||
|
|
|
@ -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") {
|
||||
if ((domainSockAddr.getAddress() == QHostAddress::LocalHost || hostname == "localhost")
|
||||
&& _domainPortAutoDiscovery) {
|
||||
|
||||
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
|
||||
|
@ -715,7 +715,7 @@ void NodeList::processDomainList(QSharedPointer<ReceivedMessage> message) {
|
|||
|
||||
// WEBRTC TODO: Move code into packet library. And update reference in DomainServerList.js.
|
||||
|
||||
// parse header information
|
||||
// parse header information
|
||||
QDataStream packetStream(message->getMessage());
|
||||
|
||||
// grab the domain's ID from the beginning of the packet
|
||||
|
@ -796,7 +796,7 @@ void NodeList::processDomainList(QSharedPointer<ReceivedMessage> 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";
|
||||
|
@ -823,7 +823,7 @@ void NodeList::processDomainList(QSharedPointer<ReceivedMessage> 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()
|
||||
&& _domainHandler.getScheme() == URL_SCHEME_VIRCADIA && !_domainHandler.getHostname().isEmpty()) {
|
||||
|
@ -833,7 +833,7 @@ void NodeList::processDomainList(QSharedPointer<ReceivedMessage> 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())) {
|
||||
|
@ -926,7 +926,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
|
||||
|
|
|
@ -71,6 +71,8 @@ public:
|
|||
void setAssignmentServerSocket(const SockAddr& serverSocket) { _assignmentServerSocket = serverSocket; }
|
||||
void sendAssignment(Assignment& assignment);
|
||||
|
||||
void disableDomainPortAutoDiscovery(bool disabled = false) { _domainPortAutoDiscovery = !disabled; };
|
||||
|
||||
void setIsShuttingDown(bool isShuttingDown) { _isShuttingDown = isShuttingDown; }
|
||||
|
||||
void ignoreNodesInRadius(bool enabled = true);
|
||||
|
@ -106,7 +108,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);
|
||||
|
||||
|
@ -183,6 +185,7 @@ private:
|
|||
bool _requestsDomainListData { false };
|
||||
|
||||
bool _sendDomainServerCheckInEnabled { true };
|
||||
bool _domainPortAutoDiscovery { true };
|
||||
|
||||
mutable QReadWriteLock _ignoredSetLock;
|
||||
tbb::concurrent_unordered_set<QUuid, UUIDHasher> _ignoredNodeIDs;
|
||||
|
|
|
@ -16,3 +16,6 @@ if (NOT ANDROID)
|
|||
target_nsight()
|
||||
endif ()
|
||||
|
||||
if (WIN32)
|
||||
add_compile_definitions(_USE_MATH_DEFINES)
|
||||
endif()
|
||||
|
|
|
@ -1624,7 +1624,7 @@ std::set<unsigned int> Model::getMeshIDsFromMaterialID(QString parentMaterialNam
|
|||
};
|
||||
|
||||
if (parentMaterialName.length() > 2 && parentMaterialName.startsWith("[") && parentMaterialName.endsWith("]")) {
|
||||
QStringList list = parentMaterialName.split(",", QString::SkipEmptyParts);
|
||||
QStringList list = parentMaterialName.split(",", Qt::SkipEmptyParts);
|
||||
for (int i = 0; i < list.length(); i++) {
|
||||
auto& target = list[i];
|
||||
if (i == 0) {
|
||||
|
|
|
@ -187,7 +187,7 @@ void inputControllerFromScriptValue(const QScriptValue &object, controller::Inpu
|
|||
//
|
||||
// Extract the url portion of a url that has been encoded with encodeEntityIdIntoEntityUrl(...)
|
||||
QString extractUrlFromEntityUrl(const QString& url) {
|
||||
auto parts = url.split(' ', QString::SkipEmptyParts);
|
||||
auto parts = url.split(' ', Qt::SkipEmptyParts);
|
||||
if (parts.length() > 0) {
|
||||
return parts[0];
|
||||
} else {
|
||||
|
@ -2386,7 +2386,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co
|
|||
bool passList = false; // assume unsafe
|
||||
QString whitelistPrefix = "[WHITELIST ENTITY SCRIPTS]";
|
||||
QList<QString> safeURLPrefixes = { "file:///", "atp:", "cache:" };
|
||||
safeURLPrefixes += qEnvironmentVariable("EXTRA_WHITELIST").trimmed().split(QRegExp("\\s*,\\s*"), QString::SkipEmptyParts);
|
||||
safeURLPrefixes += qEnvironmentVariable("EXTRA_WHITELIST").trimmed().split(QRegExp("\\s*,\\s*"), Qt::SkipEmptyParts);
|
||||
|
||||
// Entity Script Whitelist toggle check.
|
||||
Setting::Handle<bool> whitelistEnabled {"private/whitelistEnabled", false };
|
||||
|
@ -2397,7 +2397,7 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co
|
|||
|
||||
// Pull SAFEURLS from the Interface.JSON settings.
|
||||
QVariant raw = Setting::Handle<QVariant>("private/settingsSafeURLS").get();
|
||||
QStringList settingsSafeURLS = raw.toString().trimmed().split(QRegExp("\\s*[,\r\n]+\\s*"), QString::SkipEmptyParts);
|
||||
QStringList settingsSafeURLS = raw.toString().trimmed().split(QRegExp("\\s*[,\r\n]+\\s*"), Qt::SkipEmptyParts);
|
||||
safeURLPrefixes += settingsSafeURLS;
|
||||
// END Pull SAFEURLS from the Interface.JSON settings.
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ setup_hifi_library(Gui Network Script)
|
|||
|
||||
if (WIN32)
|
||||
target_link_libraries(${TARGET_NAME} Wbemuuid.lib)
|
||||
add_compile_definitions(_USE_MATH_DEFINES)
|
||||
endif()
|
||||
|
||||
if (ANDROID)
|
||||
|
|
|
@ -68,7 +68,7 @@ QString FileUtils::readFile(const QString& filename) {
|
|||
}
|
||||
|
||||
QStringList FileUtils::readLines(const QString& filename, QString::SplitBehavior splitBehavior) {
|
||||
return readFile(filename).split(QRegularExpression("[\\r\\n]"), QString::SkipEmptyParts);
|
||||
return readFile(filename).split(QRegularExpression("[\\r\\n]"), Qt::SkipEmptyParts);
|
||||
}
|
||||
|
||||
void FileUtils::locateFile(const QString& filePath) {
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
|
6
screenshare/package-lock.json
generated
6
screenshare/package-lock.json
generated
|
@ -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": {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
</style>
|
||||
<!--<script src="js/TestEventBridge.js"></script>-->
|
||||
<!--<script src="../Explore/js/TestEventBridge.js"></script>-->
|
||||
</head>
|
||||
<body>
|
||||
<div id="component-templates">
|
||||
|
@ -22,7 +32,7 @@
|
|||
<v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn color="grey darken-3" class="ml-5" v-show="permission" value="animations" v-bind="attrs" v-on="on" fab small>
|
||||
<v-icon color="purple">mdi-map-plus</v-icon>
|
||||
<v-icon color="purple lighten-2">mdi-map-plus</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-card>
|
||||
|
@ -30,7 +40,7 @@
|
|||
<v-btn icon dark @click="closeDialog();">
|
||||
<v-icon>mdi-close</v-icon>
|
||||
</v-btn>
|
||||
<v-toolbar-title>Add Location</v-toolbar-title>
|
||||
<v-toolbar-title>Add Location Beacon</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-toolbar-items>
|
||||
<v-btn dark text @click="addLocation()">Save</v-btn>
|
||||
|
@ -101,30 +111,28 @@
|
|||
<template v-slot:default="props">
|
||||
<v-row dense>
|
||||
<v-col v-for="item in props.items"
|
||||
:key="item.name"
|
||||
:key="item.index"
|
||||
cols="12"
|
||||
sm="6"
|
||||
md="4"
|
||||
lg="3">
|
||||
<v-hover
|
||||
v-slot:default="{ hover }"
|
||||
>
|
||||
<v-card
|
||||
@click.native="openLocation(item['Visit'])"
|
||||
:color="hover ? 'grey darken-3' : 'grey darken-4'"
|
||||
>
|
||||
<!--<v-card-title class="headline">{{ item["Domain Name"] }}</v-card-title>-->
|
||||
<v-hover v-slot:default="{ hover }">
|
||||
<v-card @click.native="openLocation(item['location'])"
|
||||
:color="hover ? 'grey darken-3' : 'grey darken-4'"
|
||||
:style="item.thumbnail ? 'background-size: cover; background-position: center; background-image: url(' + item.thumbnail +');' : '' "
|
||||
:class="item.thumbnail ? (hover ? 'thumbnailItem thumbnailItemHover' : 'thumbnailItem') : '' "
|
||||
>
|
||||
<div class="d-flex flex-no-wrap justify-space-between">
|
||||
<div>
|
||||
<v-card-title class="text-h6 d-block text-truncate pa-2" v-text="item['Domain Name']" style="max-width: 400px;"></v-card-title>
|
||||
<v-card-subtitle class="pa-2 d-block text-truncate" style="max-width: 400px;" v-text="item.Owner"></v-card-subtitle>
|
||||
</div>
|
||||
<div style="text-align: right;">
|
||||
<v-card-title align-right class="align-right" v-text="item['People']"></v-card-title>
|
||||
</div>
|
||||
<div>
|
||||
<v-card-title class="text-h6 d-block text-truncate pa-2" v-text="item['name']" style="max-width: 400px;"></v-card-title>
|
||||
<v-card-subtitle class="pa-2 d-block text-truncate" style="max-width: 400px;" v-text="item.owner"></v-card-subtitle>
|
||||
</div>
|
||||
<div style="text-align: right;">
|
||||
<v-card-title align-right class="align-right" v-text="item['userCount']"></v-card-title>
|
||||
</div>
|
||||
</div>
|
||||
</v-card>
|
||||
</hover>
|
||||
</v-hover>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</template>
|
||||
|
@ -230,7 +238,7 @@
|
|||
<v-tooltip bottom>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" v-show="isHomeSet" value="animations" fab small @click="navigateHome()">
|
||||
<v-icon color="purple">mdi-home</v-icon>
|
||||
<v-icon color="purple lighten-2">mdi-home</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>Go Home</span>
|
||||
|
@ -238,7 +246,7 @@
|
|||
<v-tooltip bottom>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateBack()">
|
||||
<v-icon color="purple">mdi-arrow-left-bold</v-icon>
|
||||
<v-icon color="purple lighten-2">mdi-arrow-left-bold</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>Go Back</span>
|
||||
|
@ -246,14 +254,14 @@
|
|||
<v-tooltip bottom>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateForward()">
|
||||
<v-icon color="purple">mdi-arrow-right-bold</v-icon>
|
||||
<v-icon color="purple lighten-2">mdi-arrow-right-bold</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>Go Forward</span>
|
||||
</v-tooltip>
|
||||
<!--<v-btn value="animations" fab small>
|
||||
<v-icon color="purple">mdi-map-marker-plus</v-icon>
|
||||
</v-btn>-->
|
||||
<v-icon color="purple">mdi-map-marker-plus</v-icon>
|
||||
</v-btn>-->
|
||||
<add-location ref="addLocation" :permission="permission"></add-location>
|
||||
</v-app-bar>
|
||||
</div>
|
||||
|
@ -286,22 +294,75 @@
|
|||
<script src="../libraries/vue/vue.min.js"></script>
|
||||
<script src="../libraries/vue-router/vue-router.js"></script>
|
||||
<script src="../libraries/vuetify/vuetify-v2.3.9.js"></script>
|
||||
<script src="../libraries/axios/axios.min.js"></script>
|
||||
|
||||
<script>
|
||||
var exploreComponent = null;
|
||||
var locationData = null;
|
||||
var placesData = null;
|
||||
|
||||
function blendedData() {
|
||||
var joinedData = [];
|
||||
if (locationData != null) {
|
||||
for (var i = 0; i < locationData.length; i++) {
|
||||
joinedData.push({
|
||||
"index": joinedData.length,
|
||||
"location": locationData[i].Visit,
|
||||
"name": locationData[i]['Domain Name'],
|
||||
"owner": locationData[i].Owner,
|
||||
"userCount": locationData[i].People,
|
||||
"description": "",
|
||||
"thumbnail": ""
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (placesData != null) {
|
||||
var activeThresholdTime = new Date();
|
||||
activeThresholdTime.setMinutes(activeThresholdTime.getMinutes() - 15);
|
||||
|
||||
// while blending metaverse data ensure it is cleaned for active domains
|
||||
for (var i = 0; i < placesData.length; i++) {
|
||||
if (placesData[i].domain.active && placesData[i].visibility == "open" && new Date(placesData[i].last_activity_update) > activeThresholdTime) {
|
||||
joinedData.push({
|
||||
"index": joinedData.length,
|
||||
"location": placesData[i].address,
|
||||
"name": placesData[i].name,
|
||||
"owner": placesData[i].managers[0],
|
||||
"userCount": placesData[i].current_attendance,
|
||||
"description": placesData[i].description,
|
||||
"thumbnail": placesData[i].thumbnail
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return joinedData;
|
||||
}
|
||||
|
||||
function getAddressListData(component) {
|
||||
exploreComponent = component;
|
||||
|
||||
if (locationData != null) {
|
||||
exploreComponent.updateData(locationData);
|
||||
return;
|
||||
// if json data not loaded fire emti event for it
|
||||
if (locationData == null) {
|
||||
var readyEvent = {
|
||||
"action": "requestAddressList",
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
var readyEvent = {
|
||||
"action": "requestAddressList",
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
// if metaverse data not loaded fire a request for it
|
||||
if (placesData == null) {
|
||||
// fire off data get against the metaverse
|
||||
axios.get("https://metaverse.vircadia.com/live/api/v1/places")
|
||||
.then((response) => {
|
||||
placesData = response.data.data.places;
|
||||
exploreComponent.updateData(blendedData());
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var bookmarksComponent = null;
|
||||
|
@ -346,8 +407,8 @@
|
|||
page: 1,
|
||||
pageCount: 0,
|
||||
itemsPerPage: 6,
|
||||
sortBy: 'People',
|
||||
items: [],
|
||||
sortBy: 'userCount',
|
||||
items: [],
|
||||
}
|
||||
},
|
||||
template: document.getElementById("explore-template").innerHTML,
|
||||
|
@ -544,7 +605,7 @@
|
|||
if (messageData.action == "addressListv2") {
|
||||
self.permission = messageData.permission;
|
||||
locationData = messageData.myAddress;
|
||||
exploreComponent.updateData(locationData);
|
||||
exploreComponent.updateData(blendedData());
|
||||
self.isHomeSet = messageData.isHomeSet;
|
||||
}
|
||||
if (messageData.action == "bookmarksList") {
|
||||
|
@ -553,9 +614,9 @@
|
|||
}
|
||||
if (messageData.action == "retrievePortInformationResponse") {
|
||||
addLocationData = messageData.goToAddresses;
|
||||
for (let i = 0; i < addLocationData.length; i++) {
|
||||
var metaverseProvider = addLocationData[i].split("/")[2].split(":")[0];
|
||||
addLocationData[i] = "https://" + metaverseProvider + "/interim/d-goto/app/decentralizedGoToServerScript.js";
|
||||
for (let i = 0; i < addLocationData.length; i++) {
|
||||
var metaverseProvider = addLocationData[i].split("/")[2].split(":")[0];
|
||||
addLocationData[i] = "https://" + metaverseProvider + "/interim/d-goto/app/decentralizedGoToServerScript.js";
|
||||
}
|
||||
addLocationComponent.updateData(addLocationData);
|
||||
}
|
||||
|
|
19
scripts/communityScripts/libraries/axios/LICENSE
Normal file
19
scripts/communityScripts/libraries/axios/LICENSE
Normal file
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2014-present Matt Zabriskie
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
3
scripts/communityScripts/libraries/axios/axios.min.js
vendored
Normal file
3
scripts/communityScripts/libraries/axios/axios.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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: "Reset Rotation", className: "secondary_red 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
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
# add the tool directories
|
||||
message(STATUS "Checking for npm")
|
||||
find_npm()
|
||||
|
||||
if (NPM_EXECUTABLE)
|
||||
add_subdirectory(jsdoc)
|
||||
set_target_properties(jsdoc PROPERTIES FOLDER "Tools")
|
||||
message(STATUS "Checking for npm - found ${NPM_EXECUTABLE}, will build jsdoc")
|
||||
add_subdirectory(jsdoc)
|
||||
set_target_properties(jsdoc PROPERTIES FOLDER "Tools")
|
||||
else()
|
||||
message(NOTICE "Checking for npm - not found, jsdoc won't be genereated. Tab completion in the js console won't work!")
|
||||
endif()
|
||||
|
||||
function(check_test name)
|
||||
|
|
|
@ -5,11 +5,15 @@ add_custom_target(${TARGET_NAME})
|
|||
find_npm()
|
||||
|
||||
set(JSDOC_WORKING_DIR ${CMAKE_SOURCE_DIR}/tools/jsdoc)
|
||||
set(JSDOC_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/node_modules/.bin/jsdoc JSDOC_PATH)
|
||||
file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/config.json JSDOC_CONFIG_PATH)
|
||||
file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/out OUTPUT_DIR)
|
||||
file(TO_NATIVE_PATH ${JSDOC_OUTPUT_DIR}/out OUTPUT_DIR)
|
||||
file(TO_NATIVE_PATH ${JSDOC_WORKING_DIR}/root.js NATIVE_JSDOC_WORKING_DIR)
|
||||
|
||||
set(JSDOC_OUTPUT_PATH ${OUTPUT_DIR} CACHE INTERNAL "${PROJECT_NAME}: JSDoc output directory")
|
||||
|
||||
add_custom_command(TARGET ${TARGET_NAME}
|
||||
COMMAND ${NPM_EXECUTABLE} --no-progress install && ${JSDOC_PATH} ${NATIVE_JSDOC_WORKING_DIR} -c ${JSDOC_CONFIG_PATH} -d ${OUTPUT_DIR}
|
||||
WORKING_DIRECTORY ${JSDOC_WORKING_DIR}
|
||||
|
|
|
@ -1,8 +1,22 @@
|
|||
exports.handlers = {
|
||||
processingComplete: function(e) {
|
||||
const pathTools = require('path');
|
||||
var outputFolder = pathTools.join(__dirname, '../out');
|
||||
var outputFolder;
|
||||
var doclets = e.doclets.map(doclet => Object.assign({}, doclet));
|
||||
|
||||
var argv = process.argv;
|
||||
for (var i = 0; i < argv.length; i++) {
|
||||
if (argv[i] === '-d') {
|
||||
outputFolder = argv[i+1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!outputFolder) {
|
||||
console.log("Output folder not found, specify it with -d");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const fs = require('fs');
|
||||
if (!fs.existsSync(outputFolder)) {
|
||||
fs.mkdirSync(outputFolder);
|
||||
|
@ -13,7 +27,7 @@ exports.handlers = {
|
|||
return console.log(err);
|
||||
}
|
||||
|
||||
console.log("The Vircadia JSDoc JSON was saved!");
|
||||
console.log("The Vircadia JSDoc JSON was saved into " + outputFolder + "!");
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
|
@ -4,24 +4,19 @@ project(${TARGET_NAME})
|
|||
set(CUSTOM_NITPICK_QRC_PATHS "")
|
||||
|
||||
find_npm()
|
||||
find_package(Qt5 COMPONENTS Widgets)
|
||||
|
||||
set(RESOURCES_QRC ${CMAKE_CURRENT_BINARY_DIR}/resources.qrc)
|
||||
set(RESOURCES_RCC ${CMAKE_CURRENT_SOURCE_DIR}/compiledResources/resources.rcc)
|
||||
set(RESOURCES_RCC ${CMAKE_CURRENT_BINARY_DIR}/resources.rcc)
|
||||
generate_qrc(OUTPUT ${RESOURCES_QRC} PATH ${CMAKE_CURRENT_SOURCE_DIR}/resources CUSTOM_PATHS ${CUSTOM_NITPICK_QRC_PATHS} GLOBS *)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${RESOURCES_RCC}
|
||||
DEPENDS ${RESOURCES_QRC} ${GENERATE_QRC_DEPENDS}
|
||||
COMMAND "${RCC_BINARY}"
|
||||
ARGS ${RESOURCES_QRC} -binary -o ${RESOURCES_RCC}
|
||||
)
|
||||
qt5_add_binary_resources(nitpick_resources "${RESOURCES_QRC}" DESTINATION "${RESOURCES_RCC}" OPTIONS -no-compress)
|
||||
|
||||
# grab the implementation and header files from src dirs
|
||||
file(GLOB_RECURSE NITPICK_SRCS "src/*.cpp" "src/*.h")
|
||||
GroupSources("src")
|
||||
list(APPEND NITPICK_SRCS ${RESOURCES_RCC})
|
||||
|
||||
find_package(Qt5 COMPONENTS Widgets)
|
||||
|
||||
# grab the ui files in ui
|
||||
file (GLOB_RECURSE QT_UI_FILES ui/*.ui)
|
||||
|
@ -83,9 +78,7 @@ else ()
|
|||
add_executable(${TARGET_NAME} ${NITPICK_SRCS} ${QM})
|
||||
endif ()
|
||||
|
||||
if (NOT UNIX)
|
||||
add_dependencies(${TARGET_NAME} resources)
|
||||
endif()
|
||||
add_dependencies(${TARGET_NAME} nitpick_resources)
|
||||
|
||||
# disable /OPT:REF and /OPT:ICF for the Debug builds
|
||||
# This will prevent the following linker warnings
|
||||
|
|
Loading…
Reference in a new issue