コード例 #1
0
        /// <summary>
        /// Attempt to process all selected files
        /// </summary>
        private void buttonStartProcessing_Click(object sender, EventArgs e)
        {
            // initial checks
            var checkedBtn = groupImportTypes.Controls.OfType <RadioButton>().FirstOrDefault(r => r.Checked);

            if (checkedBtn == null)
            {
                MessageBox.Show("You need to select an import type.");
                return;
            }

            if (!Directory.Exists(textBoxOutputFolder.Text))
            {
                MessageBox.Show("Chosen output folder is not valid");
                return;
            }

            if (listBoxFiles.Items.Count == 0)
            {
                MessageBox.Show("No files chosen for input");
                return;
            }

            List <string> files = new List <string>();

            foreach (var s in listBoxFiles.Items)
            {
                if (s.ToString().Trim() == "")
                {
                    MessageBox.Show($"The selected file: {s}Cannot be found.\n\nSort this out and try again");
                    return;
                }

                files.Add((string)s);
            }

            string res = "";

            if (radioTOSEC.Checked)
            {
                DATParser tp = new TOSECParser((SystemType)Enum.Parse(typeof(SystemType), comboBoxSystemSelect.SelectedValue.ToString()));
                res = tp.ParseDAT(files.ToArray());
            }
            else if (radioNOINTRO.Checked)
            {
                DATParser dp = new NOINTROParser((SystemType)Enum.Parse(typeof(SystemType), comboBoxSystemSelect.SelectedValue.ToString()));
                res = dp.ParseDAT(files.ToArray());
            }

            string fName = $"gamedb_{GameDB.GetSystemCode((SystemType)Enum.Parse(typeof(SystemType), comboBoxSystemSelect.SelectedValue.ToString()))}_DevExport_{DateTime.UtcNow:yyyy-MM-dd_HH_mm_ss}.txt";

            try
            {
                File.WriteAllText(Path.Combine(textBoxOutputFolder.Text, fName), res);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error writing file: {fName}\n\n{ex.Message}");
            }
        }
コード例 #2
0
ファイル: TOSECParser.cs プロジェクト: Asnivor/BizHawk
        /// <summary>
        /// Parses multiple DAT files and returns a single GamesDB format csv string
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public override string ParseDAT(string[] filePath)
        {
            foreach (var s in filePath)
            {
                try
                {
                    xmls.Add(XDocument.Load(s));
                }
                catch
                {
                    var res = MessageBox.Show("Could not parse document as valid XML:\n\n" + s + "\n\nDo you wish to continue any other processing?", "Parsing Error", MessageBoxButtons.YesNo);
                    if (res != DialogResult.Yes)
                    {
                        return("");
                    }
                }
            }

            int startIndex = 0;

            // actual tosec parsing
            foreach (var obj in xmls)
            {
                startIndex = Data.Count > 0 ? Data.Count - 1 : 0;
                // get header info
                var header      = obj.Root.Descendants("header").First();
                var category    = header.Element("category").Value;
                var name        = header.Element("name").Value;
                var version     = header.Element("version").Value;
                var description = header.Element("description").Value;

                // start comment block
                List <string> comments = new List <string>
                {
                    "Type:\t" + category,
                    "Source:\t" + description,
                    "FileGen:\t" + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + " (UTC)",
                };

                AddCommentBlock(comments.ToArray());

                // process each entry
                var query = obj.Root.Descendants("game");
                foreach (var g in query)
                {
                    GameDB item = new GameDB();
                    item.Name   = g.Value;
                    item.SHA1   = g.Elements("rom").First().Attribute("sha1").Value.ToUpper();
                    item.MD5    = g.Elements("rom").First().Attribute("md5").Value.ToUpper();
                    item.System = GameDB.GetSystemCode(SysType);

                    ParseTOSECFlags(item);

                    Data.Add(item);
                }

                // add this file's data to the stringbuilder
                // first we will sort into various ROMSTATUS groups
                var working = Data.Skip(startIndex).ToList();

                var baddump = working.Where(st => st.Status == "B").OrderBy(na => na.Name).ToList();
                AddCommentBlock("Bad Dumps");
                AppendCSVData(baddump);

                var hack = working.Where(st => st.Status == "H").OrderBy(na => na.Name).ToList();
                AddCommentBlock("Hacks");
                AppendCSVData(hack);

                var over = working.Where(st => st.Status == "O").OrderBy(na => na.Name).ToList();
                AddCommentBlock("Over Dumps");
                AppendCSVData(over);

                var trans = working.Where(st => st.Status == "T").OrderBy(na => na.Name).ToList();
                AddCommentBlock("Translated");
                AppendCSVData(trans);

                var pd = working.Where(st => st.Status == "D").OrderBy(na => na.Name).ToList();
                AddCommentBlock("Home Brew");
                AppendCSVData(pd);

                var good = working.Where(st => st.Status == "" || st.Status == null).OrderBy(na => na.Name).ToList();
                AddCommentBlock("Believed Good");
                AppendCSVData(good);
            }

            string result = sb.ToString();

            return(sb.ToString());
        }