Exemplo n.º 1
0
        private void Preload_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker a         = sender as BackgroundWorker;
            string           inputPath = InputPath;
            //string tempPath = ModLoaderGlobals.BaseDirectory + ModLoaderGlobals.TempName + @"\";
            //string outputPath = OutputPath;
            bool inputDirectoryMode = IO_Common.PathIsFolder(inputPath);

            //bool outputDirectoryMode = IO_Common.PathIsFolder(outputPath);

            a.ReportProgress(0);

            DeleteTempFiles(TempPath);
            //Pipeline.PreStart(inputDirectoryMode, outputDirectoryMode);

            a.ReportProgress(33);

            ExtractGame(inputPath, TempPath);
            while (Pipeline.IsBusy)
            {
                Thread.Sleep(100);
            }

            a.ReportProgress(66);

            PreloadGame();

            a.ReportProgress(90);

            if (!KeepTempFiles)
            {
                DeleteTempFiles(TempPath);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Builds game ROM or copies game files to output path.
        /// </summary>
        /// <param name="inputPath">Input path of the game files</param>
        /// <param name="outputPath">Output path to folder or file</param>
        void BuildGame(string inputPath, string outputPath)
        {
            if (Pipeline == null)
            {
                Console.WriteLine("Error: Pipeline not ready!");
                return;
            }

            bool directoryMode = IO_Common.PathIsFolder(outputPath);

            if (directoryMode)
            {
                //Directory Mode - just copy files to output
                DirectoryInfo di = new DirectoryInfo(inputPath);
                if (Pipeline.Metadata.Console == ConsoleMode.PS2)
                {
                    foreach (DirectoryInfo dir in di.EnumerateDirectories())
                    {
                        foreach (FileInfo file in dir.EnumerateFiles())
                        {
                            file.MoveTo(file.FullName);
                        }
                        IO_Common.Recursive_RenameFiles(dir);
                    }
                    foreach (FileInfo file in di.EnumerateFiles())
                    {
                        file.MoveTo(file.FullName);
                    }
                }

                if (!Directory.Exists(outputPath))
                {
                    Directory.CreateDirectory(outputPath);
                }

                string pathparent = outputPath + @"\";
                foreach (DirectoryInfo dir in di.EnumerateDirectories())
                {
                    Directory.CreateDirectory(pathparent + dir.Name);
                    foreach (FileInfo file in dir.EnumerateFiles())
                    {
                        file.CopyTo(pathparent + dir.Name + @"\" + file.Name);
                    }
                    IO_Common.Recursive_CopyFiles(dir, pathparent + dir.Name + @"\");
                }
                foreach (FileInfo file in di.EnumerateFiles())
                {
                    file.CopyTo(pathparent + file.Name);
                }
            }
            else
            {
                Pipeline.Build(inputPath, outputPath);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Detects console and game from the given full path using cached ModPipeline and Game lists.
        /// </summary>
        public void DetectGame(string inputPath)
        {
            bool directoryMode = IO_Common.PathIsFolder(inputPath);

            Modder        = null;
            Pipeline      = null;
            GamePreloaded = false;
            SupportedMods = new List <ModCrate>();
            bool   ConsoleDetected = false;
            string regionID;
            uint   regionNumber;

            DeleteTempFiles(TempPath);

            try
            {
                foreach (KeyValuePair <ModPipelineInfo, Type> pair in SupportedConsoles)
                {
                    Pipeline = (ModPipeline)Activator.CreateInstance(pair.Value);
                    bool DetectResult = Pipeline.Detect(directoryMode, inputPath, out regionID, out regionNumber);
                    if (DetectResult)
                    {
                        ConsoleDetected = true;
                        SetGameType(regionID, pair.Key.Console, regionNumber);
                        break;
                    }
                    DeleteTempFiles(TempPath);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Detect Error: " + ex.Message);

                UpdateProcessMessage(ModLoaderText.Error_UnableToOpenGame);
                ResetGameSpecific(false);
                return;
            }

            DeleteTempFiles(TempPath);

            SetProcessStartAllow.Invoke(this, new EventValueArgs <bool>(ConsoleDetected));

            if (!ConsoleDetected)
            {
                ResetGameSpecific(false);
                UpdateProcessMessage(ModLoaderText.Error_UnknownGameROM);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Extracts or copies game files using the set ModPipeline from given input path to given output path.
        /// </summary>
        /// <param name="inputPath">Input path to Game folder or file</param>
        /// <param name="outputPath">Output path of game files</param>
        void ExtractGame(string inputPath, string outputPath)
        {
            if (Pipeline == null)
            {
                Console.WriteLine("Error: Pipeline not ready!");
                return;
            }

            bool directoryMode = IO_Common.PathIsFolder(inputPath);

            if (directoryMode)
            {
                DirectoryInfo di = new DirectoryInfo(inputPath);
                if (!di.Exists)
                {
                    throw new IOException(ModLoaderText.Error_FolderNotAccessible);
                }

                Directory.CreateDirectory(outputPath);

                string pathparent = outputPath + @"\";
                foreach (DirectoryInfo dir in di.EnumerateDirectories())
                {
                    Directory.CreateDirectory(pathparent + dir.Name);
                    foreach (FileInfo file in dir.EnumerateFiles())
                    {
                        file.CopyTo(pathparent + dir.Name + @"\" + file.Name);
                    }
                    IO_Common.Recursive_CopyFiles(dir, pathparent + dir.Name + @"\");
                }
                foreach (FileInfo file in di.EnumerateFiles())
                {
                    file.CopyTo(pathparent + file.Name);
                }
            }
            else
            {
                Pipeline.Extract(inputPath, outputPath);
            }
        }
Exemplo n.º 5
0
        public override void Build(string inputPath, string outputPath)
        {
            if (!isCDimage)
            {
                //Use PS2ImageMaker
                DirectoryInfo di = new DirectoryInfo(inputPath);
                foreach (DirectoryInfo dir in di.EnumerateDirectories())
                {
                    foreach (FileInfo file in dir.EnumerateFiles())
                    {
                        file.MoveTo(file.FullName);
                    }
                    IO_Common.Recursive_RenameFiles(dir);
                }
                foreach (FileInfo file in di.EnumerateFiles())
                {
                    file.MoveTo(file.FullName);
                }

                buildInputPath  = inputPath;
                buildOutputPath = outputPath;

                AsyncWorker = new BackgroundWorker();
                AsyncWorker.WorkerReportsProgress = true;
                AsyncWorker.DoWork             += new DoWorkEventHandler(Builder_DoWork);
                AsyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Builder_RunWorkerCompleted);
                AsyncWorker.ProgressChanged    += new ProgressChangedEventHandler(Builder_ProgressChanged);
                AsyncWorker.RunWorkerAsync();
            }
            else
            {
                // Use CDBuilder
                CDBuilder isoBuild = new CDBuilder();
                isoBuild.UseJoliet        = true;
                isoBuild.VolumeIdentifier = ISO_Label;

                // CD image adjustments
                DirectoryInfo dit = new DirectoryInfo(inputPath);
                foreach (DirectoryInfo dir in dit.EnumerateDirectories())
                {
                    foreach (FileInfo file in dir.EnumerateFiles())
                    {
                        file.MoveTo(file.FullName);
                    }
                    IO_Common.Recursive_RenameFiles(dir);
                }
                foreach (FileInfo file in dit.EnumerateFiles())
                {
                    file.MoveTo(file.FullName);
                }

                DirectoryInfo        di    = new DirectoryInfo(inputPath);
                HashSet <FileStream> files = new HashSet <FileStream>();

                foreach (DirectoryInfo dir in di.GetDirectories())
                {
                    ISO_Common.Recursive_AddDirs(isoBuild, dir, dir.Name + @"\", files, true);
                }
                foreach (FileInfo file in di.GetFiles())
                {
                    ISO_Common.AddFile(isoBuild, file, string.Empty, files, true);
                }

                using (FileStream output = new FileStream(outputPath, FileMode.Create, FileAccess.Write))
                    using (Stream input = isoBuild.Build())
                    {
                        ISO2PSX.Run(input, output);
                    }

                foreach (FileStream file in files)
                {
                    file.Close();
                }
            }
        }