public WidgetInfo getOlderVersion(WidgetInfo latestVersion) { //XmlNode nameIdXml = r.SelectSingleNode("NameId"); //int nameId = int.Parse( nameIdXml.InnerText ); //XmlNode versionXml = r.SelectSingleNode("Version"); //decimal version = decimal.Parse( versionXml.InnerText ); IEnumerator ienum = this.Values.GetEnumerator(); WidgetInfo widget; while (ienum.MoveNext()) { widget = (WidgetInfo)ienum.Current; //XmlNode idItem = widget.Attributes.GetNamedItem("ID"); //XmlNode name = widget.SelectSingleNode("Name"); //XmlNode curNameIdXml = widget.SelectSingleNode("NameId"); //int curNameId = int.Parse( curNameIdXml.InnerText ); //XmlNode curVersionXml = widget.SelectSingleNode( "Version" ); //decimal curVersion = decimal.Parse( curVersionXml.InnerText ); if ((widget.nameId == latestVersion.nameId) && (widget.version <= latestVersion.version)) { return(widget); } } return(null); }
/* public SortedList<string, WidgetInfo> getAsSortedByName() * { * SortedList<string, WidgetInfo> newList = new SortedList<string, WidgetInfo>(); * * IEnumerator ienum = this.Values.GetEnumerator(); * while (ienum.MoveNext()) * { * WidgetInfo info = (WidgetInfo)ienum.Current; * newList.Add( info.name, info ); * } * * return newList; * } * * public ArrayList getAsSortedByDownloadCount() * { * ArrayList newList = new ArrayList(); * * IEnumerator ienum = this.Values.GetEnumerator(); * while (ienum.MoveNext()) * { * WidgetInfo info = (WidgetInfo)ienum.Current; * newList.Add((info.downloadCount, info); * } * * return newList; * } * * public SortedList<DateTime, WidgetInfo> getAsSortedByEntryDate() * { * SortedList<DateTime, WidgetInfo> newList = new SortedList<DateTime, WidgetInfo>(); * * IEnumerator ienum = this.Values.GetEnumerator(); * while (ienum.MoveNext()) * { * WidgetInfo info = (WidgetInfo)ienum.Current; * newList.Add(info.entry, info); * } * * return newList; * } */ public ArrayList getAsSortedByVersion() { SortedList <decimal, WidgetInfo> newList = new SortedList <decimal, WidgetInfo>(); IEnumerator ienum = this.Values.GetEnumerator(); while (ienum.MoveNext()) { WidgetInfo info = (WidgetInfo)ienum.Current; newList.Add(info.version, info); } ArrayList rsortList = new ArrayList(); ienum = newList.Values.GetEnumerator(); while (ienum.MoveNext()) { WidgetInfo info = (WidgetInfo)ienum.Current; rsortList.Add(info); } // Re-sort the list. rsortList.Reverse(); // rsortList.Sort(); return(rsortList); }
/* * Adds a new Lua version. It finds the widget that matches the files and adds missing files from older version */ public void addLuaVersionByFiles(decimal version, string changelog, string systemPathOfLuaUi, ArrayList fileList) { fileList = Utils.normalizePathnames(fileList); systemPathOfLuaUi = Utils.normalizePathname(systemPathOfLuaUi); WidgetList luas = this.getOverviewListWithInactive(); WidgetList luasToUpdate = this.getWidgetsThatContainFiles(luas, fileList); IEnumerator widgetEnum = luasToUpdate.Values.GetEnumerator(); while (widgetEnum.MoveNext()) { WidgetInfo curWidget = (WidgetInfo)widgetEnum.Current; int luaId = this.addLuaVersion(version, curWidget.nameId); this.updateLuaVersion(luaId, changelog, 1); LinkedList <FileInfo> filesCurWidget = this.getFileListByLuaId(curWidget.id); IEnumerator fEnum = filesCurWidget.GetEnumerator(); while (fEnum.MoveNext()) { FileInfo finfo = (FileInfo)fEnum.Current; string localGamePath = Utils.normalizePathname(finfo.localPath); string sourceFilename = Utils.normalizePathname(systemPathOfLuaUi + finfo.localPath); this.addLuaFile(localGamePath, sourceFilename, luaId); } } }
/* * returns -1 if not found in any widget */ public int getIdByContainingFilename(String fullFilename, String springPath) { String normalizedFile = System.IO.Path.GetFullPath(fullFilename); //iterate all widgets IEnumerator ienum = this.Values.GetEnumerator(); while (ienum.MoveNext()) { //iterate all files belonging to that current widget WidgetInfo winfo = (WidgetInfo)ienum.Current; if (!winfo.dbIsAvail) { continue; } IEnumerator ienum2 = winfo.fileList.GetEnumerator(); while (ienum2.MoveNext()) { FileInfo finfo = (FileInfo)ienum2.Current; //check if this is the wanted file String curFile = System.IO.Path.GetFullPath(springPath + finfo.localPath); if (curFile.Equals(normalizedFile, StringComparison.CurrentCultureIgnoreCase)) { return(winfo.id); } } } //not found return(-1); }
static public WidgetInfo xml2ModWidgetInfo(XmlNode xml) { WidgetInfo info = new WidgetInfo(); info.headerName = xml.SelectSingleNode("HeaderName").InnerText; info.headerDescription = xml.SelectSingleNode("Description").InnerText; info.id = int.Parse(xml.Attributes.GetNamedItem("ID").InnerText); return(info); }
public void addFileHeaderInfo(WidgetInfo winfo) { headerIsAvail = winfo.headerIsAvail; headerName = winfo.headerName; headerAuthor = winfo.headerAuthor; headerDate = winfo.headerDate; headerLicense = winfo.headerLicense; headerDescription = winfo.headerDescription; headerLayer = winfo.headerLayer; headerDefaultEnable = winfo.headerDefaultEnable; //headerSourceFile = winfo.headerSourceFile; // activatedState = winfo.activatedState; }
public int getHighestId() { int id = 0; IEnumerator ienum = this.Values.GetEnumerator(); while (ienum.MoveNext()) { WidgetInfo winfo = (WidgetInfo)ienum.Current; id = Math.Max(winfo.id, id); } return(id); }
public WidgetInfo getByName(String name) { IEnumerator ienum = this.Values.GetEnumerator(); while (ienum.MoveNext()) { WidgetInfo info = (WidgetInfo)ienum.Current; if (info.name == name) { return(info); } } return(null); }
/* * Merges another list into this list */ public void mergeAnotherList(WidgetList blist) { IDictionaryEnumerator ienum = blist.GetEnumerator(); while (ienum.MoveNext()) { int key = (int)ienum.Key; WidgetInfo info = (WidgetInfo)ienum.Value; if (!this.ContainsKey(key)) { this.Add(key, info); } } }
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); }
static public WidgetInfo xml2WidgetInfo(XmlNode xml) { WidgetInfo winfo = new WidgetInfo(); winfo.dbIsAvail = true; winfo.id = int.Parse(xml.Attributes.GetNamedItem("ID").InnerText); //winfo.id = int.Parse(idItem.InnerText); winfo.name = xml.SelectSingleNode("Name").InnerText; winfo.supportedMods = xml.SelectSingleNode("Mods").InnerText; winfo.nameId = int.Parse(xml.SelectSingleNode("NameId").InnerText); NumberFormatInfo finfo = new NumberFormatInfo(); finfo.NumberDecimalSeparator = "."; winfo.version = decimal.Parse(xml.SelectSingleNode("Version").InnerText, finfo); winfo.author = xml.SelectSingleNode("Author").InnerText; winfo.description = xml.SelectSingleNode("Description").InnerText; winfo.changelog = xml.SelectSingleNode("Changelog").InnerText; winfo.downloadCount = int.Parse(xml.SelectSingleNode("DownloadCount").InnerText); winfo.downsPerDay = float.Parse(xml.SelectSingleNode("DownsPerDay").InnerText, CultureInfo.CreateSpecificCulture("en-US").NumberFormat); winfo.entry = DateTime.Parse(xml.SelectSingleNode("Entry").InnerText); winfo.hidden = (int.Parse(xml.SelectSingleNode("Hidden").InnerText) == 1); if (xml.SelectSingleNode("Rating").InnerText.Length == 0) { winfo.rating = 0.0f; } else { string t = xml.SelectSingleNode("Rating").InnerText; winfo.rating = float.Parse(xml.SelectSingleNode("Rating").InnerText, CultureInfo.CreateSpecificCulture("en-US").NumberFormat); } winfo.voteCount = int.Parse(xml.SelectSingleNode("VoteCount").InnerText); winfo.commentCount = int.Parse(xml.SelectSingleNode("CommentCount").InnerText); int.TryParse(xml.SelectSingleNode("CategoryId").InnerText, out winfo.CategoryId); int.TryParse(xml.SelectSingleNode("ImageCount").InnerText, out winfo.imageCount); if (xml.SelectSingleNode("Active") != null) { winfo.active = int.Parse(xml.SelectSingleNode("Active").InnerText); } return(winfo); }
/* * Assuming for the widget there is a newer version available, get its ID */ public WidgetInfo getLatestVersionFromWidget(int nameId) { IEnumerator ienum = this.Values.GetEnumerator(); WidgetInfo result = null; decimal latestVersion = decimal.MinValue; while (ienum.MoveNext()) { WidgetInfo info = (WidgetInfo)ienum.Current; if ((info.nameId == nameId) && (info.version > latestVersion)) { latestVersion = info.version; result = info; } } return(result); }
/* * 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); }
public WidgetInfo getOlderVersion(WidgetInfo latestVersion ) { //XmlNode nameIdXml = r.SelectSingleNode("NameId"); //int nameId = int.Parse( nameIdXml.InnerText ); //XmlNode versionXml = r.SelectSingleNode("Version"); //decimal version = decimal.Parse( versionXml.InnerText ); IEnumerator ienum = this.Values.GetEnumerator(); WidgetInfo widget; while (ienum.MoveNext()) { widget = (WidgetInfo)ienum.Current; //XmlNode idItem = widget.Attributes.GetNamedItem("ID"); //XmlNode name = widget.SelectSingleNode("Name"); //XmlNode curNameIdXml = widget.SelectSingleNode("NameId"); //int curNameId = int.Parse( curNameIdXml.InnerText ); //XmlNode curVersionXml = widget.SelectSingleNode( "Version" ); //decimal curVersion = decimal.Parse( curVersionXml.InnerText ); if ((widget.nameId == latestVersion.nameId) && (widget.version <= latestVersion.version)) { return widget; } } return null; }
static public WidgetInfo xml2WidgetInfo(XmlNode xml) { WidgetInfo winfo = new WidgetInfo(); winfo.dbIsAvail = true; winfo.id = int.Parse(xml.Attributes.GetNamedItem("ID").InnerText); //winfo.id = int.Parse(idItem.InnerText); winfo.name = xml.SelectSingleNode("Name").InnerText; winfo.supportedMods = xml.SelectSingleNode("Mods").InnerText; winfo.nameId = int.Parse( xml.SelectSingleNode("NameId").InnerText ); NumberFormatInfo finfo = new NumberFormatInfo(); finfo.NumberDecimalSeparator = "."; winfo.version = decimal.Parse(xml.SelectSingleNode("Version").InnerText, finfo ); winfo.author = xml.SelectSingleNode("Author").InnerText; winfo.description = xml.SelectSingleNode("Description").InnerText; winfo.changelog = xml.SelectSingleNode("Changelog").InnerText; winfo.downloadCount = int.Parse( xml.SelectSingleNode("DownloadCount").InnerText ); winfo.downsPerDay = float.Parse(xml.SelectSingleNode("DownsPerDay").InnerText, CultureInfo.CreateSpecificCulture("en-US").NumberFormat); winfo.entry = DateTime.Parse(xml.SelectSingleNode("Entry").InnerText); winfo.hidden = (int.Parse(xml.SelectSingleNode("Hidden").InnerText) == 1); if (xml.SelectSingleNode("Rating").InnerText.Length == 0) { winfo.rating = 0.0f; } else { string t = xml.SelectSingleNode("Rating").InnerText; winfo.rating = float.Parse(xml.SelectSingleNode("Rating").InnerText, CultureInfo.CreateSpecificCulture("en-US").NumberFormat ); } winfo.voteCount = int.Parse(xml.SelectSingleNode("VoteCount").InnerText); winfo.commentCount = int.Parse(xml.SelectSingleNode("CommentCount").InnerText); int.TryParse(xml.SelectSingleNode("CategoryId").InnerText, out winfo.CategoryId); int.TryParse(xml.SelectSingleNode("ImageCount").InnerText, out winfo.imageCount); if (xml.SelectSingleNode("Active") != null) { winfo.active = int.Parse(xml.SelectSingleNode("Active").InnerText); } return winfo; }
static public WidgetInfo xml2ModWidgetInfo(XmlNode xml) { WidgetInfo info = new WidgetInfo(); info.headerName = xml.SelectSingleNode("HeaderName").InnerText; info.headerDescription = xml.SelectSingleNode("Description").InnerText; info.id = int.Parse(xml.Attributes.GetNamedItem("ID").InnerText); return info; }