Example #1
0
        /// <summary>
        /// Returns modder for the given XML file from the packages.
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public XmlModder GetXmlModder(string fileName)
        {
            fileName = NormalizePath(fileName);

            lock (_syncLock)
            {
                if (_xmlModders.ContainsKey(fileName))
                {
                    return(_xmlModders[fileName]);
                }
            }

            var isCompiled = false;

            if (!fileName.EndsWith(".xml") && !(isCompiled = fileName.EndsWith(".xml.compiled")))
            {
                throw new ArgumentException("Expected XML file extension.");
            }

            var packReader = this.GetPackReader();

            if (!packReader.Exists(fileName))
            {
                throw new FileNotFoundException("File not found in packages: '" + fileName + "'");
            }

            var entry       = _packReader.GetEntry(fileName);
            var tmpFilePath = Path.GetTempFileName();

            var modder = new XmlModder();

            if (isCompiled)
            {
                var featuresFile = FeaturesFile.CompiledToXml(entry.GetDataAsStream());
                using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(featuresFile)))
                    modder.LoadFromStream(ms);
            }
            else
            {
                using (var stream = entry.GetDataAsStream())
                    using (var sr = new StreamReader(stream))
                    {
                        var xml = sr.ReadToEnd();
                        xml = FixXmlCode(fileName, xml);

                        modder.LoadFromString(xml);
                    }
            }

            lock (_syncLock)
                _xmlModders[fileName] = modder;

            return(modder);
        }
Example #2
0
        /// <summary>
        /// Saves the modified XML file from the modder to the given path,
        /// either raw or compiled, depending on the extension.
        /// </summary>
        /// <param name="modder"></param>
        /// <param name="filePath"></param>
        private void SaveXmlModder(XmlModder modder, string filePath)
        {
            PrepareFolder(filePath);

            var isCompiled = filePath.EndsWith(".xml.compiled");

            if (isCompiled)
            {
                var xml = modder.GetString();
                FeaturesFile.SaveCompiledFromXml(filePath, xml);
            }
            else
            {
                modder.Save(filePath);
            }
        }