private void RepackerThread() { Invoke((Action) delegate { ChangeRepackState("Deleting old backups..."); }); // Test for write access string rootDir = Path.Combine(Program.WzManager.BaseDir, Program.APP_NAME); string testDir = Path.Combine(rootDir, "Test"); bool bSaveFileInHaCreatorDirectory = false; try { if (!Directory.Exists(testDir)) { Directory.CreateDirectory(testDir); Directory.Delete(testDir); } } catch (Exception e) { if (e is UnauthorizedAccessException) { bSaveFileInHaCreatorDirectory = true; } } if (bSaveFileInHaCreatorDirectory) { rootDir = Path.Combine(Directory.GetCurrentDirectory(), Program.APP_NAME); } // Prepare directories string backupDir = Path.Combine(rootDir, "Backup"); string orgBackupDir = Path.Combine(rootDir, "Original"); string XMLDir = Path.Combine(rootDir, "XML"); try { if (!Directory.Exists(backupDir)) { Directory.CreateDirectory(backupDir); } if (!Directory.Exists(orgBackupDir)) { Directory.CreateDirectory(orgBackupDir); } if (!Directory.Exists(XMLDir)) { Directory.CreateDirectory(XMLDir); } foreach (FileInfo fi in new DirectoryInfo(backupDir).GetFiles()) { fi.Delete(); } } catch (Exception e) { ShowErrorMessageThreadSafe(e, "backup files"); return; } // Save XMLs // We have to save XMLs first, otherwise the WzImages will already be disposed when we reach this code Invoke((Action) delegate { ChangeRepackState("Saving XMLs..."); }); foreach (WzImage img in Program.WzManager.updatedImages) { try { string xmlPath = Path.Combine(XMLDir, img.FullPath); string xmlPathDir = Path.GetDirectoryName(xmlPath); if (!Directory.Exists(xmlPathDir)) { Directory.CreateDirectory(xmlPathDir); } WzClassicXmlSerializer xmlSer = new WzClassicXmlSerializer(0, LineBreak.None, false); xmlSer.SerializeImage(img, xmlPath); } catch (Exception e) { ShowErrorMessageThreadSafe(e, "XMLs"); return; } } // Save WZ Files foreach (WzFile wzf in toRepack) { Invoke((Action) delegate { ChangeRepackState("Saving " + wzf.Name + "..."); }); string orgFile = wzf.FilePath; string tmpFile; if (!bSaveFileInHaCreatorDirectory) { tmpFile = orgFile + "$tmp"; } else { string folderPath = Path.Combine(rootDir, "Output"); tmpFile = Path.Combine(folderPath, wzf.Name); try { if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } if (!File.Exists(tmpFile)) { File.Create(tmpFile).Close(); } } catch (Exception e) { ShowErrorMessageThreadSafe(e, wzf.Name); return; } } try { wzf.SaveToDisk(tmpFile, null); wzf.Dispose(); if (!bSaveFileInHaCreatorDirectory) // only replace the original file if its saving in the maplestory folder { File.Move(tmpFile, orgFile + "_NewCreated.wz"); } } catch (Exception e) { ShowErrorMessageThreadSafe(e, wzf.Name); return; } } Invoke((Action) delegate { ChangeRepackState("Finished"); FinishSuccess(bSaveFileInHaCreatorDirectory); }); }
private void RepackerThread() { Invoke((Action) delegate { ChangeRepackState("Deleting old backups..."); }); // Prepare directories string rootDir = Path.Combine(Program.WzManager.BaseDir, "HaCreator"); string backupDir = Path.Combine(rootDir, "Backup"); string orgBackupDir = Path.Combine(rootDir, "Original"); string XMLDir = Path.Combine(rootDir, "XML"); try { if (!Directory.Exists(backupDir)) { Directory.CreateDirectory(backupDir); } if (!Directory.Exists(orgBackupDir)) { Directory.CreateDirectory(orgBackupDir); } if (!Directory.Exists(XMLDir)) { Directory.CreateDirectory(XMLDir); } foreach (FileInfo fi in new DirectoryInfo(backupDir).GetFiles()) { fi.Delete(); } } catch (Exception e) { ShowErrorMessageThreadSafe(e, "backup files"); return; } // Save XMLs // We have to save XMLs first, otherwise the WzImages will already be disposed when we reach this code Invoke((Action) delegate { ChangeRepackState("Saving XMLs..."); }); foreach (WzImage img in Program.WzManager.updatedImages) { try { string xmlPath = Path.Combine(XMLDir, img.FullPath); string xmlPathDir = Path.GetDirectoryName(xmlPath); if (!Directory.Exists(xmlPathDir)) { Directory.CreateDirectory(xmlPathDir); } WzClassicXmlSerializer xmlSer = new WzClassicXmlSerializer(0, LineBreak.None, false); xmlSer.SerializeImage(img, xmlPath); } catch (Exception e) { ShowErrorMessageThreadSafe(e, "XMLs"); return; } } // Save WZ Files foreach (WzFile wzf in toRepack) { Invoke((Action) delegate { ChangeRepackState("Saving " + wzf.Name + "..."); }); string orgFile = wzf.FilePath; string tmpFile = orgFile + "$tmp"; try { wzf.SaveToDisk(tmpFile); wzf.Dispose(); string buPath = Path.Combine(orgBackupDir, Path.GetFileName(orgFile)); // Try to backup to /Originals/ First, if there is already a file there, we are not original, so just backup to /Backup/ if (File.Exists(buPath)) { buPath = Path.Combine(backupDir, Path.GetFileName(orgFile)); } File.Move(orgFile, buPath); File.Move(tmpFile, orgFile); } catch (Exception e) { ShowErrorMessageThreadSafe(e, wzf.Name); return; } } Invoke((Action) delegate { ChangeRepackState("Finished"); FinishSuccess(); }); }