LANCommander/LANCommander.Playnite.Extension/InstallController.cs

84 lines
2.7 KiB
C#
Raw Normal View History

using LANCommander.SDK;
using LANCommander.SDK.Helpers;
2023-04-07 19:09:00 -05:00
using LANCommander.SDK.Models;
using Playnite.SDK;
using Playnite.SDK.Models;
using Playnite.SDK.Plugins;
2023-01-06 22:12:03 -06:00
using System;
namespace LANCommander.PlaynitePlugin
2023-01-06 22:12:03 -06:00
{
public class LANCommanderInstallController : InstallController
{
2023-08-21 18:44:20 -05:00
public static readonly ILogger Logger = LogManager.GetLogger();
private LANCommanderLibraryPlugin Plugin;
2023-01-06 22:12:03 -06:00
public LANCommanderInstallController(LANCommanderLibraryPlugin plugin, Playnite.SDK.Models.Game game) : base(game)
2023-01-06 22:12:03 -06:00
{
Name = "Install using LANCommander";
Plugin = plugin;
}
public override void Install(InstallActionArgs args)
{
2023-08-21 18:44:20 -05:00
Logger.Trace("Game install triggered, checking connection...");
while (!Plugin.ValidateConnection())
{
2023-08-21 18:44:20 -05:00
Logger.Trace("User not authenticated. Opening auth window...");
Plugin.ShowAuthenticationWindow();
}
2023-01-06 22:12:03 -06:00
var gameId = Guid.Parse(Game.GameId);
string installDirectory = null;
2023-08-21 18:44:20 -05:00
var result = Plugin.PlayniteApi.Dialogs.ActivateGlobalProgress(progress =>
2023-04-07 20:08:03 -05:00
{
var gameManager = new GameManager(Plugin.LANCommanderClient, Plugin.Settings.InstallDirectory);
gameManager.OnArchiveExtractionProgress += (long pos, long len) =>
{
progress.ProgressMaxValue = len;
progress.CurrentProgressValue = pos;
};
gameManager.OnArchiveEntryExtractionProgress += (object sender, ArchiveEntryExtractionProgressArgs e) =>
{
if (progress.CancelToken != null && progress.CancelToken.IsCancellationRequested)
{
e.Reader.Cancel();
e.Reader.Dispose();
e.Stream.Dispose();
progress.IsIndeterminate = true;
}
};
installDirectory = gameManager.Install(gameId);
},
new GlobalProgressOptions($"Downloading {Game.Name}...")
{
IsIndeterminate = true,
Cancelable = true,
});
if (!result.Canceled && result.Error == null && !String.IsNullOrWhiteSpace(installDirectory))
{
var manifest = ManifestHelper.Read(installDirectory);
2023-01-06 22:12:03 -06:00
Plugin.UpdateGame(manifest);
2023-01-06 22:12:03 -06:00
var installInfo = new GameInstallationData
2023-01-06 22:12:03 -06:00
{
InstallDirectory = installDirectory,
};
2023-01-06 22:12:03 -06:00
InvokeOnInstalled(new GameInstalledEventArgs(installInfo));
2023-01-06 22:12:03 -06:00
}
}
2023-01-06 22:12:03 -06:00
}
}