From f63c2ddf2d35340c83980bcbdad7fcac406326f3 Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Tue, 17 Jan 2023 17:09:42 -0600 Subject: [PATCH] Fix icon loading on initial game sync --- .../LANCommanderLibraryPlugin.cs | 17 ++++++----------- .../Controllers/Api/GamesController.cs | 18 ++++++++++++++++++ LANCommander/Services/GameService.cs | 7 +------ 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/LANCommander.Playnite.Extension/LANCommanderLibraryPlugin.cs b/LANCommander.Playnite.Extension/LANCommanderLibraryPlugin.cs index 3228cc9..64d4186 100644 --- a/LANCommander.Playnite.Extension/LANCommanderLibraryPlugin.cs +++ b/LANCommander.Playnite.Extension/LANCommanderLibraryPlugin.cs @@ -90,8 +90,6 @@ namespace LANCommander.PlaynitePlugin continue; } - var iconUri = new Uri(new Uri(Settings.ServerAddress), $"Games/GetIcon/{game.Id}"); - var metadata = new GameMetadata() { IsInstalled = false, @@ -101,7 +99,7 @@ namespace LANCommander.PlaynitePlugin GameId = game.Id.ToString(), ReleaseDate = new ReleaseDate(manifest.ReleasedOn), //Version = game.Archives.OrderByDescending(a => a.CreatedOn).FirstOrDefault().Version, - Icon = new MetadataFile(iconUri.ToString()), + Icon = new MetadataFile($"{Settings.ServerAddress}{manifest.Icon}"), GameActions = game.Actions.OrderBy(a => a.SortOrder).Select(a => new PN.SDK.Models.GameAction() { Name = a.Name, @@ -112,14 +110,6 @@ namespace LANCommander.PlaynitePlugin }).ToList() }; - if (existingGame != null) - { - metadata.IsInstalled = true; - metadata.Version = existingGame.Version; - metadata.InstallDirectory = existingGame.InstallDirectory; - metadata.InstallSize = existingGame.InstallSize; - } - if (manifest.Genre != null && manifest.Genre.Count() > 0) metadata.Genres = new HashSet(manifest.Genre.Select(g => new MetadataNameProperty(g))); @@ -285,11 +275,16 @@ namespace LANCommander.PlaynitePlugin { var game = PlayniteApi.Database.Games.First(g => g.GameId == gameId.ToString()); + if (game == null) + return; + if (game.GameActions == null) game.GameActions = new ObservableCollection(); else game.GameActions.Clear(); + game.Icon = $"{Settings.ServerAddress}{manifest.Icon}"; + foreach (var action in manifest.Actions.OrderBy(a => a.SortOrder)) { bool isFirstAction = !manifest.Actions.Any(a => a.IsPrimaryAction) && manifest.Actions.First().Name == action.Name; diff --git a/LANCommander/Controllers/Api/GamesController.cs b/LANCommander/Controllers/Api/GamesController.cs index 758043f..882e9ad 100644 --- a/LANCommander/Controllers/Api/GamesController.cs +++ b/LANCommander/Controllers/Api/GamesController.cs @@ -41,6 +41,8 @@ namespace LANCommander.Controllers.Api { var manifest = await GameService.GetManifest(id); + manifest.Icon = Url.Action(nameof(GetIcon), new { id = id }); + return manifest; } @@ -64,5 +66,21 @@ namespace LANCommander.Controllers.Api return File(new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read), "application/octet-stream", $"{game.Title.SanitizeFilename()}.zip"); } + + [AllowAnonymous] + [HttpGet("{id}/Icon.png")] + public async Task GetIcon(Guid id) + { + try + { + var game = await GameService.Get(id); + + return File(GameService.GetIcon(game), "image/png"); + } + catch (FileNotFoundException ex) + { + return NotFound(); + } + } } } diff --git a/LANCommander/Services/GameService.cs b/LANCommander/Services/GameService.cs index eb45d39..fbf33d2 100644 --- a/LANCommander/Services/GameService.cs +++ b/LANCommander/Services/GameService.cs @@ -40,6 +40,7 @@ namespace LANCommander.Services Description = game.Description, ReleasedOn = game.ReleasedOn.GetValueOrDefault(), Singleplayer = game.Singleplayer, + Icon = game.Icon }; if (game.Genres != null && game.Genres.Count > 0) @@ -57,12 +58,6 @@ namespace LANCommander.Services if (game.Archives != null && game.Archives.Count > 0) manifest.Version = game.Archives.OrderByDescending(a => a.CreatedOn).First().Version; - try - { - manifest.Icon = Convert.ToBase64String(GetIcon(game)); - } - catch { } - if (game.Actions != null && game.Actions.Count > 0) { manifest.Actions = game.Actions.Select(a => new GameAction()