private void loadDirectory(TreeView treeView, string path) { _mc2repo.TypeDirs.Clear(); _mc2repo.Model = _myModel; TreeNode rootNode = new TreeNode(cbMCModel.Text); foreach (DirectoryInfo typeDir in new DirectoryInfo(path).GetDirectories()) { Multicore2TypeDirectory mc2TDir = new Multicore2TypeDirectory() { Name = typeDir.Name }; TreeNode typeNode = new TreeNode(typeDir.Name); foreach (DirectoryInfo hardDir in typeDir.GetDirectories()) { MulticoreDirectory MCDir = new MulticoreDirectory() { DirInfo = hardDir }; foreach (FileInfo file in hardDir.GetFiles()) { if (file.Name.ToUpper().Equals("README.MD")) { MCDir.Readme = File.ReadAllText(file.FullName); } if (file.Extension.ToUpper().Equals(".ZIP")) { TreeNode itemNode = new TreeNode(file.Name.ToUpper().Replace(".ZIP", "")); bool haveAll = true; string zipContents = ""; using (ZipFile zip = ZipFile.Read(file.FullName)) { foreach (ZipEntry e in zip) { haveAll &= ((from FileInfo fi in this._sdCardFiles where fi.Name == e.FileName select fi.Name).FirstOrDefault() != null); zipContents += e.FileName + "\r\n"; //if (!haveAll) break; } itemNode.Tag = file; itemNode.Checked = haveAll; } typeNode.Nodes.Add(itemNode); } MCDir.Cores.Add(new MulticoreCoreZipFile() { FileInfo = file }); } mc2TDir.Directories.Add(MCDir); } //hardwareDir rootNode.Nodes.Add(typeNode); _mc2repo.TypeDirs.Add(mc2TDir); } // typeDir treeView.Nodes.Add(rootNode); }
private void loadRepository(string path) { _mc2repo.TypeDirs.Clear(); _mc2repo.Model = _myModel; foreach (DirectoryInfo typeDir in new DirectoryInfo(path).GetDirectories()) { Multicore2TypeDirectory mc2TDir = new Multicore2TypeDirectory() { Name = typeDir.Name, HaveRoms = TYPES_WITH_ROMS.Contains(typeDir.Name) }; foreach (DirectoryInfo hardDir in typeDir.GetDirectories()) { MulticoreDirectory MCDir = new MulticoreDirectory() { DirInfo = hardDir, TypeDir = mc2TDir }; foreach (FileInfo file in hardDir.GetFiles()) { if ((file.Name.ToUpper().Equals("README.MD")) || (file.Name.ToUpper().Equals("README.TXT"))) { MCDir.Readme = File.ReadAllText(file.FullName); } else { if (file.Extension.ToUpper().Equals(".ZIP")) { //bool haveAll = true; string zipContents = ""; using (ZipFile zip = ZipFile.Read(file.FullName)) { foreach (ZipEntry e in zip) { //haveAll &= ((from FileInfo fi in this._sdCardFiles where fi.Name == e.FileName select fi.Name).FirstOrDefault() != null); zipContents += e.FileName + "\r\n"; //if (!haveAll) break; } } MulticoreCoreZipFile core = new MulticoreCoreZipFile() { FileInfo = file, ZipContents = zipContents,//.Split(new char[] { '\r', '\n' }), HardDir = MCDir }; if (_romsPath.ContainsKey(file.Name)) { core.RomsFolder = _romsPath[file.Name]; } MCDir.Cores.Add(core); } } } mc2TDir.Directories.Add(MCDir); } //hardwareDir _mc2repo.TypeDirs.Add(mc2TDir); } // typeDir #region detect cores with repeating names //var dups = _mc2repo.Cores.GroupBy(n => n.FileInfo.Name).Where(c => c.Count() > 1).Select(x => x).ToList(); List <string> dups = _mc2repo.Cores.GroupBy(n => n.FileInfo.Name).SelectMany(g => g.Skip(1)).Distinct().Select(s => s.FileInfo.Name).ToList(); if (dups.Count > 0) { foreach (string corename in dups) { foreach (MulticoreCoreZipFile core in _mc2repo.Cores.Where(c => c.FileInfo.Name.Equals(corename)).Select(s => s).ToList()) { core.SameName = true; } } } #endregion detect cores with repeating names this.updateCoresRomPaths(); }