History

add load script from URL support

ZappoMan committed 12 years ago

Commit c34b64e1 parent a613da86 files · +112 −30Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+67−4
@@ -64,13 +64,10 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co · 63 unmodified lines
6464 _quatLibrary(),
6565 _vec3Library()
6666 {
67− QByteArray fileNameAscii = fileNameString.toLocal8Bit();
68− const char* scriptMenuName = fileNameAscii.data();
69−
7067 // some clients will use these menu features
7168 if (!fileNameString.isEmpty()) {
7269 _scriptMenuName = "Stop ";
73− _scriptMenuName.append(scriptMenuName);
70+ _scriptMenuName.append(qPrintable(fileNameString));
7471 _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));
7572 } else {
7673 _scriptMenuName = "Stop Script ";
@@ -79,6 +76,72 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co · 2 unmodified lines
7976 _scriptNumber++;
8077 }
8178
79+ScriptEngine::ScriptEngine(const QUrl& scriptURL, bool wantMenuItems,
80+ AbstractControllerScriptingInterface* controllerScriptingInterface) :
81+ _scriptContents(),
82+ _isFinished(false),
83+ _isRunning(false),
84+ _isInitialized(false),
85+ _engine(),
86+ _isAvatar(false),
87+ _avatarIdentityTimer(NULL),
88+ _avatarBillboardTimer(NULL),
89+ _timerFunctionMap(),
90+ _isListeningToAudioStream(false),
91+ _avatarSound(NULL),
92+ _numAvatarSoundSentBytes(0),
93+ _controllerScriptingInterface(controllerScriptingInterface),
94+ _avatarData(NULL),
95+ _wantMenuItems(wantMenuItems),
96+ _scriptMenuName(),
97+ _fileNameString(),
98+ _quatLibrary(),
99+ _vec3Library()
100+{
101+ QString scriptURLString = scriptURL.toString();
102+ _fileNameString = scriptURLString;
103+ // some clients will use these menu features
104+ if (!scriptURLString.isEmpty()) {
105+ _scriptMenuName = "Stop ";
106+ _scriptMenuName.append(qPrintable(scriptURLString));
107+ _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));
108+ } else {
109+ _scriptMenuName = "Stop Script ";
110+ _scriptMenuName.append(_scriptNumber);
111+ }
112+ _scriptNumber++;
113+
114+ QUrl url(scriptURL);
115+
116+ // if the scheme is empty, maybe they typed in a file, let's try
117+ if (url.scheme().isEmpty()) {
118+ url = QUrl::fromLocalFile(scriptURLString);
119+ }
120+
121+ // ok, let's see if it's valid... and if so, load it
122+ if (url.isValid()) {
123+ if (url.scheme() == "file") {
124+ QString fileName = url.toLocalFile();
125+ QFile scriptFile(fileName);
126+ if (scriptFile.open(QFile::ReadOnly | QFile::Text)) {
127+ qDebug() << "Loading file:" << fileName;
128+ QTextStream in(&scriptFile);
129+ _scriptContents = in.readAll();
130+ } else {
131+ qDebug() << "ERROR Loading file:" << fileName;
132+ }
133+ } else {
134+ QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);
135+ QNetworkReply* reply = networkManager->get(QNetworkRequest(url));
136+ qDebug() << "Downloading included script at" << url;
137+ QEventLoop loop;
138+ QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
139+ loop.exec();
140+ _scriptContents = reply->readAll();
141+ }
142+ }
143+}
144+
82145 void ScriptEngine::setIsAvatar(bool isAvatar) {
83146 _isAvatar = isAvatar;
84147