Beispiel #1
0
        public static RvFile fromGZip(string filename, byte[] bytes, ulong compressedSize)
        {
            RvFile retFile = new RvFile();

            retFile.CompressedSize = compressedSize;

            retFile.SHA1 = VarFix.CleanMD5SHA1(Path.GetFileNameWithoutExtension(filename), 40);
            retFile.MD5  = new byte[16];
            Array.Copy(bytes, 0, retFile.MD5, 0, 16);
            retFile.CRC = new byte[4];
            Array.Copy(bytes, 16, retFile.CRC, 0, 4);
            retFile.Size = BitConverter.ToUInt64(bytes, 20);

            if (bytes.Length == 28)
            {
                return(retFile);
            }

            retFile.AltType = (HeaderFileType)bytes[28];
            retFile.AltMD5  = new byte[16];
            Array.Copy(bytes, 29, retFile.AltMD5, 0, 16);
            retFile.AltSHA1 = new byte[20];
            Array.Copy(bytes, 45, retFile.AltSHA1, 0, 20);
            retFile.AltCRC = new byte[4];
            Array.Copy(bytes, 65, retFile.AltCRC, 0, 4);
            retFile.AltSize = BitConverter.ToUInt64(bytes, 69);

            return(retFile);
        }
Beispiel #2
0
        public static List <RvRom> ReadRoms(uint gameId)
        {
            List <RvRom> roms = new List <RvRom>();

            SqlRead.Parameters["GameId"].Value = gameId;

            using (SQLiteDataReader dr = SqlRead.ExecuteReader())
            {
                while (dr.Read())
                {
                    RvRom row = new RvRom
                    {
                        RomId              = Convert.ToUInt32(dr["RomId"]),
                        GameId             = gameId,
                        Name               = dr["name"].ToString(),
                        Size               = FixLong(dr["size"]),
                        CRC                = VarFix.CleanMD5SHA1(dr["CRC"].ToString(), 8),
                        SHA1               = VarFix.CleanMD5SHA1(dr["SHA1"].ToString(), 40),
                        MD5                = VarFix.CleanMD5SHA1(dr["MD5"].ToString(), 32),
                        Merge              = dr["merge"].ToString(),
                        Status             = dr["status"].ToString(),
                        FileId             = FixLong(dr["FileId"]),
                        fileSize           = FixLong(dr["fileSize"]),
                        fileCompressedSize = FixLong(dr["fileCompressedSize"]),
                        fileCRC            = VarFix.CleanMD5SHA1(dr["fileCRC"].ToString(), 8),
                        fileSHA1           = VarFix.CleanMD5SHA1(dr["fileSHA1"].ToString(), 40),
                        fileMD5            = VarFix.CleanMD5SHA1(dr["fileMD5"].ToString(), 32)
                    };

                    roms.Add(row);
                }
                dr.Close();
            }
            return(roms);
        }
        private bool LoadHeaderFromDat(XmlDocument doc, DatHeader datHeader)
        {
            XmlNodeList head = doc.SelectNodes("softwarelist");

            if (head == null)
            {
                return(false);
            }

            if (head.Count == 0)
            {
                return(false);
            }

            if (head[0].Attributes == null)
            {
                return(false);
            }

            datHeader.Filename    = _filename;
            datHeader.Name        = VarFix.String(head[0].Attributes.GetNamedItem("name"));
            datHeader.Description = VarFix.String(head[0].Attributes.GetNamedItem("description"));

            return(true);
        }
Beispiel #4
0
        public static bool Execute(RvFile tFile)
        {
            if (tFile.Size == 0)
            {
                CommandZero.Parameters["crc"].Value  = VarFix.ToDBString(tFile.CRC);
                CommandZero.Parameters["sha1"].Value = VarFix.ToDBString(tFile.SHA1);
                CommandZero.Parameters["md5"].Value  = VarFix.ToDBString(tFile.MD5);

                object resZero = CommandZero.ExecuteScalar();

                if (resZero == null || resZero == DBNull.Value)
                {
                    return(false);
                }
                int countZero = Convert.ToInt32(resZero);

                return(countZero > 0);
            }

            Command.Parameters["size"].Value = tFile.Size;
            Command.Parameters["crc"].Value  = VarFix.ToDBString(tFile.CRC);
            Command.Parameters["sha1"].Value = VarFix.ToDBString(tFile.SHA1);
            Command.Parameters["md5"].Value  = VarFix.ToDBString(tFile.MD5);

            object res = Command.ExecuteScalar();

            if (res == null || res == DBNull.Value)
            {
                return(false);
            }
            int count = Convert.ToInt32(res);

            return(count > 0);
        }
        private void LoadRomFromDat(DatDir parentDir, XmlNode romNode)
        {
            if (romNode.Attributes == null)
            {
                return;
            }

            XmlNode name     = romNode.Attributes.GetNamedItem("name");
            string  loadflag = VarFix.String(romNode.Attributes.GetNamedItem("loadflag"));

            if (name != null)
            {
                DatFile dRom = new DatFile(DatFileType.UnSet)
                {
                    Name   = VarFix.String(name),
                    Size   = VarFix.ULong(romNode.Attributes.GetNamedItem("size")),
                    CRC    = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8),
                    SHA1   = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40),
                    Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status"))
                };

                _indexContinue = parentDir.ChildAdd(dRom);
            }
            else if (loadflag.ToLower() == "continue")
            {
                DatFile tRom = (DatFile)parentDir.Child(_indexContinue);
                tRom.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size"));
            }
        }
Beispiel #6
0
        private static bool LoadHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename, long fileTimeStamp)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.DocumentElement.SelectSingleNode("header");

            rvDat.Filename     = filename;
            rvDat.DatTimeStamp = fileTimeStamp;

            if (head == null)
            {
                return(false);
            }
            rvDat.Name        = VarFix.CleanFileName(head.SelectSingleNode("name"));
            rvDat.RootDir     = VarFix.CleanFileName(head.SelectSingleNode("rootdir"));
            rvDat.Description = VarFix.String(head.SelectSingleNode("description"));
            rvDat.Category    = VarFix.String(head.SelectSingleNode("category"));
            rvDat.Version     = VarFix.String(head.SelectSingleNode("version"));
            rvDat.Date        = VarFix.String(head.SelectSingleNode("date"));
            rvDat.Author      = VarFix.String(head.SelectSingleNode("author"));
            rvDat.Email       = VarFix.String(head.SelectSingleNode("email"));
            rvDat.Homepage    = VarFix.String(head.SelectSingleNode("homepage"));
            rvDat.URL         = VarFix.String(head.SelectSingleNode("url"));
            rvDat.Comment     = VarFix.String(head.SelectSingleNode("comment"));

            return(true);
        }
Beispiel #7
0
        public static bool FindInFiles(RvFile tFile)
        {
            if (_commandFindInFiles == null)
            {
                _commandFindInFiles = new SQLiteCommand(@"
                    SELECT COUNT(1) FROM FILES WHERE
                        size=@size AND crc=@CRC and sha1=@SHA1 and md5=@MD5", DBSqlite.db.Connection);
                _commandFindInFiles.Parameters.Add(new SQLiteParameter("size"));
                _commandFindInFiles.Parameters.Add(new SQLiteParameter("crc"));
                _commandFindInFiles.Parameters.Add(new SQLiteParameter("sha1"));
                _commandFindInFiles.Parameters.Add(new SQLiteParameter("md5"));
            }

            _commandFindInFiles.Parameters["size"].Value = tFile.Size;
            _commandFindInFiles.Parameters["crc"].Value  = VarFix.ToDBString(tFile.CRC);
            _commandFindInFiles.Parameters["sha1"].Value = VarFix.ToDBString(tFile.SHA1);
            _commandFindInFiles.Parameters["md5"].Value  = VarFix.ToDBString(tFile.MD5);

            object res = _commandFindInFiles.ExecuteScalar();

            if ((res == null) || (res == DBNull.Value))
            {
                return(false);
            }
            int count = Convert.ToInt32(res);

            return(count > 0);
        }
Beispiel #8
0
        private static void LoadSlot(DatGame dGame, XmlNode slot)
        {
            XmlNodeList slotList = slot.SelectNodes("slotoption");

            if (slotList == null)
            {
                return;
            }

            for (int i = 0; i < slotList.Count; i++)
            {
                if (slotList[i].Attributes == null)
                {
                    continue;
                }

                string name = VarFix.String(slotList[i].Attributes.GetNamedItem("devname"));

                if (dGame.slot == null)
                {
                    dGame.slot = new List <string>();
                }

                dGame.slot.Add(name);
            }
        }
Beispiel #9
0
        private static void LoadRomFromDat(RvGame rvGame, XmlNode romNode)
        {
            if (romNode.Attributes == null)
            {
                return;
            }

            XmlNode name     = romNode.Attributes.GetNamedItem("name");
            string  loadflag = VarFix.String(romNode.Attributes.GetNamedItem("loadflag"));

            if (name != null)
            {
                RvRom rvRom = new RvRom();
                rvRom.Name   = VarFix.CleanFullFileName(name);
                rvRom.Size   = VarFix.ULong(romNode.Attributes.GetNamedItem("size"));
                rvRom.CRC    = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("crc"), 8);
                rvRom.SHA1   = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40);
                rvRom.Status = VarFix.ToLower(romNode.Attributes.GetNamedItem("status"));

                _indexContinue = rvGame.AddRom(rvRom);
            }
            else if (loadflag.ToLower() == "continue")
            {
                RvRom tROM = rvGame.Roms[_indexContinue];
                tROM.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size"));
            }
            else if (loadflag.ToLower() == "ignore")
            {
                RvRom tROM = rvGame.Roms[_indexContinue];
                tROM.Size += VarFix.ULong(romNode.Attributes.GetNamedItem("size"));
            }
        }
Beispiel #10
0
        private static bool LoadHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename)
        {
            XmlNodeList head = doc.SelectNodes("softwarelist");

            if (head == null)
            {
                return(false);
            }

            if (head.Count == 0)
            {
                return(false);
            }

            if (head[0].Attributes == null)
            {
                return(false);
            }

            rvDat.Filename    = filename;
            rvDat.Name        = VarFix.CleanFileName(head[0].Attributes.GetNamedItem("name"));
            rvDat.Description = VarFix.String(head[0].Attributes.GetNamedItem("description"));

            return(true);
        }
Beispiel #11
0
        public void DBWrite()
        {
            DataAccessLayer.ExecuteNonQuery("BEGIN");

            SqlWrite.Parameters["size"].Value           = Size;
            SqlWrite.Parameters["compressedsize"].Value = CompressedSize;
            SqlWrite.Parameters["crc"].Value            = VarFix.ToDBString(CRC);
            SqlWrite.Parameters["sha1"].Value           = VarFix.ToDBString(SHA1);
            SqlWrite.Parameters["md5"].Value            = VarFix.ToDBString(MD5);

            object res    = SqlWrite.ExecuteScalar();
            UInt32 fileId = Convert.ToUInt32(res);

            if (Size != 0)
            {
                SqlUpdateRom.Parameters["FileId"].Value = fileId;
                SqlUpdateRom.Parameters["size"].Value   = Size;
                SqlUpdateRom.Parameters["crc"].Value    = VarFix.ToDBString(CRC);
                SqlUpdateRom.Parameters["sha1"].Value   = VarFix.ToDBString(SHA1);
                SqlUpdateRom.Parameters["md5"].Value    = VarFix.ToDBString(MD5);
                SqlUpdateRom.ExecuteNonQuery();
            }
            else
            {
                SqlUpdateZeroRom.Parameters["FileId"].Value = fileId;
                SqlUpdateZeroRom.Parameters["crc"].Value    = VarFix.ToDBString(CRC);
                SqlUpdateZeroRom.Parameters["sha1"].Value   = VarFix.ToDBString(SHA1);
                SqlUpdateZeroRom.Parameters["md5"].Value    = VarFix.ToDBString(MD5);
                SqlUpdateZeroRom.ExecuteNonQuery();
            }
            DataAccessLayer.ExecuteNonQuery("COMMIT");
        }
Beispiel #12
0
        private static void LoadDiskFromDat(ref RvDir tGame, XmlNode romNode)
        {
            if (romNode.Attributes == null)
            {
                return;
            }


            RvFile tRom = new RvFile(FileType.File)
            {
                Dat     = tGame.Dat,
                Name    = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")) + ".chd",
                SHA1CHD = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40),
                MD5CHD  = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32),
                Merge   = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge")),
                Status  = VarFix.ToLower(romNode.Attributes.GetNamedItem("status"))
            };

            if (tRom.SHA1CHD != null)
            {
                tRom.FileStatusSet(FileStatus.SHA1CHDFromDAT);
            }
            if (tRom.MD5CHD != null)
            {
                tRom.FileStatusSet(FileStatus.MD5CHDFromDAT);
            }

            tGame.ChildAdd(tRom);
        }
Beispiel #13
0
        private static void FileUpdateZeroRom(RvFile file)
        {
            if (_commandRvFileUpdateZeroRom == null)
            {
                _commandRvFileUpdateZeroRom = new SQLiteCommand(
                    @"
                    UPDATE ROM SET 
	                    FileId = @FileId,
                        LocalFileHeader = null,
                        LocalFileHeaderOffset = null,
                        LocalFileHeaderLength=null
                    WHERE
	                    ( Size=0 ) AND
	                    ( crc  is NULL OR crc  = @crc  ) AND
	                    ( sha1 is NULL OR sha1 = @sha1 ) AND
	                    ( md5  is NULL OR md5  = @md5  ) AND 
                        FileId IS NULL;
                ", DBSqlite.db.Connection);
                _commandRvFileUpdateZeroRom.Parameters.Add(new SQLiteParameter("FileId"));
                _commandRvFileUpdateZeroRom.Parameters.Add(new SQLiteParameter("crc"));
                _commandRvFileUpdateZeroRom.Parameters.Add(new SQLiteParameter("sha1"));
                _commandRvFileUpdateZeroRom.Parameters.Add(new SQLiteParameter("md5"));
            }

            _commandRvFileUpdateZeroRom.Parameters["FileId"].Value = file.FileId;
            _commandRvFileUpdateZeroRom.Parameters["crc"].Value    = VarFix.ToDBString(file.CRC);
            _commandRvFileUpdateZeroRom.Parameters["sha1"].Value   = VarFix.ToDBString(file.SHA1);
            _commandRvFileUpdateZeroRom.Parameters["md5"].Value    = VarFix.ToDBString(file.MD5);
            _commandRvFileUpdateZeroRom.ExecuteNonQuery();
        }
Beispiel #14
0
        private static bool LoadHeaderFromDat(ref RvDir tDir, ref FileType thisFileType)
        {
            if (DatFileLoader.Next != "(")
            {
                DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadHeaderFromDat_not_found_after_clrmamepro, DatFileLoader.Filename);
                return(false);
            }
            DatFileLoader.Gn();

            string forceZipping = "";

            RvDat tDat = new RvDat();

            while (DatFileLoader.Next != ")")
            {
                switch (DatFileLoader.Next.ToLower())
                {
                case "name": tDat.AddData(RvDat.DatData.DatName, VarFix.CleanFileName(DatFileLoader.GnRest())); DatFileLoader.Gn(); break;

                case "description": tDat.AddData(RvDat.DatData.Description, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "category": tDat.AddData(RvDat.DatData.Category, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "version": tDat.AddData(RvDat.DatData.Version, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "date": tDat.AddData(RvDat.DatData.Date, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "author": tDat.AddData(RvDat.DatData.Author, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "email": tDat.AddData(RvDat.DatData.Email, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "homepage": tDat.AddData(RvDat.DatData.HomePage, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "url": tDat.AddData(RvDat.DatData.URL, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "comment": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "header": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "forcezipping": forceZipping = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "forcepacking": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;     // incorrect usage

                case "forcemerging": tDat.AddData(RvDat.DatData.MergeType, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "forcenodump": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "dir": tDat.AddData(RvDat.DatData.DirSetup, DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                default:
                    DatUpdate.SendAndShowDat(Resources.DatCmpReader_ReadDat_Error_keyword + DatFileLoader.Next + Resources.DatCmpReader_LoadHeaderFromDat_not_known_in_clrmamepro, DatFileLoader.Filename);
                    DatFileLoader.Gn();
                    break;
                }
            }

            thisFileType = forceZipping.ToLower() != "no" ? FileType.ZipFile : FileType.File;
            tDir.Dat     = tDat;
            return(true);
        }
Beispiel #15
0
        private static void LoadDirFromDat(RvDat rvDat, XmlNode dirNode, string rootDir, HeaderFileType datFileType)
        {
            if (dirNode.Attributes == null)
            {
                return;
            }

            string fullname = VarFix.CleanFullFileName(dirNode.Attributes.GetNamedItem("name"));

            XmlNodeList dirNodeList = dirNode.SelectNodes("dir");

            if (dirNodeList != null)
            {
                for (int i = 0; i < dirNodeList.Count; i++)
                {
                    LoadDirFromDat(rvDat, dirNodeList[i], Path.Combine(rootDir, fullname), datFileType);
                }
            }

            XmlNodeList gameNodeList = dirNode.SelectNodes("game");

            if (gameNodeList != null)
            {
                for (int i = 0; i < gameNodeList.Count; i++)
                {
                    LoadGameFromDat(rvDat, gameNodeList[i], Path.Combine(rootDir, fullname), datFileType);
                }
            }
        }
Beispiel #16
0
        private static bool LoadNewDat(RvDat fileDat, RvFile thisDirectory)
        {
            // Read the new Dat File into newDatFile
            RvFile newDatFile = DatReader.ReadInDatFile(fileDat, _thWrk, out string extraDirName);

            // If we got a valid Dat File back
            if (newDatFile?.Dat == null)
            {
                ReportError.Show("Error reading Dat " + fileDat.GetData(RvDat.DatData.DatRootFullName));
                return(false);
            }
            if (newDatFile.ChildCount == 0)
            {
                return(false);
            }

            if (!string.IsNullOrWhiteSpace(extraDirName))
            {
                newDatFile.Name = VarFix.CleanFileName(extraDirName);

                newDatFile.DatStatus = DatStatus.InDatCollect;
                newDatFile.Tree      = new RvTreeRow();

                RvFile newDirectory = new RvFile(FileType.Dir)
                {
                    Dat = newDatFile.Dat
                };

                // add the DAT into this directory
                newDirectory.ChildAdd(newDatFile);
                newDatFile = newDirectory;

                newDatFile.Dat.AutoAddedDirectory = true;
            }
            else
            {
                newDatFile.Dat.AutoAddedDirectory = false;
            }

            if (thisDirectory.Tree == null)
            {
                thisDirectory.Tree = new RvTreeRow();
            }

            if (MergeInDat(thisDirectory, newDatFile, out RvDat conflictDat, true))
            {
                ReportError.Show("Dat Merge conflict occured Cache contains " + conflictDat.GetData(RvDat.DatData.DatRootFullName) + " new dat " + newDatFile.Dat.GetData(RvDat.DatData.DatRootFullName) + " is trying to use the same directory and so will be ignored.");
                return(false);
            }

            //SetInDat(thisDirectory);

            // Add the new Dat
            thisDirectory.DirDatAdd(newDatFile.Dat);

            // Merge the files/directories in the Dat
            MergeInDat(thisDirectory, newDatFile, out conflictDat, false);
            return(true);
        }
Beispiel #17
0
        private static bool LoadDiskFromDat(ref RvDir tGame)
        {
            if (DatFileLoader.Next != "(")
            {
                DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadRomFromDat_not_found_after_rom, DatFileLoader.Filename);
                return(false);
            }
            DatFileLoader.Gn();

            if (DatFileLoader.Next.ToLower() != "name")
            {
                DatUpdate.SendAndShowDat(Resources.DatCmpReader_LoadGameFromDat_Name_not_found_as_first_object_in, DatFileLoader.Filename);
                return(false);
            }


            string filename = VarFix.CleanFullFileName(DatFileLoader.Gn());
            RvFile tRom     = new RvFile(FileType.File)
            {
                Name = filename
            };

            DatFileLoader.Gn();
            tRom.Dat = tGame.Dat;

            while (DatFileLoader.Next != ")")
            {
                switch (DatFileLoader.Next.ToLower())
                {
                case "sha1": tRom.SHA1CHD = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 40); DatFileLoader.Gn(); break;

                case "md5": tRom.MD5CHD = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 32); DatFileLoader.Gn(); break;

                case "merge": tRom.Merge = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); break;

                case "flags": tRom.Status = VarFix.ToLower(DatFileLoader.Gn()); DatFileLoader.Gn(); break;

                case "nodump": tRom.Status = "nodump"; DatFileLoader.Gn(); break;

                default:
                    DatUpdate.SendAndShowDat(Resources.DatCmpReader_ReadDat_Error_keyword + DatFileLoader.Next + Resources.DatCmpReader_LoadRomFromDat_not_known_in_rom, DatFileLoader.Filename);
                    DatFileLoader.Gn();
                    break;
                }
            }

            if (tRom.SHA1CHD != null)
            {
                tRom.FileStatusSet(FileStatus.SHA1CHDFromDAT);
            }
            if (tRom.MD5CHD != null)
            {
                tRom.FileStatusSet(FileStatus.MD5CHDFromDAT);
            }

            tGame.ChildAdd(tRom);

            return(true);
        }
Beispiel #18
0
        private static bool LoadDirFromDat(RvDat rvDat, string rootName, HeaderFileType datFileType)
        {
            if (DatFileLoader.Next != "(")
            {
                DatUpdate.SendAndShowDat("( not found after game", DatFileLoader.Filename);
                return(false);
            }
            DatFileLoader.Gn();

            if (DatFileLoader.Next.ToLower() != "name")
            {
                DatUpdate.SendAndShowDat("Name not found as first object in ( )", DatFileLoader.Filename);
                return(false);
            }
            string fullname = VarFix.CleanFullFileName(DatFileLoader.GnRest());

            fullname = Path.Combine(rootName, fullname);

            DatFileLoader.Gn();

            while (DatFileLoader.Next != ")")
            {
                switch (DatFileLoader.Next.ToLower())
                {
                case "dir":
                    DatFileLoader.Gn();
                    if (!LoadDirFromDat(rvDat, fullname, datFileType))
                    {
                        return(false);
                    }
                    DatFileLoader.Gn();
                    break;

                case "game":
                    DatFileLoader.Gn();
                    if (!LoadGameFromDat(rvDat, fullname, datFileType))
                    {
                        return(false);
                    }
                    DatFileLoader.Gn();
                    break;

                case "resource":
                    DatFileLoader.Gn();
                    if (!LoadGameFromDat(rvDat, fullname, datFileType))
                    {
                        return(false);
                    }
                    DatFileLoader.Gn();
                    break;

                default:
                    DatUpdate.SendAndShowDat("Error Keyword " + DatFileLoader.Next + " not know in dir", DatFileLoader.Filename);
                    DatFileLoader.Gn();
                    break;
                }
            }
            return(true);
        }
Beispiel #19
0
        private static bool LoadRomFromDat(RvGame rvGame)
        {
            if (DatFileLoader.Next != "(")
            {
                DatUpdate.SendAndShowDat("( not found after rom", DatFileLoader.Filename);
                return(false);
            }
            DatFileLoader.Gn();

            if (DatFileLoader.Next.ToLower() != "name")
            {
                DatUpdate.SendAndShowDat("Name not found as first object in ( )", DatFileLoader.Filename);
                return(false);
            }


            RvRom rvRom = new RvRom();

            rvRom.Name = VarFix.CleanFullFileName(DatFileLoader.Gn());
            DatFileLoader.Gn();


            while (DatFileLoader.Next != ")")
            {
                switch (DatFileLoader.Next.ToLower())
                {
                case "size": rvRom.Size = VarFix.ULong(DatFileLoader.Gn()); DatFileLoader.Gn(); break;

                case "crc": rvRom.CRC = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 8); DatFileLoader.Gn(); break;

                case "sha1": rvRom.SHA1 = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 40); DatFileLoader.Gn(); break;

                case "md5": rvRom.MD5 = VarFix.CleanMD5SHA1(DatFileLoader.Gn(), 32); DatFileLoader.Gn(); break;

                case "merge": rvRom.Merge = VarFix.CleanFullFileName(DatFileLoader.Gn()); DatFileLoader.Gn(); break;

                case "flags": rvRom.Status = VarFix.ToLower(DatFileLoader.Gn()); DatFileLoader.Gn(); break;

                case "date": DatFileLoader.Gn(); DatFileLoader.Gn(); break;

                case "bios": DatFileLoader.Gn(); DatFileLoader.Gn(); break;

                case "region": DatFileLoader.Gn(); DatFileLoader.Gn(); break;

                case "offs": DatFileLoader.Gn(); DatFileLoader.Gn(); break;

                case "nodump": rvRom.Status = "nodump"; DatFileLoader.Gn(); break;

                default:
                    DatUpdate.SendAndShowDat("Error: key word '" + DatFileLoader.Next + "' not known in rom", DatFileLoader.Filename);
                    DatFileLoader.Gn();
                    break;
                }
            }

            rvGame.AddRom(rvRom);

            return(true);
        }
Beispiel #20
0
        public static uint?Execute(RvRom tFile)
        {
            if (tFile.SHA1 != null)
            {
                CommandSHA1.Parameters["sha1"].Value = VarFix.ToDBString(tFile.SHA1);
                CommandSHA1.Parameters["md5"].Value  = VarFix.ToDBString(tFile.MD5);
                CommandSHA1.Parameters["crc"].Value  = VarFix.ToDBString(tFile.CRC);
                CommandSHA1.Parameters["size"].Value = tFile.Size;

                object res = CommandSHA1.ExecuteScalar();

                if (res == null || res == DBNull.Value)
                {
                    return(null);
                }
                return((uint?)Convert.ToInt32(res));
            }
            if (tFile.MD5 != null)
            {
                CommandMD5.Parameters["md5"].Value  = VarFix.ToDBString(tFile.MD5);
                CommandMD5.Parameters["crc"].Value  = VarFix.ToDBString(tFile.CRC);
                CommandMD5.Parameters["size"].Value = tFile.Size;

                object res = CommandMD5.ExecuteScalar();

                if (res == null || res == DBNull.Value)
                {
                    return(null);
                }
                return((uint?)Convert.ToInt32(res));
            }
            if (tFile.CRC != null)
            {
                CommandCRC.Parameters["crc"].Value  = VarFix.ToDBString(tFile.CRC);
                CommandCRC.Parameters["size"].Value = tFile.Size;

                object res = CommandCRC.ExecuteScalar();

                if (res == null || res == DBNull.Value)
                {
                    return(null);
                }
                return((uint?)Convert.ToInt32(res));
            }
            if (tFile.Size != null && tFile.Size == 0)
            {
                CommandSize.Parameters["size"].Value = tFile.Size;

                object res = CommandSize.ExecuteScalar();

                if (res == null || res == DBNull.Value)
                {
                    return(null);
                }
                return((uint?)Convert.ToInt32(res));
            }

            return(null);
        }
Beispiel #21
0
        public static List <RvRom> ReadRoms(uint gameId)
        {
            if (_commandRvRomReader == null)
            {
                _commandRvRomReader = new SQLiteCommand(
                    @"SELECT RomId,name,
                    type,
                    rom.size,
                    rom.crc,
                    rom.sha1,
                    rom.md5,
                    merge,status,putinzip,
                    rom.FileId,
                    files.size as fileSize,
                    files.compressedsize as fileCompressedSize,
                    files.crc as filecrc,
                    files.sha1 as filesha1,
                    files.md5 as filemd5
                FROM rom LEFT OUTER JOIN files ON files.FileId=rom.FileId WHERE GameId=@GameId ORDER BY RomId", Program.db.Connection);
                _commandRvRomReader.Parameters.Add(new SQLiteParameter("GameId"));
            }


            List <RvRom> roms = new List <RvRom>();

            _commandRvRomReader.Parameters["GameId"].Value = gameId;

            using (DbDataReader dr = _commandRvRomReader.ExecuteReader())
            {
                while (dr.Read())
                {
                    RvRom row = new RvRom
                    {
                        RomId              = Convert.ToUInt32(dr["RomId"]),
                        GameId             = gameId,
                        Name               = dr["name"].ToString(),
                        AltType            = VarFix.FixFileType(dr["type"]),
                        Size               = VarFix.FixLong(dr["size"]),
                        CRC                = VarFix.CleanMD5SHA1(dr["CRC"].ToString(), 8),
                        SHA1               = VarFix.CleanMD5SHA1(dr["SHA1"].ToString(), 40),
                        MD5                = VarFix.CleanMD5SHA1(dr["MD5"].ToString(), 32),
                        Merge              = dr["merge"].ToString(),
                        Status             = dr["status"].ToString(),
                        PutInZip           = (bool)dr["putinzip"],
                        FileId             = VarFix.FixLong(dr["FileId"]),
                        FileSize           = VarFix.FixLong(dr["fileSize"]),
                        FileCompressedSize = VarFix.FixLong(dr["fileCompressedSize"]),
                        FileCRC            = VarFix.CleanMD5SHA1(dr["fileCRC"].ToString(), 8),
                        FileSHA1           = VarFix.CleanMD5SHA1(dr["fileSHA1"].ToString(), 40),
                        FileMD5            = VarFix.CleanMD5SHA1(dr["fileMD5"].ToString(), 32)
                    };

                    roms.Add(row);
                }
                dr.Close();
            }
            return(roms);
        }
Beispiel #22
0
        private static void ReadDat(FileInfo[] fis, string subPath, uint dirId, bool extraDir)
        {
            foreach (FileInfo f in fis)
            {
                _datsProcessed++;
                _bgw.ReportProgress(_datsProcessed);

                uint?datId = FindDat(subPath, f.Name, f.LastWriteTime, extraDir);
                if (datId != null)
                {
                    SetDatFound((uint)datId);
                    continue;
                }

                _bgw.ReportProgress(0, new bgwText("Dat : " + subPath + @"\" + f.Name));

                if (DatRead.ReadDat(f.FullName, ReadError, out DatHeader dh))
                //if (DatReader.DatReader.ReadDat(f.FullName, _bgw, out RvDat rvDat))
                {
                    RvDat rvDat     = ExternalDatConverter.ConvertFromExternalDat(f.FullName, dh);
                    uint  nextDirId = dirId;
                    if (extraDir)
                    {
                        string extraDirName = VarFix.CleanFileName(rvDat.GetExtraDirName()); // read this from dat.
                        nextDirId = RvDir.FindOrInsertIntoDir(dirId, extraDirName, Path.Combine(subPath, extraDirName) + "\\");
                    }

                    rvDat.DirId        = nextDirId;
                    rvDat.ExtraDir     = extraDir;
                    rvDat.Path         = subPath;
                    rvDat.DatTimeStamp = f.LastWriteTime;


                    DatSetRemoveUnneededDirs(rvDat);
                    DatSetCheckParentSets(rvDat);
                    DatSetRenameAndRemoveDups(rvDat);


                    if ((rvDat.MergeType ?? "").ToLower() == "full")
                    {
                        DatSetMergeSets(rvDat);
                    }

                    DatSetCheckCollect(rvDat);

                    DBSqlite.db.Commit();
                    DBSqlite.db.Begin();
                    rvDat.DbWrite();
                    DBSqlite.db.Commit();
                    DBSqlite.db.Begin();
                }

                if (_bgw.CancellationPending)
                {
                    return;
                }
            }
        }
Beispiel #23
0
        private static bool LoadHeaderFromDat(string Filename, long fileTimeStamp, RvDat rvDat)
        {
            if (DatFileLoader.Next != "(")
            {
                DatUpdate.SendAndShowDat("( not found after clrmamepro", DatFileLoader.Filename);
                return(false);
            }
            DatFileLoader.Gn();

            rvDat.Filename     = Filename;
            rvDat.DatTimeStamp = fileTimeStamp;

            while (DatFileLoader.Next != ")")
            {
                switch (DatFileLoader.Next.ToLower())
                {
                case "name": rvDat.Name = VarFix.CleanFileName(DatFileLoader.GnRest()); DatFileLoader.Gn(); break;

                case "description": rvDat.Description = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "category": rvDat.Category = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "version": rvDat.Version = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "date": rvDat.Date = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "author": rvDat.Author = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "email": rvDat.Email = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "homepage": rvDat.Homepage = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "url": rvDat.URL = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "comment": rvDat.Comment = DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "header": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "forcezipping": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "forcepacking": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;     // incorrect usage

                case "forcemerging": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "forcenodump": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                case "dir": DatFileLoader.GnRest(); DatFileLoader.Gn(); break;

                default:
                    DatUpdate.SendAndShowDat("Error: key word '" + DatFileLoader.Next + "' not known in clrmamepro", DatFileLoader.Filename);
                    DatFileLoader.Gn();
                    break;
                }
            }

            return(true);
        }
Beispiel #24
0
 private static void CopyZeroLengthFile(RvFile fileOut, ICompress zipFileOut, out byte[] bCRC, out byte[] bMD5, out byte[] bSHA1)
 {
     // Zero Length File (Directory in a Zip)
     if (fileOut.FileType == FileType.ZipFile || fileOut.FileType == FileType.SevenZipFile)
     {
         zipFileOut.ZipFileAddZeroLengthFile();
     }
     bCRC  = VarFix.CleanMD5SHA1("00000000", 8);
     bMD5  = VarFix.CleanMD5SHA1("d41d8cd98f00b204e9800998ecf8427e", 32);
     bSHA1 = VarFix.CleanMD5SHA1("da39a3ee5e6b4b0d3255bfef95601890afd80709", 40);
 }
Beispiel #25
0
        private static bool FindInROMsAlt(RvFile tFile)
        {
            if (_commandFindInRoMsAlt == null)
            {
                _commandFindInRoMsAlt = new SQLiteCommand(@"
                        SELECT
                        (
                            SELECT count(1) FROM ROM WHERE
                                ( type=@type ) AND
                                ( sha1=@SHA1 ) AND 
                                ( md5=@MD5 OR md5 is NULL) AND
                                ( crc=@CRC OR crc is NULL ) AND
                                ( size=@size OR size is NULL )
                        ) +
                        (
                            SELECT count(1) FROM ROM WHERE
                                ( type=@type ) AND
                                ( md5=@MD5 ) AND
                                ( sha1=@SHA1 OR sha1 is NULL ) AND 
                                ( crc=@CRC OR crc is NULL ) AND
                                ( size=@size OR size is NULL )
                        ) +
                        (
                            SELECT count(1) FROM ROM WHERE
                                ( type=@type ) AND
                                ( crc=@CRC ) AND
                                ( sha1=@SHA1 OR sha1 is NULL ) AND 
                                ( md5=@MD5 OR md5 is NULL) AND
                                ( size=@size OR size is NULL )
                        ) 
                        AS TotalFound", DBSqlite.db.Connection);
                _commandFindInRoMsAlt.Parameters.Add(new SQLiteParameter("type"));
                _commandFindInRoMsAlt.Parameters.Add(new SQLiteParameter("size"));
                _commandFindInRoMsAlt.Parameters.Add(new SQLiteParameter("crc"));
                _commandFindInRoMsAlt.Parameters.Add(new SQLiteParameter("sha1"));
                _commandFindInRoMsAlt.Parameters.Add(new SQLiteParameter("md5"));
            }

            _commandFindInRoMsAlt.Parameters["type"].Value = (int)tFile.AltType;
            _commandFindInRoMsAlt.Parameters["size"].Value = tFile.AltSize;
            _commandFindInRoMsAlt.Parameters["crc"].Value  = VarFix.ToDBString(tFile.AltCRC);
            _commandFindInRoMsAlt.Parameters["sha1"].Value = VarFix.ToDBString(tFile.AltSHA1);
            _commandFindInRoMsAlt.Parameters["md5"].Value  = VarFix.ToDBString(tFile.AltMD5);

            object res = _commandFindInRoMsAlt.ExecuteScalar();

            if ((res == null) || (res == DBNull.Value))
            {
                return(false);
            }
            int count = Convert.ToInt32(res);

            return(count > 0);
        }
Beispiel #26
0
 public static string GetRootDir(byte b0)
 {
     if (rootDirs == null)
     {
         return(@"RomRoot\" + VarFix.ToString(b0));
     }
     else
     {
         return(rootDirs[b0]);
     }
 }
Beispiel #27
0
        private bool LoadHeaderFromDat(XmlDocument doc, DatHeader datHeader)
        {
            if (doc.DocumentElement == null)
            {
                return(false);
            }
            XmlNode head = doc.DocumentElement.SelectSingleNode("header");

            datHeader.Filename = _filename;

            if (head == null)
            {
                return(false);
            }
            datHeader.Name        = VarFix.String(head.SelectSingleNode("name"));
            datHeader.Type        = VarFix.String(head.SelectSingleNode("type"));
            datHeader.RootDir     = VarFix.String(head.SelectSingleNode("rootdir"));
            datHeader.Description = VarFix.String(head.SelectSingleNode("description"));
            datHeader.Category    = VarFix.String(head.SelectSingleNode("category"));
            datHeader.Version     = VarFix.String(head.SelectSingleNode("version"));
            datHeader.Date        = VarFix.String(head.SelectSingleNode("date"));
            datHeader.Author      = VarFix.String(head.SelectSingleNode("author"));
            datHeader.Email       = VarFix.String(head.SelectSingleNode("email"));
            datHeader.Homepage    = VarFix.String(head.SelectSingleNode("homepage"));
            datHeader.URL         = VarFix.String(head.SelectSingleNode("url"));
            datHeader.Comment     = VarFix.String(head.SelectSingleNode("comment"));

            datHeader.IsSuperDat = (datHeader.Type.ToLower() == "superdat") || (datHeader.Type.ToLower() == "gigadat");

            XmlNode packingNode = head.SelectSingleNode("romvault") ?? head.SelectSingleNode("clrmamepro");

            if (packingNode?.Attributes != null)
            {
                // dat Header XML filename
                datHeader.Header = VarFix.String(packingNode.Attributes.GetNamedItem("header"));

                // zip, unzip, file
                datHeader.Compression = VarFix.String(packingNode.Attributes.GetNamedItem("forcepacking")).ToLower();

                // split, full
                datHeader.MergeType = VarFix.String(packingNode.Attributes.GetNamedItem("forcemerging")).ToLower();

                // noautodir, nogame
                datHeader.Dir = VarFix.String(packingNode.Attributes.GetNamedItem("dir")).ToLower();
            }

            // Look for: <notzipped>true</notzipped>
            string notzipped = VarFix.String(head.SelectSingleNode("notzipped"));

            datHeader.NotZipped = ((notzipped.ToLower() == "true") || (notzipped.ToLower() == "yes"));

            return(true);
        }
Beispiel #28
0
        private bool LoadFileFromDat(DatFileLoader dfl, DatDir parentDir)
        {
            if (dfl.Next != "(")
            {
                _errorReport?.Invoke(dfl.Filename, "( not found after file, on line " + dfl.LineNumber);
                return(false);
            }
            dfl.Gn();

            if (dfl.Next.ToLower() != "name")
            {
                _errorReport?.Invoke(dfl.Filename, "Name not found as first object in ( ), on line " + dfl.LineNumber);
                return(false);
            }

            DatFile dRom = new DatFile(DatFileType.UnSet)
            {
                Name = dfl.GnNameToSize()
            };

            dfl.Gn();


            while (dfl.Next != ")")
            {
                switch (dfl.Next.ToLower())
                {
                case "size":
                    dRom.Size = VarFix.ULong(dfl.Gn());
                    dfl.Gn();
                    break;

                case "crc":
                    dRom.CRC = VarFix.CleanMD5SHA1(dfl.Gn(), 8);
                    dfl.Gn();
                    break;

                case "date":
                    dRom.Date = dfl.Gn() + " " + dfl.Gn();
                    dfl.Gn();
                    break;

                default:
                    _errorReport?.Invoke(dfl.Filename, "Error: key word '" + dfl.Next + "' not known in rom, on line " + dfl.LineNumber);
                    dfl.Gn();
                    break;
                }
            }

            parentDir.ChildAdd(dRom);

            return(true);
        }
Beispiel #29
0
        public static void extract(string dirName)
        {
            if (CommandFindRomsInGame == null)
            {
                CommandFindRomsInGame = new SQLiteCommand(
                    @"SELECT
                    ROM.RomId, ROM.name, ROM.size, ROM.crc, ROM.SHA1
                 FROM ROM WHERE ROM.FileId is null AND ROM.GameId=@GameId ORDER BY ROM.RomId", Program.db.Connection);
            }
            CommandFindRomsInGame.Parameters.Add(new SQLiteParameter("GameId"));

            Debug.WriteLine(dirName);

            SQLiteCommand getfiles = new SQLiteCommand(@"SELECT dat.datid,dir.FullName,GameId,game.Name FROM dir,dat,game where dat.dirid=dir.dirid and game.datid=dat.datid and dir.fullname like '" + dirName + @"%' 
and (select count(1) from ROM WHERE ROM.FileId is null AND ROM.GameId=Game.GameId)>0 order by dat.datid,GameId", Program.db.Connection);

            DbDataReader reader = getfiles.ExecuteReader();

            int DatId = -1;

            while (reader.Read())
            {
                int thisDatId = Convert.ToInt32(reader["datId"]);
                if (thisDatId == DatId)
                {
                    string dirFullName = reader["FullName"].ToString();
                    Debug.WriteLine(dirFullName);
                    DatId = thisDatId;
                }
                int    GameId   = Convert.ToInt32(reader["GameId"]);
                string GameName = reader["name"].ToString();
                Debug.WriteLine("Game " + GameId + " Name: " + GameName);

                int romCount = 0;
                using (DbDataReader drRom = ZipSetGetRomsInGame(GameId))
                {
                    while (drRom.Read())
                    {
                        int    RomId   = Convert.ToInt32(drRom["RomId"]);
                        string RomName = drRom["name"].ToString();
                        ulong  size    = Convert.ToUInt64(drRom["size"]);
                        byte[] CRC     = VarFix.CleanMD5SHA1(drRom["crc"].ToString(), 8);
                        byte[] sha1    = VarFix.CleanMD5SHA1(drRom["sha1"].ToString(), 32);

                        Debug.WriteLine("    Rom " + RomId + " Name: " + RomName + "  Size: " + size + "  CRC: " + VarFix.ToString(CRC));


                        romCount += 1;
                    }
                }
            }
        }
Beispiel #30
0
        private static void LoadDiskFromDat(RvGame rvGame, XmlNode romNode)
        {
            if (romNode.Attributes == null)
            {
                return;
            }

            string Name = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("name")) + ".chd";

            byte[] SHA1CHD = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("sha1"), 40);
            byte[] MD5CHD  = VarFix.CleanMD5SHA1(romNode.Attributes.GetNamedItem("md5"), 32);
            string Merge   = VarFix.CleanFullFileName(romNode.Attributes.GetNamedItem("merge"));
            string Status  = VarFix.ToLower(romNode.Attributes.GetNamedItem("status"));
        }