mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-22 04:34:59 +00:00
Merge pull request #92 from ennerperez/feature/issues-77
code_review: * use JsonSerializerContext to avoid AOT warnnings * since we call TryAdd by interating the installed tools, so detecting by environment variable becomes meaningless (it can not detect tools not installed by Toolbox). Just add it into founded directly * remove unnecessary type defines * determine the Icon used by tool while adding it to the founded list. # Conflicts: # src/Native/Linux.cs # src/Native/MacOS.cs # src/Native/Windows.cs
This commit is contained in:
commit
9a68418f51
24 changed files with 87 additions and 33 deletions
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
|
||||
using Avalonia.Media.Imaging;
|
||||
using Avalonia.Platform;
|
||||
|
@ -19,8 +20,20 @@ namespace SourceGit.Models
|
|||
{
|
||||
get
|
||||
{
|
||||
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/ExternalToolIcons/{Icon}.png", UriKind.RelativeOrAbsolute));
|
||||
return new Bitmap(icon);
|
||||
if (string.IsNullOrWhiteSpace(Icon))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var icon = AssetLoader.Open(new Uri($"avares://SourceGit/Resources/ExternalToolIcons/{Icon}.png", UriKind.RelativeOrAbsolute));
|
||||
return new Bitmap(icon);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,6 +49,26 @@ namespace SourceGit.Models
|
|||
}
|
||||
}
|
||||
|
||||
public class JetBrainsState
|
||||
{
|
||||
public int Version { get; set; }
|
||||
public string AppVersion { get; set; }
|
||||
public List<JetBrainsTool> Tools { get; set; }
|
||||
}
|
||||
|
||||
public class JetBrainsTool
|
||||
{
|
||||
public string ChannelId { get; set; }
|
||||
public string ToolId { get; set; }
|
||||
public string ProductCode { get; set; }
|
||||
public string Tag { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public string DisplayVersion { get; set; }
|
||||
public string BuildNumber { get; set; }
|
||||
public string InstallLocation { get; set; }
|
||||
public string LaunchCommand { get; set; }
|
||||
}
|
||||
|
||||
public class ExternalToolsFinder
|
||||
{
|
||||
public List<ExternalTool> Founded
|
||||
|
@ -44,31 +77,6 @@ namespace SourceGit.Models
|
|||
private set;
|
||||
} = new List<ExternalTool>();
|
||||
|
||||
public void VSCode(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("Visual Studio Code", "vscode", "\"{0}\"", "VSCODE_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void VSCodeInsiders(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("Visual Studio Code - Insiders", "vscode_insiders", "\"{0}\"", "VSCODE_INSIDERS_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void Fleet(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("JetBrains Fleet", "fleet", "\"{0}\"", "FLEET_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void Rider(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("JetBrains Rider", "rider", "\"{0}\"", "RIDER_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void SublimeText(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("Sublime Text", "sublime_text", "\"{0}\"", "SUBLIME_TEXT_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void TryAdd(string name, string icon, string args, string env, Func<string> finder)
|
||||
{
|
||||
var path = Environment.GetEnvironmentVariable(env);
|
||||
|
@ -84,8 +92,52 @@ namespace SourceGit.Models
|
|||
Name = name,
|
||||
Icon = icon,
|
||||
OpenCmdArgs = args,
|
||||
Executable = path,
|
||||
Executable = path
|
||||
});
|
||||
}
|
||||
|
||||
public void VSCode(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("Visual Studio Code", "vscode", "\"{0}\"", "VSCODE_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void VSCodeInsiders(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("Visual Studio Code - Insiders", "vscode_insiders", "\"{0}\"", "VSCODE_INSIDERS_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void Fleet(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("JetBrains Fleet", "fleet", "\"{0}\"", "FLEET_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void SublimeText(Func<string> platform_finder)
|
||||
{
|
||||
TryAdd("Sublime Text", "sublime_text", "\"{0}\"", "SUBLIME_TEXT_PATH", platform_finder);
|
||||
}
|
||||
|
||||
public void FindJetBrainsFromToolbox(Func<string> platform_finder)
|
||||
{
|
||||
var exclude = new List<string> { "fleet", "dotmemory", "dottrace", "resharper-u", "androidstudio" };
|
||||
var supported_icons = new List<string> { "CL", "DB", "DL", "DS", "GO", "IC", "IU", "JB", "PC", "PS", "PY", "QA", "QD", "RD", "RM", "RR", "WRS", "WS" };
|
||||
var state = Path.Combine(platform_finder(), "state.json");
|
||||
if (File.Exists(state))
|
||||
{
|
||||
var stateData = JsonSerializer.Deserialize(File.ReadAllText(state), JsonCodeGen.Default.JetBrainsState);
|
||||
foreach (var tool in stateData.Tools)
|
||||
{
|
||||
if (exclude.Contains(tool.ToolId.ToLowerInvariant()))
|
||||
continue;
|
||||
|
||||
Founded.Add(new ExternalTool
|
||||
{
|
||||
Name = $"JetBrains {tool.DisplayName} {tool.DisplayVersion}",
|
||||
Icon = supported_icons.Contains(tool.ProductCode) ? $"JetBrains/{tool.ProductCode}" : $"JetBrains/JB",
|
||||
OpenCmdArgs = "\"{0}\"",
|
||||
Executable = Path.Combine(tool.InstallLocation, tool.LaunchCommand),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue