Example #1
0
        /// <summary>
        /// Gets the prices asynchronous.
        /// </summary>
        /// Gets the item prices list.
        protected override async Task GetPricesAsync()
        {
            // Quit if query is pending
            if (s_queryPending)
            {
                return;
            }

            s_queryPending = true;

            PriceByItemID.Clear();
            Loaded      = false;
            s_queryStep = 200;

            var marketItems = StaticItems.AllItems.Where(item =>
                                                         !item.MarketGroup.BelongsIn(DBConstants.RootNonMarketGroupID) &&
                                                         !item.MarketGroup.BelongsIn(DBConstants.BlueprintRootNonMarketGroupID) &&
                                                         !item.MarketGroup.BelongsIn(DBConstants.UniqueDesignsRootNonMarketGroupID)).
                              Select(item => item.ID).OrderBy(id => id);

            s_queue            = new Queue <int>(marketItems);
            s_queryMonitorList = marketItems.ToList();

            EveMonClient.Trace("begin");

            await QueryIDs();
        }
Example #2
0
        /// <summary>
        /// Gets the price by type ID.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public override double GetPriceByTypeID(int id)
        {
            // Ensure list importation
            EnsureImportation();

            double result;

            PriceByItemID.TryGetValue(id, out result);
            return(result);
        }
Example #3
0
        /// <summary>
        /// Loads from file.
        /// </summary>
        /// <param name="file">The file.</param>
        private void LoadFromFile(string file)
        {
            // Deserialize the xml file
            var result = Util.DeserializeXmlFromFile <SerializableECItemPrices>(file);

            PriceByItemID.Clear();
            Loaded = false;
            s_requested.Clear();

            // Import the data
            Import(result.ItemPrices);
        }
Example #4
0
        /// <summary>
        /// Ensures the list has been imported.
        /// </summary>
        private void EnsureImportation()
        {
            // Quit if query is pending
            if (s_queryPending)
            {
                return;
            }

            // Check the selected provider
            if (!String.IsNullOrWhiteSpace(SelectedProviderName))
            {
                if (SelectedProviderName != Name)
                {
                    Loaded               = false;
                    CachedUntil          = DateTime.MinValue;
                    SelectedProviderName = Name;
                }
            }
            else
            {
                SelectedProviderName = Name;
            }

            string file = LocalXmlCache.GetFileInfo(Filename).FullName;

            // Update the file if we don't have it or the data have expired
            if ((!Loaded && !File.Exists(file)) || (Loaded && CachedUntil < DateTime.UtcNow))
            {
                Task.WhenAll(GetPricesAsync());
                return;
            }

            // Exit if we have already imported the list
            if (Loaded)
            {
                return;
            }

            if (File.Exists(file))
            {
                LoadFromFile(file);
            }
            else
            {
                Loaded      = true;
                CachedUntil = DateTime.UtcNow.AddHours(1);
                PriceByItemID.Clear();
            }
        }
Example #5
0
        /// <summary>
        /// Loads from file.
        /// </summary>
        /// <param name="file">The file.</param>
        private void LoadFromFile(string file)
        {
            CachedUntil = File.GetLastWriteTimeUtc(file).AddDays(1);

            // Deserialize the xml file
            SerializableEMDItemPrices result = Util.DeserializeXmlFromFile <SerializableEMDItemPrices>(file);

            // In case the file is an old one, we try to get a fresh copy
            if (result == null || CachedUntil < DateTime.UtcNow)
            {
                Task.WhenAll(GetPricesAsync());
                return;
            }

            PriceByItemID.Clear();
            Loaded = false;

            // Import the data
            Import(result.Result.ItemPrices);
        }
Example #6
0
        /// <summary>
        /// Exports the cache list to a serializable object.
        /// </summary>
        /// <returns></returns>
        private static SerializableECItemPrices Export()
        {
            IEnumerable <SerializableECItemPriceListItem> entitiesList = PriceByItemID
                                                                         .OrderBy(x => x.Key)
                                                                         .Select(
                item =>
                new SerializableECItemPriceListItem
            {
                ID     = item.Key,
                Prices = new SerializableECItemPriceItem {
                    Average = item.Value
                }
            });

            SerializableECItemPrices serial = new SerializableECItemPrices();

            serial.ItemPrices.AddRange(entitiesList);

            return(serial);
        }
Example #7
0
        /// <summary>
        /// Ensures the importation.
        /// </summary>
        private void EnsureImportation()
        {
            // Quit if query is pending
            if (s_queryPending)
            {
                return;
            }

            // Check the selected provider
            if (!string.IsNullOrWhiteSpace(SelectedProviderName))
            {
                if (SelectedProviderName != Name)
                {
                    Loaded = false;
                    SelectedProviderName = Name;
                }
            }
            else
            {
                SelectedProviderName = Name;
            }

            string file = LocalXmlCache.GetFileInfo(Filename).FullName;

            // Exit if we have already imported the list
            if (Loaded)
            {
                return;
            }

            if (File.Exists(file))
            {
                LoadFromFile(file);
            }
            else
            {
                Loaded = true;
                PriceByItemID.Clear();
            }
        }
Example #8
0
        /// <summary>
        /// Imports the specified item prices.
        /// </summary>
        /// <param name="itemPrices">The item prices.</param>
        private static void Import(IEnumerable <SerializableECItemPriceListItem> itemPrices)
        {
            if (!PriceByItemID.Any())
            {
                EveMonClient.Trace("begin");
            }

            foreach (SerializableECItemPriceListItem item in itemPrices)
            {
                PriceByItemID[item.ID] = item.Prices.Average;
            }

            if (((s_queue == null) || (s_queue.Count == 0)) && !s_queryPending)
            {
                Loaded = true;
            }

            if (Loaded)
            {
                EveMonClient.Trace("done");
            }
        }
Example #9
0
        /// <summary>
        /// Downloads the item prices list.
        /// </summary>
        protected override async Task GetPricesAsync()
        {
            // Quit if query is pending
            if (s_queryPending)
            {
                return;
            }

            s_queryPending = true;

            PriceByItemID.Clear();
            Loaded = false;
            EveMonClient.Trace("begin");
            var url = new Uri(NetworkConstants.EVEMarketDataBaseUrl + NetworkConstants.
                              EVEMarketDataAPIItemPrices);
            var result = await Util.DownloadXmlAsync <SerializableEMDItemPrices>(url,
                                                                                 new RequestParams()
            {
                AcceptEncoded = true
            });

            OnPricesDownloaded(result);
        }
Example #10
0
        /// <summary>
        /// Gets the price by type ID.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public override double GetPriceByTypeID(int id)
        {
            // Ensure list importation
            EnsureImportation();

            double result;

            PriceByItemID.TryGetValue(id, out result);
            lock (s_queue)
            {
                if (!s_requested.Contains(id))
                {
                    s_requested.Add(id);
                    s_queue.Enqueue(id);
                    if (!s_queryPending)
                    {
                        s_queryPending = true;
                        Task.WhenAll(QueryIDs());
                    }
                }
            }
            return(result);
        }