/// <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(); }
/// <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); }
/// <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); }
/// <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(); } }
/// <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); }
/// <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); }
/// <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(); } }
/// <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"); } }
/// <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); }
/// <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); }