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
64 _quatLibrary(),64 _quatLibrary(),
65 _vec3Library()65 _vec3Library()
66{66{
67 QByteArray fileNameAscii = fileNameString.toLocal8Bit();
68 const char* scriptMenuName = fileNameAscii.data();
69
70 // some clients will use these menu features67 // some clients will use these menu features
71 if (!fileNameString.isEmpty()) {68 if (!fileNameString.isEmpty()) {
72 _scriptMenuName = "Stop ";69 _scriptMenuName = "Stop ";
73 _scriptMenuName.append(scriptMenuName);70 _scriptMenuName.append(qPrintable(fileNameString));
74 _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));71 _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));
75 } else {72 } else {
76 _scriptMenuName = "Stop Script ";73 _scriptMenuName = "Stop Script ";
@@ -79,6 +76,72 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co · 2 unmodified lines
79 _scriptNumber++;76 _scriptNumber++;
80}77}
81 78
79ScriptEngine::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
82void ScriptEngine::setIsAvatar(bool isAvatar) {145void ScriptEngine::setIsAvatar(bool isAvatar) {
83 _isAvatar = isAvatar;146 _isAvatar = isAvatar;
84 147