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);
        }
Exemple #3
0
        /*
         * 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);
        }
Exemple #5
0
        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);
        }
Exemple #8
0
 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 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);
                }
            }
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #14
0
        /*
         * 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;
        }