Fix icon loading on initial game sync

This commit is contained in:
Pat Hartl 2023-01-17 17:09:42 -06:00
parent 6b5824e920
commit f63c2ddf2d
3 changed files with 25 additions and 17 deletions

View file

@ -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<MetadataProperty>(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<PN.SDK.Models.GameAction>();
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;

View file

@ -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<IActionResult> GetIcon(Guid id)
{
try
{
var game = await GameService.Get(id);
return File(GameService.GetIcon(game), "image/png");
}
catch (FileNotFoundException ex)
{
return NotFound();
}
}
}
}

View file

@ -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()