Support toolbox custom "Tools install location", by reading .settings.json

(cherry picked from commit 33af53c1a6)
This commit is contained in:
Ivan Shakhov 2020-02-27 15:22:12 +01:00 committed by Rémi Verschelde
parent 6488570251
commit 8337cc5f7d

View file

@ -11,6 +11,10 @@ using Environment = System.Environment;
using File = System.IO.File; using File = System.IO.File;
using Path = System.IO.Path; using Path = System.IO.Path;
using OS = GodotTools.Utils.OS; using OS = GodotTools.Utils.OS;
// ReSharper disable UnassignedField.Local
// ReSharper disable InconsistentNaming
// ReSharper disable UnassignedField.Global
// ReSharper disable MemberHidesStaticFromOuterClass
namespace GodotTools.Ides.Rider namespace GodotTools.Ides.Rider
{ {
@ -131,28 +135,45 @@ namespace GodotTools.Ides.Rider
if (OS.IsWindows) if (OS.IsWindows)
{ {
var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
return Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider"); return GetToolboxRiderRootPath(localAppData);
} }
if (OS.IsOSX) if (OS.IsOSX)
{ {
var home = Environment.GetEnvironmentVariable("HOME"); var home = Environment.GetEnvironmentVariable("HOME");
if (!string.IsNullOrEmpty(home)) if (string.IsNullOrEmpty(home))
{ return string.Empty;
return Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider"); var localAppData = Path.Combine(home, @"Library/Application Support");
} return GetToolboxRiderRootPath(localAppData);
} }
if (OS.IsUnixLike()) if (OS.IsUnixLike())
{ {
var home = Environment.GetEnvironmentVariable("HOME"); var home = Environment.GetEnvironmentVariable("HOME");
if (!string.IsNullOrEmpty(home)) if (string.IsNullOrEmpty(home))
{ return string.Empty;
return Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider"); var localAppData = Path.Combine(home, @".local/share");
} return GetToolboxRiderRootPath(localAppData);
} }
throw new Exception("Unexpected OS."); return string.Empty;
}
private static string GetToolboxRiderRootPath(string localAppData)
{
var toolboxPath = Path.Combine(localAppData, @"JetBrains\Toolbox");
var settingsJson = Path.Combine(toolboxPath, ".settings.json");
if (File.Exists(settingsJson))
{
var path = SettingsJson.GetInstallLocationFromJson(File.ReadAllText(settingsJson));
if (!string.IsNullOrEmpty(path))
toolboxPath = path;
}
var toolboxRiderRootPath = Path.Combine(toolboxPath, @"apps\Rider");
return toolboxRiderRootPath;
} }
internal static ProductInfo GetBuildVersion(string path) internal static ProductInfo GetBuildVersion(string path)
@ -288,6 +309,27 @@ namespace GodotTools.Ides.Rider
// Note that Unity disable this warning in the generated C# projects // Note that Unity disable this warning in the generated C# projects
#pragma warning disable 0649 #pragma warning disable 0649
[Serializable]
class SettingsJson
{
public string install_location;
[CanBeNull]
public static string GetInstallLocationFromJson(string json)
{
try
{
return JsonConvert.DeserializeObject<SettingsJson>(json).install_location;
}
catch (Exception)
{
Logger.Warn($"Failed to get install_location from json {json}");
}
return null;
}
}
[Serializable] [Serializable]
class ToolboxHistory class ToolboxHistory
{ {
@ -372,7 +414,6 @@ namespace GodotTools.Ides.Rider
[Serializable] [Serializable]
class ActiveApplication class ActiveApplication
{ {
// ReSharper disable once InconsistentNaming
public List<string> builds; public List<string> builds;
} }
@ -380,6 +421,7 @@ namespace GodotTools.Ides.Rider
public struct RiderInfo public struct RiderInfo
{ {
// ReSharper disable once NotAccessedField.Global
public bool IsToolbox; public bool IsToolbox;
public string Presentation; public string Presentation;
public Version BuildNumber; public Version BuildNumber;