mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 07:39:44 +02:00
only start one download per url even if still pending
This commit is contained in:
parent
e2d8d82096
commit
31072b2b2e
2 changed files with 16 additions and 6 deletions
|
@ -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);
|
||||||
|
|
|
@ -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]);
|
||||||
|
|
Loading…
Reference in a new issue