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); }
internal async Task Populate(string apiKey) { Wallet = await AccountAPI.Wallet(apiKey); var characterResult = await CharacterAPI.Characters(apiKey); Characters = GroupItems(CharacterItems(characterResult)); var bankResult = await AccountAPI.Bank(apiKey); Bank = GroupItems(GetItems(bankResult.Cast <Equipment>().ToList())); var sharedResult = await AccountAPI.SharedInventory(apiKey); SharedInventory = GroupItems(GetItems(sharedResult.Cast <Equipment>().ToList())); MaterialStorage = GroupItems(GetItems(await AccountAPI.MaterialStorage(apiKey))); DeliveryBox = GroupItems(GetItems(GetDeliveryBox(await CommerceAPI.DeliveryBox(apiKey)))); GuildBank = GroupItems(GetItems(await GetGuildInventory(await AccountAPI.Account(apiKey), apiKey))); }
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; } } }