Beispiel #1
0
        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);
            });
        }
Beispiel #2
0
        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(); });
        }