Exemple #1
0
        private static void MergeThread(object o)
        {
#if TEST_AS_FRENCH
            Tools.SetThreadToFrench();
#endif
            MergeThreadParams mtp     = (MergeThreadParams)o;
            WaitDlg           dlg     = mtp.dlg;
            List <string>     inFiles = mtp.files;
            string            fileDir = Path.GetDirectoryName(inFiles[0]);
            inFiles.Sort(new LogicalComparer(fileDir.Length));
            try
            {
                Stopwatch sw = new Stopwatch();
                using (Archiver archive = new Archiver(mtp.outFile, mtp.fileAlignment))
                {
                    sw.Start();
                    dlg.UpdateStatus("Adding {0} files", inFiles.Count);
                    archive.AddFiles(inFiles, mtp.compression);
                    dlg.UpdateStatus("Waiting for completion");
                    archive.Finish();
                    sw.Stop();
                }
                dlg.AllowClose("Completed in {0:F2} seconds", sw.Elapsed.TotalSeconds);
            }
            catch (Exception e)
            {
                string exception = String.Format("Failed with exception {0} during merge of {1} files", e.Message, inFiles.Count);
                dlg.AllowClose(exception);
                DebugLogger.Log("Merge", exception + "{0}{1}", Environment.NewLine, e.StackTrace);
            }
            GC.Collect();
        }
Exemple #2
0
        void RecompressGMFiles(object o)
        {
            RecompressThreadArgs rta = (RecompressThreadArgs)o;
            string inDir             = rta.inDir;

            string[] allFiles     = Directory.GetFiles(inDir);
            int      numFiles     = allFiles.Length;
            WaitDlg  dlg          = rta.dlg;
            string   pngDirectory = Path.Combine(inDir, "bmp");

            dlg.UpdateStatus("Recompressing {0} files", numFiles);
            string outDir   = rta.outDir;
            string gmllFile = @"T:\out.gmll";

            for (int i = 0; i < numFiles; ++i)
            {
                Box.ResetIndexCount();
                string       currentFile = allFiles[i];
                byte[]       gmFileData;
                MemoryStream decompGM;
                using (FileStream fs = File.OpenRead(currentFile))
                {
                    decompGM   = Compress.GZipDecompress(fs);
                    gmFileData = decompGM.ToArray();
                }
                string curFile               = Path.GetFileName(currentFile);
                string pngFile               = Path.Combine(pngDirectory, curFile + ".bmp");
                GTMP.GMFile.GMFileInfo fi    = GTMP.GMFile.Parse(decompGM);
                List <IBox>            boxes = ConvertGMFileBoxes(fi.Boxes);
                if (!Tools.ConvertImageTo(pngFile, gmllFile, Tools.ConvertType.GM))
                {
                    dlg.UpdateStatus(String.Format("Couldn't convert {0} to GT2 foreground, skipping", pngFile));
                    continue;
                }

                try
                {
                    byte[] gmllData    = Images.LoadGMLLData(gmllFile);
                    string newFileName = Path.Combine(outDir, curFile);
                    GMProject.ExportGM(newFileName, boxes, fi.Metadata, gmllData);
                }
                catch (InvalidBoxStateException ibse)
                {
                    DebugLogger.Log("Debug", "Exception was from {0}", currentFile);
                    dlg.UpdateStatus("Caught invalid box exception {0} for {1} in file {2}", ibse.Message, ibse.InvalidBox.Name, currentFile);
                    File.Delete(gmllFile);
                }

                if ((i != 0) && ((i % 100) == 0))
                {
                    dlg.UpdateStatus(String.Format("Tested {0} files", i));
                }
            }
            dlg.AllowClose("All done");
        }
Exemple #3
0
        private static void SplitFiles(FileSplitter fs, string operation)
        {
            Thread t = new Thread(new ParameterizedThreadStart(SplitThread));

            t.SetApartmentState(ApartmentState.STA);
            using (WaitDlg dlg = new WaitDlg(operation))
            {
                dlg.UpdateStatus("Please wait while files are being extracted and imaged");
                SplitThreadParams stp = new SplitThreadParams(fs, dlg);
                t.Start(stp);
                dlg.ShowDialog();
            }
        }
Exemple #4
0
 public MergeThreadParams(
     WaitDlg dialog,
     List <string> inFiles,
     string outputFile,
     int compressLevel,
     int alignment)
 {
     dlg           = dialog;
     files         = inFiles;
     outFile       = outputFile;
     compression   = compressLevel;
     fileAlignment = alignment;
 }
Exemple #5
0
        private void recompressFiles_Click(object sender, EventArgs e)
        {
            string inDir  = @"C:\Users\Adrian\Downloads\GT2\US1.0Vol\USBmpTest";
            string outDir = @"C:\Users\Adrian\Downloads\GT2\US1.0Vol\USBmpTestMod";

            using (WaitDlg dlg = new WaitDlg("Checking GM Files"))
            {
                RecompressThreadArgs rta = new RecompressThreadArgs();
                rta.dlg    = dlg;
                rta.inDir  = inDir;
                rta.outDir = outDir;
                System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(RecompressGMFiles), rta);
                dlg.ShowDialog(this);
            }
        }
Exemple #6
0
        void CheckGMFileValidity(object o)
        {
            ValidityThreadArgs vta = (ValidityThreadArgs)o;
            string             dir = vta.dir;

            string[] allFiles = Directory.GetFiles(dir);
            int      numFiles = allFiles.Length;
            WaitDlg  dlg      = vta.dlg;

            dlg.UpdateStatus("Checking {0} files", numFiles);
            int exceptions = 0;

            for (int i = 0; i < numFiles; ++i)
            {
                Box.ResetIndexCount();
                string currentFile           = allFiles[i];
                GTMP.GMFile.GMFileInfo fi    = GTMP.GMFile.Parse(currentFile);
                List <IBox>            boxes = ConvertGMFileBoxes(fi.Boxes);

                try
                {
                    MemoryStream ms = new MemoryStream(boxes.Count * 0x4c);
                    using (BinaryWriter bw = new BinaryWriter(ms))
                    {
                        foreach (IBox b in boxes)
                        {
                            b.Serialize(bw);
                        }
                    }
                }
                catch (InvalidBoxStateException ibse)
                {
                    if (++exceptions == 50)
                    {
                        break;
                    }
                    DebugLogger.Log("Debug", "Exception was from {0}", currentFile);
                    dlg.UpdateStatus("Caught invalid box exception {0} for {1} in file {2}", ibse.Message, ibse.InvalidBox.Name, currentFile);
                }

                if ((i != 0) && ((i % 10) == 0))
                {
                    dlg.UpdateStatus(String.Format("Tested {0} files", i));
                }
            }
            dlg.AllowClose("All checked");
        }
Exemple #7
0
        void checkGameFileValidity_Click(object sender, EventArgs e)
        {
            //string dir = PickFolder(this, "Open dir with GM files");
            string dir = @"T:\gt2\gtmenu\pics\GTMenuDatDecomp";

            if (!String.IsNullOrEmpty(dir))
            {
                using (WaitDlg dlg = new WaitDlg("Checking GM Files"))
                {
                    ValidityThreadArgs vta = new ValidityThreadArgs();
                    vta.dlg = dlg;
                    vta.dir = dir;
                    System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CheckGMFileValidity), vta);
                    dlg.ShowDialog(this);
                }
            }
        }
Exemple #8
0
 private static void MergeFiles(List <string> inFiles, string outFile, string operation, int compression, int fileAlignment, IWin32Window parent)
 {
     if (inFiles.Count <= 1)
     {
         MainForm.DisplayMsgBox(MessageBoxButtons.OK, MessageBoxIcon.Error, "Directory contains only one or no files to merge");
         return;
     }
     using (WaitDlg dlg = new WaitDlg(operation))
     {
         dlg.UpdateStatus("Please wait while files are being merged and compressed");
         Thread mergeThread = new Thread(new ParameterizedThreadStart(MergeThread));
         mergeThread.SetApartmentState(ApartmentState.STA);
         MergeThreadParams mtp = new MergeThreadParams(dlg, inFiles, outFile, compression, fileAlignment);
         mergeThread.Start(mtp);
         dlg.ShowDialog(parent);
     }
 }
Exemple #9
0
        private static void SplitThread(object o)
        {
#if TEST_AS_FRENCH
            Tools.SetThreadToFrench();
#endif
            SplitThreadParams stp = (SplitThreadParams)o;
            WaitDlg           dlg = stp.dlg;
            Stopwatch         sw  = new Stopwatch();
            sw.Start();
            try
            {
                stp.splitter();
                sw.Stop();
                dlg.AllowClose("Completed in {0:F2} seconds", sw.Elapsed.TotalSeconds);
            }
            catch (Exception e)
            {
                string exception = String.Format("Failed with exception {0} during split ", e.Message);
                dlg.AllowClose(exception);
                DebugLogger.Log("Split", exception + "{0}{1}", Environment.NewLine, e.StackTrace);
            }
            sw.Stop();
            GC.Collect();
        }
Exemple #10
0
 public SplitThreadParams(FileSplitter fs, WaitDlg waitDlg)
 {
     splitter = fs;
     dlg      = waitDlg;
 }