History

only start one download per url even if still pending

ZappoMan committed 11 years ago

Commit 31072b21 parent e2d8d822 files · +16 −6Browse files

Showing the changes to libraries/script-engine/src/ScriptCache.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/ScriptCache.cpp+15−5
@@ -27,17 +27,26 @@ ScriptCache::ScriptCache(QObject* parent) { · 26 unmodified lines
27QString ScriptCache::getScript(const QUrl& url, ScriptUser* scriptUser, bool& isPending) {27QString ScriptCache::getScript(const QUrl& url, ScriptUser* scriptUser, bool& isPending) {
28 QString scriptContents;28 QString scriptContents;
29 if (_scriptCache.contains(url)) {29 if (_scriptCache.contains(url)) {
30 qDebug() << "Found script in cache:" << url.toString();
30 scriptContents = _scriptCache[url];31 scriptContents = _scriptCache[url];
31 scriptUser->scriptContentsAvailable(url, scriptContents);32 scriptUser->scriptContentsAvailable(url, scriptContents);
32 isPending = false;33 isPending = false;
33 } else {34 } else {
34 isPending = true;35 isPending = true;
36 bool alreadyWaiting = _scriptUsers.contains(url);
35 _scriptUsers.insert(url, scriptUser);37 _scriptUsers.insert(url, scriptUser);
36 QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();38
37 QNetworkRequest networkRequest = QNetworkRequest(url);39 if (alreadyWaiting) {
38 networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);40 qDebug() << "Already downloading script at:" << url.toString();
39 QNetworkReply* reply = networkAccessManager.get(networkRequest);41 } else {
40 connect(reply, &QNetworkReply::finished, this, &ScriptCache::scriptDownloaded);42 QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
43 QNetworkRequest networkRequest = QNetworkRequest(url);
44 networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
45
46 qDebug() << "Downloading script at:" << url.toString();
47 QNetworkReply* reply = networkAccessManager.get(networkRequest);
48 connect(reply, &QNetworkReply::finished, this, &ScriptCache::scriptDownloaded);
49 }
41 }50 }
42 return scriptContents;51 return scriptContents;
43}52}
@@ -50,6 +59,7 @@ void ScriptCache::scriptDownloaded() { · 6 unmodified lines
50 59
51 if (reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) {60 if (reply->error() == QNetworkReply::NoError && reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) == 200) {
52 _scriptCache[url] = reply->readAll();61 _scriptCache[url] = reply->readAll();
62 qDebug() << "Done downloading script at:" << url.toString();
53 63
54 foreach(ScriptUser* user, scriptUsers) {64 foreach(ScriptUser* user, scriptUsers) {
55 user->scriptContentsAvailable(url, _scriptCache[url]);65 user->scriptContentsAvailable(url, _scriptCache[url]);