@@ -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 */
204207export 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(
295301async 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(
448454export 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}
0 commit comments