public async Task <double?> GetPrice(FullRgItem item, SteamManager manager) { var itemName = item.Description.Name; double?price = null; switch (this.MarketSaleType) { case EMarketSaleType.LowerThanCurrent: price = PriceLoader.PriceLoader.CurrentPricesCache.Get(item.Description.MarketHashName)?.Price; if (!price.HasValue) { price = await manager.GetCurrentPrice(item.Asset.Appid, item.Description.MarketHashName); PriceLoader.PriceLoader.CurrentPricesCache.Cache( item.Description.MarketHashName, (double)price); } Program.WorkingProcessForm.AppendWorkingProcessInfo($"Current price for '{itemName}' is {price}"); price = this.HandleChangeValue(price); break; case EMarketSaleType.LowerThanAverage: price = PriceLoader.PriceLoader.AveragePricesCache.Get(item.Description.MarketHashName)?.Price; if (!price.HasValue) { price = manager.GetAveragePrice( item.Asset.Appid, item.Description.MarketHashName, SavedSettings.Get().SettingsAveragePriceParseDays); if (price != null) { PriceLoader.PriceLoader.AveragePricesCache.Cache( item.Description.MarketHashName, (double)price); } } price = this.HandleChangeValue(price); Program.WorkingProcessForm.AppendWorkingProcessInfo($"Average price for '{itemName}' is {price}"); break; case EMarketSaleType.Recommended: var currentPrice = PriceLoader.PriceLoader.CurrentPricesCache.Get(item.Description.MarketHashName)?.Price; if (!currentPrice.HasValue) { currentPrice = await manager.GetCurrentPrice(item.Asset.Appid, item.Description.MarketHashName); PriceLoader.PriceLoader.CurrentPricesCache.Cache( item.Description.MarketHashName, (double)currentPrice); } var averagePrice = PriceLoader.PriceLoader.AveragePricesCache.Get(item.Description.MarketHashName)?.Price; if (!averagePrice.HasValue) { averagePrice = manager.GetAveragePrice( item.Asset.Appid, item.Description.MarketHashName, SavedSettings.Get().SettingsAveragePriceParseDays); if (averagePrice != null) { PriceLoader.PriceLoader.AveragePricesCache.Cache( item.Description.MarketHashName, (double)averagePrice); } } if (averagePrice > currentPrice) { price = averagePrice; } else if (currentPrice >= averagePrice) { price = currentPrice - 0.01; } if (!price.HasValue || price <= 0 || price == double.NaN) { price = null; } Program.WorkingProcessForm.AppendWorkingProcessInfo($"Current price for '{itemName}' is {currentPrice}"); Program.WorkingProcessForm.AppendWorkingProcessInfo($"Average price for '{itemName}' is {averagePrice}"); break; } return(price); }