public async Task <Program> CopyProgramPart2(string sourceProgramName, string newProgramName) { using (var storage = StorageSystem.GetStorage()) { var sourcePath = Path.Combine(StorageConstants.ProgramsPath, sourceProgramName); var destinationPath = Path.Combine(StorageConstants.ProgramsPath, newProgramName); await storage.CopyDirectoryAsync(sourcePath, destinationPath); var tempXmlPath = Path.Combine(destinationPath, StorageConstants.ProgramCodePath); var xml = await storage.ReadTextFileAsync(tempXmlPath); var xmlProgram = new XmlProgram(xml) { ProgramHeader = { ProgramName = newProgramName } }; var path = Path.Combine(StorageConstants.ProgramsPath, newProgramName, StorageConstants.ProgramCodePath); var programConverter = new ProgramConverter(); var program = programConverter.Convert(xmlProgram); var xmlString = xmlProgram.ToXmlString(); await storage.WriteTextFileAsync(path, xmlString); return(program); } }
public async Task Save(string path = null) { if (path == null) { path = Path.Combine(BasePath, StorageConstants.ProgramCodePath); } var programConverter = new ProgramConverter(); var xmlProgram = programConverter.Convert(this); var xmlString = xmlProgram.ToXmlString(); using (var storage = StorageSystem.GetStorage()) { await storage.WriteTextFileAsync(path, xmlString); } }
public async Task <Program> LoadProgramByName(string programName) { Program program = null; try { ProgramConverter programConverter = new ProgramConverter(); program = programConverter.Convert(await LoadXmlProgramByName(programName)); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } } return(program); }
public async Task <CheckProgramResult> CheckProgram(string pathToProgramDirectory) { var pathToProgramCodeFile = Path.Combine(pathToProgramDirectory, StorageConstants.ProgramCodePath); XmlProgram convertedProgram = null; var checkResult = new CheckProgramResult(); PortableImage programScreenshot = null; string programName = null; string programCode = null; using (var storage = StorageSystem.GetStorage()) { programScreenshot = await storage.LoadImageAsync(Path.Combine( pathToProgramDirectory, StorageConstants.ProgramManualScreenshotPath)) ?? await storage.LoadImageAsync(Path.Combine( pathToProgramDirectory, StorageConstants.ProgramAutomaticScreenshotPath)); if (!await storage.FileExistsAsync(pathToProgramCodeFile)) { checkResult.State = ProgramState.FilesMissing; return(checkResult); } programCode = await storage.ReadTextFileAsync(pathToProgramCodeFile); } var converterResult = await CatrobatVersionConverter. ConvertToXmlVersion(programCode, XmlConstants.TargetIDEVersion); if (converterResult.Error != CatrobatVersionConverter.VersionConverterStatus.NoError) { switch (converterResult.Error) { case CatrobatVersionConverter.VersionConverterStatus.VersionTooNew: checkResult.State = ProgramState.VersionTooNew; break; case CatrobatVersionConverter.VersionConverterStatus.VersionTooOld: checkResult.State = ProgramState.VersionTooOld; break; default: checkResult.State = ProgramState.Damaged; break; } return(checkResult); } try { convertedProgram = new XmlProgram(converterResult.Xml); programName = convertedProgram.ProgramHeader.ProgramName; } catch (Exception) { checkResult.State = ProgramState.Damaged; checkResult.ProgramHeader = null; checkResult.Program = null; return(checkResult); } try { ProgramConverter programConverter = new ProgramConverter(); checkResult.Program = programConverter.Convert(convertedProgram); NativeWrapper.SetProject(convertedProgram); } catch (Exception) { checkResult.State = ProgramState.ErrorInThisApp; checkResult.ProgramHeader = null; checkResult.Program = null; return(checkResult); } if (programName == null) { programName = XmlProgramHelper.GetProgramName(converterResult.Xml); } checkResult.ProgramHeader = new LocalProgramHeader { Screenshot = programScreenshot, ProjectName = programName, }; checkResult.State = ProgramState.Valid; return(checkResult); }
public async Task<Program> CopyProgram(string sourceProgramName, string newProgramName) { using (var storage = StorageSystem.GetStorage()) { var sourcePath = Path.Combine(StorageConstants.ProgramsPath, sourceProgramName); var destinationPath = Path.Combine(StorageConstants.ProgramsPath, newProgramName); var counter = 1; while (await storage.DirectoryExistsAsync(destinationPath)) { newProgramName = newProgramName + counter; destinationPath = Path.Combine(StorageConstants.ProgramsPath, newProgramName); counter++; } await storage.CopyDirectoryAsync(sourcePath, destinationPath); var tempXmlPath = Path.Combine(destinationPath, StorageConstants.ProgramCodePath); var xml = await storage.ReadTextFileAsync(tempXmlPath); var xmlProgram = new XmlProgram(xml) { ProgramHeader = {ProgramName = newProgramName} }; var path = Path.Combine(StorageConstants.ProgramsPath, newProgramName, StorageConstants.ProgramCodePath); var programConverter = new ProgramConverter(); var program = programConverter.Convert(xmlProgram); var xmlString = xmlProgram.ToXmlString(); await storage.WriteTextFileAsync(path, xmlString); return program; } }
public async Task<Program> LoadProgramByName(string programName) { Program program = null; try { ProgramConverter programConverter = new ProgramConverter(); program = programConverter.Convert(await LoadXmlProgramByName(programName)); } catch (Exception) { if (Debugger.IsAttached) Debugger.Break(); } return program; }
public async Task<CheckProgramResult> CheckProgram(string pathToProgramDirectory) { var pathToProgramCodeFile = Path.Combine(pathToProgramDirectory, StorageConstants.ProgramCodePath); XmlProgram convertedProgram = null; var checkResult = new CheckProgramResult(); PortableImage programScreenshot = null; string programName = null; string programCode = null; using (var storage = StorageSystem.GetStorage()) { programScreenshot = await storage.LoadImageAsync(Path.Combine( pathToProgramDirectory, StorageConstants.ProgramManualScreenshotPath)) ?? await storage.LoadImageAsync(Path.Combine( pathToProgramDirectory, StorageConstants.ProgramAutomaticScreenshotPath)); if (!await storage.FileExistsAsync(pathToProgramCodeFile)) { checkResult.State = ProgramState.FilesMissing; return checkResult; } programCode = await storage.ReadTextFileAsync(pathToProgramCodeFile); } var converterResult = await CatrobatVersionConverter. ConvertToXmlVersion(programCode, XmlConstants.TargetIDEVersion); if (converterResult.Error != CatrobatVersionConverter.VersionConverterStatus.NoError) { switch (converterResult.Error) { case CatrobatVersionConverter.VersionConverterStatus.VersionTooNew: checkResult.State = ProgramState.VersionTooNew; break; case CatrobatVersionConverter.VersionConverterStatus.VersionTooOld: checkResult.State = ProgramState.VersionTooOld; break; default: checkResult.State = ProgramState.Damaged; break; } return checkResult; } try { convertedProgram = new XmlProgram(converterResult.Xml); programName = convertedProgram.ProgramHeader.ProgramName; } catch (Exception) { checkResult.State = ProgramState.Damaged; checkResult.ProgramHeader = null; checkResult.Program = null; return checkResult; } try { ProgramConverter programConverter = new ProgramConverter(); checkResult.Program = programConverter.Convert(convertedProgram); NativeWrapper.SetProject(convertedProgram); } catch (Exception) { checkResult.State = ProgramState.ErrorInThisApp; checkResult.ProgramHeader = null; checkResult.Program = null; return checkResult; } if(programName == null) programName = XmlProgramHelper.GetProgramName(converterResult.Xml); checkResult.ProgramHeader = new LocalProgramHeader { Screenshot = programScreenshot, ProjectName = programName, }; checkResult.State = ProgramState.Valid; return checkResult; }