private void InstallPluginInGame(Lifetime lifetime, UnrealPluginInstallInfo unrealPluginInstallInfo, Property <double> progress) { myLogger.Verbose("[UnrealLink]: Installing plugin in Game"); var backupDir = VirtualFileSystemDefinition.CreateTemporaryDirectory(InteractionContext.SolutionContext, null, TMP_PREFIX); 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 (InstallPlugin(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); }
private async Task InstallPluginInGame(Lifetime lifetime, UnrealPluginInstallInfo unrealPluginInstallInfo, Property <double> progress) { var backupDir = FileSystemDefinition.CreateTemporaryDirectory(null, TMP_PREFIX); 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]; try { if (await InstallPlugin(lifetime, installDescription, installDescription.UprojectFilePath, 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); }
private async Task InstallPluginInEngine(Lifetime lifetime, UnrealPluginInstallInfo unrealPluginInstallInfo, IProperty <double> progress) { var backupDir = FileSystemDefinition.CreateTemporaryDirectory(null, TMP_PREFIX); using var deleteTempFolders = new DeleteTempFolders(backupDir.Directory); var backupAllPlugins = BackupAllPlugins(unrealPluginInstallInfo); progress.Value = 0.0; bool success; try { success = await InstallPlugin(lifetime, unrealPluginInstallInfo.EnginePlugin, unrealPluginInstallInfo.ProjectPlugins.First().UprojectFilePath, progress, 1.0); } catch (OperationCanceledException) { success = false; } if (!success) { foreach (var backupAllPlugin in backupAllPlugins) { backupAllPlugin.Restore(); } } else { foreach (var installDescription in unrealPluginInstallInfo.ProjectPlugins) { installDescription.IsPluginAvailable = false; } } myUnrealHost.myModel.InstallPluginFinished(success); }