History

first cut at moving entity scripts into ScriptEngine

Brad Hefta-Gaub committed 11 years ago

Commit 18fbf891 parent 56118e46 files · +283 −316Browse files

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

Unified · Split

libraries/script-engine/src/ScriptCache.cpp+47−0
@@ -81,4 +81,51 @@ void ScriptCache::scriptDownloaded() { · 80 unmodified lines
81 req->deleteLater();81 req->deleteLater();
82}82}
83 83
84void ScriptCache::getScriptContents(const QString& scriptOrURL, contentAvailableCallback contentAvailable, bool forceDownload) {
85 QUrl unnormalizedURL(scriptOrURL);
86 QUrl url = ResourceManager::normalizeURL(unnormalizedURL);
87
88 // attempt to determine if this is a URL to a script, or if this is actually a script itself (which is valid in the entityScript use case)
89 if (url.scheme().isEmpty() && scriptOrURL.simplified().replace(" ", "").contains("(function(){")) {
90 contentAvailable(scriptOrURL, scriptOrURL, false, true);
91 return;
92 }
93
94 if (_scriptCache.contains(url) && !forceDownload) {
95 qCDebug(scriptengine) << "Found script in cache:" << url.toString();
96 contentAvailable(url.toString(), _scriptCache[url], true, true);
97 } else {
98 bool alreadyWaiting = _contentCallbacks.contains(url);
99 _contentCallbacks.insert(url, contentAvailable);
100
101 if (alreadyWaiting) {
102 qCDebug(scriptengine) << "Already downloading script at:" << url.toString();
103 } else {
104 auto request = ResourceManager::createResourceRequest(this, url);
105 request->setCacheEnabled(!forceDownload);
106 connect(request, &ResourceRequest::finished, this, &ScriptCache::scriptContentAvailable);
107 request->send();
108 }
109 }
110}
111
112void ScriptCache::scriptContentAvailable() {
113 ResourceRequest* req = qobject_cast<ResourceRequest*>(sender());
114 QUrl url = req->getUrl();
115 QList<contentAvailableCallback> allCallbacks = _contentCallbacks.values(url);
116 _contentCallbacks.remove(url);
117
118 bool success = req->getResult() == ResourceRequest::Success;
119
120 if (success) {
121 _scriptCache[url] = req->getData();
122 qCDebug(scriptengine) << "Done downloading script at:" << url.toString();
123 } else {
124 qCWarning(scriptengine) << "Error loading script from URL " << url;
125 }
126 foreach(contentAvailableCallback thisCallback, allCallbacks) {
127 thisCallback(url.toString(), _scriptCache[url], true, success);
128 }
129 req->deleteLater();
130}
84 131