From 0f288247a7dd7d0104fc64a41697b4a3d3781202 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 1 Apr 2016 10:50:22 -0700 Subject: [PATCH 1/3] include script in default script location --- libraries/script-engine/src/ScriptEngines.cpp | 2 +- libraries/script-engine/src/ScriptsModel.cpp | 6 ++---- libraries/shared/src/PathUtils.cpp | 6 +++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index f22d048661..04a772cf77 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -251,7 +251,7 @@ static const QString SETTINGS_KEY = "Settings"; void ScriptEngines::loadDefaultScripts() { QUrl defaultScriptsLoc = defaultScriptsLocation(); - defaultScriptsLoc.setPath(defaultScriptsLoc.path() + "/scripts/defaultScripts.js"); + defaultScriptsLoc.setPath(defaultScriptsLoc.path() + "/defaultScripts.js"); loadScript(defaultScriptsLoc.toString()); } diff --git a/libraries/script-engine/src/ScriptsModel.cpp b/libraries/script-engine/src/ScriptsModel.cpp index 0c58966e81..b9fb73c037 100644 --- a/libraries/script-engine/src/ScriptsModel.cpp +++ b/libraries/script-engine/src/ScriptsModel.cpp @@ -25,7 +25,6 @@ #define __STR1__(x) __STR2__(x) #define __LOC__ __FILE__ "(" __STR1__(__LINE__) ") : Warning Msg: " -static const QString MODELS_LOCATION = "scripts/"; static const QString PREFIX_PARAMETER_NAME = "prefix"; static const QString MARKER_PARAMETER_NAME = "marker"; static const QString IS_TRUNCATED_NAME = "IsTruncated"; @@ -159,8 +158,7 @@ void ScriptsModel::requestDefaultFiles(QString marker) { if (url.isLocalFile()) { // if the url indicates a local directory, use QDirIterator - // QString localDir = url.toLocalFile() + "/scripts"; - QString localDir = expandScriptUrl(url).toLocalFile() + "/scripts"; + QString localDir = expandScriptUrl(url).toLocalFile(); int localDirPartCount = localDir.split("/").size(); #ifdef Q_OS_WIN localDirPartCount++; // one for the drive letter @@ -176,7 +174,7 @@ void ScriptsModel::requestDefaultFiles(QString marker) { } else { // the url indicates http(s), use QNetworkRequest QUrlQuery query; - query.addQueryItem(PREFIX_PARAMETER_NAME, MODELS_LOCATION); + query.addQueryItem(PREFIX_PARAMETER_NAME, "."); if (!marker.isEmpty()) { query.addQueryItem(MARKER_PARAMETER_NAME, marker); } diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 410a95a4d5..025768908c 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -57,11 +57,11 @@ QString findMostRecentFileExtension(const QString& originalFileName, QVector Date: Fri, 1 Apr 2016 11:52:47 -0700 Subject: [PATCH 2/3] trying again on script loading changes --- libraries/script-engine/src/ScriptEngine.cpp | 6 +- libraries/script-engine/src/ScriptEngines.cpp | 78 ++++++++++++------- libraries/script-engine/src/ScriptEngines.h | 10 +-- libraries/script-engine/src/ScriptsModel.cpp | 9 ++- 4 files changed, 67 insertions(+), 36 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 95ca4ab4f8..31047dd423 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -220,7 +220,7 @@ void ScriptEngine::loadURL(const QUrl& scriptURL, bool reload) { return; } - QUrl url = expandScriptUrl(normalizeScriptURL(scriptURL)); + QUrl url = expandScriptUrl(scriptURL); _fileNameString = url.toString(); _isReloading = reload; @@ -847,7 +847,7 @@ QUrl ScriptEngine::resolvePath(const QString& include) const { QUrl url(include); // first lets check to see if it's already a full URL if (!url.scheme().isEmpty()) { - return expandScriptUrl(normalizeScriptURL(url)); + return expandScriptUrl(url); } // we apparently weren't a fully qualified url, so, let's assume we're relative @@ -864,7 +864,7 @@ QUrl ScriptEngine::resolvePath(const QString& include) const { } // at this point we should have a legitimate fully qualified URL for our parent - url = expandScriptUrl(normalizeScriptURL(parentURL.resolved(url))); + url = expandScriptUrl(parentURL.resolved(url)); return url; } diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 04a772cf77..a53ad32e46 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -44,16 +44,21 @@ ScriptEngines::ScriptEngines() QUrl normalizeScriptURL(const QUrl& rawScriptURL) { if (rawScriptURL.scheme() == "file") { + qDebug() << "+"; + qDebug() << "+"; + qDebug() << "+"; + QUrl fullNormal = rawScriptURL; QUrl defaultScriptLoc = defaultScriptsLocation(); - #ifdef Q_OS_LINUX - #else - // Force lowercase on file scripts because of drive letter weirdness. - if (rawScriptURL.isLocalFile()) { - fullNormal.setPath(fullNormal.path().toLower()); - } - #endif + // #ifdef Q_OS_LINUX + // #else + // // Force lowercase on file scripts because of drive letter weirdness. + // if (rawScriptURL.isLocalFile()) { + // fullNormal.setPath(fullNormal.path()); // .toLower()); + // } + // #endif + // if this url is something "beneath" the default script url, replace the local path with ~ if (fullNormal.scheme() == defaultScriptLoc.scheme() && fullNormal.host() == defaultScriptLoc.host() && @@ -69,21 +74,37 @@ QUrl normalizeScriptURL(const QUrl& rawScriptURL) { } } -QUrl expandScriptUrl(const QUrl& normalizedScriptURL) { +QUrl expandScriptUrl(const QUrl& rawScriptURL) { + QUrl normalizedScriptURL = normalizeScriptURL(rawScriptURL); + + qDebug() << "expandScriptUrl in = " << rawScriptURL; + if (normalizedScriptURL.scheme() == "http" || normalizedScriptURL.scheme() == "https" || normalizedScriptURL.scheme() == "atp") { + + qDebug() << "expandScriptUrl out(net) = " << normalizedScriptURL; + return normalizedScriptURL; } else if (normalizedScriptURL.scheme() == "file") { if (normalizedScriptURL.path().startsWith("/~/")) { QUrl url = normalizedScriptURL; + qDebug() << "in expand, normalizedScriptURL = " << normalizedScriptURL; QStringList splitPath = url.path().split("/"); QUrl defaultScriptsLoc = defaultScriptsLocation(); url.setPath(defaultScriptsLoc.path() + "/" + splitPath.mid(2).join("/")); // 2 to skip the slashes in /~/ + + qDebug() << "expandScriptUrl out(file 0) = " << url; + return url; } + + qDebug() << "expandScriptUrl out(file 1) = " << normalizedScriptURL; + return normalizedScriptURL; } else { + qDebug() << "expandScriptUrl out(bad scheme) = " << normalizedScriptURL; + return QUrl(""); } } @@ -230,7 +251,7 @@ QVariantList ScriptEngines::getRunning() { } QVariantMap resultNode; resultNode.insert("name", runningScriptURL.fileName()); - QUrl displayURL = expandScriptUrl(QUrl(runningScriptURL)); + QUrl displayURL = expandScriptUrl(runningScriptURL); QString displayURLString; if (displayURL.isLocalFile()) { displayURLString = displayURL.toLocalFile(); @@ -268,7 +289,7 @@ void ScriptEngines::loadScripts() { loadDefaultScripts(); _firstRun.set(false); return; - } + } // loads all saved scripts Settings settings; @@ -310,7 +331,12 @@ void ScriptEngines::saveScripts() { QStringList ScriptEngines::getRunningScripts() { QReadLocker lock(&_scriptEnginesHashLock); - return _scriptEnginesHash.keys(); + QList urls = _scriptEnginesHash.keys(); + QStringList result; + for (auto url : urls) { + result.append(url.toString()); + } + return result; } void ScriptEngines::stopAllScripts(bool restart) { @@ -318,7 +344,7 @@ void ScriptEngines::stopAllScripts(bool restart) { if (restart) { // Delete all running scripts from cache so that they are re-downloaded when they are restarted auto scriptCache = DependencyManager::get(); - for (QHash::const_iterator it = _scriptEnginesHash.constBegin(); + for (QHash::const_iterator it = _scriptEnginesHash.constBegin(); it != _scriptEnginesHash.constEnd(); it++) { if (!it.value()->isFinished()) { scriptCache->deleteScript(it.key()); @@ -327,7 +353,7 @@ void ScriptEngines::stopAllScripts(bool restart) { } // Stop and possibly restart all currently running scripts - for (QHash::const_iterator it = _scriptEnginesHash.constBegin(); + for (QHash::const_iterator it = _scriptEnginesHash.constBegin(); it != _scriptEnginesHash.constEnd(); it++) { if (it.value()->isFinished()) { continue; @@ -350,21 +376,20 @@ bool ScriptEngines::stopScript(const QString& rawScriptURL, bool restart) { if (!scriptURL.isValid()) { scriptURL = normalizeScriptURL(QUrl::fromLocalFile(rawScriptURL)); } - const QString scriptURLString = scriptURL.toString(); QReadLocker lock(&_scriptEnginesHashLock); - if (_scriptEnginesHash.contains(scriptURLString)) { - ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURLString]; + if (_scriptEnginesHash.contains(scriptURL)) { + ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURL]; if (restart) { auto scriptCache = DependencyManager::get(); - scriptCache->deleteScript(QUrl(scriptURLString)); + scriptCache->deleteScript(scriptURL); connect(scriptEngine, &ScriptEngine::finished, this, [this](QString scriptName, ScriptEngine* engine) { reloadScript(scriptName); }); } scriptEngine->stop(); stoppedScript = true; - qCDebug(scriptengine) << "stopping script..." << scriptURLString; + qCDebug(scriptengine) << "stopping script..." << scriptURL; } } return stoppedScript; @@ -379,7 +404,7 @@ void ScriptEngines::setScriptsLocation(const QString& scriptsLocation) { _scriptsModel.updateScriptsLocation(scriptsLocation); } -void ScriptEngines::reloadAllScripts() { +void ScriptEngines::reloadAllScripts() { DependencyManager::get()->clearCache(); emit scriptsReloading(); stopAllScripts(true); @@ -409,7 +434,7 @@ ScriptEngine* ScriptEngines::loadScript(const QUrl& scriptFilename, bool isUserL scriptUrl = normalizeScriptURL(scriptFilename); } - auto scriptEngine = getScriptEngine(scriptUrl.toString()); + auto scriptEngine = getScriptEngine(scriptUrl); if (scriptEngine) { return scriptEngine; } @@ -435,12 +460,12 @@ ScriptEngine* ScriptEngines::loadScript(const QUrl& scriptFilename, bool isUserL return scriptEngine; } -ScriptEngine* ScriptEngines::getScriptEngine(const QString& rawScriptURL) { +ScriptEngine* ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) { ScriptEngine* result = nullptr; { QReadLocker lock(&_scriptEnginesHashLock); - const QString scriptURLString = normalizeScriptURL(QUrl(rawScriptURL)).toString(); - auto it = _scriptEnginesHash.find(scriptURLString); + const QUrl scriptURL = normalizeScriptURL(rawScriptURL); + auto it = _scriptEnginesHash.find(scriptURL); if (it != _scriptEnginesHash.end()) { result = it.value(); } @@ -459,8 +484,7 @@ void ScriptEngines::onScriptEngineLoaded(const QString& rawScriptURL) { QWriteLocker lock(&_scriptEnginesHashLock); QUrl url = QUrl(rawScriptURL); QUrl normalized = normalizeScriptURL(url); - const QString scriptURLString = normalized.toString(); - _scriptEnginesHash.insertMulti(scriptURLString, scriptEngine); + _scriptEnginesHash.insertMulti(normalized, scriptEngine); } emit scriptCountChanged(); } @@ -486,8 +510,8 @@ void ScriptEngines::onScriptFinished(const QString& rawScriptURL, ScriptEngine* bool removed = false; { QWriteLocker lock(&_scriptEnginesHashLock); - const QString scriptURLString = normalizeScriptURL(QUrl(rawScriptURL)).toString(); - for (auto it = _scriptEnginesHash.find(scriptURLString); it != _scriptEnginesHash.end(); ++it) { + const QUrl scriptURL = normalizeScriptURL(QUrl(rawScriptURL)); + for (auto it = _scriptEnginesHash.find(scriptURL); it != _scriptEnginesHash.end(); ++it) { if (it.value() == engine) { _scriptEnginesHash.erase(it); removed = true; diff --git a/libraries/script-engine/src/ScriptEngines.h b/libraries/script-engine/src/ScriptEngines.h index a0d914ec64..3bff9c2707 100644 --- a/libraries/script-engine/src/ScriptEngines.h +++ b/libraries/script-engine/src/ScriptEngines.h @@ -45,7 +45,7 @@ public: void loadDefaultScripts(); void setScriptsLocation(const QString& scriptsLocation); QStringList getRunningScripts(); - ScriptEngine* getScriptEngine(const QString& scriptHash); + ScriptEngine* getScriptEngine(const QUrl& scriptHash); ScriptsModel* scriptsModel() { return &_scriptsModel; }; ScriptsModelFilter* scriptsModelFilter() { return &_scriptsModelFilter; }; @@ -65,12 +65,12 @@ public: // Called at shutdown time void shutdownScripting(); -signals: +signals: void scriptCountChanged(); void scriptsReloading(); void scriptLoadError(const QString& filename, const QString& error); -protected slots: +protected slots: void onScriptFinished(const QString& fileNameString, ScriptEngine* engine); protected: @@ -86,7 +86,7 @@ protected: Setting::Handle _firstRun { "firstRun", true }; QReadWriteLock _scriptEnginesHashLock; - QHash _scriptEnginesHash; + QHash _scriptEnginesHash; QSet _allKnownScriptEngines; QMutex _allScriptsMutex; std::atomic _stoppingAllScripts { false }; @@ -97,6 +97,6 @@ protected: }; QUrl normalizeScriptURL(const QUrl& rawScriptURL); -QUrl expandScriptUrl(const QUrl& normalizedScriptURL); +QUrl expandScriptUrl(const QUrl& rawScriptURL); #endif // hifi_ScriptEngine_h diff --git a/libraries/script-engine/src/ScriptsModel.cpp b/libraries/script-engine/src/ScriptsModel.cpp index b9fb73c037..b89da63cea 100644 --- a/libraries/script-engine/src/ScriptsModel.cpp +++ b/libraries/script-engine/src/ScriptsModel.cpp @@ -160,6 +160,13 @@ void ScriptsModel::requestDefaultFiles(QString marker) { // if the url indicates a local directory, use QDirIterator QString localDir = expandScriptUrl(url).toLocalFile(); int localDirPartCount = localDir.split("/").size(); + if (localDir.endsWith("/")) { + localDirPartCount--; + } + qDebug() << "|"; + qDebug() << "|"; + qDebug() << "|"; + qDebug() << localDir; #ifdef Q_OS_WIN localDirPartCount++; // one for the drive letter #endif @@ -238,7 +245,7 @@ bool ScriptsModel::parseXML(QByteArray xmlFile) { if (jsRegex.exactMatch(xml.text().toString())) { QString localPath = lastKey.split("/").mid(1).join("/"); QUrl fullPath = defaultScriptsLocation(); - fullPath.setPath(fullPath.path() + "/" + lastKey); + fullPath.setPath(fullPath.path() + lastKey); const QString fullPathStr = normalizeScriptURL(fullPath).toString(); _treeNodes.append(new TreeNodeScript(localPath, fullPathStr, SCRIPT_ORIGIN_DEFAULT)); } From 56b84b310609a68b44001e24507d0c82ed3dc8b0 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 1 Apr 2016 12:05:49 -0700 Subject: [PATCH 3/3] fix display of path of selected file in running-scripts window --- libraries/script-engine/src/ScriptEngines.cpp | 27 ------------------- libraries/script-engine/src/ScriptsModel.cpp | 6 +---- 2 files changed, 1 insertion(+), 32 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index a53ad32e46..668b9aa3a2 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -44,21 +44,9 @@ ScriptEngines::ScriptEngines() QUrl normalizeScriptURL(const QUrl& rawScriptURL) { if (rawScriptURL.scheme() == "file") { - qDebug() << "+"; - qDebug() << "+"; - qDebug() << "+"; - QUrl fullNormal = rawScriptURL; QUrl defaultScriptLoc = defaultScriptsLocation(); - // #ifdef Q_OS_LINUX - // #else - // // Force lowercase on file scripts because of drive letter weirdness. - // if (rawScriptURL.isLocalFile()) { - // fullNormal.setPath(fullNormal.path()); // .toLower()); - // } - // #endif - // if this url is something "beneath" the default script url, replace the local path with ~ if (fullNormal.scheme() == defaultScriptLoc.scheme() && fullNormal.host() == defaultScriptLoc.host() && @@ -76,35 +64,20 @@ QUrl normalizeScriptURL(const QUrl& rawScriptURL) { QUrl expandScriptUrl(const QUrl& rawScriptURL) { QUrl normalizedScriptURL = normalizeScriptURL(rawScriptURL); - - qDebug() << "expandScriptUrl in = " << rawScriptURL; - if (normalizedScriptURL.scheme() == "http" || normalizedScriptURL.scheme() == "https" || normalizedScriptURL.scheme() == "atp") { - - qDebug() << "expandScriptUrl out(net) = " << normalizedScriptURL; - return normalizedScriptURL; } else if (normalizedScriptURL.scheme() == "file") { if (normalizedScriptURL.path().startsWith("/~/")) { QUrl url = normalizedScriptURL; - qDebug() << "in expand, normalizedScriptURL = " << normalizedScriptURL; QStringList splitPath = url.path().split("/"); QUrl defaultScriptsLoc = defaultScriptsLocation(); url.setPath(defaultScriptsLoc.path() + "/" + splitPath.mid(2).join("/")); // 2 to skip the slashes in /~/ - - qDebug() << "expandScriptUrl out(file 0) = " << url; - return url; } - - qDebug() << "expandScriptUrl out(file 1) = " << normalizedScriptURL; - return normalizedScriptURL; } else { - qDebug() << "expandScriptUrl out(bad scheme) = " << normalizedScriptURL; - return QUrl(""); } } diff --git a/libraries/script-engine/src/ScriptsModel.cpp b/libraries/script-engine/src/ScriptsModel.cpp index b89da63cea..0ad2ad01a7 100644 --- a/libraries/script-engine/src/ScriptsModel.cpp +++ b/libraries/script-engine/src/ScriptsModel.cpp @@ -40,7 +40,7 @@ TreeNodeBase::TreeNodeBase(TreeNodeFolder* parent, const QString& name, TreeNode TreeNodeScript::TreeNodeScript(const QString& localPath, const QString& fullPath, ScriptOrigin origin) : TreeNodeBase(NULL, localPath.split("/").last(), TREE_NODE_TYPE_SCRIPT), _localPath(localPath), - _fullPath(fullPath), + _fullPath(expandScriptUrl(QUrl(fullPath)).toString()), _origin(origin) { }; @@ -163,10 +163,6 @@ void ScriptsModel::requestDefaultFiles(QString marker) { if (localDir.endsWith("/")) { localDirPartCount--; } - qDebug() << "|"; - qDebug() << "|"; - qDebug() << "|"; - qDebug() << localDir; #ifdef Q_OS_WIN localDirPartCount++; // one for the drive letter #endif