Ejemplo n.º 1
0
        private static void MakeFixFilesRecurse(RvBase b, bool selected)
        {
            if (selected)
            {
                if (b.Dat != null)
                {
                    RvDir tDir = b as RvDir;
                    if (tDir != null && tDir.Game != null && tDir.DirStatus.HasMissing())
                    {
                        if (_tDat != b.Dat)
                        {
                            if (_tDat != null)
                            {
                                _ts.WriteLine("</datafile>");
                                _ts.WriteLine();
                            }

                            if (_ts != null)
                            {
                                _ts.Close();
                            }

                            _tDat = b.Dat;
                            int    test        = 0;
                            string datFilename = Path.Combine(_outdir, "fixDat_" + Path.GetFileNameWithoutExtension(_tDat.GetData(RvDat.DatData.DatFullName)) + ".dat");
                            while (File.Exists(datFilename))
                            {
                                test++;
                                datFilename = Path.Combine(_outdir, "fixDat_" + Path.GetFileNameWithoutExtension(_tDat.GetData(RvDat.DatData.DatFullName)) + "(" + test + ").dat");
                            }
                            _ts = new StreamWriter(datFilename);

                            _ts.WriteLine("<?xml version=\"1.0\"?>");
                            _ts.WriteLine(
                                "<!DOCTYPE datafile PUBLIC \"-//Logiqx//DTD ROM Management Datafile//EN\" \"http://www.logiqx.com/Dats/datafile.dtd\">");
                            _ts.WriteLine("");
                            _ts.WriteLine("<datafile>");
                            _ts.WriteLine("\t<header>");
                            _ts.WriteLine("\t\t<name>fix_" + Etxt(_tDat.GetData(RvDat.DatData.DatName)) + "</name>");
                            if (_tDat.GetData(RvDat.DatData.SuperDat) == "superdat")
                            {
                                _ts.WriteLine("\t\t<type>SuperDAT</type>");
                            }
                            _ts.WriteLine("\t\t<description>fix_" + Etxt(_tDat.GetData(RvDat.DatData.Description)) + "</description>");
                            _ts.WriteLine("\t\t<category>FIXDATFILE</category>");
                            _ts.WriteLine("\t\t<version>" + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + "</version>");
                            _ts.WriteLine("\t\t<date>" + DateTime.Now.ToString("MM/dd/yyyy") + "</date>");
                            _ts.WriteLine("\t\t<author>RomVault</author>");
                            _ts.WriteLine("\t</header>");
                        }

                        _ts.WriteLine("\t<game name=\"" + Etxt(tDir.SuperDatFileName()) + "\">");
                        if (!string.IsNullOrEmpty(tDir.Game.GetData(RvGame.GameData.Description)))
                        {
                            _ts.WriteLine("\t\t<description>" + Etxt(tDir.Game.GetData(RvGame.GameData.Description)) + "</description>");
                        }
                    }

                    RvFile tRom = b as RvFile;
                    if (tRom != null)
                    {
                        if (tRom.DatStatus == DatStatus.InDatCollect && tRom.GotStatus != GotStatus.Got)
                        {
                            string strRom;
                            if (tRom.FileStatusIs(FileStatus.SHA1CHDFromDAT | FileStatus.MD5CHDFromDAT))
                            {
                                strRom = "\t\t<disk name=\"" + Etxt(tRom.Name) + "\"";
                            }
                            else
                            {
                                strRom = "\t\t<rom name=\"" + Etxt(tRom.Name) + "\"";
                            }

                            if (tRom.FileStatusIs(FileStatus.SizeFromDAT) && tRom.Size != null)
                            {
                                strRom += " size=\"" + tRom.Size + "\"";
                            }

                            string strCRC = ArrByte.ToString(tRom.CRC);
                            if (tRom.FileStatusIs(FileStatus.CRCFromDAT) && !string.IsNullOrEmpty(strCRC))
                            {
                                strRom += " crc=\"" + strCRC + "\"";
                            }

                            string strSHA1 = ArrByte.ToString(tRom.SHA1);
                            if (tRom.FileStatusIs(FileStatus.SHA1FromDAT) && !string.IsNullOrEmpty(strSHA1))
                            {
                                strRom += " sha1=\"" + strSHA1 + "\"";
                            }

                            string strMD5 = ArrByte.ToString(tRom.MD5);
                            if (tRom.FileStatusIs(FileStatus.MD5FromDAT) && !string.IsNullOrEmpty(strMD5))
                            {
                                strRom += " md5=\"" + strMD5 + "\"";
                            }

                            string strSHA1CHD = ArrByte.ToString(tRom.SHA1CHD);
                            if (tRom.FileStatusIs(FileStatus.SHA1CHDFromDAT) && !string.IsNullOrEmpty(strSHA1CHD))
                            {
                                strRom += " sha1=\"" + strSHA1CHD + "\"";
                            }

                            string strMD5CHD = ArrByte.ToString(tRom.MD5CHD);
                            if (tRom.FileStatusIs(FileStatus.MD5CHDFromDAT) && !string.IsNullOrEmpty(strMD5CHD))
                            {
                                strRom += " md5=\"" + strMD5CHD + "\"";
                            }

                            strRom += "/>";

                            _ts.WriteLine(strRom);
                        }
                    }
                }
            }

            RvDir d = b as RvDir;

            if (d != null)
            {
                for (int i = 0; i < d.ChildCount; i++)
                {
                    bool nextSelected = selected;
                    if (d.Tree != null)
                    {
                        nextSelected = d.Tree.Checked == RvTreeRow.TreeSelect.Selected;
                    }
                    MakeFixFilesRecurse(d.Child(i), nextSelected);
                }
            }

            if (selected)
            {
                if (b.Dat != null)
                {
                    RvDir tDir = b as RvDir;
                    if (tDir != null && tDir.Game != null && tDir.DirStatus.HasMissing())
                    {
                        _ts.WriteLine("\t</game>");
                    }
                }
            }
        }