Skip to content

Commit 16187eb

Browse files
committed
Improved protocol handling
Improved low level protocols and the following roboter integrations: - mBot and mBot Ranger - Lego EV3 - Sphero 2.0 (classic) Fixed smaller decoding issues and added general Stream decoder.
1 parent 7e360f6 commit 16187eb

File tree

49 files changed

+1139
-848
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1139
-848
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@
9797
"launch-linux": "google-chrome --load-and-launch-app=$PWD/dist/chrome_os --enable-logging --v=1 --no-first-run",
9898
"launch-mac": "\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" --load-and-launch-app=$PWD/dist/chrome_os --enable-logging --v=1 --no-first-run",
9999
"launch-web": "http-server dist/web_app",
100-
"launch-win": "echo && \"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --load-and-launch-app=%CD%\\dist\\chrome_os --enable-logging --v=1 --no-first-run --enable-experimental-web-platform-features",
100+
"launch-win": "echo && \"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --load-and-launch-app=%CD%\\dist\\chrome_os --enable-logging --v=1 --no-first-run",
101+
"launch-win-experimental": "echo && \"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --load-and-launch-app=%CD%\\dist\\chrome_os --enable-logging --v=1 --no-first-run --enable-experimental-web-platform-features",
101102
"clean": "npm run clean-npm && npm run clean-chrome_app && npm run clean-core && npm run clean-soy_files && npm run clean-test && npm run clean-third_party",
102103
"clean-build": "npm run clean && npm run build",
103104
"clean-chrome_app": "echo Cleaning up Chrome app dist files. Please wait ... && rimraf dist/chrome_os/*",

src/cache/cache.js

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ cwc.Cache = function(helper) {
4545
/** @type {!cwc.renderer.Helper} */
4646
this.rendererHelper = new cwc.renderer.Helper();
4747

48-
/** @private {cwc.utils.Database} */
49-
this.cache_ = new cwc.utils.Database(this.name);
48+
/** @private {!cwc.utils.Database} */
49+
this.database_ = new cwc.utils.Database(this.name);
50+
51+
/** @private {!Object} */
52+
this.databaseConfig_ = {
53+
'objectStoreNames': ['__library__'],
54+
};
5055

5156
/** @private {!cwc.utils.Logger} */
5257
this.log_ = new cwc.utils.Logger(this.name);
@@ -60,8 +65,8 @@ cwc.Cache = function(helper) {
6065
* @return {Promise}
6166
*/
6267
cwc.Cache.prototype.prepare = function() {
63-
return this.cache_.open().then(() => {
64-
this.cache_.getFile('__version__').then((version) => {
68+
return this.database_.open(this.databaseConfig_).then(() => {
69+
this.database_.getFile('__version__').then((version) => {
6570
this.update(version);
6671
});
6772
});
@@ -86,7 +91,7 @@ cwc.Cache.prototype.update = function(version) {
8691
this.log_.info('Loading Style Sheets ...');
8792
this.loadFiles(cwc.framework.StyleSheet);
8893

89-
this.cache_.addFile('__version__', this.version_);
94+
this.database_.addFile('__version__', this.version_);
9095
};
9196

9297

@@ -149,7 +154,7 @@ cwc.Cache.prototype.addFile = function(name, content, optimize = false) {
149154
this.log_.error('Received empty file for', name);
150155
return;
151156
}
152-
this.cache_.addFile(name, fileContent);
157+
this.database_.addFile(name, fileContent);
153158
};
154159

155160

@@ -158,7 +163,33 @@ cwc.Cache.prototype.addFile = function(name, content, optimize = false) {
158163
* @return {Promise}
159164
*/
160165
cwc.Cache.prototype.getFile = function(name) {
161-
return this.cache_.getFile(name);
166+
return this.database_.getFile(name);
167+
};
168+
169+
170+
/**
171+
* @param {string!} name
172+
* @param {string!} content
173+
*/
174+
cwc.Cache.prototype.addLibraryFile = function(name, content) {
175+
this.database_.addFile(name, content, '__library__');
176+
};
177+
178+
179+
/**
180+
* @param {string} name
181+
* @return {Promise}
182+
*/
183+
cwc.Cache.prototype.getLibraryFile = function(name) {
184+
return this.database_.getFile(name, '__library__');
185+
};
186+
187+
188+
/**
189+
* @return {Promise}
190+
*/
191+
cwc.Cache.prototype.clearLibraryFiles = function() {
192+
return this.database_.clearFiles('__library__');
162193
};
163194

164195

src/file_format/file_format.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ cwc.fileFormat.File.prototype.setMode = function(mode) {
322322

323323

324324
/**
325-
* @return {cwc.mode.Type}
325+
* @return {!cwc.mode.Type}
326326
*/
327327
cwc.fileFormat.File.prototype.getMode = function() {
328328
return this.mode_;

src/file_handler/file_loader.js

Lines changed: 77 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -140,68 +140,19 @@ cwc.fileHandler.FileLoader.prototype.loadGDriveFileData = function(id,
140140
cwc.fileHandler.FileLoader.prototype.handleFileData = function(data,
141141
filename = '', fileHandler = null, gDriveId = undefined) {
142142
return new Promise((resolve) => {
143-
this.log_.info('Handle file data ... (', data.length, ')');
144-
let fileInstance = this.helper.getInstance('file', true);
145-
let modeInstance = this.helper.getInstance('mode', true);
146143
let mimeType = cwc.utils.mime.getTypeByNameAndContent(filename || '', data);
147-
this.log_.info('MIME-type:', mimeType);
144+
this.log_.info('Handle file data ... (', data.length, ') with MIME-type:',
145+
mimeType);
148146

149-
let modeType;
147+
// Load compatible file mode.
150148
if (mimeType === cwc.utils.mime.Type.CWC.type) {
151-
// Handle CWC file format
152-
let file = new cwc.fileFormat.File(data);
153-
modeType = cwc.mode.Config.getMode(
154-
/** @type {cwc.mode.Type} */ (file.getMode()));
155-
this.log_.info('Loading CWC file with mode', modeType, '...');
156-
fileInstance.setFile(file);
157-
fileInstance.setMimeType(cwc.utils.mime.getByType(mimeType));
158-
modeInstance.setMode(modeType);
159-
modeInstance.setFilename(filename);
160-
161-
// Handling Blockly and normal Editor content.
162-
let editorContent = file.getContentData();
163-
for (let entry in editorContent) {
164-
if (Object.prototype.hasOwnProperty.call(editorContent, entry)) {
165-
let content = editorContent[entry];
166-
let contentType = content.getType();
167-
switch (contentType) {
168-
case cwc.utils.mime.Type.BLOCKLY.type:
169-
modeInstance.addBlocklyView(
170-
content.getName(), content.getContent());
171-
break;
172-
case cwc.utils.mime.Type.COFFEESCRIPT.type:
173-
case cwc.utils.mime.Type.CSS.type:
174-
case cwc.utils.mime.Type.HTML.type:
175-
case cwc.utils.mime.Type.JAVASCRIPT.type:
176-
modeInstance.addEditorView(
177-
content.getName(), content.getContent(), contentType);
178-
break;
179-
default:
180-
this.log_.warn('Unknown content type:', contentType);
181-
}
182-
}
183-
}
184-
185-
// Handle UI mode
186-
let fileUi = fileInstance.getUi();
187-
if (fileUi) {
188-
if (fileUi === 'blockly') {
189-
modeInstance.showBlockly();
190-
} else if (fileUi === 'editor') {
191-
modeInstance.showEditor();
192-
}
193-
}
149+
this.loadCWCFile(new cwc.fileFormat.File(data), filename);
194150
} else {
195-
// Handle raw file format
196-
modeType = cwc.mode.Config.getModeByMimeType(mimeType);
197-
this.log_.info('Loading raw data with mode', modeType, '...');
198-
fileInstance.setRawFile(data, filename);
199-
fileInstance.setMimeType(cwc.utils.mime.getByType(mimeType));
200-
modeInstance.setMode(modeType);
201-
modeInstance.addEditorView('__default__', data, mimeType);
151+
this.loadRawFile(data, filename);
202152
}
203153

204154
// Sets file handler for local or gDrive files
155+
let fileInstance = this.helper.getInstance('file');
205156
if (fileHandler) {
206157
if (fileHandler.name) {
207158
fileInstance.setFilename(fileHandler.name);
@@ -211,21 +162,83 @@ cwc.fileHandler.FileLoader.prototype.handleFileData = function(data,
211162
fileInstance.setGDriveId(gDriveId);
212163
}
213164

214-
// Sets the file title.
215-
let fileTitle = fileInstance.getFileTitle() || fileInstance.getFilename();
216-
if (fileTitle) {
217-
modeInstance.setTitle(fileTitle);
218-
}
219-
220-
// Handle post modification tasks.
221-
modeInstance.postMode(modeType);
222-
223165
this.helper.showSuccess('Loaded file ' + filename + ' successful.');
224166
resolve();
225167
});
226168
};
227169

228170

171+
/**
172+
* @param {!cwc.fileFormat.File} file
173+
* @param {string=} filename
174+
*/
175+
cwc.fileHandler.FileLoader.prototype.loadCWCFile = function(file,
176+
filename = '') {
177+
let modeType = cwc.mode.Config.getMode(
178+
/** @type {cwc.mode.Type} */ (file.getMode()));
179+
this.log_.info('Loading CWC file with mode', modeType, '...');
180+
181+
let fileInstance = this.helper.getInstance('file');
182+
fileInstance.setFile(file);
183+
fileInstance.setMimeType(cwc.utils.mime.Type.CWC);
184+
185+
let modeInstance = this.helper.getInstance('mode');
186+
modeInstance.setMode(modeType);
187+
modeInstance.setFilename(filename);
188+
189+
// Handling Blockly and normal Editor content.
190+
let editorContent = file.getContentData();
191+
for (let entry in editorContent) {
192+
if (Object.prototype.hasOwnProperty.call(editorContent, entry)) {
193+
let content = editorContent[entry];
194+
let contentType = content.getType();
195+
switch (contentType) {
196+
case cwc.utils.mime.Type.BLOCKLY.type:
197+
modeInstance.addBlocklyView(
198+
content.getName(), content.getContent());
199+
break;
200+
case cwc.utils.mime.Type.COFFEESCRIPT.type:
201+
case cwc.utils.mime.Type.CSS.type:
202+
case cwc.utils.mime.Type.HTML.type:
203+
case cwc.utils.mime.Type.JAVASCRIPT.type:
204+
modeInstance.addEditorView(
205+
content.getName(), content.getContent(), contentType);
206+
break;
207+
default:
208+
this.log_.warn('Unknown content type:', contentType);
209+
}
210+
}
211+
}
212+
213+
// Handle library files
214+
// let cacheInstance = this.helper.getInstance('cache');
215+
216+
modeInstance.postMode();
217+
};
218+
219+
220+
/**
221+
* @param {!string} content
222+
* @param {string=} filename
223+
*/
224+
cwc.fileHandler.FileLoader.prototype.loadRawFile = function(content,
225+
filename = '') {
226+
let mimeType = cwc.utils.mime.getTypeByNameAndContent(filename, content);
227+
let modeType = cwc.mode.Config.getModeByMimeType(mimeType);
228+
this.log_.info('Loading', mimeType, 'file with mode', modeType, '...');
229+
230+
let fileInstance = this.helper.getInstance('file');
231+
fileInstance.setRawFile(content, filename);
232+
fileInstance.setMimeType(cwc.utils.mime.getByType(mimeType));
233+
234+
let modeInstance = this.helper.getInstance('mode');
235+
modeInstance.setMode(modeType);
236+
modeInstance.setFilename(filename);
237+
modeInstance.addEditorView('__default__', content, mimeType);
238+
modeInstance.postMode();
239+
};
240+
241+
229242
/**
230243
* @param {!Function} callback
231244
* @param {Object=} scope

0 commit comments

Comments
 (0)