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); }
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); }
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")); } }
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); }
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); }
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); } }
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")); } }
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); }
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"); }
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); }
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(); }
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); }
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); } } }
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); }
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); }
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); }
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); }
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); }
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); }
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; } } }
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); }
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); }
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); }
public static string GetRootDir(byte b0) { if (rootDirs == null) { return(@"RomRoot\" + VarFix.ToString(b0)); } else { return(rootDirs[b0]); } }
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); }
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); }
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; } } } }
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")); }