Skip to content

Commit e4a55c1

Browse files
committed
Change type of moduleType variables from string to storageModule.ModuleType.
Add _moduleType parameter to storageNames.makeModulePath. It is currently unused.
1 parent 7703a12 commit e4a55c1

File tree

9 files changed

+49
-29
lines changed

9 files changed

+49
-29
lines changed

src/blocks/mrc_component.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ export const pythonFromBlock = function (
217217
return code;
218218
}
219219

220-
export function getAllPossibleComponents(moduleType: string): toolboxItems.ContentsType[] {
220+
export function getAllPossibleComponents(
221+
moduleType: storageModule.ModuleType): toolboxItems.ContentsType[] {
221222
const contents: toolboxItems.ContentsType[] = [];
222223
// Iterate through all the components subclasses and add definition blocks.
223224
const componentTypes = getSubclassNames('component.Component');
@@ -244,7 +245,10 @@ export function getAllPossibleComponents(moduleType: string): toolboxItems.Conte
244245
}
245246

246247
function createComponentBlock(
247-
componentName: string, classData: ClassData, staticFunctionData: FunctionData, moduleType: string): toolboxItems.Block {
248+
componentName: string,
249+
classData: ClassData,
250+
staticFunctionData: FunctionData,
251+
moduleType: storageModule.ModuleType): toolboxItems.Block {
248252
const extraState: ComponentExtraState = {
249253
importModule: classData.moduleName,
250254
staticFunctionName: staticFunctionData.functionName,

src/editor/editor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,11 @@ export class Editor {
227227
return this.blocklyWorkspace;
228228
}
229229

230-
public getCurrentModuleType(): string {
230+
public getCurrentModuleType(): storageModule.ModuleType | null {
231231
if (this.currentModule) {
232232
return this.currentModule.moduleType;
233233
}
234-
return '';
234+
return null;
235235
}
236236

237237
private getModuleContentText(): string {

src/editor/extended_python_generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export class ExtendedPythonGenerator extends PythonGenerator {
147147
return code;
148148
}
149149

150-
getModuleType(): string | null {
150+
getModuleType(): storageModule.ModuleType | null {
151151
if (this.context) {
152152
return this.context.getModuleType();
153153
}

src/editor/generator_context.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export class GeneratorContext {
3434
this.module = module;
3535
}
3636

37-
getModuleType(): string | null {
37+
getModuleType(): storageModule.ModuleType | null {
3838
if (this.module) {
3939
return this.module.moduleType;
4040
}

src/storage/module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export enum ModuleType {
2929

3030
export type Module = {
3131
modulePath: string,
32-
moduleType: string,
32+
moduleType: ModuleType,
3333
moduleId: string,
3434
projectName: string, // For example, WackyWheelerRobot
3535
className: string, // For example, GamePieceShooter.

src/storage/module_content.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export function newRobotContent(projectName: string): string {
9595
*/
9696
export function newMechanismContent(projectName: string, mechanismClassName: string): string {
9797
const module: storageModule.Mechanism = {
98-
modulePath: storageNames.makeModulePath(projectName, mechanismClassName),
98+
modulePath: storageNames.makeModulePath(projectName, mechanismClassName, storageModule.ModuleType.MECHANISM),
9999
moduleType: storageModule.ModuleType.MECHANISM,
100100
moduleId: Blockly.utils.idGenerator.genUid(),
101101
projectName: projectName,
@@ -111,7 +111,7 @@ export function newMechanismContent(projectName: string, mechanismClassName: str
111111
*/
112112
export function newOpModeContent(projectName: string, opModeClassName: string): string {
113113
const module: storageModule.OpMode = {
114-
modulePath: storageNames.makeModulePath(projectName, opModeClassName),
114+
modulePath: storageNames.makeModulePath(projectName, opModeClassName, storageModule.ModuleType.OPMODE),
115115
moduleType: storageModule.ModuleType.OPMODE,
116116
moduleId: Blockly.utils.idGenerator.genUid(),
117117
projectName: projectName,
@@ -194,7 +194,7 @@ function fixOldParsedContent(parsedContent: any): void {
194194

195195
export class ModuleContent {
196196
constructor(
197-
private moduleType: string,
197+
private moduleType: storageModule.ModuleType,
198198
private moduleId: string,
199199
private blocks : { [key: string]: any },
200200
private mechanisms: MechanismInRobot[],
@@ -207,7 +207,7 @@ export class ModuleContent {
207207
return JSON.stringify(this, null, 2);
208208
}
209209

210-
getModuleType(): string {
210+
getModuleType(): storageModule.ModuleType {
211211
return this.moduleType;
212212
}
213213

src/storage/names.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
* @author [email protected] (Liz Looney)
2020
*/
2121

22+
import * as storageModule from './module';
23+
24+
2225
export const CLASS_NAME_ROBOT = 'Robot';
2326
export const CLASS_NAME_TELEOP = 'Teleop';
2427

@@ -90,15 +93,16 @@ function escapeRegExp(text: string): string {
9093
/**
9194
* Returns the module path for the given project name and class name.
9295
*/
93-
export function makeModulePath(projectName: string, className: string): string {
96+
export function makeModulePath(
97+
projectName: string, className: string, _moduleType: storageModule.ModuleType): string {
9498
return projectName + '/' + className + JSON_FILE_EXTENSION;
9599
}
96100

97101
/**
98102
* Returns the robot module path for the given project names.
99103
*/
100104
export function makeRobotPath(projectName: string): string {
101-
return makeModulePath(projectName, CLASS_NAME_ROBOT);
105+
return makeModulePath(projectName, CLASS_NAME_ROBOT, storageModule.ModuleType.ROBOT);
102106
}
103107

104108
/**

src/storage/project.ts

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,10 @@ export async function createProject(
132132
const robotContent = storageModuleContent.newRobotContent(newProjectName);
133133
await storage.saveModule(modulePath, robotContent);
134134

135-
const opmodePath = storageNames.makeModulePath(newProjectName, storageNames.CLASS_NAME_TELEOP);
136-
const opmodeContent = storageModuleContent.newOpModeContent(newProjectName, storageNames.CLASS_NAME_TELEOP);
135+
const opmodePath = storageNames.makeModulePath(
136+
newProjectName, storageNames.CLASS_NAME_TELEOP, storageModule.ModuleType.OPMODE);
137+
const opmodeContent = storageModuleContent.newOpModeContent(
138+
newProjectName, storageNames.CLASS_NAME_TELEOP);
137139
await storage.saveModule(opmodePath, opmodeContent);
138140
}
139141

@@ -169,7 +171,8 @@ async function renameOrCopyProject(
169171

170172
for (const modulePath in pathToModuleContent) {
171173
const className = storageNames.getClassName(modulePath);
172-
const newModulePath = storageNames.makeModulePath(newProjectName, className);
174+
const moduleType = pathToModuleContent[modulePath].getModuleType()
175+
const newModulePath = storageNames.makeModulePath(newProjectName, className, moduleType);
173176
const moduleContentText = pathToModuleContent[modulePath].getModuleContentText();
174177
await storage.saveModule(newModulePath, moduleContentText);
175178
if (rename) {
@@ -202,8 +205,11 @@ export async function deleteProject(
202205
* @param newClassName The name of the class. For example, GamePieceShooter.
203206
*/
204207
export async function addModuleToProject(
205-
storage: commonStorage.Storage, project: Project, moduleType: string, newClassName: string): Promise<void> {
206-
const newModulePath = storageNames.makeModulePath(project.projectName, newClassName);
208+
storage: commonStorage.Storage,
209+
project: Project,
210+
moduleType: storageModule.ModuleType,
211+
newClassName: string): Promise<void> {
212+
const newModulePath = storageNames.makeModulePath(project.projectName, newClassName, moduleType);
207213

208214
switch (moduleType) {
209215
case storageModule.ModuleType.MECHANISM:
@@ -295,7 +301,7 @@ export async function copyModuleInProject(
295301
async function renameOrCopyModule(
296302
storage: commonStorage.Storage, project: Project, newClassName: string,
297303
oldModule: storageModule.Module, rename: boolean): Promise<string> {
298-
const newModulePath = storageNames.makeModulePath(project.projectName, newClassName);
304+
const newModulePath = storageNames.makeModulePath(project.projectName, newClassName, oldModule.moduleType);
299305
let moduleContentText = await storage.fetchModuleContentText(oldModule.modulePath);
300306
if (!rename) {
301307
// Change the ids in the module.
@@ -448,20 +454,26 @@ export function makeUploadProjectName(
448454
export async function uploadProject(
449455
storage: commonStorage.Storage, projectName: string, blobUrl: string): Promise<void> {
450456
// Process the uploaded blob to get the module types and contents.
451-
const classNameToModuleContentText = await processUploadedBlob(blobUrl);
457+
const classNameToModuleContentText: { [className: string]: string } = {}; // value is module content text.
458+
const classNameToModuleType: { [className: string]: storageModule.ModuleType } = {};
459+
await processUploadedBlob(blobUrl, classNameToModuleContentText, classNameToModuleType);
452460

453461
// Save each module.
454462
for (const className in classNameToModuleContentText) {
455463
const moduleContentText = classNameToModuleContentText[className];
456-
const modulePath = storageNames.makeModulePath(projectName, className);
464+
const moduleType = classNameToModuleType[className];
465+
const modulePath = storageNames.makeModulePath(projectName, className, moduleType);
457466
await storage.saveModule(modulePath, moduleContentText);
458467
}
459468
}
460469

461470
/**
462471
* Process the uploaded blob to get the module class names and contents.
463472
*/
464-
async function processUploadedBlob(blobUrl: string): Promise<{ [className: string]: string }> {
473+
async function processUploadedBlob(
474+
blobUrl: string,
475+
classNameToModuleContentText: { [className: string]: string }, // value is module content text.
476+
classNameToModuleType: { [className: string]: storageModule.ModuleType }): Promise<void> {
465477

466478
const prefix = 'data:application/octet-stream;base64,';
467479
if (!blobUrl.startsWith(prefix)) {
@@ -488,7 +500,6 @@ async function processUploadedBlob(blobUrl: string): Promise<{ [className: strin
488500

489501
// Process each module's content.
490502
let foundRobot = false;
491-
const classNameToModuleContentText: { [className: string]: string } = {}; // value is module content text
492503
for (const filename in files) {
493504
const className = filename;
494505
if (className === storageNames.CLASS_NAME_ROBOT) {
@@ -497,11 +508,10 @@ async function processUploadedBlob(blobUrl: string): Promise<{ [className: strin
497508
// Make sure we can parse the content.
498509
const moduleContent = storageModuleContent.parseModuleContentText(files[filename]);
499510
classNameToModuleContentText[className] = moduleContent.getModuleContentText();
511+
classNameToModuleType[className] = moduleContent.getModuleType();
500512
}
501513

502514
if (!foundRobot) {
503515
throw new Error('Uploaded file did not contain a Robot.');
504516
}
505-
506-
return classNameToModuleContentText;
507517
}

src/toolbox/hardware_category.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ export function getHardwareCategory(
4242
name: Blockly.Msg['MRC_CATEGORY_HARDWARE'],
4343
contents: [
4444
getRobotMechanismsCategory(editor),
45-
getComponentsCategory(editor),
45+
getComponentsCategory(editor, moduleType),
4646
],
4747
};
4848
case storageModule.ModuleType.MECHANISM:
49-
return getComponentsCategory(editor);
49+
return getComponentsCategory(editor, moduleType);
5050
case storageModule.ModuleType.OPMODE:
5151
return {
5252
kind: 'category',
@@ -168,7 +168,9 @@ function getRobotMethodsCategory(editor: Editor): toolboxItems.Category {
168168
};
169169
}
170170

171-
function getComponentsCategory(editor: Editor): toolboxItems.Category {
171+
function getComponentsCategory(
172+
editor: Editor,
173+
moduleType: storageModule.ModuleType): toolboxItems.Category {
172174
// getComponentsCategory is called when the user is editing the robot or a
173175
// mechanism. It allows the user to add a component or use an existing component.
174176

@@ -178,7 +180,7 @@ function getComponentsCategory(editor: Editor): toolboxItems.Category {
178180
contents.push({
179181
kind: 'category',
180182
name: Blockly.Msg['MRC_CATEGORY_ADD_COMPONENT'],
181-
contents: getAllPossibleComponents(editor.getCurrentModuleType()),
183+
contents: getAllPossibleComponents(moduleType),
182184
});
183185

184186
// Get components from the current workspace.

0 commit comments

Comments
 (0)