Skip to content

Commit 40e1fa9

Browse files
committed
Support for larger library files > 500kb
This change prepares are fix to support larger library files, mostly need for audio files and the Phaser implementation. This will fix the reported issue #131.
1 parent b3897f4 commit 40e1fa9

File tree

15 files changed

+128
-90
lines changed

15 files changed

+128
-90
lines changed

src/blocks/phaser/preload/javascript.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Blockly.JavaScript['phaser_preload'] = function(block) {
3838
Blockly.JavaScript['phaser_load_audio'] = function(block) {
3939
let text_name = block.getFieldValue('name');
4040
let value_audio = Blockly.JavaScript.valueToCode(block, 'audio',
41-
Blockly.JavaScript.ORDER_NONE);
41+
Blockly.JavaScript.ORDER_NONE).replace('file:', 'url:/library/');
4242
return 'game.load.audio(\'' + text_name + '\', \'' + value_audio + '\');\n';
4343
};
4444

src/cache/cache.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ cwc.Cache.prototype.getFile = function(name) {
148148
* @param {string!} content
149149
*/
150150
cwc.Cache.prototype.addLibraryFile = function(name, content) {
151-
this.database_.addFile(name, content, '__library__');
151+
let filename = name.includes('/library/') ? name : '/library/' + name;
152+
this.database_.addFile(filename, content, '__library__');
152153
};
153154

154155

@@ -157,7 +158,11 @@ cwc.Cache.prototype.addLibraryFile = function(name, content) {
157158
* @return {Promise}
158159
*/
159160
cwc.Cache.prototype.getLibraryFile = function(name) {
160-
return this.database_.getFile(name, '__library__');
161+
let filename = name.includes('/library/') ? name : '/library/' + name;
162+
if (filename.includes('%20')) {
163+
filename = decodeURI(filename);
164+
}
165+
return this.database_.getFile(filename, '__library__');
161166
};
162167

163168

src/protocol/low-level/tcp/http_server.js

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -178,39 +178,50 @@ cwc.protocol.tcp.HTTPServer.prototype.getRootURL = function() {
178178
*/
179179
cwc.protocol.tcp.HTTPServer.prototype.httpResponse_ = function(content,
180180
options = {}, clientSocketId, requestPath = '') {
181-
let contentType = options['content_type'] || 'text/plain';
181+
if (chrome.runtime.lastError) {
182+
this.log_.error('Unable to send http response: ',
183+
chrome.runtime.lastError.message);
184+
return;
185+
}
182186
let statusCode = options['status_code'] || 200;
183-
let httpVersion = (options['http_version'] || 'HTTP/1.1') + ' ';
184187
chrome.sockets.tcp.getInfo(clientSocketId, function(socketInfo) {
185188
if (!socketInfo['connected']) {
186189
this.log_.error('Socket is no longer connected', socketInfo);
187190
this.disconnectClientSocket_(clientSocketId);
188191
return;
189192
}
190-
let output = [];
191-
if (statusCode === 200) {
192-
this.log_.info('200', requestPath);
193-
output.push(httpVersion + '200 OK');
194-
} else if (statusCode === 301) {
195-
this.log_.info('301', requestPath, '>', this.redirects_[requestPath]);
196-
output.push(httpVersion + '301 Moved Permanently');
197-
output.push('Location: ' + content);
198-
} else if (statusCode === 404) {
199-
this.log_.info('404', requestPath);
200-
output.push(httpVersion + '404 Not found');
193+
194+
// Get status text, depending on content and status code.
195+
let statusText = '501 Not Implemented';
196+
let redirect = '';
197+
if (statusCode === 200 && content !== undefined) {
198+
statusText = '200 OK';
199+
} else if (statusCode === 301 && content) {
200+
statusText = '301 Moved Permanently';
201+
redirect = content;
202+
} else if (statusCode === 404 || content === undefined) {
203+
content = '';
204+
statusText = '404 Not found';
201205
} else if (Number.isInteger(statusCode)) {
202-
this.log_.info(statusCode, requestPath);
203-
output.push(httpVersion + statusCode);
204-
} else {
205-
this.log_.warn('Unknown status code', statusCode);
206-
output.push(httpVersion + '501 Not Implemented');
206+
statusText = statusCode;
207207
}
208+
this.log_.info(statusText, requestPath, redirect ? '> ' + redirect : '');
208209

210+
// Create HTTP response.
211+
let output = [];
212+
output.push((options['http_version'] || 'HTTP/1.1') + ' ' + statusText);
213+
if (redirect) {
214+
output.push('Location: ' + redirect || content);
215+
}
209216
output.push('Access-Control-Allow-Origin: null');
210217
output.push('Server: Coding with Chrome - local');
211-
output.push('Content-type: ' + contentType);
218+
if (!content || redirect) {
219+
output.push('Connection: close');
220+
} else {
221+
output.push('Connection: keep-alive');
222+
}
223+
output.push('Content-type: ' + options['content_type'] || 'text/plain');
212224
output.push('Content-length: ' + content.length);
213-
output.push('Connection: keep-alive');
214225
output.push('');
215226
output.push(content);
216227
output.push('\n');

src/renderer/external/arduino.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ cwc.renderer.external.Arduino = function(helper) {
4242
* Initializes and defines the Arduino renderer.
4343
*/
4444
cwc.renderer.external.Arduino.prototype.init = function() {
45-
let rendererInstance = this.helper.getInstance('renderer', true);
46-
let renderer = this.render.bind(this);
47-
rendererInstance.setRenderer(renderer);
45+
this.helper.getInstance('renderer').setRenderer(this.render.bind(this));
4846
};
4947

5048

src/renderer/external/ev3.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ cwc.renderer.external.EV3 = function(helper) {
4242
* Initializes and defines the EV3 renderer.
4343
*/
4444
cwc.renderer.external.EV3.prototype.init = function() {
45-
let rendererInstance = this.helper.getInstance('renderer', true);
46-
let renderer = this.render.bind(this);
47-
rendererInstance.setRenderer(renderer);
45+
this.helper.getInstance('renderer').setRenderer(this.render.bind(this));
4846
};
4947

5048

@@ -53,22 +51,24 @@ cwc.renderer.external.EV3.prototype.init = function() {
5351
* @param {cwc.file.Files} libraryFiles
5452
* @param {!cwc.file.Files} frameworks
5553
* @param {cwc.renderer.Helper} rendererHelper
54+
* @param {Object=} environ
5655
* @return {string}
5756
* @export
5857
*/
5958
cwc.renderer.external.EV3.prototype.render = function(
6059
editorContent,
6160
libraryFiles,
6261
frameworks,
63-
rendererHelper) {
64-
let header = rendererHelper.getFrameworkHeader(
65-
/** @type {string} */ (cwc.framework.Internal.EV3), frameworks);
62+
rendererHelper,
63+
environ = {}) {
64+
let header = rendererHelper.getJavaScriptURLs([
65+
cwc.framework.Internal.EV3,
66+
], environ['baseURL']);
6667
let body = '\n<script>' +
6768
' let code = function(ev3) {\n' +
6869
editorContent[cwc.ui.EditorContent.JAVASCRIPT] +
6970
'\n};\n' +
7071
' new cwc.framework.Ev3(code);\n' +
7172
'</script>\n';
72-
73-
return rendererHelper.getHTML(body, header);
73+
return rendererHelper.getHTMLRunner(body, header, environ);
7474
};

src/renderer/external/makeblock/mbot.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ cwc.renderer.external.makeblock.MBot = function(helper) {
4242
* Initializes and defines the mbot renderer.
4343
*/
4444
cwc.renderer.external.makeblock.MBot.prototype.init = function() {
45-
let rendererInstance = this.helper.getInstance('renderer', true);
46-
let renderer = this.render.bind(this);
47-
rendererInstance.setRenderer(renderer);
45+
this.helper.getInstance('renderer').setRenderer(this.render.bind(this));
4846
};
4947

5048

@@ -53,23 +51,24 @@ cwc.renderer.external.makeblock.MBot.prototype.init = function() {
5351
* @param {cwc.file.Files} libraryFiles
5452
* @param {!cwc.file.Files} frameworks
5553
* @param {cwc.renderer.Helper} rendererHelper
54+
* @param {Object=} environ
5655
* @return {string}
5756
* @export
5857
*/
5958
cwc.renderer.external.makeblock.MBot.prototype.render = function(
6059
editorContent,
6160
libraryFiles,
6261
frameworks,
63-
rendererHelper) {
64-
let header = rendererHelper.getFrameworkHeader(
65-
/** @type {string} */ (cwc.framework.Internal.MBOT), frameworks);
62+
rendererHelper,
63+
environ = {}) {
64+
let header = rendererHelper.getJavaScriptURLs([
65+
cwc.framework.Internal.MBOT,
66+
], environ['baseURL']);
6667
let body = '\n<script>' +
6768
' let code = function(mbot) {\n' +
6869
editorContent[cwc.ui.EditorContent.JAVASCRIPT] +
6970
'\n};\n'+
7071
' new cwc.framework.makeblock.mBot(code);\n' +
7172
'</script>\n';
72-
73-
let html = rendererHelper.getHTML(body, header);
74-
return html;
73+
return rendererHelper.getHTMLRunner(body, header, environ);
7574
};

src/renderer/external/makeblock/mbotRanger.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ cwc.renderer.external.makeblock.MBotRanger = function(helper) {
4242
* Initializes and defines the mbot renderer.
4343
*/
4444
cwc.renderer.external.makeblock.MBotRanger.prototype.init = function() {
45-
let rendererInstance = this.helper.getInstance('renderer', true);
46-
let renderer = this.render.bind(this);
47-
rendererInstance.setRenderer(renderer);
45+
this.helper.getInstance('renderer').setRenderer(this.render.bind(this));
4846
};
4947

5048

@@ -53,21 +51,24 @@ cwc.renderer.external.makeblock.MBotRanger.prototype.init = function() {
5351
* @param {cwc.file.Files} libraryFiles
5452
* @param {!cwc.file.Files} frameworks
5553
* @param {cwc.renderer.Helper} rendererHelper
54+
* @param {Object=} environ
5655
* @return {string}
5756
* @export
5857
*/
5958
cwc.renderer.external.makeblock.MBotRanger.prototype.render = function(
6059
editorContent,
6160
libraryFiles,
6261
frameworks,
63-
rendererHelper) {
64-
let header = rendererHelper.getFrameworkHeader(
65-
/** @type {string} */ (cwc.framework.Internal.MBOT_RANGER), frameworks);
66-
let content = editorContent[cwc.ui.EditorContent.JAVASCRIPT];
62+
rendererHelper,
63+
environ = {}) {
64+
let header = rendererHelper.getJavaScriptURLs([
65+
cwc.framework.Internal.MBOT_RANGER,
66+
], environ['baseURL']);
6767
let body = '\n<script>' +
68-
' let code = function(mBotRanger) {\n' + content + '\n};\n'+
68+
' let code = function(mBotRanger) {\n' +
69+
editorContent[cwc.ui.EditorContent.JAVASCRIPT] +
70+
'\n};\n'+
6971
' new cwc.framework.makeblock.mBotRanger(code);\n' +
7072
'</script>\n';
71-
let html = rendererHelper.getHTML(body, header);
72-
return html;
73+
return rendererHelper.getHTMLRunner(body, header, environ);
7374
};

src/renderer/external/pencil_code.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ cwc.renderer.external.PencilCode = function(helper) {
4242
* Initializes and defines the simple renderer.
4343
*/
4444
cwc.renderer.external.PencilCode.prototype.init = function() {
45-
let rendererInstance = this.helper.getInstance('renderer', true);
46-
let renderer = this.render.bind(this);
47-
rendererInstance.setRenderer(renderer);
45+
this.helper.getInstance('renderer').setRenderer(this.render.bind(this));
4846
};
4947

5048

src/renderer/external/python/python.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ cwc.renderer.external.Python = function(helper) {
4545
*/
4646
cwc.renderer.external.Python.prototype.init = function() {
4747
let rendererInstance = this.helper.getInstance('renderer', true);
48-
let renderer = this.render.bind(this);
49-
rendererInstance.setRenderer(renderer);
48+
rendererInstance.setRenderer(this.render.bind(this));
5049
rendererInstance.setServerMode(true);
5150
};
5251

src/renderer/external/raspberry_pi.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ cwc.renderer.external.RaspberryPi = function(helper) {
4242
* Initializes and defines the RaspberryPi renderer.
4343
*/
4444
cwc.renderer.external.RaspberryPi.prototype.init = function() {
45-
let rendererInstance = this.helper.getInstance('renderer', true);
46-
let renderer = this.render.bind(this);
47-
rendererInstance.setRenderer(renderer);
45+
this.helper.getInstance('renderer').setRenderer(this.render.bind(this));
4846
};
4947

5048

0 commit comments

Comments
 (0)