From eb033c797a01a2bdc17e2530f25acffb5c5a582f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 20 Jan 2017 10:36:57 -0800 Subject: [PATCH] fallback if local URL empty when loading default scripts --- libraries/script-engine/src/ScriptsModel.cpp | 67 ++++++++++---------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/libraries/script-engine/src/ScriptsModel.cpp b/libraries/script-engine/src/ScriptsModel.cpp index 82ca26a03a..31f3a96fbd 100644 --- a/libraries/script-engine/src/ScriptsModel.cpp +++ b/libraries/script-engine/src/ScriptsModel.cpp @@ -156,39 +156,42 @@ void ScriptsModel::reloadDefaultFiles() { void ScriptsModel::requestDefaultFiles(QString marker) { QUrl url(defaultScriptsLocation()); - if (url.isLocalFile()) { - // if the url indicates a local directory, use QDirIterator - QString localDir = expandScriptUrl(url).toLocalFile(); - int localDirPartCount = localDir.split("/").size(); - if (localDir.endsWith("/")) { - localDirPartCount--; - } - #ifdef Q_OS_WIN - localDirPartCount++; // one for the drive letter - #endif - QDirIterator it(localDir, QStringList() << "*.js", QDir::Files, QDirIterator::Subdirectories); - while (it.hasNext()) { - QUrl jsFullPath = QUrl::fromLocalFile(it.next()); - QString jsPartialPath = jsFullPath.path().split("/").mid(localDirPartCount).join("/"); - jsFullPath = normalizeScriptURL(jsFullPath); - _treeNodes.append(new TreeNodeScript(jsPartialPath, jsFullPath.toString(), SCRIPT_ORIGIN_DEFAULT)); - } - _loadingScripts = false; - } else { - // the url indicates http(s), use QNetworkRequest - QUrlQuery query; - query.addQueryItem(PREFIX_PARAMETER_NAME, "."); - if (!marker.isEmpty()) { - query.addQueryItem(MARKER_PARAMETER_NAME, marker); - } - url.setQuery(query); + // targets that don't have a scripts folder in the appropriate location will have an empty URL here + if (!url.isEmpty()) { + if (url.isLocalFile()) { + // if the url indicates a local directory, use QDirIterator + QString localDir = expandScriptUrl(url).toLocalFile(); + int localDirPartCount = localDir.split("/").size(); + if (localDir.endsWith("/")) { + localDirPartCount--; + } +#ifdef Q_OS_WIN + localDirPartCount++; // one for the drive letter +#endif + QDirIterator it(localDir, QStringList() << "*.js", QDir::Files, QDirIterator::Subdirectories); + while (it.hasNext()) { + QUrl jsFullPath = QUrl::fromLocalFile(it.next()); + QString jsPartialPath = jsFullPath.path().split("/").mid(localDirPartCount).join("/"); + jsFullPath = normalizeScriptURL(jsFullPath); + _treeNodes.append(new TreeNodeScript(jsPartialPath, jsFullPath.toString(), SCRIPT_ORIGIN_DEFAULT)); + } + _loadingScripts = false; + } else { + // the url indicates http(s), use QNetworkRequest + QUrlQuery query; + query.addQueryItem(PREFIX_PARAMETER_NAME, "."); + if (!marker.isEmpty()) { + query.addQueryItem(MARKER_PARAMETER_NAME, marker); + } + url.setQuery(query); - QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); - QNetworkRequest request(url); - request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); - request.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); - QNetworkReply* reply = networkAccessManager.get(request); - connect(reply, SIGNAL(finished()), SLOT(downloadFinished())); + QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); + QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); + request.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); + QNetworkReply* reply = networkAccessManager.get(request); + connect(reply, SIGNAL(finished()), SLOT(downloadFinished())); + } } }