only start one download per url even if still pending

This commit is contained in:
ZappoMan 2015-03-30 16:48:41 -07:00
parent e2d8d82096
commit 31072b2b2e
2 changed files with 16 additions and 6 deletions

View file

@ -936,7 +936,7 @@ void EntityTreeRenderer::entitySciptChanging(const EntityItemID& entityID) {
void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID) { void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID) {
if (_tree && !_shuttingDown) { if (_tree && !_shuttingDown) {
// load the entity script if needed... // load the entity script if needed...
QScriptValue entityScript = loadEntityScript(entityID); QScriptValue entityScript = loadEntityScript(entityID, true); // is preload!
if (entityScript.property("preload").isValid()) { if (entityScript.property("preload").isValid()) {
QScriptValueList entityArgs = createEntityArgs(entityID); QScriptValueList entityArgs = createEntityArgs(entityID);
entityScript.property("preload").call(entityScript, entityArgs); entityScript.property("preload").call(entityScript, entityArgs);

View file

@ -27,18 +27,27 @@ ScriptCache::ScriptCache(QObject* parent) {
QString ScriptCache::getScript(const QUrl& url, ScriptUser* scriptUser, bool& isPending) { QString ScriptCache::getScript(const QUrl& url, ScriptUser* scriptUser, bool& isPending) {
QString scriptContents; QString scriptContents;
if (_scriptCache.contains(url)) { if (_scriptCache.contains(url)) {
qDebug() << "Found script in cache:" << url.toString();
scriptContents = _scriptCache[url]; scriptContents = _scriptCache[url];
scriptUser->scriptContentsAvailable(url, scriptContents); scriptUser->scriptContentsAvailable(url, scriptContents);
isPending = false; isPending = false;
} else { } else {
isPending = true; isPending = true;
bool alreadyWaiting = _scriptUsers.contains(url);
_scriptUsers.insert(url, scriptUser); _scriptUsers.insert(url, scriptUser);
if (alreadyWaiting) {
qDebug() << "Already downloading script at:" << url.toString();
} else {
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
QNetworkRequest networkRequest = QNetworkRequest(url); QNetworkRequest networkRequest = QNetworkRequest(url);
networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
qDebug() << "Downloading script at:" << url.toString();
QNetworkReply* reply = networkAccessManager.get(networkRequest); QNetworkReply* reply = networkAccessManager.get(networkRequest);
connect(reply, &QNetworkReply::finished, this, &ScriptCache::scriptDownloaded); connect(reply, &QNetworkReply::finished, this, &ScriptCache::scriptDownloaded);
} }
}
return scriptContents; return scriptContents;
} }
@ -50,6 +59,7 @@ void ScriptCache::scriptDownloaded() {
if (reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) { if (reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) {
_scriptCache[url] = reply->readAll(); _scriptCache[url] = reply->readAll();
qDebug() << "Done downloading script at:" << url.toString();
foreach(ScriptUser* user, scriptUsers) { foreach(ScriptUser* user, scriptUsers) {
user->scriptContentsAvailable(url, _scriptCache[url]); user->scriptContentsAvailable(url, _scriptCache[url]);