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); | ||
|  |     } | ||
|  |   } | ||
|  | } |