From 912cff0f2653a1f058c6000321fb5443355e41bd Mon Sep 17 00:00:00 2001 From: Dominique Alexandre Date: Tue, 3 Jan 2023 19:48:42 -0500 Subject: [PATCH 1/4] Add support for item anointments --- .../ApiModels/ItemIdResult.cs | 12 +++ .../ApiModels/ItemNameMetadataIdResult.cs | 15 ++++ .../{ItemResult.cs => MapItemResult.cs} | 2 +- src/Sidekick.Apis.PoeWiki/IPoeWikiClient.cs | 4 + .../IPoeWikiDataProvider.cs | 14 +++ src/Sidekick.Apis.PoeWiki/Models/ItemDrop.cs | 2 +- src/Sidekick.Apis.PoeWiki/Models/Map.cs | 2 +- src/Sidekick.Apis.PoeWiki/PoeWikiClient.cs | 87 ++++++++++++++++--- .../PoeWikiDataProvider.cs | 57 ++++++++++++ .../StartupExtensions.cs | 1 + src/Sidekick.Common/Settings/ISettings.cs | 2 +- .../Pages/Initialization.razor.cs | 3 + .../Sidekick.Modules.Initialization.csproj | 1 + .../Localization/SettingsResources.cs | 2 +- .../Localization/SettingsResources.resx | 6 +- .../Pages/General.razor | 4 + src/Sidekick.Modules.Settings/Pages/Map.razor | 4 - src/Sidekick.Modules.Settings/Settings.cs | 2 +- .../SettingsModel.cs | 2 +- .../Filters/ModifierFilterComponent.razor | 24 +++++ .../Components/OilAnointment.razor | 12 +++ .../Components/OilAnointment.razor.css | 8 ++ .../Sidekick.Modules.Trade.csproj | 1 + src/Sidekick.Modules.Trade/_Imports.razor | 2 + 24 files changed, 245 insertions(+), 24 deletions(-) create mode 100644 src/Sidekick.Apis.PoeWiki/ApiModels/ItemIdResult.cs create mode 100644 src/Sidekick.Apis.PoeWiki/ApiModels/ItemNameMetadataIdResult.cs rename src/Sidekick.Apis.PoeWiki/ApiModels/{ItemResult.cs => MapItemResult.cs} (96%) create mode 100644 src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs create mode 100644 src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs create mode 100644 src/Sidekick.Modules.Trade/Components/OilAnointment.razor create mode 100644 src/Sidekick.Modules.Trade/Components/OilAnointment.razor.css diff --git a/src/Sidekick.Apis.PoeWiki/ApiModels/ItemIdResult.cs b/src/Sidekick.Apis.PoeWiki/ApiModels/ItemIdResult.cs new file mode 100644 index 00000000..16b7df53 --- /dev/null +++ b/src/Sidekick.Apis.PoeWiki/ApiModels/ItemIdResult.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; +using Sidekick.Apis.PoeWiki.JsonConverters; + +namespace Sidekick.Apis.PoeWiki.ApiModels +{ + public class ItemIdResult + { + [JsonPropertyName("item id")] + public string ItemId { get; set; } + } +} diff --git a/src/Sidekick.Apis.PoeWiki/ApiModels/ItemNameMetadataIdResult.cs b/src/Sidekick.Apis.PoeWiki/ApiModels/ItemNameMetadataIdResult.cs new file mode 100644 index 00000000..db3ac69e --- /dev/null +++ b/src/Sidekick.Apis.PoeWiki/ApiModels/ItemNameMetadataIdResult.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; +using Sidekick.Apis.PoeWiki.JsonConverters; + +namespace Sidekick.Apis.PoeWiki.ApiModels +{ + public class ItemNameMetadataIdResult + { + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("metadata id")] + public string MetadataId { get; set; } + } +} diff --git a/src/Sidekick.Apis.PoeWiki/ApiModels/ItemResult.cs b/src/Sidekick.Apis.PoeWiki/ApiModels/MapItemResult.cs similarity index 96% rename from src/Sidekick.Apis.PoeWiki/ApiModels/ItemResult.cs rename to src/Sidekick.Apis.PoeWiki/ApiModels/MapItemResult.cs index 2d5a912d..9fea88d9 100644 --- a/src/Sidekick.Apis.PoeWiki/ApiModels/ItemResult.cs +++ b/src/Sidekick.Apis.PoeWiki/ApiModels/MapItemResult.cs @@ -4,7 +4,7 @@ namespace Sidekick.Apis.PoeWiki.ApiModels { - public class ItemResult + public class MapItemResult { public string Name { get; set; } diff --git a/src/Sidekick.Apis.PoeWiki/IPoeWikiClient.cs b/src/Sidekick.Apis.PoeWiki/IPoeWikiClient.cs index c3171c15..0461775e 100644 --- a/src/Sidekick.Apis.PoeWiki/IPoeWikiClient.cs +++ b/src/Sidekick.Apis.PoeWiki/IPoeWikiClient.cs @@ -1,7 +1,9 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Sidekick.Apis.PoeWiki.ApiModels; using Sidekick.Apis.PoeWiki.Models; using Sidekick.Common.Game.Items; +using Sidekick.Common.Game.Items.Modifiers; namespace Sidekick.Apis.PoeWiki { @@ -9,6 +11,8 @@ public interface IPoeWikiClient { public bool IsEnabled { get; } public Task GetMap(Item item); + public Task> GetOilsMetadataIdsFromEnchantment(ModifierLine modifierLine); + public Task> GetMetadataIdsFromItemNames(List itemNames); public void OpenUri(Map map); public void OpenUri(ItemDrop itemDrop); public void OpenUri(Boss boss); diff --git a/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs b/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs new file mode 100644 index 00000000..57ae54e0 --- /dev/null +++ b/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sidekick.Apis.PoeWiki +{ + public interface IPoeWikiDataProvider + { + Task Initialize(); + Task> GetBlightOils(); + } +} diff --git a/src/Sidekick.Apis.PoeWiki/Models/ItemDrop.cs b/src/Sidekick.Apis.PoeWiki/Models/ItemDrop.cs index 8bd02211..6fb285e5 100644 --- a/src/Sidekick.Apis.PoeWiki/Models/ItemDrop.cs +++ b/src/Sidekick.Apis.PoeWiki/Models/ItemDrop.cs @@ -4,7 +4,7 @@ namespace Sidekick.Apis.PoeWiki.Models { public class ItemDrop { - public ItemDrop(ItemResult itemResult) + public ItemDrop(MapItemResult itemResult) { Name = itemResult.Name; } diff --git a/src/Sidekick.Apis.PoeWiki/Models/Map.cs b/src/Sidekick.Apis.PoeWiki/Models/Map.cs index 1063f52e..33e04473 100644 --- a/src/Sidekick.Apis.PoeWiki/Models/Map.cs +++ b/src/Sidekick.Apis.PoeWiki/Models/Map.cs @@ -9,7 +9,7 @@ namespace Sidekick.Apis.PoeWiki.Models { public class Map { - public Map(MapResult map, List bosses, List items) + public Map(MapResult map, List bosses, List items) { Id = map.AreaId; Name = map.Name; diff --git a/src/Sidekick.Apis.PoeWiki/PoeWikiClient.cs b/src/Sidekick.Apis.PoeWiki/PoeWikiClient.cs index 392c1525..558cb8aa 100644 --- a/src/Sidekick.Apis.PoeWiki/PoeWikiClient.cs +++ b/src/Sidekick.Apis.PoeWiki/PoeWikiClient.cs @@ -10,7 +10,9 @@ using Sidekick.Apis.PoeWiki.Extensions; using Sidekick.Apis.PoeWiki.Models; using Sidekick.Common.Browser; +using Sidekick.Common.Cache; using Sidekick.Common.Game.Items; +using Sidekick.Common.Game.Items.Modifiers; using Sidekick.Common.Game.Languages; using Sidekick.Common.Settings; @@ -32,8 +34,6 @@ public class PoeWikiClient : IPoeWikiClient private const string PoeWiki_BaseUri = "https://www.poewiki.net/"; private const string PoeWiki_SubUrl = "w/index.php?search="; - public bool IsEnabled { get; } - public PoeWikiClient(ILogger logger, IHttpClientFactory httpClientFactory, IGameLanguageProvider gameLanguageProvider, @@ -55,10 +55,10 @@ public PoeWikiClient(ILogger logger, this.gameLanguageProvider = gameLanguageProvider; this.browserProvider = browserProvider; this.settings = settings; - - IsEnabled = this.gameLanguageProvider.IsEnglish() && this.settings.PoeWikiMap_Enable; } + public bool IsEnabled => gameLanguageProvider.IsEnglish() && settings.PoeWikiData_Enable; + private async Task GetMapResult(Item item) { try @@ -72,9 +72,9 @@ private async Task GetMapResult(Item item) new("tables", "maps,items,areas"), - new("join_on", @"items._pageID=maps._pageID,maps.area_id=areas.id"), + new("join_on", "items._pageID=maps._pageID,maps.area_id=areas.id"), - new("fields", @"items.name,maps.area_id,areas.boss_monster_ids,items.drop_monsters"), + new("fields", "items.name,maps.area_id,areas.boss_monster_ids,items.drop_monsters"), new("group_by", "items.name"), @@ -109,7 +109,7 @@ private async Task> GetBossesResult(MapResult mapResult) new("tables", "monsters"), - new("fields", @"monsters.name,monsters.metadata_id"), + new("fields", "monsters.name,monsters.metadata_id"), new("where", @$"monsters.metadata_id IN ({mapResult.BossMonsterIds.ToQueryString()})"), }); @@ -128,7 +128,7 @@ private async Task> GetBossesResult(MapResult mapResult) return null; } - private async Task> GetItemsResult(MapResult mapResult) + private async Task> GetItemsResult(MapResult mapResult) { try { @@ -140,14 +140,14 @@ private async Task> GetItemsResult(MapResult mapResult) new("tables", "items"), - new("fields", @"items.drop_areas,items.flavour_text,items.drop_text,items.class_id,items.drop_monsters,items.name,items.drop_enabled"), + new("fields", "items.drop_areas,items.flavour_text,items.drop_text,items.class_id,items.drop_monsters,items.name,items.drop_enabled"), new("where", @$"items.drop_areas HOLDS '{mapResult.AreaId}'"), }); var response = await client.GetAsync(query.ToString()); var content = await response.Content.ReadAsStreamAsync(); - var result = await JsonSerializer.DeserializeAsync>(content, options); + var result = await JsonSerializer.DeserializeAsync>(content, options); return result.CargoQuery.Select(x => x.Title).ToList(); } @@ -159,6 +159,73 @@ private async Task> GetItemsResult(MapResult mapResult) return null; } + public async Task> GetOilsMetadataIdsFromEnchantment(ModifierLine modifierLine) + { + try + { + var enchantmentText = modifierLine.Text.Replace("Allocates ", string.Empty); + + var query = new QueryBuilder(new List> + { + new("action", "cargoquery"), + new("format", "json"), + new("limit", "500"), + + new("tables", "blight_crafting_recipes,blight_crafting_recipes_items,mods,passive_skills"), + + new("join_on", "blight_crafting_recipes_items.recipe_id=blight_crafting_recipes.id,blight_crafting_recipes.modifier_id=mods.id,blight_crafting_recipes.passive_id=passive_skills.id"), + + new("fields", "blight_crafting_recipes_items.item_id"), + + new("where", @$"passive_skills.name='{enchantmentText}' OR mods.stat_text='{enchantmentText}'"), + }); + + var response = await client.GetAsync(query.ToString()); + var content = await response.Content.ReadAsStreamAsync(); + var result = await JsonSerializer.DeserializeAsync>(content, options); + + return result.CargoQuery.Select(x => x.Title.ItemId).ToList(); + + } + catch (Exception e) + { + logger.LogWarning(e, "Error while trying to get oils from enchantment from poewiki.net."); + } + + return null; + } + + public async Task> GetMetadataIdsFromItemNames(List itemNames) + { + try + { + var query = new QueryBuilder(new List> + { + new("action", "cargoquery"), + new("format", "json"), + new("limit", "500"), + + new("tables", "items"), + + new("fields", "items.name,items.metadata_id"), + + new("where", @$"items.name IN ({itemNames.ToQueryString()})"), + }); + + var response = await client.GetAsync(query.ToString()); + var content = await response.Content.ReadAsStreamAsync(); + var result = await JsonSerializer.DeserializeAsync>(content, options); + + return result.CargoQuery.Select(x => x.Title).ToList(); + } + catch (Exception e) + { + logger.LogWarning(e, "Error while trying to get item metadata ids from poewiki.net."); + } + + return null; + } + public async Task GetMap(Item item) { // Only maps. diff --git a/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs b/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs new file mode 100644 index 00000000..bc53743a --- /dev/null +++ b/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Sidekick.Common.Cache; +using Sidekick.Common.Game.Languages; + +namespace Sidekick.Apis.PoeWiki +{ + public class PoeWikiDataProvider : IPoeWikiDataProvider + { + private readonly ICacheProvider cacheProvider; + private readonly IPoeWikiClient poeWikiClient; + + private readonly List oilNames; + + public PoeWikiDataProvider(ICacheProvider cacheProvider, + IPoeWikiClient poeWikiClient) + { + this.cacheProvider = cacheProvider; + this.poeWikiClient = poeWikiClient; + + oilNames = new List() { + "Clear Oil", + "Sepia Oil", + "Amber Oil", + "Verdant Oil", + "Teal Oil", + "Azure Oil", + "Indigo Oil", + "Violet Oil", + "Crimson Oil", + "Black Oil", + "Opalescent Oil", + "Silver Oil", + "Golden Oil", + }; + } + + /// + /// Gets the metadata ids of the blight oils from PoeWiki using their common names. + /// + public async Task> GetBlightOils() + { + var result = await cacheProvider.GetOrSet("PoeWikiBlightOils", () => poeWikiClient.GetMetadataIdsFromItemNames(oilNames)); + + return result.ToDictionary(x => x.MetadataId, x => x.Name); + } + + public async Task Initialize() + { + await GetBlightOils(); + } + } +} diff --git a/src/Sidekick.Apis.PoeWiki/StartupExtensions.cs b/src/Sidekick.Apis.PoeWiki/StartupExtensions.cs index b3cbff16..2f061115 100644 --- a/src/Sidekick.Apis.PoeWiki/StartupExtensions.cs +++ b/src/Sidekick.Apis.PoeWiki/StartupExtensions.cs @@ -9,6 +9,7 @@ public static IServiceCollection AddSidekickPoeWikiApi(this IServiceCollection s services.AddHttpClient(); services.AddTransient(); + services.AddSingleton(); return services; } diff --git a/src/Sidekick.Common/Settings/ISettings.cs b/src/Sidekick.Common/Settings/ISettings.cs index 40dba6cb..993fdc06 100644 --- a/src/Sidekick.Common/Settings/ISettings.cs +++ b/src/Sidekick.Common/Settings/ISettings.cs @@ -43,6 +43,6 @@ public interface ISettings DateTimeOffset? PoeNinja_LastClear { get; set; } - bool PoeWikiMap_Enable { get; set; } + bool PoeWikiData_Enable { get; set; } } } diff --git a/src/Sidekick.Modules.Initialization/Pages/Initialization.razor.cs b/src/Sidekick.Modules.Initialization/Pages/Initialization.razor.cs index c270d42e..601c0491 100644 --- a/src/Sidekick.Modules.Initialization/Pages/Initialization.razor.cs +++ b/src/Sidekick.Modules.Initialization/Pages/Initialization.razor.cs @@ -7,6 +7,7 @@ using Sidekick.Apis.Poe.Parser.Patterns; using Sidekick.Apis.Poe.Pseudo; using Sidekick.Apis.PoeNinja; +using Sidekick.Apis.PoeWiki; using Sidekick.Common; using Sidekick.Common.Blazor.Views; using Sidekick.Common.Game.Languages; @@ -37,6 +38,7 @@ public partial class Initialization : ComponentBase [Inject] private IUILanguageProvider UILanguageProvider { get; set; } [Inject] private IEnglishModifierProvider EnglishModifierProvider { get; set; } [Inject] private IPoeNinjaClient PoeNinjaClient { get; set; } + [Inject] private IPoeWikiDataProvider PoeWikiDataProvider { get; set; } private int Count { get; set; } = 0; private int Completed { get; set; } = 0; @@ -75,6 +77,7 @@ public async Task Handle() await Run(() => ModifierProvider.Initialize()); await Run(() => PseudoModifierProvider.Initialize()); await Run(() => PoeNinjaClient.Initialize()); + await Run(() => PoeWikiDataProvider.Initialize()); if (!HasRun) { diff --git a/src/Sidekick.Modules.Initialization/Sidekick.Modules.Initialization.csproj b/src/Sidekick.Modules.Initialization/Sidekick.Modules.Initialization.csproj index b9b24182..a839ae32 100644 --- a/src/Sidekick.Modules.Initialization/Sidekick.Modules.Initialization.csproj +++ b/src/Sidekick.Modules.Initialization/Sidekick.Modules.Initialization.csproj @@ -6,6 +6,7 @@ + diff --git a/src/Sidekick.Modules.Settings/Localization/SettingsResources.cs b/src/Sidekick.Modules.Settings/Localization/SettingsResources.cs index 0778b25d..27dd5fe9 100644 --- a/src/Sidekick.Modules.Settings/Localization/SettingsResources.cs +++ b/src/Sidekick.Modules.Settings/Localization/SettingsResources.cs @@ -67,6 +67,6 @@ public SettingsResources(IStringLocalizer resources) public string Wiki => resources["Wiki"]; public string Wiki_Key_Open => resources["Wiki_Key_Open"]; public string Wiki_Preferred => resources["Wiki_Preferred"]; - public string PoeWikiMap_Enable => resources["PoeWikiMap_Enable"]; + public string PoeWikiData_Enable => resources["PoeWikiData_Enable"]; } } diff --git a/src/Sidekick.Modules.Settings/Localization/SettingsResources.resx b/src/Sidekick.Modules.Settings/Localization/SettingsResources.resx index 2c618637..38be3010 100644 --- a/src/Sidekick.Modules.Settings/Localization/SettingsResources.resx +++ b/src/Sidekick.Modules.Settings/Localization/SettingsResources.resx @@ -291,7 +291,7 @@ Normalize values in the trade filters (-5 difference or 10%) - - Show additional map info from poewiki.net (only works if Game Language is in English) + + Show additional information from poewiki.net such as item anointments and map drops. (only works if Game Language is in English) - \ No newline at end of file + diff --git a/src/Sidekick.Modules.Settings/Pages/General.razor b/src/Sidekick.Modules.Settings/Pages/General.razor index 5411535d..99e1c968 100644 --- a/src/Sidekick.Modules.Settings/Pages/General.razor +++ b/src/Sidekick.Modules.Settings/Pages/General.razor @@ -47,6 +47,10 @@ +
+ +
-
- -
diff --git a/src/Sidekick.Modules.Settings/Settings.cs b/src/Sidekick.Modules.Settings/Settings.cs index de2752ef..1d5212be 100644 --- a/src/Sidekick.Modules.Settings/Settings.cs +++ b/src/Sidekick.Modules.Settings/Settings.cs @@ -67,6 +67,6 @@ public class Settings : ISettings public DateTimeOffset? PoeNinja_LastClear { get; set; } = null; - public bool PoeWikiMap_Enable { get; set; } = true; + public bool PoeWikiData_Enable { get; set; } = true; } } diff --git a/src/Sidekick.Modules.Settings/SettingsModel.cs b/src/Sidekick.Modules.Settings/SettingsModel.cs index a62327be..8892fd2f 100644 --- a/src/Sidekick.Modules.Settings/SettingsModel.cs +++ b/src/Sidekick.Modules.Settings/SettingsModel.cs @@ -94,6 +94,6 @@ public SettingsModel(ISettings sidekickSettings) public DateTimeOffset? PoeNinja_LastClear { get; set; } - public bool PoeWikiMap_Enable { get; set; } + public bool PoeWikiData_Enable { get; set; } } } diff --git a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor index 942582c3..1922b67f 100644 --- a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor +++ b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor @@ -14,6 +14,11 @@
+ @if (EnchantmentOils?.Any() == true) + { + + } + @if (Filter.Enabled) {
@@ -69,9 +74,28 @@ @code { [Inject] public TradeResources Resources { get; set; } + [Inject] private IPoeWikiClient PoeWikiClient { get; set; } + [Inject] private IPoeWikiDataProvider PoeWikiDataProvider { get; set; } [Parameter] public ModifierFilter Filter { get; set; } + private List EnchantmentOils { get; set; } + + protected override async Task OnInitializedAsync() + { + if (Filter.Line.Modifier.Category == ModifierCategory.Enchant && PoeWikiClient.IsEnabled) + { + var oilMetadataIds = await PoeWikiClient.GetOilsMetadataIdsFromEnchantment(Filter.Line); + var metadataIds = await PoeWikiDataProvider.GetBlightOils(); + + if (oilMetadataIds != null && metadataIds != null) + { + EnchantmentOils = oilMetadataIds.Select(x => metadataIds[x]).ToList(); + } + + } + } + private string Class { get diff --git a/src/Sidekick.Modules.Trade/Components/OilAnointment.razor b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor new file mode 100644 index 00000000..7ee12cb3 --- /dev/null +++ b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor @@ -0,0 +1,12 @@ +
+ @foreach (var oil in Oils) + { + + @oil + + } +
+ +@code { + [Parameter] public List Oils { get; set; } +} diff --git a/src/Sidekick.Modules.Trade/Components/OilAnointment.razor.css b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor.css new file mode 100644 index 00000000..42f5aae8 --- /dev/null +++ b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor.css @@ -0,0 +1,8 @@ +::deep { + display: flex; + padding-left: 0.5rem; +} + + ::deep img { + width: 3rem; + } diff --git a/src/Sidekick.Modules.Trade/Sidekick.Modules.Trade.csproj b/src/Sidekick.Modules.Trade/Sidekick.Modules.Trade.csproj index a2f338e6..7274db14 100644 --- a/src/Sidekick.Modules.Trade/Sidekick.Modules.Trade.csproj +++ b/src/Sidekick.Modules.Trade/Sidekick.Modules.Trade.csproj @@ -7,6 +7,7 @@ + diff --git a/src/Sidekick.Modules.Trade/_Imports.razor b/src/Sidekick.Modules.Trade/_Imports.razor index 3c4a1e15..cdb43211 100644 --- a/src/Sidekick.Modules.Trade/_Imports.razor +++ b/src/Sidekick.Modules.Trade/_Imports.razor @@ -18,6 +18,8 @@ @using Sidekick.Apis.PoeNinja.Models @using Sidekick.Apis.PoePriceInfo @using Sidekick.Apis.PoePriceInfo.Models +@using Sidekick.Apis.PoeWiki +@using Sidekick.Apis.PoeWiki.Models @using Sidekick.Common.Browser @using Sidekick.Common.Errors From ae4e6a08e0fdf4908c7516f9f54d54ce105e15cb Mon Sep 17 00:00:00 2001 From: Dominique Alexandre Date: Tue, 3 Jan 2023 20:17:26 -0500 Subject: [PATCH 2/4] Simplify PoeWikiDataProvider --- .../IPoeWikiDataProvider.cs | 2 +- .../PoeWikiDataProvider.cs | 18 ++++++++---------- .../Filters/ModifierFilterComponent.razor | 5 ++--- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs b/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs index 57ae54e0..9c941a17 100644 --- a/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs +++ b/src/Sidekick.Apis.PoeWiki/IPoeWikiDataProvider.cs @@ -9,6 +9,6 @@ namespace Sidekick.Apis.PoeWiki public interface IPoeWikiDataProvider { Task Initialize(); - Task> GetBlightOils(); + Dictionary BlightOilNamesByMetadataIds { get; } } } diff --git a/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs b/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs index bc53743a..55469c29 100644 --- a/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs +++ b/src/Sidekick.Apis.PoeWiki/PoeWikiDataProvider.cs @@ -4,6 +4,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using Sidekick.Apis.PoeWiki.ApiModels; using Sidekick.Common.Cache; using Sidekick.Common.Game.Languages; @@ -39,19 +40,16 @@ public PoeWikiDataProvider(ICacheProvider cacheProvider, }; } - /// - /// Gets the metadata ids of the blight oils from PoeWiki using their common names. - /// - public async Task> GetBlightOils() - { - var result = await cacheProvider.GetOrSet("PoeWikiBlightOils", () => poeWikiClient.GetMetadataIdsFromItemNames(oilNames)); - - return result.ToDictionary(x => x.MetadataId, x => x.Name); - } + public Dictionary BlightOilNamesByMetadataIds { get; private set; } = new(); public async Task Initialize() { - await GetBlightOils(); + var result = await cacheProvider.GetOrSet("PoeWikiBlightOils", () => poeWikiClient.GetMetadataIdsFromItemNames(oilNames)); + + if (result != null) + { + BlightOilNamesByMetadataIds = result?.ToDictionary(x => x.MetadataId, x => x.Name); + } } } } diff --git a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor index 1922b67f..c8c992a7 100644 --- a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor +++ b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor @@ -86,11 +86,10 @@ if (Filter.Line.Modifier.Category == ModifierCategory.Enchant && PoeWikiClient.IsEnabled) { var oilMetadataIds = await PoeWikiClient.GetOilsMetadataIdsFromEnchantment(Filter.Line); - var metadataIds = await PoeWikiDataProvider.GetBlightOils(); - if (oilMetadataIds != null && metadataIds != null) + if (oilMetadataIds != null) { - EnchantmentOils = oilMetadataIds.Select(x => metadataIds[x]).ToList(); + EnchantmentOils = oilMetadataIds.Select(x => PoeWikiDataProvider.BlightOilNamesByMetadataIds[x]).ToList(); } } From 177ed8b0ba20d4ae16ec712cede6ce46ab60afb9 Mon Sep 17 00:00:00 2001 From: Yanic Lemire Date: Thu, 5 Jan 2023 14:02:31 -0500 Subject: [PATCH 3/4] Fixed tests --- tests/Sidekick.Apis.Poe.Tests/ParserFixture.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Sidekick.Apis.Poe.Tests/ParserFixture.cs b/tests/Sidekick.Apis.Poe.Tests/ParserFixture.cs index fd916bd4..3c87a819 100644 --- a/tests/Sidekick.Apis.Poe.Tests/ParserFixture.cs +++ b/tests/Sidekick.Apis.Poe.Tests/ParserFixture.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Sidekick.Apis.PoeNinja; +using Sidekick.Apis.PoeWiki; using Sidekick.Common; using Sidekick.Common.Game; using Sidekick.Common.Settings; @@ -39,6 +40,7 @@ public async Task InitializeAsync() // Apis .AddSidekickPoeApi() .AddSidekickPoeNinjaApi() + .AddSidekickPoeWikiApi() // Modules .AddSidekickInitialization() From 47bf06483f780bd2a3e77529108bbd56d366cfce Mon Sep 17 00:00:00 2001 From: Dominique Alexandre Date: Thu, 5 Jan 2023 15:26:43 -0500 Subject: [PATCH 4/4] Adjust parameter name --- .../Components/Filters/ModifierFilterComponent.razor | 9 ++++----- .../Components/OilAnointment.razor | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor index c8c992a7..7656d7d2 100644 --- a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor +++ b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor @@ -14,9 +14,9 @@
- @if (EnchantmentOils?.Any() == true) + @if (EnchantmentOilNames?.Any() == true) { - + } @if (Filter.Enabled) @@ -79,17 +79,16 @@ [Parameter] public ModifierFilter Filter { get; set; } - private List EnchantmentOils { get; set; } + private List EnchantmentOilNames { get; set; } protected override async Task OnInitializedAsync() { if (Filter.Line.Modifier.Category == ModifierCategory.Enchant && PoeWikiClient.IsEnabled) { var oilMetadataIds = await PoeWikiClient.GetOilsMetadataIdsFromEnchantment(Filter.Line); - if (oilMetadataIds != null) { - EnchantmentOils = oilMetadataIds.Select(x => PoeWikiDataProvider.BlightOilNamesByMetadataIds[x]).ToList(); + EnchantmentOilNames = oilMetadataIds.Select(x => PoeWikiDataProvider.BlightOilNamesByMetadataIds[x]).ToList(); } } diff --git a/src/Sidekick.Modules.Trade/Components/OilAnointment.razor b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor index 7ee12cb3..0cb5ec2c 100644 --- a/src/Sidekick.Modules.Trade/Components/OilAnointment.razor +++ b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor @@ -1,12 +1,12 @@
- @foreach (var oil in Oils) + @foreach (var oilName in OilNames) { - - @oil + + @oilName }
@code { - [Parameter] public List Oils { get; set; } + [Parameter] public List OilNames { get; set; } }