コード例 #1
0
ファイル: LoadoutHelper.cs プロジェクト: wbSD/evemon
        /// <summary>
        /// Deserializes an XML loadout text.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <returns></returns>
        public static ILoadoutInfo DeserializeXmlFormat(string text)
        {
            SerializableXmlFittings fittings = Util.DeserializeXmlFromString <SerializableXmlFittings>(text);

            ILoadoutInfo loadoutInfo = new LoadoutInfo();

            // Nothing to evaluate
            if (fittings == null)
            {
                return(loadoutInfo);
            }

            // Retrieve the ship
            loadoutInfo.Ship = StaticItems.GetItemByName(fittings.Fitting.ShipType.Name);

            if (loadoutInfo.Ship == null)
            {
                return(loadoutInfo);
            }

            // Special case to avoid displaying gzCLF block from Osmium
            if (fittings.Fitting.Description.Text.StartsWith("BEGIN gzCLF BLOCK", StringComparison.InvariantCultureIgnoreCase))
            {
                fittings.Fitting.Description.Text = String.Empty;
            }

            Loadout loadout = new Loadout(fittings.Fitting.Name, fittings.Fitting.Description.Text);

            IEnumerable <Item> listOfItems = fittings.Fitting.FittingHardware
                                             .Where(hardware => hardware != null && hardware.Item != null && hardware.Slot != "drone bay")
                                             .Select(hardware => hardware.Item);

            IEnumerable <SerializableXmlFittingHardware> listOfXmlDrones = fittings.Fitting.FittingHardware
                                                                           .Where(hardware => hardware != null &&
                                                                                  hardware.Item != null &&
                                                                                  hardware.Slot == "drone bay");

            var listOfDrones = new List <Item>();

            foreach (SerializableXmlFittingHardware drone in listOfXmlDrones)
            {
                for (int i = 0; i < drone.Quantity; i++)
                {
                    listOfDrones.Add(drone.Item);
                }
            }

            loadout.Items = listOfItems.Concat(listOfDrones);
            loadoutInfo.Loadouts.Add(loadout);

            return(loadoutInfo);
        }
コード例 #2
0
ファイル: LoadoutHelper.cs プロジェクト: wbSD/evemon
        /// <summary>
        /// Determines whether the loadout is in XML format.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <returns>
        ///     <c>true</c> if the loadout is in XML format; otherwise, <c>false</c>.
        /// </returns>
        internal static bool IsXMLFormat(string text)
        {
            XmlRootAttribute xmlRoot = new SerializableXmlFittings().GetType().GetCustomAttributes(
                typeof(XmlRootAttribute), false).Cast <XmlRootAttribute>().FirstOrDefault();

            if (xmlRoot == null)
            {
                return(false);
            }

            using (TextReader reader = new StringReader(text))
            {
                if (Util.GetXmlRootElement(reader) != xmlRoot.ElementName)
                {
                    return(false);
                }
            }

            SerializableXmlFittings fittings = Util.DeserializeXmlFromString <SerializableXmlFittings>(text);

            return(StaticItems.ShipsMarketGroup.AllItems.Any(x => x.Name == fittings.Fitting.ShipType.Name));
        }