111 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Linq;
 | |
| using JetBrains.Rider.PathLocator;
 | |
| using Packages.Rider.Editor.Util;
 | |
| using Unity.CodeEditor;
 | |
| 
 | |
| namespace Packages.Rider.Editor
 | |
| {
 | |
|   internal interface IDiscovery
 | |
|   {
 | |
|     CodeEditor.Installation[] PathCallback();
 | |
|   }
 | |
| 
 | |
|   internal class Discovery : IDiscovery
 | |
|   {
 | |
|     public static readonly RiderPathLocator RiderPathLocator;
 | |
|     public static readonly RiderFileOpener RiderFileOpener;
 | |
|     
 | |
|     static Discovery()
 | |
|     {
 | |
|       var env = new RiderLocatorEnvironment();
 | |
|       RiderPathLocator = new RiderPathLocator(env);
 | |
|       RiderFileOpener = new RiderFileOpener(env);
 | |
|     }
 | |
| 
 | |
|     public CodeEditor.Installation[] PathCallback()
 | |
|     {
 | |
|       // still we want to search for installations, when Preferences is opened
 | |
|       
 | |
|       var res = RiderPathLocator.GetAllRiderPaths()
 | |
|         .Select(riderInfo => new CodeEditor.Installation
 | |
|         {
 | |
|           Path = riderInfo.Path,
 | |
|           Name = riderInfo.Presentation
 | |
|         })
 | |
|         .ToList();
 | |
| 
 | |
|       var editorPath = RiderScriptEditor.CurrentEditor;
 | |
|       if (RiderScriptEditor.IsRiderOrFleetInstallation(editorPath) &&
 | |
|           !res.Any(a => a.Path == editorPath) &&
 | |
|           FileSystemUtil.EditorPathExists(editorPath))
 | |
|       {
 | |
|         // External editor manually set from custom location
 | |
|         var info = new RiderPathLocator.RiderInfo(RiderPathLocator, editorPath, false);
 | |
|         var installation = new CodeEditor.Installation
 | |
|         {
 | |
|           Path = info.Path,
 | |
|           Name = info.Presentation
 | |
|         };
 | |
|         res.Add(installation);
 | |
|       }
 | |
| 
 | |
|       return res.ToArray();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   internal class RiderLocatorEnvironment : IRiderLocatorEnvironment
 | |
|   {
 | |
|     public OS CurrentOS
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         switch (UnityEngine.SystemInfo.operatingSystemFamily)
 | |
|         {
 | |
|           case UnityEngine.OperatingSystemFamily.Windows:
 | |
|             return OS.Windows;
 | |
|           case UnityEngine.OperatingSystemFamily.MacOSX:
 | |
|             return OS.MacOSX;
 | |
|           case UnityEngine.OperatingSystemFamily.Linux:
 | |
|             return OS.Linux;
 | |
|           default:
 | |
|             return OS.Other;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     public T FromJson<T>(string json)
 | |
|     {
 | |
|       return (T)UnityEngine.JsonUtility.FromJson(json, typeof(T));
 | |
|     }
 | |
|     
 | |
|     public void Verbose(string message, Exception e = null)
 | |
|     {
 | |
|       // only writes to Editor.log
 | |
|       Console.WriteLine(message);
 | |
|       if (e != null)
 | |
|         Console.WriteLine(e);
 | |
|     }
 | |
| 
 | |
|     public void Info(string message, Exception e = null)
 | |
|     {
 | |
|       UnityEngine.Debug.Log(message);
 | |
|       if (e != null)
 | |
|         UnityEngine.Debug.Log(e);
 | |
|     }
 | |
| 
 | |
|     public void Warn(string message, Exception e = null)
 | |
|     {
 | |
|       UnityEngine.Debug.LogWarning(message);
 | |
|       if (e != null)
 | |
|         UnityEngine.Debug.LogWarning(e);
 | |
|     }
 | |
| 
 | |
|     public void Error(string message, Exception e = null)
 | |
|     {
 | |
|       UnityEngine.Debug.LogError(message);
 | |
|       if (e != null)
 | |
|         UnityEngine.Debug.LogException(e);
 | |
|     }
 | |
|   }
 | |
| } |