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 ReportMissing(RvFile dir, RvDat dat, ReportType rt) { for (int i = 0; i < dir.ChildCount; i++) { RvFile b = dir.Child(i); if (b.Dat != null && b.Dat != dat) { continue; } RvFile f = b; if (f.IsFile) { if ( rt == ReportType.PartialMissing && Partial.Contains(f.RepStatus) || rt == ReportType.Fixing && Fixing.Contains(f.RepStatus) ) { string filename = f.FileNameInsideGame(); string crc = f.CRC.ToHexString(); _ts.WriteLine("| " + filename + new string(' ', _fileNameLength + 1 - filename.Length) + "| " + f.Size + new string(' ', _fileSizeLength + 1 - f.Size.ToString().Length) + "| " + crc + new string(' ', 9 - crc.Length) + "| " + f.RepStatus + new string(' ', _repStatusLength + 1 - f.RepStatus.ToString().Length) + "|"); } } RvFile d = b; if (d.IsDir) { ReportMissing(d, dat, rt); } } }
private static void CheckAllDatsInternal(RvFile dbFile, string datPath) { RvFile dbDir = dbFile; if (!dbDir.IsDir) { return; } int dats = dbDir.DirDatCount; if (dats > 0) { for (int i = 0; i < dats; i++) { RvDat testDat = dbDir.DirDat(i); string datFullName = testDat.GetData(RvDat.DatData.DatRootFullName); if (datPath.Length > datFullName.Length) { continue; } if (datFullName.Substring(0, datPath.Length) != datPath) { continue; } testDat.TimeStamp = long.MaxValue; } } for (int i = 0; i < dbDir.ChildCount; i++) { CheckAllDatsInternal(dbDir.Child(i), datPath); } }
public static RvFile ConvertFromExternalDat(DatHeader datHeaderExternal, RvDat datFile) { RvFile newDirFromExternal = new RvFile(FileType.Dir); RvDat newDatFromExternal = new RvDat(); newDatFromExternal.SetData(RvDat.DatData.DatRootFullName, datFile.GetData(RvDat.DatData.DatRootFullName)); newDatFromExternal.TimeStamp = datFile.TimeStamp; newDatFromExternal.Status = DatUpdateStatus.Correct; newDatFromExternal.SetData(RvDat.DatData.DatName, datHeaderExternal.Name); newDatFromExternal.SetData(RvDat.DatData.RootDir, datHeaderExternal.RootDir); newDatFromExternal.SetData(RvDat.DatData.Description, datHeaderExternal.Description); newDatFromExternal.SetData(RvDat.DatData.Category, datHeaderExternal.Category); newDatFromExternal.SetData(RvDat.DatData.Version, datHeaderExternal.Version); newDatFromExternal.SetData(RvDat.DatData.Date, datHeaderExternal.Date); newDatFromExternal.SetData(RvDat.DatData.Author, datHeaderExternal.Author); newDatFromExternal.SetData(RvDat.DatData.Email, datHeaderExternal.Email); newDatFromExternal.SetData(RvDat.DatData.HomePage, datHeaderExternal.Homepage); newDatFromExternal.SetData(RvDat.DatData.URL, datHeaderExternal.URL); newDatFromExternal.SetData(RvDat.DatData.DirSetup, datHeaderExternal.Dir); newDatFromExternal.SetData(RvDat.DatData.Header, datHeaderExternal.Header); newDatFromExternal.MultiDatsInDirectory = datFile.MultiDatsInDirectory; newDatFromExternal.MultiDatOverride = datFile.MultiDatOverride; newDirFromExternal.Dat = newDatFromExternal; HeaderFileType headerFileType = FileHeaderReader.FileHeaderReader.GetFileTypeFromHeader(datHeaderExternal.Header); CopyDir(datHeaderExternal.BaseDir, newDirFromExternal, newDatFromExternal, headerFileType, false); return(newDirFromExternal); }
public static void MakeFixFiles(bool scrubIt = true) { _tDat = null; _ts = null; FolderBrowserDialog browse = new FolderBrowserDialog { ShowNewFolderButton = true, Description = @"Please select fixdat files destination. NOTE: " + (scrubIt ? @"reports will include Red items only (omitting any Yellow that may be present)" : @"reports will include both Red and Yellow items"), RootFolder = Environment.SpecialFolder.Desktop, SelectedPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Reports") }; if (browse.ShowDialog() != DialogResult.OK) { return; } _outdir = browse.SelectedPath; _tDat = null; MakeFixFilesRecurse(DB.DirTree.Child(0), true, scrubIt); if (_ts == null) { return; } _ts.WriteLine("</datafile>"); _ts.Close(); if (scrubIt) { scrub(); } }
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 CultureInfo enUS = new CultureInfo("en-US"); public static RvDat ConvertFromExternalDat(string strFilename, DatHeader datHeaderExternal) { RvDat retDat = new RvDat { Filename = Path.GetFileName(strFilename), Name = datHeaderExternal.Name, RootDir = datHeaderExternal.RootDir, Description = datHeaderExternal.Description, Category = datHeaderExternal.Category, Version = datHeaderExternal.Version, Date = datHeaderExternal.Date, Author = datHeaderExternal.Author, Email = datHeaderExternal.Email, Homepage = datHeaderExternal.Homepage, URL = datHeaderExternal.URL, Comment = datHeaderExternal.Comment, MergeType = datHeaderExternal.MergeType }; HeaderFileType headerFileType = FileHeaderReader.FileHeaderReader.GetFileTypeFromHeader(datHeaderExternal.Header); CopyDir(datHeaderExternal.BaseDir, headerFileType, retDat); return(retDat); }
private static void ExtractZips(uint datId, string outDir) { if (buffer == null) { buffer = new byte[BufferSize]; } RvDat tDat = new RvDat(); tDat.DBRead(datId, true); _bgw.ReportProgress(0, new bgwSetRange(tDat.Games.Count)); for (int gIndex = 0; gIndex < tDat.Games.Count; gIndex++) { if (_bgw.CancellationPending) { return; } RvGame tGame = tDat.Games[gIndex]; _bgw.ReportProgress(gIndex); _bgw.ReportProgress(0, new bgwText("Creating zip : " + tGame.Name + ".zip")); ExtractGame(tGame, outDir); } }
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); }
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 static bool ReadDat(XmlDocument doc, string strFilename, out RvDat rvDat) { rvDat = new RvDat(); string filename = Path.GetFileName(strFilename); if (!LoadHeaderFromDat(doc, rvDat, filename)) { return(false); } if (doc.DocumentElement == null) { return(false); } XmlNodeList gameNodeList = doc.DocumentElement.SelectNodes("software"); if (gameNodeList == null) { return(false); } for (int i = 0; i < gameNodeList.Count; i++) { LoadGameFromDat(rvDat, gameNodeList[i]); } return(true); }
private void updateSelectedTreeRow(RvTreeRow tr) { lblDITName.Text = tr.datName; lblDITPath.Text = tr.dirFullName; if (tr.DatId != null) { RvDat tDat = new RvDat(); tDat.DbRead((uint)tr.DatId); lblDITDescription.Text = tDat.Description; lblDITCategory.Text = tDat.Category; lblDITVersion.Text = tDat.Version; lblDITAuthor.Text = tDat.Author; lblDITDate.Text = tDat.Date; } else { lblDITDescription.Text = ""; lblDITCategory.Text = ""; lblDITVersion.Text = ""; lblDITAuthor.Text = ""; lblDITDate.Text = ""; } lblDITRomsGot.Text = tr.RomGot.ToString("#,0"); lblDITRomsMissing.Text = (tr.RomTotal - tr.RomGot - tr.RomNoDump).ToString("#,0"); lblDITRomsTotal.Text = tr.RomTotal.ToString("#,0"); lblDITRomsNoDump.Text = tr.RomNoDump.ToString("#,0"); UpdateGameGrid(tr.DatId); }
public static void MakeFixFiles() { _tDat = null; _ts = null; FolderBrowserDialog browse = new FolderBrowserDialog { ShowNewFolderButton = true, Description = @"Please select a folder for Dats", RootFolder = (Settings.IsMono ? Environment.SpecialFolder.MyComputer : Environment.SpecialFolder.DesktopDirectory), SelectedPath = @"apps" }; if (browse.ShowDialog() != DialogResult.OK) { return; } _outdir = browse.SelectedPath; _tDat = null; MakeFixFilesRecurse(DB.DirTree.Child(0), true); if (_ts == null) { return; } _ts.WriteLine("</datafile>"); _ts.Close(); }
public static void MakeFixFiles() { _tDat = null; _ts = null; FolderBrowserDialog browse = new FolderBrowserDialog { ShowNewFolderButton = true, Description = @"Please select a folder for Dats", RootFolder = Environment.SpecialFolder.MyComputer, SelectedPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Reports") }; if (browse.ShowDialog() != DialogResult.OK) { return; } _outdir = browse.SelectedPath; _tDat = null; MakeFixFilesRecurse(DB.DirTree.Child(0), true); if (_ts == null) { return; } _ts.WriteLine("</datafile>"); _ts.Close(); }
private static bool ReadXMLDat(string fullname, long fileTimeStamp, out RvDat rvDat) { rvDat = null; Stream fs; int errorCode = IO.FileStream.OpenFileRead(fullname, out fs); if (errorCode != 0) { _bgw.ReportProgress(0, new bgwShowError(fullname, errorCode + ": " + new Win32Exception(errorCode).Message)); return(false); } XmlDocument doc = new XmlDocument { XmlResolver = null }; try { doc.Load(fs); } catch (Exception e) { fs.Close(); fs.Dispose(); _bgw.ReportProgress(0, new bgwShowError(fullname, string.Format("Error Occured Reading Dat:\r\n{0}\r\n", e.Message))); return(false); } fs.Close(); fs.Dispose(); if (doc.DocumentElement == null) { return(false); } XmlNode mame = doc.SelectSingleNode("mame"); if (mame != null) { return(DatXmlReader.ReadMameDat(doc, fullname, fileTimeStamp, out rvDat)); } if (doc.DocumentElement != null) { XmlNode head = doc.DocumentElement.SelectSingleNode("header"); if (head != null) { return(DatXmlReader.ReadDat(doc, fullname, fileTimeStamp, out rvDat)); } } XmlNodeList headList = doc.SelectNodes("softwarelist"); if (headList != null) { return(DatMessXmlReader.ReadDat(doc, fullname, fileTimeStamp, out rvDat)); } return(false); }
private static void ReportMissing(RvDir dir, RvDat dat, ReportType rt) { for (int i = 0; i < dir.ChildCount; i++) { RvBase b = dir.Child(i); if ((b.Dat != null) && (b.Dat != dat)) { continue; } RvFile f = b as RvFile; if (f != null) { if ( ((rt == ReportType.PartialMissing) && Partial.Contains(f.RepStatus)) || ((rt == ReportType.Fixing) && Fixing.Contains(f.RepStatus)) ) { string filename = f.FileNameInsideGame(); string crc = ArrByte.ToString(f.CRC); _ts.WriteLine("| " + filename + new string(' ', _fileNameLength + 1 - filename.Length) + "| " + f.Size + new string(' ', _fileSizeLength + 1 - f.Size.ToString().Length) + "| " + crc + new string(' ', 9 - crc.Length) + "| " + f.RepStatus + new string(' ', _repStatusLength + 1 - f.RepStatus.ToString().Length) + "|"); } } RvDir d = b as RvDir; if (d != null) { ReportMissing(d, dat, rt); } } }
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 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 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; } } }
public static bool ReadDat(string fullname, BackgroundWorker bgw, out RvDat rvDat) { _bgw = bgw; rvDat = null; Console.WriteLine("Reading " + fullname); int errorCode = FileStream.OpenFileRead(fullname, out Stream fs); if (errorCode != 0) { _bgw.ReportProgress(0, new bgwShowError(fullname, errorCode + ": " + new Win32Exception(errorCode).Message)); return(false); } StreamReader myfile = new StreamReader(fs, Program.Enc); string strLine = myfile.ReadLine(); myfile.Close(); fs.Close(); fs.Dispose(); if (strLine == null) { return(false); } if (strLine.ToLower().IndexOf("xml", StringComparison.Ordinal) >= 0) { if (!ReadXMLDat(fullname, out rvDat)) { return(false); } } else if ((strLine.ToLower().IndexOf("clrmamepro", StringComparison.Ordinal) >= 0) || (strLine.ToLower().IndexOf("romvault", StringComparison.Ordinal) >= 0) || (strLine.ToLower().IndexOf("game", StringComparison.Ordinal) >= 0)) { if (!DatCmpReader.ReadDat(fullname, out rvDat)) { return(false); } } else if (strLine.ToLower().IndexOf("doscenter", StringComparison.Ordinal) >= 0) { // if (!DatDOSReader.ReadDat(datFullName)) // return; } else { _bgw.ReportProgress(0, new bgwShowError(fullname, "Invalid DAT File")); return(false); } return(true); }
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); }
public static bool ReadDat(string strFilename, out RvDat rvDat) { HeaderFileType datFileType = HeaderFileType.Nothing; rvDat = new RvDat(); int errorCode = DatFileLoader.LoadDat(strFilename); if (errorCode != 0) { DatUpdate.ShowDat(new Win32Exception(errorCode).Message, strFilename); return(false); } string filename = Path.GetFileName(strFilename); DatFileLoader.Gn(); if (DatFileLoader.EndOfStream()) { return(false); } if (DatFileLoader.Next.ToLower() == "doscenter") { DatFileLoader.Gn(); if (!LoadHeaderFromDat(filename, rvDat, out datFileType)) { return(false); } DatFileLoader.Gn(); } while (!DatFileLoader.EndOfStream()) { switch (DatFileLoader.Next.ToLower()) { case "game": DatFileLoader.Gn(); if (!LoadGameFromDat(rvDat, "", datFileType)) { return(false); } DatFileLoader.Gn(); break; default: DatUpdate.SendAndShowDat("Error on line " + DatFileLoader.LineNumber + ": key word '" + DatFileLoader.Next + "' not known", DatFileLoader.Filename); DatFileLoader.Gn(); break; } } DatFileLoader.Close(); return(true); }
private static bool UpdateDatFile(RvDat file, bool autoAddDirectory, RvDir thisDirectory) { // Read the new Dat File into newDatFile RvDir newDatFile = DatReader.ReadInDatFile(file, _bgw); // If we got a valid Dat File back if ((newDatFile == null) || (newDatFile.Dat == null)) { ReportError.Show("Error reading Dat " + file.GetData(RvDat.DatData.DatFullName)); return(false); } newDatFile.Dat.AutoAddDirectory = autoAddDirectory; if ((autoAddDirectory || !string.IsNullOrEmpty(newDatFile.Dat.GetData(RvDat.DatData.RootDir))) && (newDatFile.Dat.GetData(RvDat.DatData.DirSetup) != "noautodir")) { // if we are auto adding extra directorys then create a new directory. newDatFile.Name = !string.IsNullOrEmpty(newDatFile.Dat.GetData(RvDat.DatData.RootDir)) ? newDatFile.Dat.GetData(RvDat.DatData.RootDir) : newDatFile.Dat.GetData(RvDat.DatData.DatName); newDatFile.DatStatus = DatStatus.InDatCollect; newDatFile.Tree = new RvTreeRow(); RvDir newDirectory = new RvDir(FileType.Dir) { Dat = newDatFile.Dat }; // add the DAT into this directory newDirectory.ChildAdd(newDatFile); newDatFile = newDirectory; } if (thisDirectory.Tree == null) { thisDirectory.Tree = new RvTreeRow(); } RvDat conflictDat; if (MergeInDat(thisDirectory, newDatFile, out conflictDat, true)) { ReportError.Show("Dat Merge conflict occured Cache contains " + conflictDat.GetData(RvDat.DatData.DatFullName) + " new dat " + newDatFile.Dat.GetData(RvDat.DatData.DatFullName) + " is trying to use the same dirctory 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); }
public static void MakeFixFiles(RvFile root = null, bool scrubIt = true) { _tDat = null; _ts = null; FolderBrowserDialog browse = new FolderBrowserDialog { ShowNewFolderButton = true, Description = @"Please select fixdat files destination. NOTE: " + (scrubIt ? @"reports will include Red items only (omitting any Yellow that may be present)" : @"reports will include both Red and Yellow items"), RootFolder = Environment.SpecialFolder.Desktop, SelectedPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Reports") }; if (browse.ShowDialog() != DialogResult.OK) { return; } _outdir = browse.SelectedPath; _tDat = null; if (root == null) { root = DB.DirTree.Child(0); } //--- pacman56 --- //New Feature: When clicking on "Generate Reports", existing fixdat files are deleted from the selected folder. var fixdatFileCount = Directory.GetFiles(_outdir, "fixDat_*.dat").Length; if (fixdatFileCount > 0) { foreach (var file in Directory.GetFiles(_outdir, "fixDat_*.dat")) { File.Delete(file); } } //--- pacman56 --- MakeFixFilesRecurse(root, true, scrubIt); if (_ts == null) { return; } _ts.WriteLine("</datafile>"); _ts.Close(); if (scrubIt) { scrub(); } }
public static bool ReadMameDat(XmlDocument doc, string strFilename, out RvDat rvDat) { rvDat = new RvDat(); string filename = Path.GetFileName(strFilename); if (!LoadMameHeaderFromDat(doc, rvDat, filename)) { return(false); } if (doc.DocumentElement == null) { return(false); } XmlNodeList dirNodeList = doc.DocumentElement.SelectNodes("dir"); if (dirNodeList != null) { for (int i = 0; i < dirNodeList.Count; i++) { LoadDirFromDat(rvDat, dirNodeList[i], "", HeaderFileType.Nothing); } } XmlNodeList gameNodeList = doc.DocumentElement.SelectNodes("game"); if (gameNodeList != null) { for (int i = 0; i < gameNodeList.Count; i++) { LoadGameFromDat(rvDat, gameNodeList[i], "", HeaderFileType.Nothing); } } XmlNodeList machineNodeList = doc.DocumentElement.SelectNodes("machine"); if (machineNodeList != null) { for (int i = 0; i < machineNodeList.Count; i++) { LoadGameFromDat(rvDat, machineNodeList[i], "", HeaderFileType.Nothing); } } return(true); }
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(); RvDat tDat = new RvDat(); while (DatFileLoader.Next != ")") { string nextstr = DatFileLoader.Next.ToLower(); if (nextstr.Length > 5 && nextstr.Substring(0, 5) == "name:") { tDat.AddData(RvDat.DatData.DatName, VarFix.CleanFileName(DatFileLoader.Next.Substring(5) + " " + DatFileLoader.GnRest()).Trim()); DatFileLoader.Gn(); } else { switch (nextstr) { 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 "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 "homepage:": tDat.AddData(RvDat.DatData.HomePage, DatFileLoader.GnRest()); DatFileLoader.Gn(); break; case "comment:": 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 = FileType.ZipFile; tDir.Dat = tDat; return(true); }
private static bool LoadHeaderFromDat(ref RvDir tDir, ref XmlDocument doc) { XmlNodeList head = doc.SelectNodes("softwarelist"); if (head == null) { return(false); } if (head.Count == 0) { return(false); } if (head[0].Attributes == null) { return(false); } RvDat tDat = new RvDat(); tDat.AddData(RvDat.DatData.DatName, VarFix.CleanFileName(head[0].Attributes.GetNamedItem("name"))); tDat.AddData(RvDat.DatData.Description, VarFix.String(head[0].Attributes.GetNamedItem("description"))); string val = VarFix.String(head[0].Attributes.GetNamedItem("forcemerging")).ToLower(); switch (val.ToLower()) { case "split": tDat.AddData(RvDat.DatData.MergeType, "split"); break; case "full": tDat.AddData(RvDat.DatData.MergeType, "full"); break; default: tDat.AddData(RvDat.DatData.MergeType, "split"); break; } tDir.Dat = tDat; return(true); }
private static void ReportMissingFindSizes(RvFile dir, RvDat dat, ReportType rt) { for (int i = 0; i < dir.ChildCount; i++) { RvFile b = dir.Child(i); if (b.Dat != null && b.Dat != dat) { continue; } RvFile f = b; if (f.IsFile) { if ( rt == ReportType.PartialMissing && Partial.Contains(f.RepStatus) || rt == ReportType.Fixing && Fixing.Contains(f.RepStatus) ) { int fileNameLength = f.FileNameInsideGame().Length; int fileSizeLength = f.Size.ToString().Length; int repStatusLength = f.RepStatus.ToString().Length; if (fileNameLength > _fileNameLength) { _fileNameLength = fileNameLength; } if (fileSizeLength > _fileSizeLength) { _fileSizeLength = fileSizeLength; } if (repStatusLength > _repStatusLength) { _repStatusLength = repStatusLength; } } } RvFile d = b; if (d.IsDir) { ReportMissingFindSizes(d, dat, rt); } } }
private static bool LoadMameHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename) { if (doc.DocumentElement == null) { return(false); } XmlNode head = doc.SelectSingleNode("mame"); if (head?.Attributes == null) { return(false); } rvDat.Filename = filename; rvDat.Name = VarFix.CleanFileName(head.Attributes.GetNamedItem("build")); // ?? is this correct should it be Name & Descripition?? rvDat.Description = VarFix.String(head.Attributes.GetNamedItem("build")); return(true); }
private static bool LoadMameHeaderFromDat(XmlDocument doc, RvDat rvDat, string filename, long fileTimeStamp) { if (doc.DocumentElement == null) { return(false); } XmlNode head = doc.SelectSingleNode("mame"); if (head == null || head.Attributes == null) { return(false); } rvDat.Filename = filename; rvDat.Name = VarFix.CleanFileName(head.Attributes.GetNamedItem("build")); rvDat.Description = VarFix.String(head.Attributes.GetNamedItem("build")); rvDat.DatTimeStamp = fileTimeStamp; return(true); }