private async Task GenerateMenuImageAsync(string tempDirectory, string listText, string openmenuListText, bool isRebuilding = false) { //create hi density track var dataPath = Path.Combine(tempDirectory, "data"); if (!await Helper.DirectoryExistsAsync(dataPath)) { await Helper.CreateDirectoryAsync(dataPath); } //var isoPath = Path.Combine(tempDirectory, "iso"); //if (!await Helper.DirectoryExistsAsync(isoPath)) // await Helper.CreateDirectoryAsync(isoPath); //var isoFilePath = Path.Combine(isoPath, "menu.iso"); //var isoFilePath = Path.Combine(isoPath, "menu.iso"); var cdiPath = Path.Combine(tempDirectory, "menu_gdi");//var destinationFolder = Path.Combine(sdPath, "01"); if (await Helper.DirectoryExistsAsync(cdiPath)) { await Helper.DeleteDirectoryAsync(cdiPath); } await Helper.CreateDirectoryAsync(cdiPath); var cdiFilePath = Path.Combine(cdiPath, "disc.gdi"); await Helper.CopyDirectoryAsync(Path.Combine(currentAppPath, "tools", "openMenu", "menu_data"), dataPath); await Helper.CopyDirectoryAsync(Path.Combine(currentAppPath, "tools", "openMenu", "menu_gdi"), cdiPath); /* Write to low density */ await Helper.WriteTextFileAsync(Path.Combine(tempDirectory, "LIST.INI"), listText); await Helper.WriteTextFileAsync(Path.Combine(tempDirectory, "OPENMENU.INI"), openmenuListText); /* Write to high density */ await Helper.WriteTextFileAsync(Path.Combine(dataPath, "LIST.INI"), listText); await Helper.WriteTextFileAsync(Path.Combine(dataPath, "OPENMENU.INI"), openmenuListText); /*@Debug*/ await Helper.WriteTextFileAsync(Path.Combine(currentAppPath, "LIST.INI"), listText); await Helper.WriteTextFileAsync(Path.Combine(currentAppPath, "OPENMENU.INI"), openmenuListText); //generate menu gdi var builder = new DiscUtils.Gdrom.GDromBuilder() { RawMode = false, TruncateData = true, VolumeIdentifier = "OPENMENU" }; //builder.ReportProgress += ProgressReport; //create low density track List <FileInfo> fileList = new List <FileInfo>(); fileList.Add(new FileInfo(Path.Combine(tempDirectory, "LIST.INI"))); fileList.Add(new FileInfo(Path.Combine(tempDirectory, "OPENMENU.INI"))); builder.CreateFirstTrack(Path.Combine(cdiPath, "track01.iso"), fileList); var updatetDiscTracks = builder.BuildGDROM(dataPath, ipbinPath, new List <string> { Path.Combine(cdiPath, "track04.raw") }, cdiPath); //todo await builder.UpdateGdiFile(updatetDiscTracks, cdiFilePath); if (ItemList.First().Ip.Name == "GDMENU" || ItemList.First().Ip.Name == "openMenu") { //long start; //GetIpData(cdiFilePath, out long fileLength); var item = ItemList[0]; //item.CdiTarget = start; if (isRebuilding) { return; } //if user's menu is not in GDI format, update to GDI format. if (!Path.GetExtension(item.ImageFile).Equals(".gdi", StringComparison.OrdinalIgnoreCase)) { item.ImageFiles.Clear(); var gdi = await ImageHelper.CreateGdItemAsync(cdiPath); item.ImageFiles.AddRange(gdi.ImageFiles); } item.FullFolderPath = cdiPath; item.ImageFiles[0] = Path.GetFileName(cdiFilePath); //item.RenameImageFile(Path.GetFileName(cdiFilePath)); item.SdNumber = 0; item.Work = WorkMode.New; } else if (!isRebuilding) { ItemList.Insert(0, await ImageHelper.CreateGdItemAsync(cdiPath)); } }
private async Task GenerateMenuImageAsync(string tempDirectory, string listText, bool isRebuilding = false) { //create hi density track var dataPath = Path.Combine(tempDirectory, "data"); if (!await Helper.DirectoryExistsAsync(dataPath)) { await Helper.CreateDirectoryAsync(dataPath); } //var isoPath = Path.Combine(tempDirectory, "iso"); //if (!await Helper.DirectoryExistsAsync(isoPath)) // await Helper.CreateDirectoryAsync(isoPath); //var isoFilePath = Path.Combine(isoPath, "menu.iso"); //var isoFilePath = Path.Combine(isoPath, "menu.iso"); var cdiPath = Path.Combine(tempDirectory, "menu_gdi");//var destinationFolder = Path.Combine(sdPath, "01"); if (await Helper.DirectoryExistsAsync(cdiPath)) { await Helper.DeleteDirectoryAsync(cdiPath); } await Helper.CreateDirectoryAsync(cdiPath); var cdiFilePath = Path.Combine(cdiPath, "disc.gdi"); await Helper.CopyDirectoryAsync(Path.Combine(currentAppPath, "tools", "menu_data"), dataPath); await Helper.CopyDirectoryAsync(Path.Combine(currentAppPath, "tools", "menu_gdi"), cdiPath); await Helper.WriteTextFileAsync(Path.Combine(tempDirectory, "LIST.INI"), listText); //generate menu gdi var builder = new DiscUtils.Gdrom.GDromBuilder() { RawMode = false, TruncateData = true, VolumeIdentifier = "GDMENU" }; //builder.ReportProgress += ProgressReport; //create low density track builder.CreateFirstTrack(Path.Combine(cdiPath, "track01.iso"), new FileInfo(Path.Combine(tempDirectory, "LIST.INI"))); var updatetDiscTracks = builder.BuildGDROM(dataPath, ipbinPath, new List <string> { Path.Combine(cdiPath, "track04.raw") }, cdiPath); //todo await builder.UpdateGdiFile(updatetDiscTracks, cdiFilePath); if (ItemList.First().Ip.Name == "GDMENU") { //long start; //GetIpData(cdiFilePath, out long fileLength); var item = ItemList[0]; //item.CdiTarget = start; if (isRebuilding) { return; } item.FullFolderPath = cdiPath; item.ImageFiles[0] = Path.GetFileName(cdiFilePath); //item.RenameImageFile(Path.GetFileName(cdiFilePath)); item.SdNumber = 0; item.Work = WorkMode.New; } else if (!isRebuilding) { ItemList.Insert(0, await ImageHelper.CreateGdItemAsync(cdiPath)); } }