public async Task <List <ValueResult <Skin> > > CalculateValue(List <Skin> items, bool takeHighestValue) { var skinItemGrps = await DataAPI.GetSkinItemGroups(items.Select(x => x.ID).ToList()); List <int> ids = new List <int>(); foreach (var IDGroup in skinItemGrps.Values) { ids.AddRange(IDGroup); } var sellableItems = await DataAPI.GetItemSellable(ids); var allListings = await CommerceAPI.ListingsAggregated(sellableItems); var results = new List <ValueResult <Skin> >(); foreach (var skin in skinItemGrps) { if (takeHighestValue) { var listing = allListings.Where(x => skin.Value.Contains(x.ItemID)).OrderBy(x => x.Sells.Price).FirstOrDefault(); results.Add(new ValueResult <Skin> { Item = items.Where(x => x.ID == skin.Key).FirstOrDefault(), Value = listing?.Sells.Price }); } else { var listing = allListings.Where(x => skin.Value.Contains(x.ItemID)).OrderBy(x => x.Sells.Price).FirstOrDefault(); results.Add(new ValueResult <Skin> { Item = items.Where(x => x.ID == skin.Key).FirstOrDefault(), Value = listing?.Buys.Price }); } } return(results); }
public async Task <List <ValueResult <ItemRecipeTreeNode> > > CalculateValue(List <ItemRecipeTreeNode> items, bool takeHighestValue) { var result = new List <ValueResult <ItemRecipeTreeNode> >(); foreach (var item in items) { var itemIDs = GetItemIDs(item).Select(x => x.ItemID).Distinct().ToList(); var listings = await CommerceAPI.ListingsAggregated(itemIDs); var itemPrice = new ItemPrice(); result.Add(new ValueResult <ItemRecipeTreeNode> { Item = item, Value = GetValue(item, takeHighestValue, listings) }); } return(result); }
public async Task Run(CancellationToken token) { var page = 0; while (true) { token.ThrowIfCancellationRequested(); SetProgress("Requesting Page #" + page, 0); var pageResult = await ItemAPI.Items(MAX_ITEM_PER_PAGE, page); SetProgress("#" + page + ": Retrieving saved items", 10); var itemIDs = pageResult.Select(x => x.ID).ToList(); var dbItems = await DataAPI.GetItems(itemIDs); SetProgress("#" + page + ": Comparing saved and retrieved items", 35); var newItems = GetNewItems(pageResult, dbItems); if (newItems.Count > 0) { SetProgress("#" + page + ": Saving " + newItems.Count + " new/changed items", 50); await DataAPI.AddItems(newItems); } SetProgress("#" + page + ": Requesting ItemListings", 80); var listings = await CommerceAPI.ListingsAggregated(pageResult.Select(x => x.ID).ToList()); SetProgress("#" + page + ": Updating ItemListings", 90); await DataAPI.AddItemSellable(pageResult, listings); page++; if (pageResult.Count < 200) { break; } } }