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); }
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); }
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); }
/// <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; }