コード例 #1
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);
        }
コード例 #2
0
ファイル: Report.cs プロジェクト: finalmillenium/RVWorld
        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);
                }
            }
        }
コード例 #3
0
ファイル: DatUpdate.cs プロジェクト: RomVault/RVWorld
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: Report.cs プロジェクト: finalmillenium/RVWorld
        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();
            }
        }
コード例 #6
0
ファイル: DatXMLReader.cs プロジェクト: vidarw/RVWorld
        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);
                }
            }
        }
コード例 #7
0
        //        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);
        }
コード例 #8
0
ファイル: ReMakeZips.cs プロジェクト: thatswork/RomVaultX
        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);
            }
        }
コード例 #9
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);
        }
コード例 #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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
ファイル: frmMain.cs プロジェクト: vidarw/RVWorld
        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);
        }
コード例 #13
0
        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();
        }
コード例 #14
0
ファイル: Report.cs プロジェクト: tvierling/RomVault
        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();
        }
コード例 #15
0
        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);
        }
コード例 #16
0
ファイル: Report.cs プロジェクト: WinCoder/RomVault
        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);
                }
            }
        }
コード例 #17
0
ファイル: DatUpdate.cs プロジェクト: RomVault/RVWorld
        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);
        }
コード例 #18
0
ファイル: DatCmpReader.cs プロジェクト: mnadareski/RomVaultX
        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);
        }
コード例 #19
0
ファイル: DatUpdate.cs プロジェクト: artifexor/RVWorld
        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;
                }
            }
        }
コード例 #20
0
ファイル: DatReader.cs プロジェクト: vidarw/RVWorld
        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);
        }
コード例 #21
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);
        }
コード例 #22
0
ファイル: DatDOSReader.cs プロジェクト: mnadareski/RomVaultX
        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);
        }
コード例 #23
0
ファイル: DatUpdate.cs プロジェクト: WinCoder/RomVault
        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);
        }
コード例 #24
0
ファイル: Report.cs プロジェクト: pacman56/RVWorld
        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();
            }
        }
コード例 #25
0
ファイル: DatXMLReader.cs プロジェクト: vidarw/RVWorld
        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);
        }
コード例 #26
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();

            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);
        }
コード例 #27
0
        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);
        }
コード例 #28
0
ファイル: Report.cs プロジェクト: finalmillenium/RVWorld
        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);
                }
            }
        }
コード例 #29
0
ファイル: DatXMLReader.cs プロジェクト: vidarw/RVWorld
        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);
        }
コード例 #30
0
        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);
        }