diff --git a/src/Models/ExternalMerger.cs b/src/Models/ExternalMerger.cs index ce90a7d44..3ba34e9b7 100644 --- a/src/Models/ExternalMerger.cs +++ b/src/Models/ExternalMerger.cs @@ -34,7 +34,7 @@ static ExternalMerger() new ExternalMerger("git", "Use Git Settings", "", "", ""), new ExternalMerger("vscode", "Visual Studio Code", "Code.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), new ExternalMerger("vscode_insiders", "Visual Studio Code - Insiders", "Code - Insiders.exe", "-n --wait \"$MERGED\"", "-n --wait --diff \"$LOCAL\" \"$REMOTE\""), - new ExternalMerger("vs", "Visual Studio", "vsDiffMerge.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" /m", "\"$LOCAL\" \"$REMOTE\""), + new ExternalMerger("vs17", "Visual Studio", "vsDiffMerge.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" /m", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger("tortoise_merge", "Tortoise Merge", "TortoiseMerge.exe;TortoiseGitMerge.exe", "-base:\"$BASE\" -theirs:\"$REMOTE\" -mine:\"$LOCAL\" -merged:\"$MERGED\"", "-base:\"$LOCAL\" -theirs:\"$REMOTE\""), new ExternalMerger("kdiff3", "KDiff3", "kdiff3.exe", "\"$REMOTE\" -b \"$BASE\" \"$LOCAL\" -o \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), new ExternalMerger("beyond_compare", "Beyond Compare", "BComp.exe", "\"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"", "\"$LOCAL\" \"$REMOTE\""), diff --git a/src/Models/ExternalTool.cs b/src/Models/ExternalTool.cs index f453c08f6..42d287368 100644 --- a/src/Models/ExternalTool.cs +++ b/src/Models/ExternalTool.cs @@ -58,6 +58,18 @@ public class VisualStudioInstance [JsonPropertyName("isPrerelease")] public bool IsPrerelease { get; set; } = false; + + [JsonPropertyName("catalog")] + public VisualStudioCatalog Catalog { get; set; } = new(); + } + + public class VisualStudioCatalog + { + [JsonPropertyName("productLine")] + public string ProductLine { get; set; } = string.Empty; + + [JsonIgnore] + public VisualStudioProductLine ParsedProductLine => Enum.TryParse(ProductLine, out var ppl) ? ppl : VisualStudioProductLine.Dev17; } public class JetBrainsState diff --git a/src/Models/VisualStudioProductLine.cs b/src/Models/VisualStudioProductLine.cs new file mode 100644 index 000000000..40de5cdcc --- /dev/null +++ b/src/Models/VisualStudioProductLine.cs @@ -0,0 +1,14 @@ +namespace SourceGit.Models +{ + public enum VisualStudioProductLine + { + /// + /// Visual Studio 2022 + /// + Dev17 = 17, + /// + /// Visual Studio 2026 + /// + Dev18 = 18 + } +} diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs index d00100eb5..8557c0143 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -404,7 +404,9 @@ private void FindVisualStudio(Models.ExternalToolsFinder finder) foreach (var instance in instances) { var exec = instance.ProductPath; - var icon = instance.IsPrerelease ? "vs-preview" : "vs"; + var productLine = instance.Catalog.ParsedProductLine; + var icon = instance.IsPrerelease ? $"vs{(int)productLine}-preview" : $"vs{(int)productLine}"; + finder.TryAdd(instance.DisplayName, icon, () => exec, GenerateCommandlineArgsForVisualStudio); } } diff --git a/src/Resources/Images/ExternalToolIcons/vs-preview.png b/src/Resources/Images/ExternalToolIcons/vs17-preview.png similarity index 100% rename from src/Resources/Images/ExternalToolIcons/vs-preview.png rename to src/Resources/Images/ExternalToolIcons/vs17-preview.png diff --git a/src/Resources/Images/ExternalToolIcons/vs.png b/src/Resources/Images/ExternalToolIcons/vs17.png similarity index 100% rename from src/Resources/Images/ExternalToolIcons/vs.png rename to src/Resources/Images/ExternalToolIcons/vs17.png diff --git a/src/Resources/Images/ExternalToolIcons/vs18-preview.png b/src/Resources/Images/ExternalToolIcons/vs18-preview.png new file mode 100644 index 000000000..f0154ac21 Binary files /dev/null and b/src/Resources/Images/ExternalToolIcons/vs18-preview.png differ diff --git a/src/Resources/Images/ExternalToolIcons/vs18.png b/src/Resources/Images/ExternalToolIcons/vs18.png new file mode 100644 index 000000000..60b820c2e Binary files /dev/null and b/src/Resources/Images/ExternalToolIcons/vs18.png differ