Beispiel #1
0
        private static void SetModifierFilters(List <StatFilterGroup> stats, ModifierFilters modifierFilters)
        {
            if (modifierFilters == null)
            {
                return;
            }

            var group = new StatFilterGroup();

            SetModifierFilters(group, modifierFilters.Pseudo);
            SetModifierFilters(group, modifierFilters.Enchant);
            SetModifierFilters(group, modifierFilters.Implicit);
            SetModifierFilters(group, modifierFilters.Explicit);
            SetModifierFilters(group, modifierFilters.Crafted);
            SetModifierFilters(group, modifierFilters.Fractured);

            stats.Add(group);
        }
Beispiel #2
0
        public async Task <TradeSearchResult <string> > Search(Item item, PropertyFilters propertyFilters = null, ModifierFilters modifierFilters = null)
        {
            try
            {
                logger.LogInformation("Querying Trade API.");

                var request = new QueryRequest();
                SetPropertyFilters(request.Query.Filters, propertyFilters);
                SetModifierFilters(request.Query.Stats, modifierFilters);

                // Auto Search 5+ Links
                var highestCount = item.Sockets
                                   .GroupBy(x => x.Group)
                                   .Select(x => x.Count())
                                   .OrderByDescending(x => x)
                                   .FirstOrDefault();
                if (highestCount >= 5)
                {
                    request.Query.Filters.SocketFilters.Filters.Links = new SocketFilterOption()
                    {
                        Min = highestCount,
                    };
                }

                if (item.Metadata.Category == Category.ItemisedMonster)
                {
                    if (!string.IsNullOrEmpty(item.Metadata.Name))
                    {
                        request.Query.Term = item.Metadata.Name;
                    }
                    else if (!string.IsNullOrEmpty(item.Metadata.Type))
                    {
                        request.Query.Type = item.Metadata.Type;
                    }
                }
                else if (item.Metadata.Rarity == Rarity.Unique)
                {
                    request.Query.Name = item.Metadata.Name;
                    request.Query.Type = item.Metadata.Type;
                    request.Query.Filters.TypeFilters.Filters.Rarity = new SearchFilterOption("Unique");
                }
                else if (item.Metadata.Rarity == Rarity.Prophecy)
                {
                    request.Query.Name = item.Metadata.Name;
                }
                else
                {
                    if (string.IsNullOrEmpty(request.Query.Filters.TypeFilters.Filters.Category?.Option))
                    {
                        request.Query.Type = item.Metadata.Type;
                    }
                    request.Query.Filters.TypeFilters.Filters.Rarity = new SearchFilterOption("nonunique");
                }

                if (item.Properties.AlternateQuality)
                {
                    request.Query.Term = item.Original.Name;
                }

                if (item.Properties.MapTier > 0)
                {
                    request.Query.Filters.MapFilters.Filters.MapTier = new SearchFilterValue(item.Properties.MapTier, item.Properties.MapTier);
                }

                var uri      = new Uri($"{gameLanguageProvider.Language.PoeTradeApiBaseUrl}search/{settings.LeagueId}");
                var json     = JsonSerializer.Serialize(request, poeTradeClient.Options);
                var body     = new StringContent(json, Encoding.UTF8, "application/json");
                var response = await poeTradeClient.HttpClient.PostAsync(uri, body);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStreamAsync();

                    return(await JsonSerializer.DeserializeAsync <TradeSearchResult <string> >(content, poeTradeClient.Options));
                }
                else
                {
                    var responseMessage = await response?.Content?.ReadAsStringAsync();

                    logger.LogWarning("Querying failed: {responseCode} {responseMessage}", response.StatusCode, responseMessage);
                    logger.LogWarning("Uri: {uri}", uri);
                    logger.LogWarning("Query: {query}", json);
                }
            }
            catch (Exception ex)
            {
                logger.LogWarning(ex, "Exception thrown while querying trade api.");
            }

            return(null);
        }
Beispiel #3
0
        public async Task <List <TradeItem> > GetResults(string queryId, List <string> ids, ModifierFilters modifierFilters = null)
        {
            try
            {
                logger.LogInformation($"Fetching Trade API Listings from Query {queryId}.");

                var pseudo = string.Empty;
                if (modifierFilters != null)
                {
                    pseudo = string.Join("", modifierFilters.Pseudo.Select(x => $"&pseudos[]={x.Modifier.Id}"));
                }

                var response = await poeTradeClient.HttpClient.GetAsync(gameLanguageProvider.Language.PoeTradeApiBaseUrl + "fetch/" + string.Join(",", ids) + "?query=" + queryId + pseudo);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStreamAsync();

                    var result = await JsonSerializer.DeserializeAsync <FetchResult <Result> >(content, new JsonSerializerOptions()
                    {
                        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                    });

                    return(result.Result.Where(x => x != null).ToList().ConvertAll(x => GetItem(x)));
                }
            }
            catch (Exception ex)
            {
                logger.LogWarning(ex, $"Exception thrown when fetching trade API listings from Query {queryId}.");
            }

            return(null);
        }
Beispiel #4
0
 /// <summary>
 /// Save filter settings
 /// </summary>
 /// <param name="item">The item for which to save modifiers for</param>
 /// <param name="modifierFilters">The modifiers to save</param>
 public SaveFilterSettings(Item item, ModifierFilters modifierFilters)
 {
     Item            = item;
     ModifierFilters = modifierFilters;
 }