in src/dotnet/RiderPlugin.UnrealLink/PluginInstaller/UnrealPluginInstaller.cs [526:578]
public void HandleManualInstallPlugin(InstallPluginDescription installPluginDescription)
{
var unrealPluginInstallInfo = myPluginDetector.InstallInfoProperty.Value;
if (unrealPluginInstallInfo == null) return;
Lifetime.UsingNestedAsync(async lt =>
{
var lifetimeDefinition = lt.CreateNested();
var lifetime = lifetimeDefinition.Lifetime;
lifetime.Bracket(
() => myUnrealHost.myModel.RiderLinkInstallationInProgress.Value = true,
() => myUnrealHost.myModel.RiderLinkInstallationInProgress.Value = false
);
var prefix = unrealPluginInstallInfo.EnginePlugin.IsPluginAvailable ? "Updating" : "Installing";
var header = $"{prefix} RiderLink plugin";
var progress = new Property<double>("UnrealLink.InstallPluginProgress", 0.0);
var task = BackgroundProgressBuilder.Create()
.AsCancelable(() =>
{
myUnrealHost.myModel.RiderLinkInstallMessage(
new InstallMessage(Strings.RiderLinkInstallationHasBeenCancelled_Text, ContentType.Error));
lifetimeDefinition.Terminate();
})
.WithHeader(header)
.WithProgress(progress)
.WithDescriptionFromProgress();
myBackgroundProgressManager.AddNewTask(lifetime, task);
myUnrealHost.myModel.CancelRiderLinkInstall.AdviseOnce(lifetime, _ =>
{
myUnrealHost.myModel.RiderLinkInstallMessage(
new InstallMessage(Strings.RiderLinkInstallationHasBeenCancelled_Text, ContentType.Error));
lifetimeDefinition.Terminate();
});
myUnrealHost.myModel.RiderLinkInstallPanelInit();
await lifetime.StartBackground(() =>
{
switch (installPluginDescription.Location)
{
case PluginInstallLocation.Engine:
InstallPluginInEngine(lifetime, unrealPluginInstallInfo, progress, installPluginDescription.BuildRequired);
break;
case PluginInstallLocation.Game:
InstallPluginInGame(lifetime, unrealPluginInstallInfo, progress, installPluginDescription.BuildRequired);
break;
case PluginInstallLocation.NotInstalled:
default:
myLogger.Error("UnrealLink: Invalid location set for installing RiderLink plugin");
break;
}
});
});
}