From 113d8bd080a2fc0f0134a134e1bfeca77558aab2 Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Thu, 4 Jun 2026 01:29:31 -0500 Subject: [PATCH] Add platforms to metadata search results --- .../Views/MetadataSearchDialog.axaml | 12 +++++-- .../Views/MetadataSearchDialog.axaml.cs | 32 +++++++++++++++++-- .../Metadata/IgdbMetadataProvider.cs | 8 +++++ .../Components/MetadataLookupPanel.razor | 9 ++++-- 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/LANCommander.Packager/Views/MetadataSearchDialog.axaml b/LANCommander.Packager/Views/MetadataSearchDialog.axaml index e4c19701..4f75b730 100644 --- a/LANCommander.Packager/Views/MetadataSearchDialog.axaml +++ b/LANCommander.Packager/Views/MetadataSearchDialog.axaml @@ -29,14 +29,20 @@ SelectionMode="Single"> - + + + VerticalAlignment="Center" + IsVisible="{Binding HasReleasedOn}" /> diff --git a/LANCommander.Packager/Views/MetadataSearchDialog.axaml.cs b/LANCommander.Packager/Views/MetadataSearchDialog.axaml.cs index d4776830..9d5afe6b 100644 --- a/LANCommander.Packager/Views/MetadataSearchDialog.axaml.cs +++ b/LANCommander.Packager/Views/MetadataSearchDialog.axaml.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Linq; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; @@ -12,7 +13,7 @@ namespace LANCommander.Packager.Views; public partial class MetadataSearchDialog : Window { private readonly MetadataClient _metadataClient; - private readonly ObservableCollection _results = new(); + private readonly ObservableCollection _results = new(); private readonly List _rawResults = new(); private string? _selectedProvider; private int _offset; @@ -128,7 +129,7 @@ public partial class MetadataSearchDialog : Window foreach (var result in results.Results) { _rawResults.Add(result); - _results.Add(result.Data); + _results.Add(new SearchResultItem(result.Data)); } _hasMore = results.More; @@ -177,7 +178,7 @@ public partial class MetadataSearchDialog : Window foreach (var result in results.Results) { _rawResults.Add(result); - _results.Add(result.Data); + _results.Add(new SearchResultItem(result.Data)); } _hasMore = results.More; @@ -222,3 +223,28 @@ public partial class MetadataSearchDialog : Window } } } + +internal class SearchResultItem +{ + public string Title { get; } + public string? ReleasedOn { get; } + public bool HasReleasedOn { get; } + public string? Platforms { get; } + public bool HasPlatforms { get; } + + public SearchResultItem(Game game) + { + Title = game.Title ?? string.Empty; + + HasReleasedOn = game.ReleasedOn != default; + ReleasedOn = HasReleasedOn ? game.ReleasedOn.ToString("yyyy-MM-dd") : null; + + var platformNames = game.Platforms? + .Select(p => p.Name) + .Where(n => !string.IsNullOrWhiteSpace(n)) + .ToList(); + + HasPlatforms = platformNames != null && platformNames.Count > 0; + Platforms = HasPlatforms ? string.Join(", ", platformNames!) : null; + } +} diff --git a/LANCommander.Server.Services/Providers/Metadata/IgdbMetadataProvider.cs b/LANCommander.Server.Services/Providers/Metadata/IgdbMetadataProvider.cs index 5b182a71..c0a8b4a6 100644 --- a/LANCommander.Server.Services/Providers/Metadata/IgdbMetadataProvider.cs +++ b/LANCommander.Server.Services/Providers/Metadata/IgdbMetadataProvider.cs @@ -37,6 +37,7 @@ public class IgdbMetadataProvider( fields.Add("involved_companies.developer"); fields.Add("involved_companies.publisher"); fields.Add("involved_companies.company.name"); + fields.Add("platforms.*"); var sb = new StringBuilder(); @@ -114,6 +115,13 @@ public class IgdbMetadataProvider( }; } + if (igdbGame.Platforms?.Values?.Any() ?? false) + { + game.Platforms = igdbGame.Platforms.Values + .Select(p => new Platform { Name = p.Name }) + .ToList(); + } + if (igdbGame.Genres?.Values?.Any() ?? false) { game.Genres = igdbGame.Genres.Values diff --git a/LANCommander.Server/UI/Pages/Games/Components/MetadataLookupPanel.razor b/LANCommander.Server/UI/Pages/Games/Components/MetadataLookupPanel.razor index 340108eb..156ea82d 100644 --- a/LANCommander.Server/UI/Pages/Games/Components/MetadataLookupPanel.razor +++ b/LANCommander.Server/UI/Pages/Games/Components/MetadataLookupPanel.razor @@ -38,8 +38,13 @@ - - + + @(context.Data.ReleasedOn != default ? context.Data.ReleasedOn.ToString("MM/dd/yyyy") : "—") + + + @string.Join(", ", context.Data.Platforms?.Select(p => p.Name) ?? []) + + @string.Join(", ", context.Data.Developers?.Select(d => d.Name) ?? [])