From ffc8e1f8c0c3017cf4963ea051c5a22a8d136fca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=AE=E3=83=A3=E3=83=83=E3=83=97?= Date: Wed, 10 Sep 2025 16:02:18 +0200 Subject: [PATCH 1/3] feat: Visual Studio 2026 icon support --- src/Models/ExternalMerger.cs | 2 +- src/Models/ExternalTool.cs | 15 +++++++++++++++ src/Models/VisualStudioProductLine.cs | 14 ++++++++++++++ src/Native/Windows.cs | 5 ++++- .../{vs-preview.png => vs17-preview.png} | Bin .../ExternalToolIcons/{vs.png => vs17.png} | Bin .../Images/ExternalToolIcons/vs18-preview.png | Bin 0 -> 6063 bytes src/Resources/Images/ExternalToolIcons/vs18.png | Bin 0 -> 3438 bytes 8 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/Models/VisualStudioProductLine.cs rename src/Resources/Images/ExternalToolIcons/{vs-preview.png => vs17-preview.png} (100%) rename src/Resources/Images/ExternalToolIcons/{vs.png => vs17.png} (100%) create mode 100644 src/Resources/Images/ExternalToolIcons/vs18-preview.png create mode 100644 src/Resources/Images/ExternalToolIcons/vs18.png 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..09cece7ba 100644 --- a/src/Models/ExternalTool.cs +++ b/src/Models/ExternalTool.cs @@ -58,6 +58,21 @@ public class VisualStudioInstance [JsonPropertyName("isPrerelease")] public bool IsPrerelease { get; set; } = false; + + [JsonPropertyName("installationVersion")] + public string InstallationVersion { get; set; } = string.Empty; + + [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..5a185f3f0 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -11,6 +11,7 @@ using Avalonia.Controls; using Avalonia.Platform; using Avalonia.Threading; +using SourceGit.Models; namespace SourceGit.Native { @@ -404,7 +405,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 ?? VisualStudioProductLine.Dev17; + 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 0000000000000000000000000000000000000000..f0154ac215b231196422628e6a8534fc8eafdde5 GIT binary patch literal 6063 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 literal 0 HcmV?d00001 diff --git a/src/Resources/Images/ExternalToolIcons/vs18.png b/src/Resources/Images/ExternalToolIcons/vs18.png new file mode 100644 index 0000000000000000000000000000000000000000..60b820c2e5c3cf0aec6cc26daafb2d0556b07534 GIT binary patch literal 3438 zcmV-!4UzJRP)_!exp&$rq5c?S!k%vS zKIh!K&$qtyt+gK)qW8=HwkTTVGEhI%qw}>x-uppEw(cD@Ya6oZPhP!sxsX---(44U)BRuEGrg{=$JgC?)#Q5}b5#wv{qmn5blx=p z9pD`sfSx1g!u2g5+eWuszm0IK=`4+AMAK`&a(VOJ##}W6ZoBM>dX~9k01Mboi2?lQ zVvFm|8!GY0~ z1N-LA_PslLr-mV&ky19k!wcM#HhAK(FZGg&sPL%l%XMg)%Iis^-DvHe-E;5BfB@VK z!Icd%xl_;Ji1h5dglCA(pKT7M-!MzlC z^#L&~z(4+=LXlQ5IXdc>Tz~#vfLmu9)XI7sK!b4~+>BvO?k!pv(yPs;VSMGD)5qw} zx~Cl6^A7n#k2CaC2XGcSN=(hV_ zY@D38J?C$#Qvbfq^qFh6)7rcmvO-{8`5+~ z!Dp3@!K%d|rWs*@r!j~HHa^qR39LFDb2N(5J-${9p7J$Q&Y4~d6s0%t$=%!5s^MGr z(i&Zj!P=G*GtS^~?V)3UASEs0^LHoSnSS!sH*ScpPm!nM%gc-t0ylWU1sBi*{a2`x z{rL3~laLXv({r6yHw+;^?^R$ZFc!SZ6g5xG(@%f-3faX9xdo}-a=Vz5S<=eDGX`WD z#HKN@1@>FuxpMQyzOCI=A&6fkbn`#SC|onn{gi2$6Nu*k?rWXRU_2^#Jg2>}sPQ`7 z3;mW2eXcs!*&qx6eEjJwxLhm=7C!O9tMrHFJLDIt-mxJ|xi>8hpr{T8SS8hZl?GKX zfl8q%-GQ(Ct zEAfK3H}=Id(pPlZh8pczzkwvlhY3ju@F*$v2;RpbGVz_~t{LMyMUY8g+zT1L1*3uo z1bpff8v*5c)*iE<Q46gXRz>ZrwuF+Lc;I-CpZC_zr*(O* zmgj5bgJ0xgrcin`J!19^GF6h1cqAHSqCsUJ@uroyK{)3qV4L8P%u|OKQk&UqkOS5^ zCBf=YZE$grPVh`LC>Xo-@v(D{x|iE!|CFs{|(#STlk_nr+5I;1(Rj z<;#5u-caaYQrn_xU27y!1WQzN?3ulzr;jfZOrTu|T3cqJvU-fES}uA3Q&ND<>pfnZ zXY5>kS_%wh-$ZSWY<1AZ9G$B5A<$q4rltry-s6@vduiRi~N~OT(7&J7?FKlNK z-~LP`&uPboP3ZZre)E|R&8%pENQVKdl5x}7PuYkKLp+2mBnGgIDDIN706wNw>X^<` z`SHuY^>3Rc0W3AL%xqht4hf~_;pJP`Z=`(}UA&RbQoyb^zVtw3T{2O;ALL{axkeI@ z1TlNTL-{^sqZki>FB9ByHw^YZQ9o%G8c!epa{w8oW5f%p&3x2#=L<${;Mb@G50p81+Xn*&&kpiF|g^CeYmQrM;w^KV z!E+YkJ&^!c$rxG5#UPeBL5KAbZ&F~^u*Ru^))mjK1=QzX`%4>qnRPr#`lEInU=mj? z3@x6*x*JRA#y4&{-gl-4+W9}QA7|rEZ`kl05^_O8#PUh4kNKyajkr`Q)u}AYDbFfO zmcp7HsQrogH|hAPH=<19OQ{{$Nm^w}1#-0T28?w6&`960p3(!#8|Me0rLP})}xVD^Z ztRkW437h~a%cpYWcD1@>7gu_~EL%FrMCK)B^Ta0mg7)XyLCiCWy3vWM5*vMbE_WKCBn7YSh(rCc!H(E&IL@g z3?0A?-@~HAun8~^XHPvYbB6=N?bT?@rTi}`RB_z2XJufix_n&Ylq-{o%qa#PJfi%% zYB%lZ*$(g-SKoy#Vikr|unB?oan4zZ``HSmy=|*#`L|BKKFusSIY8qx2tJ47b068f z!zjz(0h%)r`kte~u%LR2xOtIu+mX?NQOlMlA}c-8ym_w6W&L>9Xm_Ps^xuu6l%1O{ zR99SdnQRTk04(sjz;HJV>CQ97_q#KeQpM-N2+vz|o$03^_{GKj06Gn+2=fA3KqB)H zOGe~F!aRG6lQEXH#ua=<5hp<}CdEu95;V%kL?F*)L^&5?Be?m=!0ZH8_apG|ep}{p zCo4^h=&%exyyOAgtB{erT4G9Mqwbps`u#kn_xS;Rfj+q7qw(8vsN@sS zR8+@C3lC=A^>i8@spl}nibqJ;cd@nJ$Ci*847|`9yZ^~c&p6y2zIpBlq_fvcwgKlj zo3xlOtZM;uG{7tZ{Ja>kd*}7E9IzalMnghd9@$|>_pU#1+&)=r-a5HuuuJE=u`U0h zWFqW(IFJ$0s#^kEt2HV=y3SQbR~iG9lL7y2X$;KvRNUeb@Le|+ z(S<54BqZPs$G|+bTBm5&#h(ZQ?>N?t%~O!lWJV_^#wOcjt=f-#jhkNS!&+s^nnJYC zF<^K{7q#D7n&-KKw(tIU`%oA9 zU<7K{hKp$9)=N3d%wet^U+WgfI@w;S!Q)tyz4{2?nS^V3EEf*ljxe-&ZiLL zBafYh?Ul-^|E~sveMfq51lB+d?1yyf@W6~S^AoP;0~3?e*EQ+=@_$zT1C!N>M!u8# Q5&!@I07*qoM6N<$g8zA-xBvhE literal 0 HcmV?d00001 From 992dd8266eae6a560b8ef45dc9747fcfc101443c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=AE=E3=83=A3=E3=83=83=E3=83=97?= Date: Wed, 10 Sep 2025 16:08:55 +0200 Subject: [PATCH 2/3] fix: typo --- src/Models/ExternalTool.cs | 3 --- src/Native/Windows.cs | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Models/ExternalTool.cs b/src/Models/ExternalTool.cs index 09cece7ba..42d287368 100644 --- a/src/Models/ExternalTool.cs +++ b/src/Models/ExternalTool.cs @@ -59,9 +59,6 @@ public class VisualStudioInstance [JsonPropertyName("isPrerelease")] public bool IsPrerelease { get; set; } = false; - [JsonPropertyName("installationVersion")] - public string InstallationVersion { get; set; } = string.Empty; - [JsonPropertyName("catalog")] public VisualStudioCatalog Catalog { get; set; } = new(); } diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs index 5a185f3f0..87b4c2cb0 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -405,7 +405,7 @@ private void FindVisualStudio(Models.ExternalToolsFinder finder) foreach (var instance in instances) { var exec = instance.ProductPath; - var productLine = instance.Catalog?.ParsedProductLine ?? VisualStudioProductLine.Dev17; + var productLine = instance.Catalog.ParsedProductLine; var icon = instance.IsPrerelease ? $"vs{(int)productLine}-preview" : $"vs{(int)productLine}"; finder.TryAdd(instance.DisplayName, icon, () => exec, GenerateCommandlineArgsForVisualStudio); From bcb0153ecd2e701c63bbec3ad8a7ea8f1854ee61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=AE=E3=83=A3=E3=83=83=E3=83=97?= Date: Wed, 10 Sep 2025 16:12:46 +0200 Subject: [PATCH 3/3] fix: format --- src/Native/Windows.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Native/Windows.cs b/src/Native/Windows.cs index 87b4c2cb0..8557c0143 100644 --- a/src/Native/Windows.cs +++ b/src/Native/Windows.cs @@ -11,7 +11,6 @@ using Avalonia.Controls; using Avalonia.Platform; using Avalonia.Threading; -using SourceGit.Models; namespace SourceGit.Native { @@ -407,7 +406,7 @@ private void FindVisualStudio(Models.ExternalToolsFinder finder) var exec = instance.ProductPath; var productLine = instance.Catalog.ParsedProductLine; var icon = instance.IsPrerelease ? $"vs{(int)productLine}-preview" : $"vs{(int)productLine}"; - + finder.TryAdd(instance.DisplayName, icon, () => exec, GenerateCommandlineArgsForVisualStudio); } }