private bool DoCopyFiles([NotNull] UnityPluginDetector.InstallationInfo installation, out FileSystemPath installedPath) { installedPath = null; var originPaths = new List <FileSystemPath>(); originPaths.AddRange(installation.ExistingFiles); var backups = originPaths.ToDictionary(f => f, f => f.AddSuffix(".backup")); foreach (var originPath in originPaths) { var backupPath = backups[originPath]; if (originPath.ExistsFile) { originPath.MoveFile(backupPath, true); myLogger.Info($"backing up: {originPath.Name} -> {backupPath.Name}"); } else { myLogger.Info($"backing up failed: {originPath.Name} doesn't exist."); } } try { //var assembly = Assembly.GetExecutingAssembly(); //var package = myApplicationPackages.FindPackageWithAssembly(assembly, OnError.LogException); //var subplatformName = package.SubplatformName; //FileSystemPath dir = myResolver.GetDeployedPackageDirectory(package); var installDirectory = myApplicationPackagesLocallyInstalled .Single(a => a.Id == "JetBrains.plugin_com_intellij_resharper_unity").LocalInstallDirectory; var editorPluginPath = installDirectory.Parent.Combine(@"EditorPlugin\JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll"); var targetPath = installation.PluginDirectory.Combine(editorPluginPath.Name); try { editorPluginPath.CopyFile(targetPath, true); } catch (Exception e) { myLogger.LogException(LoggingLevel.ERROR, e, ExceptionOrigin.Assertion, $"Failed to copy {editorPluginPath} => {targetPath}"); RestoreFromBackup(backups); } foreach (var backup in backups) { backup.Value.DeleteFile(); } installedPath = installation.PluginDirectory.Combine(UnityPluginDetector.MergedPluginFile); return(true); } catch (Exception e) { myLogger.LogExceptionSilently(e); RestoreFromBackup(backups); return(false); } }
private bool DoCopyFiles([NotNull] UnityPluginDetector.InstallationInfo installation, out FileSystemPath installedPath) { installedPath = null; var originPaths = new List <FileSystemPath>(); originPaths.AddRange(installation.ExistingFiles); var backups = originPaths.ToDictionary(f => f, f => f.AddSuffix(".backup")); foreach (var originPath in originPaths) { var backupPath = backups[originPath]; if (originPath.ExistsFile) { originPath.MoveFile(backupPath, true); myLogger.Info($"backing up: {originPath.Name} -> {backupPath.Name}"); } else { myLogger.Info($"backing up failed: {originPath.Name} doesn't exist."); } } try { var editorPluginPathDir = myPluginPathsProvider.GetEditorPluginPathDir(); var editorPluginPath = editorPluginPathDir.Combine(PluginPathsProvider.BasicPluginDllFile); var editor56PluginPath = editorPluginPathDir.Combine(PluginPathsProvider.Unity56PluginDllFile); var editorFullPluginPath = editorPluginPathDir.Combine(PluginPathsProvider.FullPluginDllFile); var targetPath = installation.PluginDirectory.Combine(editorPluginPath.Name); try { var versionForSolution = myUnityVersion.GetActualVersionForSolution(); if (versionForSolution < new Version("5.6")) { myLogger.Verbose($"Coping {editorPluginPath} -> {targetPath}"); editorPluginPath.CopyFile(targetPath, true); } else if (versionForSolution >= new Version("5.6") && versionForSolution < new Version("2017.3")) { myLogger.Verbose($"Coping {editor56PluginPath} -> {editor56PluginPath}"); editor56PluginPath.CopyFile(targetPath, true); } else { myLogger.Verbose($"Coping {editorFullPluginPath} -> {targetPath}"); editorFullPluginPath.CopyFile(targetPath, true); } } catch (Exception e) { myLogger.LogException(LoggingLevel.ERROR, e, ExceptionOrigin.Assertion, $"Failed to copy {editorPluginPath} => {targetPath}"); RestoreFromBackup(backups); } foreach (var backup in backups) { backup.Value.DeleteFile(); } installedPath = installation.PluginDirectory.Combine(PluginPathsProvider.BasicPluginDllFile); return(true); } catch (Exception e) { myLogger.LogExceptionSilently(e); RestoreFromBackup(backups); return(false); } }
private void Install(UnityPluginDetector.InstallationInfo installationInfo) { if (!installationInfo.ShouldInstallPlugin) { Assertion.Assert(false, "Should not be here if installation is not required."); return; } if (myPluginInstallations.Contains(mySolution.SolutionFilePath)) { myLogger.Verbose("Installation already done."); return; } if (currentVersion <= installationInfo.Version) { myLogger.Verbose($"Plugin v{installationInfo.Version} already installed."); return; } var isFreshInstall = installationInfo.Version == UnityPluginDetector.ZeroVersion; if (isFreshInstall) { myLogger.Info("Fresh install"); } FileSystemPath installedPath; if (!TryCopyFiles(installationInfo, out installedPath)) { myLogger.Warn("Plugin was not installed"); } else { string userTitle; string userMessage; if (isFreshInstall) { userTitle = "Unity: plugin installed"; userMessage = $@"Rider plugin v{ currentVersion } for the Unity Editor was automatically installed for the project '{mySolution.Name}' This allows better integration between the Unity Editor and Rider IDE. The plugin file can be found on the following path: {installedPath.MakeRelativeTo(mySolution.SolutionFilePath)}. Please switch back to Unity to make plugin file appear in the solution."; } else { userTitle = "Unity: plugin updated"; userMessage = $"Rider plugin was succesfully upgraded to version {currentVersion}"; } myLogger.Info(userTitle); var notification = new RdNotificationEntry(userTitle, userMessage, true, RdNotificationEntryType.INFO); myShellLocks.ExecuteOrQueueEx(myLifetime, "UnityPluginInstaller.Notify", () => myNotifications.Notification.Fire(notification)); } }
private void Install(UnityPluginDetector.InstallationInfo installationInfo, bool force) { if (!force) { if (!installationInfo.ShouldInstallPlugin) { Assertion.Assert(false, "Should not be here if installation is not required."); return; } if (myPluginInstallations.Contains(mySolution.SolutionFilePath)) { myLogger.Verbose("Installation already done."); return; } } myLogger.Info("Installing Rider Unity editor plugin: {0}", installationInfo.InstallReason); if (!TryCopyFiles(installationInfo, out var installedPath)) { myLogger.Warn("Plugin was not installed"); } else { string userTitle; string userMessage; switch (installationInfo.InstallReason) { case UnityPluginDetector.InstallReason.FreshInstall: userTitle = "Unity Editor plugin installed"; userMessage = $@"Please switch to Unity Editor to load the plugin. Rider plugin v{myCurrentVersion} can be found at: {installedPath.MakeRelativeTo(mySolution.SolutionDirectory)}."; break; case UnityPluginDetector.InstallReason.Update: userTitle = "Unity Editor plugin updated"; userMessage = $@"Please switch to the Unity Editor to reload the plugin. Rider plugin v{myCurrentVersion} can be found at: {installedPath.MakeRelativeTo(mySolution.SolutionDirectory)}."; break; case UnityPluginDetector.InstallReason.ForceUpdateForDebug: userTitle = "Unity Editor plugin updated (debug build)"; userMessage = $@"Please switch to the Unity Editor to reload the plugin. Rider plugin v{myCurrentVersion} can be found at: {installedPath.MakeRelativeTo(mySolution.SolutionDirectory)}."; break; case UnityPluginDetector.InstallReason.UpToDate: userTitle = "Unity Editor plugin updated (up to date)"; userMessage = $@"Please switch to the Unity Editor to reload the plugin. Rider plugin v{myCurrentVersion} can be found at: {installedPath.MakeRelativeTo(mySolution.SolutionDirectory)}."; break; default: myLogger.Error("Unexpected install reason: {0}", installationInfo.InstallReason); return; } myLogger.Info(userTitle); var notification = new NotificationModel(userTitle, userMessage, true, RdNotificationEntryType.INFO); myShellLocks.ExecuteOrQueueEx(myLifetime, "UnityPluginInstaller.Notify", () => myNotifications.Notification(notification)); } }