Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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)));
        }
Exemplo n.º 4
0
        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;
                }
            }
        }