static public WidgetList xml2ModWidgets(XmlDocument doc) { XmlNode root = doc.DocumentElement; IEnumerator ienum = root.GetEnumerator(); XmlNode widgetXml; WidgetList list = new WidgetList(); while (ienum.MoveNext()) { widgetXml = (XmlNode)ienum.Current; WidgetInfo info = WidgetBrowser.xml2ModWidgetInfo(widgetXml); list.Add(info.id, info); } return(list); }
/* * returns all widgets which contain one more of the files */ private WidgetList getWidgetsThatContainFiles(WidgetList luas, ArrayList files) { WidgetList widgets = new WidgetList(); IEnumerator ienum = luas.Values.GetEnumerator(); while( ienum.MoveNext() ) { //iterate widgets WidgetInfo curWidget = (WidgetInfo)ienum.Current; LinkedList<FileInfo> filesCurWidget = this.getFileListByLuaId(curWidget.id); ArrayList mis = this.getMissingFilesForWidget(filesCurWidget, files); if (mis.Count < filesCurWidget.Count ) { //at least one file is included, add the widget widgets.Add(curWidget.id, curWidget); } } return widgets; }
/* * returns all widgets which contain one more of the files */ private WidgetList getWidgetsThatContainFiles(WidgetList luas, ArrayList files) { WidgetList widgets = new WidgetList(); IEnumerator ienum = luas.Values.GetEnumerator(); while (ienum.MoveNext()) { //iterate widgets WidgetInfo curWidget = (WidgetInfo)ienum.Current; LinkedList <FileInfo> filesCurWidget = this.getFileListByLuaId(curWidget.id); ArrayList mis = this.getMissingFilesForWidget(filesCurWidget, files); if (mis.Count < filesCurWidget.Count) { //at least one file is included, add the widget widgets.Add(curWidget.id, curWidget); } } return(widgets); }
public void Scan() { const string status = "Scanning mods"; //Program.Notify(status); var pathsToAddPool = new List <string>(); long totalSize = 0; List <string> searchPatterns = new List <string>(); searchPatterns.Add("*.sdz"); searchPatterns.Add("*.sd7"); foreach (string pattern in searchPatterns) { foreach (var s in Directory.GetFiles(this.modFolder, pattern, SearchOption.TopDirectoryOnly)) { string name = Path.GetFileName(s); if (modList.Find(delegate(ModInfoDb midb) { return(midb.modFilenames.Contains(name)); }) != null) //if (modList.Find(m => (m.modFilenames.Contains(name).ToString() )) ) { continue; } pathsToAddPool.Add(s); } } foreach (var s in pathsToAddPool) { try { //do this first, so we are later able to skip file where error occured ModInfoDb mod = new ModInfoDb(); mod.modFilenames.Add(Path.GetFileName(s)); this.modList.Add(mod); ZipFile z = new ZipFile(s); //read mod-shortname from modinfo.tdf ZipEntry ze = z.GetEntry("modinfo.tdf"); if (ze == null) { //todo: check if modinfo.lua exists instead and parse it continue; } Stream modHeader = z.GetInputStream(ze); MultiplatformIni ini = new MultiplatformIni(modHeader); string shortname = ini.ReadString("MOD", "shortname"); if (shortname == null) { //this is not a mod, probably mission or something continue; } mod.abbreviation = shortname.Trim(';'); WidgetList wlist = new WidgetList(); mod.modWidgets = wlist; foreach (ZipEntry cur in z) { if (!cur.IsFile) { continue; } Match m = Regex.Match(cur.Name, ModBrowser.widgetKeyFileRegEx, RegexOptions.IgnoreCase); if (m.Success) { try { TextReader reader = new StreamReader(z.GetInputStream(cur)); Dictionary <string, Object> widgetHeader = this.luaParser.getWidgetInfoHeaderString(reader.ReadToEnd()); WidgetInfo winfo = new WidgetInfo(); winfo.addFileHeaderInfo(widgetHeader); wlist.Add(wlist.Count, winfo); } catch (Exception exp) { Console.WriteLine("ModWidget-Error in file \"" + s + "\" in widget \"" + cur.Name + "\": " + exp.Message); } } } //this.fileManager.readWidgetFile(); // if (TaskManager.Cancel) break; // AddFile(s, totalSize, ref doneSize); } catch (Exception exp) { Console.WriteLine("(Zip) Exception in file \"" + s + "\": " + exp.Message); } } SaveFileEntries(); //Program.Notify("{0} complete", status); //if (pathsToAddPool.Count > 0 || todel.Count > 0) InvokeEvent(InstalledVersionsChanged); }
static public WidgetList xml2ModWidgets(XmlDocument doc) { XmlNode root = doc.DocumentElement; IEnumerator ienum = root.GetEnumerator(); XmlNode widgetXml; WidgetList list = new WidgetList(); while (ienum.MoveNext()) { widgetXml = (XmlNode)ienum.Current; WidgetInfo info = WidgetBrowser.xml2ModWidgetInfo(widgetXml); list.Add( info.id, info); } return list; }