in src/dotnet/RiderPlugin.UnrealLink/PluginInstaller/UnrealPluginInstaller.cs [138:185]
private void InstallPluginInGame(Lifetime lifetime, UnrealPluginInstallInfo unrealPluginInstallInfo,
Property<double> progress, bool buildRequired)
{
myLogger.Verbose("[UnrealLink]: Installing plugin in Game");
var backupDir = CreateTempDirectory();
if(backupDir.IsNullOrEmpty()) return;
using var deleteTempFolders = new DeleteTempFolders(backupDir.Directory);
var backupAllPlugins = BackupAllPlugins(unrealPluginInstallInfo);
var success = true;
var size = unrealPluginInstallInfo.ProjectPlugins.Count;
var range = 1.0 / size;
for (int i = 0; i < unrealPluginInstallInfo.ProjectPlugins.Count; i++)
{
progress.Value = range * i;
var installDescription = unrealPluginInstallInfo.ProjectPlugins[i];
myLogger.Verbose($"[UnrealLink]: Installing plugin for {installDescription.ProjectName}");
try
{
if (buildRequired && InstallPlugin(lifetime, installDescription, unrealPluginInstallInfo.EngineRoot, progress,
range)) continue;
if (!buildRequired && ExtractPlugin(lifetime, installDescription, unrealPluginInstallInfo.EngineRoot, progress,
range)) continue;
}
catch (OperationCanceledException)
{
// Operation was cancelled, don't need to do anything, fallback to break case
}
success = false;
break;
}
if (success)
{
unrealPluginInstallInfo.EnginePlugin.IsPluginAvailable = false;
}
else
{
foreach (var backupAllPlugin in backupAllPlugins)
{
backupAllPlugin.Restore();
}
}
myUnrealHost.myModel.InstallPluginFinished(success);
}