Remove all the old samples that we can't ship ourselves (#530)

There were some absolutely critical examples in here to make sure that the APIs
worked, but at this point, those are usually exercised in a different sample
somewhere.

RIP in peace spongebot. You'll be missed.

Closes #133
Closes #154
This commit is contained in:
Mike Griese
2025-03-11 09:01:41 -05:00
committed by GitHub
parent 4fca47201d
commit ab576c6d3e
200 changed files with 0 additions and 6901 deletions

View File

@@ -650,24 +650,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Terminal.UI", "sr
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sample Extensions", "Sample Extensions", "{071E18A4-A530-46B8-AB7D-B862EE55E24E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EverythingExtension", "src\modules\cmdpal\Exts\EverythingExtension\EverythingExtension.csproj", "{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HackerNewsExtension", "src\modules\cmdpal\Exts\HackerNewsExtension\HackerNewsExtension.csproj", "{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MastodonExtension", "src\modules\cmdpal\Exts\MastodonExtension\MastodonExtension.csproj", "{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MediaControlsExtension", "src\modules\cmdpal\Exts\MediaControlsExtension\MediaControlsExtension.csproj", "{922A3BEB-8A93-40B4-89FE-96AABD632E69}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProcessMonitorExtension", "src\modules\cmdpal\Exts\ProcessMonitorExtension\ProcessMonitorExtension.csproj", "{C846F7A7-792A-47D9-B0CB-417C900EE03D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SamplePagesExtension", "src\modules\cmdpal\Exts\SamplePagesExtension\SamplePagesExtension.csproj", "{C831231F-891C-4572-9694-45062534B42A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpongebotExtension", "src\modules\cmdpal\Exts\SpongebotExtension\SpongebotExtension.csproj", "{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSHKeychainExtension", "src\modules\cmdpal\Exts\SSHKeychainExtension\SSHKeychainExtension.csproj", "{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YouTubeExtension", "src\modules\cmdpal\Exts\YouTubeExtension\YouTubeExtension.csproj", "{8E47BF33-A402-4582-930C-95E35418F653}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI", "UI", "{7520A2FE-00A2-49B8-83ED-DB216E874C04}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CmdPal.UI", "src\modules\cmdpal\Microsoft.CmdPal.UI\Microsoft.CmdPal.UI.csproj", "{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}"
@@ -678,14 +664,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CmdPal.Ext.Clipbo
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CmdPalModuleInterface", "src\modules\cmdpal\CmdPalModuleInterface\CmdPalModuleInterface.vcxproj", "{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PokedexExtension", "src\modules\cmdpal\Exts\PokedexExtension\PokedexExtension.csproj", "{D8DD2E06-7956-4673-95E7-F395AB5A5485}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MenusExtension", "src\modules\cmdpal\Exts\Menus\MenusExtension.csproj", "{8ABE2195-7514-425E-9A89-685FA42CEFC3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkspacesCsharpLibrary", "src\modules\Workspaces\WorkspacesCsharpLibrary\WorkspacesCsharpLibrary.csproj", "{89D0E199-B17A-418C-B2F8-7375B6708357}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VirtualDesktopExtension", "src\modules\cmdpal\Exts\VirtualDesktopExtension\VirtualDesktopExtension.csproj", "{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NewPlus.ShellExtension.win10", "src\modules\NewPlus\NewShellExtensionContextMenu.win10\NewPlus.ShellExtension.win10.vcxproj", "{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.Indexer", "src\modules\cmdpal\Exts\Microsoft.CmdPal.Ext.Indexer\Microsoft.CmdPal.Ext.Indexer.csproj", "{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}"
@@ -1418,7 +1398,6 @@ Global
{5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|ARM64.Build.0 = Release|ARM64
{5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.ActiveCfg = Release|x64
{5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x64.Build.0 = Release|x64
{5043CECE-E6A7-4867-9CBE-02D27D83747A}.Release|x86.ActiveCfg = Release|x64
{11491FD8-F921-48BF-880C-7FEA185B80A1}.Debug|ARM64.ActiveCfg = Debug|ARM64
{11491FD8-F921-48BF-880C-7FEA185B80A1}.Debug|ARM64.Build.0 = Debug|ARM64
{11491FD8-F921-48BF-880C-7FEA185B80A1}.Debug|x64.ActiveCfg = Debug|x64
@@ -2275,392 +2254,154 @@ Global
{66614C26-314C-4B91-9071-76133422CFEF}.Release|ARM64.Build.0 = Release|ARM64
{66614C26-314C-4B91-9071-76133422CFEF}.Release|x64.ActiveCfg = Release|x64
{66614C26-314C-4B91-9071-76133422CFEF}.Release|x64.Build.0 = Release|x64
{66614C26-314C-4B91-9071-76133422CFEF}.Release|x86.ActiveCfg = Release|x64
{66614C26-314C-4B91-9071-76133422CFEF}.Release|x86.Build.0 = Release|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Debug|ARM64.ActiveCfg = Debug|ARM64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Debug|ARM64.Build.0 = Debug|ARM64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Debug|x64.ActiveCfg = Debug|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Debug|x64.Build.0 = Debug|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Debug|x86.ActiveCfg = Debug|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Debug|x86.Build.0 = Debug|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Release|ARM64.ActiveCfg = Release|ARM64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Release|ARM64.Build.0 = Release|ARM64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Release|x64.ActiveCfg = Release|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Release|x64.Build.0 = Release|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Release|x86.ActiveCfg = Release|x64
{6CE438DF-C245-4997-A360-0A0939E4BA34}.Release|x86.Build.0 = Release|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Debug|ARM64.ActiveCfg = Debug|ARM64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Debug|ARM64.Build.0 = Debug|ARM64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Debug|x64.ActiveCfg = Debug|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Debug|x64.Build.0 = Debug|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Debug|x86.ActiveCfg = Debug|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Debug|x86.Build.0 = Debug|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Release|ARM64.ActiveCfg = Release|ARM64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Release|ARM64.Build.0 = Release|ARM64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Release|x64.ActiveCfg = Release|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Release|x64.Build.0 = Release|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Release|x86.ActiveCfg = Release|x64
{E09AA983-C755-474F-83D6-A5CDF528C070}.Release|x86.Build.0 = Release|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Debug|ARM64.ActiveCfg = Debug|ARM64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Debug|ARM64.Build.0 = Debug|ARM64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Debug|x64.ActiveCfg = Debug|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Debug|x64.Build.0 = Debug|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Debug|x86.ActiveCfg = Debug|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Debug|x86.Build.0 = Debug|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Release|ARM64.ActiveCfg = Release|ARM64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Release|ARM64.Build.0 = Release|ARM64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Release|x64.ActiveCfg = Release|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Release|x64.Build.0 = Release|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Release|x86.ActiveCfg = Release|x64
{6D56B64D-FF1F-488F-AFED-9B9854A5D399}.Release|x86.Build.0 = Release|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Debug|ARM64.ActiveCfg = Debug|ARM64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Debug|ARM64.Build.0 = Debug|ARM64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Debug|x64.ActiveCfg = Debug|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Debug|x64.Build.0 = Debug|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Debug|x86.ActiveCfg = Debug|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Debug|x86.Build.0 = Debug|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Release|ARM64.ActiveCfg = Release|ARM64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Release|ARM64.Build.0 = Release|ARM64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Release|x64.ActiveCfg = Release|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Release|x64.Build.0 = Release|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Release|x86.ActiveCfg = Release|x64
{92EC89E4-9972-453A-8A1A-3A9E230C146A}.Release|x86.Build.0 = Release|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Debug|ARM64.ActiveCfg = Debug|ARM64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Debug|ARM64.Build.0 = Debug|ARM64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Debug|x64.ActiveCfg = Debug|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Debug|x64.Build.0 = Debug|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Debug|x86.ActiveCfg = Debug|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Debug|x86.Build.0 = Debug|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Release|ARM64.ActiveCfg = Release|ARM64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Release|ARM64.Build.0 = Release|ARM64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Release|x64.ActiveCfg = Release|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Release|x64.Build.0 = Release|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Release|x86.ActiveCfg = Release|x64
{51939B4F-1F62-4BFF-A6A2-C08646E5BE95}.Release|x86.Build.0 = Release|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Debug|ARM64.ActiveCfg = Debug|ARM64
{D1160404-D3D1-497A-883A-4059C07C2273}.Debug|ARM64.Build.0 = Debug|ARM64
{D1160404-D3D1-497A-883A-4059C07C2273}.Debug|x64.ActiveCfg = Debug|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Debug|x64.Build.0 = Debug|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Debug|x86.ActiveCfg = Debug|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Debug|x86.Build.0 = Debug|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Release|ARM64.ActiveCfg = Release|ARM64
{D1160404-D3D1-497A-883A-4059C07C2273}.Release|ARM64.Build.0 = Release|ARM64
{D1160404-D3D1-497A-883A-4059C07C2273}.Release|x64.ActiveCfg = Release|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Release|x64.Build.0 = Release|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Release|x86.ActiveCfg = Release|x64
{D1160404-D3D1-497A-883A-4059C07C2273}.Release|x86.Build.0 = Release|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Debug|ARM64.ActiveCfg = Debug|ARM64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Debug|ARM64.Build.0 = Debug|ARM64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Debug|x64.ActiveCfg = Debug|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Debug|x64.Build.0 = Debug|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Debug|x86.ActiveCfg = Debug|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Debug|x86.Build.0 = Debug|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Release|ARM64.ActiveCfg = Release|ARM64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Release|ARM64.Build.0 = Release|ARM64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Release|x64.ActiveCfg = Release|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Release|x64.Build.0 = Release|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Release|x86.ActiveCfg = Release|x64
{40F6D69D-E321-400F-A767-5628C7AE453D}.Release|x86.Build.0 = Release|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Debug|ARM64.ActiveCfg = Debug|ARM64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Debug|ARM64.Build.0 = Debug|ARM64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Debug|x64.ActiveCfg = Debug|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Debug|x64.Build.0 = Debug|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Debug|x86.ActiveCfg = Debug|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Debug|x86.Build.0 = Debug|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Release|ARM64.ActiveCfg = Release|ARM64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Release|ARM64.Build.0 = Release|ARM64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Release|x64.ActiveCfg = Release|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Release|x64.Build.0 = Release|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Release|x86.ActiveCfg = Release|x64
{305DD37E-C85D-4B08-AAFE-7381FA890463}.Release|x86.Build.0 = Release|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Debug|ARM64.ActiveCfg = Debug|ARM64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Debug|ARM64.Build.0 = Debug|ARM64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Debug|x64.ActiveCfg = Debug|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Debug|x64.Build.0 = Debug|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Debug|x86.ActiveCfg = Debug|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Debug|x86.Build.0 = Debug|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Release|ARM64.ActiveCfg = Release|ARM64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Release|ARM64.Build.0 = Release|ARM64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Release|x64.ActiveCfg = Release|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Release|x64.Build.0 = Release|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Release|x86.ActiveCfg = Release|x64
{CA4D810F-C8F4-4B61-9DA9-71807E0B9F24}.Release|x86.Build.0 = Release|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Debug|ARM64.ActiveCfg = Debug|ARM64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Debug|ARM64.Build.0 = Debug|ARM64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Debug|x64.ActiveCfg = Debug|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Debug|x64.Build.0 = Debug|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Debug|x86.ActiveCfg = Debug|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Debug|x86.Build.0 = Debug|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Release|ARM64.ActiveCfg = Release|ARM64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Release|ARM64.Build.0 = Release|ARM64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Release|x64.ActiveCfg = Release|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Release|x64.Build.0 = Release|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Release|x86.ActiveCfg = Release|x64
{14E62033-58D0-4A7D-8990-52F50A08BBBD}.Release|x86.Build.0 = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|ARM64.ActiveCfg = Debug|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|ARM64.Build.0 = Debug|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x64.ActiveCfg = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x64.Build.0 = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x86.ActiveCfg = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x86.Build.0 = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|ARM64.ActiveCfg = Release|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|ARM64.Build.0 = Release|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x64.ActiveCfg = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x64.Build.0 = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x86.ActiveCfg = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x86.Build.0 = Release|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|ARM64.Build.0 = Debug|ARM64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|ARM64.Deploy.0 = Debug|ARM64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|x64.ActiveCfg = Debug|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|x64.Build.0 = Debug|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|x64.Deploy.0 = Debug|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|x86.ActiveCfg = Debug|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|x86.Build.0 = Debug|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Debug|x86.Deploy.0 = Debug|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|ARM64.ActiveCfg = Release|ARM64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|ARM64.Build.0 = Release|ARM64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|ARM64.Deploy.0 = Release|ARM64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|x64.ActiveCfg = Release|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|x64.Build.0 = Release|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|x64.Deploy.0 = Release|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|x86.ActiveCfg = Release|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|x86.Build.0 = Release|x64
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E}.Release|x86.Deploy.0 = Release|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|ARM64.ActiveCfg = Debug|ARM64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|ARM64.Build.0 = Debug|ARM64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|ARM64.Deploy.0 = Debug|ARM64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|x64.ActiveCfg = Debug|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|x64.Build.0 = Debug|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|x64.Deploy.0 = Debug|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|x86.ActiveCfg = Debug|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|x86.Build.0 = Debug|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Debug|x86.Deploy.0 = Debug|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|ARM64.ActiveCfg = Release|ARM64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|ARM64.Build.0 = Release|ARM64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|ARM64.Deploy.0 = Release|ARM64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|x64.ActiveCfg = Release|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|x64.Build.0 = Release|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|x64.Deploy.0 = Release|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|x86.ActiveCfg = Release|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|x86.Build.0 = Release|x64
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB}.Release|x86.Deploy.0 = Release|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|ARM64.ActiveCfg = Debug|ARM64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|ARM64.Build.0 = Debug|ARM64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|ARM64.Deploy.0 = Debug|ARM64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|x64.ActiveCfg = Debug|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|x64.Build.0 = Debug|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|x64.Deploy.0 = Debug|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|x86.ActiveCfg = Debug|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|x86.Build.0 = Debug|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Debug|x86.Deploy.0 = Debug|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|ARM64.ActiveCfg = Release|ARM64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|ARM64.Build.0 = Release|ARM64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|ARM64.Deploy.0 = Release|ARM64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|x64.ActiveCfg = Release|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|x64.Build.0 = Release|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|x64.Deploy.0 = Release|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|x86.ActiveCfg = Release|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|x86.Build.0 = Release|x64
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175}.Release|x86.Deploy.0 = Release|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|ARM64.ActiveCfg = Debug|ARM64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|ARM64.Build.0 = Debug|ARM64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|ARM64.Deploy.0 = Debug|ARM64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|x64.ActiveCfg = Debug|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|x64.Build.0 = Debug|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|x64.Deploy.0 = Debug|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|x86.ActiveCfg = Debug|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|x86.Build.0 = Debug|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Debug|x86.Deploy.0 = Debug|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|ARM64.ActiveCfg = Release|ARM64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|ARM64.Build.0 = Release|ARM64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|ARM64.Deploy.0 = Release|ARM64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|x64.ActiveCfg = Release|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|x64.Build.0 = Release|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|x64.Deploy.0 = Release|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|x86.ActiveCfg = Release|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|x86.Build.0 = Release|x64
{922A3BEB-8A93-40B4-89FE-96AABD632E69}.Release|x86.Deploy.0 = Release|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|ARM64.Build.0 = Debug|ARM64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|ARM64.Deploy.0 = Debug|ARM64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|x64.ActiveCfg = Debug|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|x64.Build.0 = Debug|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|x64.Deploy.0 = Debug|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|x86.ActiveCfg = Debug|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|x86.Build.0 = Debug|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Debug|x86.Deploy.0 = Debug|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|ARM64.ActiveCfg = Release|ARM64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|ARM64.Build.0 = Release|ARM64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|ARM64.Deploy.0 = Release|ARM64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|x64.ActiveCfg = Release|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|x64.Build.0 = Release|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|x64.Deploy.0 = Release|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|x86.ActiveCfg = Release|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|x86.Build.0 = Release|x64
{C846F7A7-792A-47D9-B0CB-417C900EE03D}.Release|x86.Deploy.0 = Release|x64
{C831231F-891C-4572-9694-45062534B42A}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C831231F-891C-4572-9694-45062534B42A}.Debug|ARM64.Build.0 = Debug|ARM64
{C831231F-891C-4572-9694-45062534B42A}.Debug|ARM64.Deploy.0 = Debug|ARM64
{C831231F-891C-4572-9694-45062534B42A}.Debug|x64.ActiveCfg = Debug|x64
{C831231F-891C-4572-9694-45062534B42A}.Debug|x64.Build.0 = Debug|x64
{C831231F-891C-4572-9694-45062534B42A}.Debug|x64.Deploy.0 = Debug|x64
{C831231F-891C-4572-9694-45062534B42A}.Debug|x86.ActiveCfg = Debug|x64
{C831231F-891C-4572-9694-45062534B42A}.Debug|x86.Build.0 = Debug|x64
{C831231F-891C-4572-9694-45062534B42A}.Debug|x86.Deploy.0 = Debug|x64
{C831231F-891C-4572-9694-45062534B42A}.Release|ARM64.ActiveCfg = Release|ARM64
{C831231F-891C-4572-9694-45062534B42A}.Release|ARM64.Build.0 = Release|ARM64
{C831231F-891C-4572-9694-45062534B42A}.Release|ARM64.Deploy.0 = Release|ARM64
{C831231F-891C-4572-9694-45062534B42A}.Release|x64.ActiveCfg = Release|x64
{C831231F-891C-4572-9694-45062534B42A}.Release|x64.Build.0 = Release|x64
{C831231F-891C-4572-9694-45062534B42A}.Release|x64.Deploy.0 = Release|x64
{C831231F-891C-4572-9694-45062534B42A}.Release|x86.ActiveCfg = Release|x64
{C831231F-891C-4572-9694-45062534B42A}.Release|x86.Build.0 = Release|x64
{C831231F-891C-4572-9694-45062534B42A}.Release|x86.Deploy.0 = Release|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|ARM64.ActiveCfg = Debug|ARM64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|ARM64.Build.0 = Debug|ARM64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|ARM64.Deploy.0 = Debug|ARM64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|x64.ActiveCfg = Debug|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|x64.Build.0 = Debug|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|x64.Deploy.0 = Debug|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|x86.ActiveCfg = Debug|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|x86.Build.0 = Debug|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Debug|x86.Deploy.0 = Debug|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|ARM64.ActiveCfg = Release|ARM64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|ARM64.Build.0 = Release|ARM64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|ARM64.Deploy.0 = Release|ARM64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|x64.ActiveCfg = Release|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|x64.Build.0 = Release|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|x64.Deploy.0 = Release|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|x86.ActiveCfg = Release|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|x86.Build.0 = Release|x64
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F}.Release|x86.Deploy.0 = Release|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|ARM64.ActiveCfg = Debug|ARM64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|ARM64.Build.0 = Debug|ARM64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|ARM64.Deploy.0 = Debug|ARM64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|x64.ActiveCfg = Debug|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|x64.Build.0 = Debug|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|x64.Deploy.0 = Debug|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|x86.ActiveCfg = Debug|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|x86.Build.0 = Debug|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Debug|x86.Deploy.0 = Debug|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|ARM64.ActiveCfg = Release|ARM64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|ARM64.Build.0 = Release|ARM64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|ARM64.Deploy.0 = Release|ARM64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|x64.ActiveCfg = Release|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|x64.Build.0 = Release|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|x64.Deploy.0 = Release|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|x86.ActiveCfg = Release|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|x86.Build.0 = Release|x64
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A}.Release|x86.Deploy.0 = Release|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|ARM64.ActiveCfg = Debug|ARM64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|ARM64.Build.0 = Debug|ARM64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|ARM64.Deploy.0 = Debug|ARM64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|x64.ActiveCfg = Debug|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|x64.Build.0 = Debug|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|x64.Deploy.0 = Debug|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|x86.ActiveCfg = Debug|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|x86.Build.0 = Debug|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Debug|x86.Deploy.0 = Debug|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|ARM64.ActiveCfg = Release|ARM64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|ARM64.Build.0 = Release|ARM64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|ARM64.Deploy.0 = Release|ARM64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|x64.ActiveCfg = Release|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|x64.Build.0 = Release|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|x64.Deploy.0 = Release|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|x86.ActiveCfg = Release|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|x86.Build.0 = Release|x64
{8E47BF33-A402-4582-930C-95E35418F653}.Release|x86.Deploy.0 = Release|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|ARM64.ActiveCfg = Debug|ARM64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|ARM64.Build.0 = Debug|ARM64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|ARM64.Deploy.0 = Debug|ARM64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|x64.ActiveCfg = Debug|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|x64.Build.0 = Debug|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|x64.Deploy.0 = Debug|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|x86.ActiveCfg = Debug|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|x86.Build.0 = Debug|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Debug|x86.Deploy.0 = Debug|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|ARM64.ActiveCfg = Release|ARM64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|ARM64.Build.0 = Release|ARM64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|ARM64.Deploy.0 = Release|ARM64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|x64.ActiveCfg = Release|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|x64.Build.0 = Release|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|x64.Deploy.0 = Release|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|x86.ActiveCfg = Release|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|x86.Build.0 = Release|x64
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90}.Release|x86.Deploy.0 = Release|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Debug|ARM64.Build.0 = Debug|ARM64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Debug|x64.ActiveCfg = Debug|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Debug|x64.Build.0 = Debug|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Debug|x86.ActiveCfg = Debug|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Debug|x86.Build.0 = Debug|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Release|ARM64.ActiveCfg = Release|ARM64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Release|ARM64.Build.0 = Release|ARM64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Release|x64.ActiveCfg = Release|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Release|x64.Build.0 = Release|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Release|x86.ActiveCfg = Release|x64
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2}.Release|x86.Build.0 = Release|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Debug|ARM64.ActiveCfg = Debug|ARM64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Debug|ARM64.Build.0 = Debug|ARM64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Debug|x64.ActiveCfg = Debug|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Debug|x64.Build.0 = Debug|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Debug|x86.ActiveCfg = Debug|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Debug|x86.Build.0 = Debug|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Release|ARM64.ActiveCfg = Release|ARM64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Release|ARM64.Build.0 = Release|ARM64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Release|x64.ActiveCfg = Release|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Release|x64.Build.0 = Release|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Release|x86.ActiveCfg = Release|x64
{79775343-7A3D-445D-9104-3DD5B2893DF9}.Release|x86.Build.0 = Release|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Debug|ARM64.ActiveCfg = Debug|ARM64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Debug|ARM64.Build.0 = Debug|ARM64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Debug|x64.ActiveCfg = Debug|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Debug|x64.Build.0 = Debug|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Debug|x86.ActiveCfg = Debug|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Debug|x86.Build.0 = Debug|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Release|ARM64.ActiveCfg = Release|ARM64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Release|ARM64.Build.0 = Release|ARM64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Release|x64.ActiveCfg = Release|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Release|x64.Build.0 = Release|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Release|x86.ActiveCfg = Release|x64
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8}.Release|x86.Build.0 = Release|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|ARM64.ActiveCfg = Debug|ARM64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|ARM64.Build.0 = Debug|ARM64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|ARM64.Deploy.0 = Debug|ARM64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|x64.ActiveCfg = Debug|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|x64.Build.0 = Debug|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|x64.Deploy.0 = Debug|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|x86.ActiveCfg = Debug|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|x86.Build.0 = Debug|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Debug|x86.Deploy.0 = Debug|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|ARM64.ActiveCfg = Release|ARM64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|ARM64.Build.0 = Release|ARM64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|ARM64.Deploy.0 = Release|ARM64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|x64.ActiveCfg = Release|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|x64.Build.0 = Release|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|x64.Deploy.0 = Release|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|x86.ActiveCfg = Release|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|x86.Build.0 = Release|x64
{D8DD2E06-7956-4673-95E7-F395AB5A5485}.Release|x86.Deploy.0 = Release|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|ARM64.ActiveCfg = Debug|ARM64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|ARM64.Build.0 = Debug|ARM64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|ARM64.Deploy.0 = Debug|ARM64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|x64.ActiveCfg = Debug|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|x64.Build.0 = Debug|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|x64.Deploy.0 = Debug|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|x86.ActiveCfg = Debug|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|x86.Build.0 = Debug|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Debug|x86.Deploy.0 = Debug|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|ARM64.ActiveCfg = Release|ARM64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|ARM64.Build.0 = Release|ARM64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|ARM64.Deploy.0 = Release|ARM64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|x64.ActiveCfg = Release|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|x64.Build.0 = Release|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|x64.Deploy.0 = Release|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|x86.ActiveCfg = Release|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|x86.Build.0 = Release|x64
{8ABE2195-7514-425E-9A89-685FA42CEFC3}.Release|x86.Deploy.0 = Release|x64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Debug|ARM64.ActiveCfg = Debug|ARM64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Debug|ARM64.Build.0 = Debug|ARM64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Debug|x64.ActiveCfg = Debug|x64
@@ -2669,26 +2410,6 @@ Global
{89D0E199-B17A-418C-B2F8-7375B6708357}.Release|ARM64.Build.0 = Release|ARM64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Release|x64.ActiveCfg = Release|x64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Release|x64.Build.0 = Release|x64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Release|x86.ActiveCfg = Release|x64
{89D0E199-B17A-418C-B2F8-7375B6708357}.Release|x86.Build.0 = Release|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|ARM64.ActiveCfg = Debug|ARM64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|ARM64.Build.0 = Debug|ARM64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|ARM64.Deploy.0 = Debug|ARM64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|x64.ActiveCfg = Debug|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|x64.Build.0 = Debug|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|x64.Deploy.0 = Debug|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|x86.ActiveCfg = Debug|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|x86.Build.0 = Debug|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Debug|x86.Deploy.0 = Debug|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|ARM64.ActiveCfg = Release|ARM64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|ARM64.Build.0 = Release|ARM64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|ARM64.Deploy.0 = Release|ARM64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|x64.ActiveCfg = Release|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|x64.Build.0 = Release|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|x64.Deploy.0 = Release|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|x86.ActiveCfg = Release|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|x86.Build.0 = Release|x64
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A}.Release|x86.Deploy.0 = Release|x64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Debug|ARM64.Build.0 = Debug|ARM64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Debug|x64.ActiveCfg = Debug|x64
@@ -2697,158 +2418,106 @@ Global
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Release|ARM64.Build.0 = Release|ARM64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Release|x64.ActiveCfg = Release|x64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Release|x64.Build.0 = Release|x64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Release|x86.ActiveCfg = Release|x64
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E}.Release|x86.Build.0 = Release|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|ARM64.ActiveCfg = Debug|ARM64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|ARM64.Build.0 = Debug|ARM64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|ARM64.Deploy.0 = Debug|ARM64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|x64.ActiveCfg = Debug|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|x64.Build.0 = Debug|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|x64.Deploy.0 = Debug|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|x86.ActiveCfg = Debug|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|x86.Build.0 = Debug|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Debug|x86.Deploy.0 = Debug|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|ARM64.ActiveCfg = Release|ARM64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|ARM64.Build.0 = Release|ARM64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|ARM64.Deploy.0 = Release|ARM64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|x64.ActiveCfg = Release|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|x64.Build.0 = Release|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|x64.Deploy.0 = Release|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|x86.ActiveCfg = Release|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|x86.Build.0 = Release|x64
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D}.Release|x86.Deploy.0 = Release|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Debug|ARM64.Build.0 = Debug|ARM64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Debug|x64.ActiveCfg = Debug|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Debug|x64.Build.0 = Debug|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Debug|x86.ActiveCfg = Debug|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Debug|x86.Build.0 = Debug|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Release|ARM64.ActiveCfg = Release|ARM64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Release|ARM64.Build.0 = Release|ARM64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Release|x64.ActiveCfg = Release|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Release|x64.Build.0 = Release|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Release|x86.ActiveCfg = Release|x64
{C0CE3B5E-16D3-495D-B335-CA791B660162}.Release|x86.Build.0 = Release|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Debug|ARM64.ActiveCfg = Debug|ARM64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Debug|ARM64.Build.0 = Debug|ARM64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Debug|x64.ActiveCfg = Debug|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Debug|x64.Build.0 = Debug|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Debug|x86.ActiveCfg = Debug|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Debug|x86.Build.0 = Debug|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Release|ARM64.ActiveCfg = Release|ARM64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Release|ARM64.Build.0 = Release|ARM64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Release|x64.ActiveCfg = Release|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Release|x64.Build.0 = Release|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Release|x86.ActiveCfg = Release|x64
{3A9A7297-92C4-4F16-B6F9-8D4AB652C86C}.Release|x86.Build.0 = Release|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Debug|ARM64.Build.0 = Debug|ARM64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Debug|x64.ActiveCfg = Debug|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Debug|x64.Build.0 = Debug|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Debug|x86.ActiveCfg = Debug|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Debug|x86.Build.0 = Debug|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Release|ARM64.ActiveCfg = Release|ARM64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Release|ARM64.Build.0 = Release|ARM64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Release|x64.ActiveCfg = Release|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Release|x64.Build.0 = Release|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Release|x86.ActiveCfg = Release|x64
{605E914B-7232-4789-AF46-BF5D3DDFC14E}.Release|x86.Build.0 = Release|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|ARM64.ActiveCfg = Debug|ARM64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|ARM64.Build.0 = Debug|ARM64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|ARM64.Deploy.0 = Debug|ARM64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|x64.ActiveCfg = Debug|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|x64.Build.0 = Debug|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|x64.Deploy.0 = Debug|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|x86.ActiveCfg = Debug|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|x86.Build.0 = Debug|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Debug|x86.Deploy.0 = Debug|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|ARM64.ActiveCfg = Release|ARM64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|ARM64.Build.0 = Release|ARM64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|ARM64.Deploy.0 = Release|ARM64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|x64.ActiveCfg = Release|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|x64.Build.0 = Release|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|x64.Deploy.0 = Release|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|x86.ActiveCfg = Release|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|x86.Build.0 = Release|x64
{E81A7D20-9862-ABDB-0AAE-9BC5B517A9F9}.Release|x86.Deploy.0 = Release|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Debug|ARM64.ActiveCfg = Debug|ARM64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Debug|ARM64.Build.0 = Debug|ARM64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Debug|x64.ActiveCfg = Debug|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Debug|x64.Build.0 = Debug|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Debug|x86.ActiveCfg = Debug|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Debug|x86.Build.0 = Debug|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Release|ARM64.ActiveCfg = Release|ARM64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Release|ARM64.Build.0 = Release|ARM64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Release|x64.ActiveCfg = Release|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Release|x64.Build.0 = Release|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Release|x86.ActiveCfg = Release|x64
{D5E5F5EA-1B6C-4A73-88BE-304F36C9E4EE}.Release|x86.Build.0 = Release|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Debug|ARM64.ActiveCfg = Debug|ARM64
{7F5B9557-5878-4438-A721-3E28296BA193}.Debug|ARM64.Build.0 = Debug|ARM64
{7F5B9557-5878-4438-A721-3E28296BA193}.Debug|x64.ActiveCfg = Debug|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Debug|x64.Build.0 = Debug|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Debug|x86.ActiveCfg = Debug|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Debug|x86.Build.0 = Debug|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Release|ARM64.ActiveCfg = Release|ARM64
{7F5B9557-5878-4438-A721-3E28296BA193}.Release|ARM64.Build.0 = Release|ARM64
{7F5B9557-5878-4438-A721-3E28296BA193}.Release|x64.ActiveCfg = Release|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Release|x64.Build.0 = Release|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Release|x86.ActiveCfg = Release|x64
{7F5B9557-5878-4438-A721-3E28296BA193}.Release|x86.Build.0 = Release|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Debug|ARM64.ActiveCfg = Debug|ARM64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Debug|ARM64.Build.0 = Debug|ARM64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Debug|x64.ActiveCfg = Debug|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Debug|x64.Build.0 = Debug|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Debug|x86.ActiveCfg = Debug|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Debug|x86.Build.0 = Debug|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Release|ARM64.ActiveCfg = Release|ARM64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Release|ARM64.Build.0 = Release|ARM64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Release|x64.ActiveCfg = Release|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Release|x64.Build.0 = Release|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Release|x86.ActiveCfg = Release|x64
{0A84F764-3A88-44CD-AA96-41BDBD48627B}.Release|x86.Build.0 = Release|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Debug|ARM64.ActiveCfg = Debug|ARM64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Debug|ARM64.Build.0 = Debug|ARM64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Debug|x64.ActiveCfg = Debug|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Debug|x64.Build.0 = Debug|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Debug|x86.ActiveCfg = Debug|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Debug|x86.Build.0 = Debug|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Release|ARM64.ActiveCfg = Release|ARM64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Release|ARM64.Build.0 = Release|ARM64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Release|x64.ActiveCfg = Release|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Release|x64.Build.0 = Release|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Release|x86.ActiveCfg = Release|x64
{E4585179-2AC1-4D5F-A3FF-CFC5392F694C}.Release|x86.Build.0 = Release|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Debug|ARM64.ActiveCfg = Debug|ARM64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Debug|ARM64.Build.0 = Debug|ARM64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Debug|x64.ActiveCfg = Debug|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Debug|x64.Build.0 = Debug|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Debug|x86.ActiveCfg = Debug|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Debug|x86.Build.0 = Debug|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Release|ARM64.ActiveCfg = Release|ARM64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Release|ARM64.Build.0 = Release|ARM64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Release|x64.ActiveCfg = Release|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Release|x64.Build.0 = Release|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Release|x86.ActiveCfg = Release|x64
{CA7D8106-30B9-4AEC-9D05-B69B31B8C461}.Release|x86.Build.0 = Release|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|ARM64.ActiveCfg = Debug|ARM64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|ARM64.Build.0 = Debug|ARM64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|ARM64.Deploy.0 = Debug|ARM64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|x64.ActiveCfg = Debug|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|x64.Build.0 = Debug|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|x64.Deploy.0 = Debug|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|x86.ActiveCfg = Debug|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|x86.Build.0 = Debug|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Debug|x86.Deploy.0 = Debug|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|ARM64.ActiveCfg = Release|ARM64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|ARM64.Build.0 = Release|ARM64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|ARM64.Deploy.0 = Release|ARM64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|x64.ActiveCfg = Release|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|x64.Build.0 = Release|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|x64.Deploy.0 = Release|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|x86.ActiveCfg = Release|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|x86.Build.0 = Release|x64
{DCC6BD67-17BB-47AA-B507-FB0FE43A7449}.Release|x86.Deploy.0 = Release|x64
{A558C25D-2007-498E-8B6F-43405AFAE9E2}.Debug|ARM64.ActiveCfg = Debug|ARM64
{A558C25D-2007-498E-8B6F-43405AFAE9E2}.Debug|ARM64.Build.0 = Debug|ARM64
{A558C25D-2007-498E-8B6F-43405AFAE9E2}.Debug|x64.ActiveCfg = Debug|x64
@@ -3131,24 +2800,14 @@ Global
{14E62033-58D0-4A7D-8990-52F50A08BBBD} = {7520A2FE-00A2-49B8-83ED-DB216E874C04}
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F} = {7520A2FE-00A2-49B8-83ED-DB216E874C04}
{071E18A4-A530-46B8-AB7D-B862EE55E24E} = {3846508C-77EB-4034-A702-F8BB263C4F79}
{BDEC52D7-F53F-428C-ACC5-9D6A73A7077E} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{1CAA6480-ED3B-462E-8D42-D34497DFB0AB} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{474447BA-8DC2-4DE5-BDD4-DEFC172FD175} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{922A3BEB-8A93-40B4-89FE-96AABD632E69} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{C846F7A7-792A-47D9-B0CB-417C900EE03D} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{C831231F-891C-4572-9694-45062534B42A} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{2C2AF4F4-3DB2-416F-9F38-2B710D961E6F} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{BE349BD2-7FF8-47B6-8F74-42B52DDF730A} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{8E47BF33-A402-4582-930C-95E35418F653} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{7520A2FE-00A2-49B8-83ED-DB216E874C04} = {3846508C-77EB-4034-A702-F8BB263C4F79}
{8FBDABA4-40EE-4C0E-9BC8-2F6444A6EF90} = {7520A2FE-00A2-49B8-83ED-DB216E874C04}
{C66020D1-CB10-4CF7-8715-84C97FD5E5E2} = {7520A2FE-00A2-49B8-83ED-DB216E874C04}
{79775343-7A3D-445D-9104-3DD5B2893DF9} = {ECB8E0D1-7603-4E5C-AB10-D1E545E6F8E2}
{0ADEB797-C8C7-4FFA-ACD5-2AF6CAD7ECD8} = {3846508C-77EB-4034-A702-F8BB263C4F79}
{D8DD2E06-7956-4673-95E7-F395AB5A5485} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{8ABE2195-7514-425E-9A89-685FA42CEFC3} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{89D0E199-B17A-418C-B2F8-7375B6708357} = {A2221D7E-55E7-4BEA-90D1-4F162D670BBF}
{B79B52FB-8B2E-4CF5-B0FE-37E3E981AC7A} = {071E18A4-A530-46B8-AB7D-B862EE55E24E}
{0DB0F63A-D2F8-4DA3-A650-2D0B8724218E} = {CA716AE6-FE5C-40AC-BB8F-2C87912687AC}
{453CBB73-A3CB-4D0B-8D24-6940B86FE21D} = {ECB8E0D1-7603-4E5C-AB10-D1E545E6F8E2}
{C0CE3B5E-16D3-495D-B335-CA791B660162} = {ECB8E0D1-7603-4E5C-AB10-D1E545E6F8E2}

View File

@@ -1,24 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.CommandPalette.Extensions.Toolkit;
internal sealed partial class CopyPathCommand : InvokableCommand
{
private readonly string _fullname;
internal CopyPathCommand(string fullname)
{
_fullname = fullname;
Name = "Copy path";
Icon = new IconInfo("\ue8c8");
}
public override CommandResult Invoke()
{
ClipboardHelper.SetText(_fullname);
return CommandResult.KeepOpen();
}
}

View File

@@ -1,31 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Diagnostics;
using Microsoft.CommandPalette.Extensions.Toolkit;
internal sealed partial class OpenExplorerCommand : InvokableCommand
{
private readonly string _fullname;
internal OpenExplorerCommand(string fullname)
{
_fullname = fullname;
Name = "Open path";
Icon = new IconInfo("\uec50");
}
public override CommandResult Invoke()
{
var startInfo = new ProcessStartInfo("explorer.exe")
{
Arguments = _fullname, // Set the path to open in File Explorer
UseShellExecute = true,
};
Process.Start(startInfo);
return CommandResult.KeepOpen();
}
}

View File

@@ -1,36 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Diagnostics;
using Microsoft.CommandPalette.Extensions.Toolkit;
using Microsoft.UI.Windowing;
namespace EverythingExtension;
internal sealed partial class OpenFileCommand : InvokableCommand
{
private readonly string _fullname;
private readonly string _path;
internal OpenFileCommand(string fullname, string path)
{
_fullname = fullname;
_path = path;
Name = "Open file";
Icon = new IconInfo("\ue8e5");
}
public override CommandResult Invoke()
{
var startInfo = new ProcessStartInfo(_fullname)
{
WorkingDirectory = _path, // Set the working directory to _path
UseShellExecute = true,
};
Process.Start(startInfo);
return CommandResult.KeepOpen();
}
}

View File

@@ -1,64 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>EverythingExtension</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>false</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPalExtensions\$(RootNamespace)</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
</ItemGroup>
<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<ProjectCapability Include="Msix" />
</ItemGroup>
<ItemGroup>
<Folder Include="Data\" />
<Folder Include="Forms\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" />
</ItemGroup>
<ItemGroup>
<Content Include="$(TargetDir)\Everything64.dll" Link="Everything64.dll" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<Target Name="Everything64ToTargetDir" BeforeTargets="BeforeBuild">
<Copy SourceFiles="Everything64.dll" DestinationFolder="$(TargetDir)" />
</Target>
<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>
</Project>

View File

@@ -1,34 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace EverythingExtension;
public partial class EverythingExtensionCommandsProvider : CommandProvider
{
public EverythingExtensionCommandsProvider()
{
DisplayName = "Everything extension for cmdpal";
}
private readonly ICommandItem[] _commands = [
new CommandItem(new EverythingExtensionPage())
{
Title = "Search Everything",
Subtitle = "Search files with Everything",
},
];
public override ICommandItem[] TopLevelCommands()
{
return _commands;
}
}

View File

@@ -1,185 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Win32;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace EverythingExtension;
public sealed class NativeMethods
{
[Flags]
internal enum Request
{
FILE_NAME = 0x00000001,
PATH = 0x00000002,
FULL_PATH_AND_FILE_NAME = 0x00000004,
EXTENSION = 0x00000008,
SIZE = 0x00000010,
DATE_CREATED = 0x00000020,
DATE_MODIFIED = 0x00000040,
DATE_ACCESSED = 0x00000080,
ATTRIBUTES = 0x00000100,
FILE_LIST_FILE_NAME = 0x00000200,
RUN_COUNT = 0x00000400,
DATE_RUN = 0x00000800,
DATE_RECENTLY_CHANGED = 0x00001000,
HIGHLIGHTED_FILE_NAME = 0x00002000,
HIGHLIGHTED_PATH = 0x00004000,
HIGHLIGHTED_FULL_PATH_AND_FILE_NAME = 0x00008000,
}
public enum Sort
{
NAME_ASCENDING = 1,
NAME_DESCENDING,
PATH_ASCENDING,
PATH_DESCENDING,
SIZE_ASCENDING,
SIZE_DESCENDING,
EXTENSION_ASCENDING,
EXTENSION_DESCENDING,
TYPE_NAME_ASCENDING,
TYPE_NAME_DESCENDING,
DATE_CREATED_ASCENDING,
DATE_CREATED_DESCENDING,
DATE_MODIFIED_ASCENDING,
DATE_MODIFIED_DESCENDING,
ATTRIBUTES_ASCENDING,
ATTRIBUTES_DESCENDING,
FILE_LIST_FILENAME_ASCENDING,
FILE_LIST_FILENAME_DESCENDING,
RUN_COUNT_ASCENDING,
RUN_COUNT_DESCENDING,
DATE_RECENTLY_CHANGED_ASCENDING,
DATE_RECENTLY_CHANGED_DESCENDING,
DATE_ACCESSED_ASCENDING,
DATE_ACCESSED_DESCENDING,
DATE_RUN_ASCENDING,
DATE_RUN_DESCENDING,
}
[Flags]
internal enum AssocF
{
NONE = 0x00000000,
INIT_NOREMAPCLSID = 0x00000001,
INIT_BYEXENAME = 0x00000002,
INIT_DEFAULTTOSTAR = 0x00000004,
INIT_DEFAULTTOFOLDER = 0x00000008,
NOUSERSETTINGS = 0x00000010,
NOTRUNCATE = 0x00000020,
VERIFY = 0x00000040,
REMAPRUNDLL = 0x00000080,
NOFIXUPS = 0x00000100,
IGNOREBASECLASS = 0x00000200,
INIT_IGNOREUNKNOWN = 0x00000400,
INIT_FIXED_PROGID = 0x00000800,
IS_PROTOCOL = 0x00001000,
INIT_FOR_FILE = 0x00002000,
}
internal enum AssocStr
{
COMMAND = 1,
EXECUTABLE,
FRIENDLYDOCNAME,
FRIENDLYAPPNAME,
NOOPEN,
SHELLNEWVALUE,
DDECOMMAND,
DDEIFEXEC,
DDEAPPLICATION,
DDETOPIC,
INFOTIP,
QUICKTIP,
TILEINFO,
CONTENTTYPE,
DEFAULTICON,
SHELLEXTENSION,
DROPTARGET,
DELEGATEEXECUTE,
SUPPORTED_URI_PROTOCOLS,
PROGID,
APPID,
APPPUBLISHER,
APPICONREFERENCE,
MAX,
}
internal enum EverythingErrors : uint
{
EVERYTHING_OK = 0u,
EVERYTHING_ERROR_MEMORY,
EVERYTHING_ERROR_IPC,
EVERYTHING_ERROR_REGISTERCLASSEX,
EVERYTHING_ERROR_CREATEWINDOW,
EVERYTHING_ERROR_CREATETHREAD,
EVERYTHING_ERROR_INVALIDINDEX,
EVERYTHING_ERROR_INVALIDCALL,
}
internal const string dllName = "Everything64.dll";
[DllImport(dllName)]
internal static extern uint Everything_GetNumResults();
[DllImport(dllName)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool Everything_GetMatchPath();
[DllImport(dllName)]
internal static extern uint Everything_GetMax();
[DllImport(dllName)]
internal static extern bool Everything_GetRegex();
[DllImport(dllName, CharSet = CharSet.Unicode)]
internal static extern IntPtr Everything_GetResultFileNameW(uint nIndex);
[DllImport(dllName, CharSet = CharSet.Unicode)]
internal static extern IntPtr Everything_GetResultPathW(uint nIndex);
[DllImport(dllName)]
internal static extern uint Everything_GetSort();
[DllImport(dllName, CharSet = CharSet.Unicode)]
internal static extern uint Everything_IncRunCountFromFileName(string lpFileName);
[DllImport(dllName)]
internal static extern bool Everything_IsFolderResult(uint index);
[DllImport(dllName)]
internal static extern bool Everything_QueryW([MarshalAs(UnmanagedType.Bool)] bool bWait);
[DllImport(dllName)]
internal static extern void Everything_SetMax(uint dwMax);
[DllImport(dllName)]
internal static extern void Everything_SetRegex([MarshalAs(UnmanagedType.Bool)] bool bEnable);
[DllImport(dllName)]
internal static extern void Everything_SetRequestFlags(Request RequestFlags);
[DllImport(dllName, CharSet = CharSet.Unicode)]
internal static extern void Everything_SetSearchW(string lpSearchString);
[DllImport(dllName)]
internal static extern bool Everything_SetMatchPath([MarshalAs(UnmanagedType.Bool)] bool bEnable);
[DllImport(dllName)]
internal static extern void Everything_SetSort(Sort SortType);
[DllImport(dllName)]
internal static extern uint Everything_GetLastError();
}

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 rescap">
<Identity
Name="EverythingExtension"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="0.0.1.0" />
<Properties>
<DisplayName>Everything extension for cmdpal</DisplayName>
<PublisherDisplayName>A Lone Developer</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="Everything extension for cmdpal"
Description="Everything extension for cmdpal"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="EverythingExtension.exe" Arguments="-RegisterProcessAsComServer" DisplayName="ClementineExtensionApp">
<com:Class Id="c4d344ce-480a-4ef5-9875-96e7bf2b6992" DisplayName="Everything extension for cmdpal" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.commandpalette"
Id="PG-SP-ID"
PublicFolder="Public"
DisplayName="Everything extension for cmdpal"
Description="Everything extension for cmdpal">
<uap3:Properties>
<CmdPalProvider>
<Activation>
<CreateInstance ClassId="c4d344ce-480a-4ef5-9875-96e7bf2b6992" />
</Activation>
<SupportedInterfaces>
<Commands/>
</SupportedInterfaces>
</CmdPalProvider>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -1,99 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
using static EverythingExtension.NativeMethods;
namespace EverythingExtension;
internal sealed partial class EverythingExtensionPage : DynamicListPage
{
public EverythingExtensionPage()
{
Icon = new IconInfo(File.Exists("C:\\Program Files\\Everything\\Everything.exe") ?
"C:\\Program Files\\Everything\\Everything.exe" :
"C:\\Program Files (x86)\\Everything\\Everything.exe");
Name = "Everything";
Everything_SetRequestFlags(Request.FILE_NAME | Request.PATH);
Everything_SetSort(Sort.NAME_ASCENDING);
Everything_SetMax(20);
}
public override void UpdateSearchText(string oldSearch, string newSearch)
{
Everything_SetSearchW(SearchText);
RaiseItemsChanged(0);
}
public override IListItem[] GetItems()
{
if (!Everything_QueryW(true))
{
// Throwing an exception would make sense, however,
// WinRT & COM totally eat any exception info.
// var e = new Win32Exception("Unable to Query");
var lastError = Everything_GetLastError();
var message = lastError switch
{
(uint)EverythingErrors.EVERYTHING_OK => "The operation completed successfully",
(uint)EverythingErrors.EVERYTHING_ERROR_MEMORY => "Failed to allocate memory for the search query",
(uint)EverythingErrors.EVERYTHING_ERROR_IPC => "IPC is not available",
(uint)EverythingErrors.EVERYTHING_ERROR_REGISTERCLASSEX => "Failed to register the search query window class",
(uint)EverythingErrors.EVERYTHING_ERROR_CREATEWINDOW => "Failed to create the search query window",
(uint)EverythingErrors.EVERYTHING_ERROR_CREATETHREAD => "Failed to create the search query thread",
(uint)EverythingErrors.EVERYTHING_ERROR_INVALIDINDEX => "Invalid index.The index must be greater or equal to 0 and less than the number of visible results",
(uint)EverythingErrors.EVERYTHING_ERROR_INVALIDCALL => "Invalid call",
_ => "Unexpected error",
};
List<ListItem> items =
[
new ListItem(new NoOpCommand() { Name = "Failed to query. Error was:" }),
new ListItem(new NoOpCommand()) { Title = message, Subtitle = $"0x{lastError:X8}" },
];
if (lastError == (uint)EverythingErrors.EVERYTHING_ERROR_IPC)
{
items.Add(new ListItem(new NoOpCommand() { Name = "(Are you sure Everything is running?)" }));
}
return items.ToArray();
}
var resultCount = Everything_GetNumResults();
// Create a List to store ListItems
var itemList = new List<ListItem>();
// Loop through the results and add them to the List
for (uint i = 0; i < resultCount; i++)
{
// Get the result file name
var fileName = Marshal.PtrToStringUni(Everything_GetResultFileNameW(i));
// Get the result file path
var filePath = Marshal.PtrToStringUni(Everything_GetResultPathW(i));
// Concatenate the file path and file name
var fullName = Path.Combine(filePath, fileName);
// System.Drawing.Icon ic = System.Drawing.Icon.ExtractAssociatedIcon(fullTitle);
itemList.Add(new ListItem(new OpenFileCommand(fullName, filePath))
{
Title = fileName,
Subtitle = filePath,
MoreCommands = [
new CommandContextItem(new OpenExplorerCommand(fullName)),
new CommandContextItem(new CopyPathCommand(fullName)),
],
});
}
// Convert the List to an array and assign it to the Items property
return itemList.ToArray();
}
}

View File

@@ -1,36 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace EverythingExtension;
public class Program
{
[MTAThread]
public static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
{
using ExtensionServer server = new();
var extensionDisposedEvent = new ManualResetEvent(false);
var extensionInstance = new SampleExtension(extensionDisposedEvent);
// We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called.
// This makes sure that only one instance of SampleExtension is alive, which is returned every time the host asks for the IExtension object.
// If you want to instantiate a new instance each time the host asks, create the new instance inside the delegate.
server.RegisterExtension(() => extensionInstance);
// This will make the main thread wait until the event is signalled by the extension class.
// Since we have single instance of the extension object, we exit as soon as it is disposed.
extensionDisposedEvent.WaitOne();
}
else
{
Console.WriteLine("Not being launched as a Extension... exiting.");
}
}
}

View File

@@ -1,11 +0,0 @@
{
"profiles": {
"EverythingExtension (Package)": {
"commandName": "MsixPackage",
"commandLineArgs": "-RegisterProcessAsComServer"
},
"EverythingExtension (Unpackaged)": {
"commandName": "Project"
}
}
}

View File

@@ -1,41 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace EverythingExtension;
[ComVisible(true)]
[Guid("c4d344ce-480a-4ef5-9875-96e7bf2b6992")]
[ComDefaultInterface(typeof(IExtension))]
public sealed partial class SampleExtension : IExtension, IDisposable
{
private readonly ManualResetEvent _extensionDisposedEvent;
private readonly EverythingExtensionCommandsProvider _provider = new();
public SampleExtension(ManualResetEvent extensionDisposedEvent)
{
this._extensionDisposedEvent = extensionDisposedEvent;
}
public object GetProvider(ProviderType providerType)
{
switch (providerType)
{
case ProviderType.Commands:
return _provider;
default:
return null;
}
}
public void Dispose()
{
this._extensionDisposedEvent.Set();
}
}

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="HackerNewsExtension.app"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- The ID below informs the system that this application is compatible with OS features first introduced in Windows 10.
It is necessary to support features in unpackaged applications, for example the custom titlebar implementation.
For more info see https://docs.microsoft.com/windows/apps/windows-app-sdk/use-windows-app-sdk-run-time#declare-os-compatibility-in-your-application-manifest -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,27 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Diagnostics;
using HackerNewsExtension.Data;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace HackerNewsExtension.Commands;
internal sealed partial class CommentCommand : InvokableCommand
{
private readonly NewsPost _post;
internal CommentCommand(NewsPost post)
{
_post = post;
Name = "Open comments";
Icon = new IconInfo("\ue8f2"); // chat bubbles
}
public override CommandResult Invoke()
{
Process.Start(new ProcessStartInfo(_post.CommentsLink) { UseShellExecute = true });
return CommandResult.KeepOpen();
}
}

View File

@@ -1,27 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Diagnostics;
using HackerNewsExtension.Data;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace HackerNewsExtension.Commands;
internal sealed partial class LinkCommand : InvokableCommand
{
private readonly NewsPost _post;
internal LinkCommand(NewsPost post)
{
_post = post;
Name = "Open link";
Icon = new IconInfo("\uE8A7");
}
public override CommandResult Invoke()
{
Process.Start(new ProcessStartInfo(_post.Link) { UseShellExecute = true });
return CommandResult.KeepOpen();
}
}

View File

@@ -1,16 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
namespace HackerNewsExtension.Data;
public sealed class NewsPost
{
public string Title { get; init; } = string.Empty;
public string Link { get; init; } = string.Empty;
public string CommentsLink { get; init; } = string.Empty;
public string Poster { get; init; } = string.Empty;
}

View File

@@ -1,26 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace HackerNewsExtension;
public partial class HackerNewsCommandsProvider : CommandProvider
{
public HackerNewsCommandsProvider()
{
DisplayName = "Hacker News Commands";
}
private readonly ICommandItem[] _commands = [
new CommandItem(new HackerNewsPage()),
];
public override ICommandItem[] TopLevelCommands()
{
return _commands;
}
}

View File

@@ -1,59 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
<Import Project="..\..\..\..\Common.Dotnet.AotCompatibility.props" />
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>HackerNewsExtension</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>false</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPalExtensions\$(RootNamespace)</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
</ItemGroup>
<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<ProjectCapability Include="Msix" />
</ItemGroup>
<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<PublishSingleFile>true</PublishSingleFile>
<PublishAot>true</PublishAot>
</PropertyGroup>
</Project>

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 rescap">
<Identity
Name="HackerNewsExtension"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="1.0.0.0" />
<Properties>
<DisplayName>HackerNews Sample Extension</DisplayName>
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="HackerNews Sample Extension"
Description="HackerNews Sample Extension"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="HackerNewsExtension.exe" Arguments="-RegisterProcessAsComServer" DisplayName="ClementineExtensionApp">
<com:Class Id="283DDB0F-1AD9-406F-B359-699BFBD2DA68" DisplayName="HackerNewsExtension" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.commandpalette"
Id="PG-SP-ID"
PublicFolder="Public"
DisplayName="Hacker News Sample"
Description="Hacker News Extension for Run">
<uap3:Properties>
<CmdPalProvider>
<Activation>
<CreateInstance ClassId="283DDB0F-1AD9-406F-B359-699BFBD2DA68" />
</Activation>
<SupportedInterfaces>
<Commands/>
</SupportedInterfaces>
</CmdPalProvider>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -1,91 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using System.Xml.Linq;
using HackerNewsExtension.Commands;
using HackerNewsExtension.Data;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace HackerNewsExtension;
internal sealed partial class HackerNewsPage : ListPage
{
public HackerNewsPage()
{
Icon = new IconInfo("https://news.ycombinator.com/favicon.ico");
Name = "Hacker News";
AccentColor = ColorHelpers.FromRgb(255, 102, 0);
IsLoading = true;
ShowDetails = true;
}
private static async Task<List<NewsPost>> GetHackerNewsTopPosts()
{
var posts = new List<NewsPost>();
using (var client = new HttpClient())
{
var response = await client.GetStringAsync("https://news.ycombinator.com/rss");
var xdoc = XDocument.Parse(response);
var x = xdoc.Descendants("item").First();
posts = xdoc.Descendants("item")
.Take(20)
.Select(item => new NewsPost()
{
Title = item.Element("title")?.Value ?? string.Empty,
Link = item.Element("link")?.Value ?? string.Empty,
CommentsLink = item.Element("comments")?.Value ?? string.Empty,
}).ToList();
}
return posts;
}
public override IListItem[] GetItems()
{
try
{
IsLoading = true;
var t = DoGetItems();
t.ConfigureAwait(false);
return t.Result;
}
catch (Exception ex)
{
return [
new ListItem(new NoOpCommand()) { Title = "Exception getting posts from HN" },
new ListItem(new NoOpCommand())
{
Title = $"{ex.HResult}",
Subtitle = ex.HResult == -2147023174 ? "This is probably zadjii-msft/PowerToys#181" : string.Empty,
},
new ListItem(new NoOpCommand())
{
Title = "Stack trace",
Details = new Details() { Body = $"```{ex.Source}\n{ex.StackTrace}```" },
},
];
}
}
private async Task<IListItem[]> DoGetItems()
{
var items = await GetHackerNewsTopPosts();
IsLoading = false;
var s = items.Select((post) => new ListItem(new LinkCommand(post))
{
Title = post.Title,
Subtitle = post.Link,
MoreCommands = [new CommandContextItem(new CommentCommand(post))],
}).ToArray();
return s;
}
}

View File

@@ -1,36 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace HackerNewsExtension;
public class Program
{
[MTAThread]
public static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
{
using ExtensionServer server = new();
var extensionDisposedEvent = new ManualResetEvent(false);
var extensionInstance = new SampleExtension(extensionDisposedEvent);
// We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called.
// This makes sure that only one instance of SampleExtension is alive, which is returned every time the host asks for the IExtension object.
// If you want to instantiate a new instance each time the host asks, create the new instance inside the delegate.
server.RegisterExtension(() => extensionInstance);
// This will make the main thread wait until the event is signalled by the extension class.
// Since we have single instance of the extension object, we exit as soon as it is disposed.
extensionDisposedEvent.WaitOne();
}
else
{
Console.WriteLine("Not being launched as a Extension... exiting.");
}
}
}

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Platform>ARM64</Platform>
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
<SelfContained>true</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
</PropertyGroup>
</Project>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Platform>x64</Platform>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
<SelfContained>true</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
</PropertyGroup>
</Project>

View File

@@ -1,11 +0,0 @@
{
"profiles": {
"HackerNewsExtension (Package)": {
"commandName": "MsixPackage",
"doNotLaunchApp": true
},
"HackerNewsExtension (Unpackaged)": {
"commandName": "Project"
}
}
}

View File

@@ -1,41 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace HackerNewsExtension;
[ComVisible(true)]
[Guid("283DDB0F-1AD9-406F-B359-699BFBD2DA68")]
[ComDefaultInterface(typeof(IExtension))]
public sealed partial class SampleExtension : IExtension, IDisposable
{
private readonly ManualResetEvent _extensionDisposedEvent;
private readonly HackerNewsCommandsProvider _provider = new();
public SampleExtension(ManualResetEvent extensionDisposedEvent)
{
this._extensionDisposedEvent = extensionDisposedEvent;
}
public object GetProvider(ProviderType providerType)
{
switch (providerType)
{
case ProviderType.Commands:
return _provider;
default:
return null;
}
}
public void Dispose()
{
this._extensionDisposedEvent.Set();
}
}

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="HackerNewsExtension.app"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- The ID below informs the system that this application is compatible with OS features first introduced in Windows 10.
It is necessary to support features in unpackaged applications, for example the custom titlebar implementation.
For more info see https://docs.microsoft.com/windows/apps/windows-app-sdk/use-windows-app-sdk-run-time#declare-os-compatibility-in-your-application-manifest -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>

View File

@@ -1,55 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>MastodonExtension</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>false</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPalExtensions\$(RootNamespace)</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
</ItemGroup>
<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<ProjectCapability Include="Msix" />
</ItemGroup>
<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>
</Project>

View File

@@ -1,439 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using HtmlAgilityPack;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace MastodonExtension;
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
internal sealed partial class MastodonExtensionPage : ListPage
{
internal static readonly HttpClient Client = new();
internal static readonly JsonSerializerOptions Options = new() { PropertyNameCaseInsensitive = true };
private readonly List<ListItem> _items = [];
public MastodonExtensionPage()
{
Icon = new IconInfo("https://mastodon.social/packs/media/icons/android-chrome-36x36-4c61fdb42936428af85afdbf8c6a45a8.png");
Name = "Mastodon";
ShowDetails = true;
HasMoreItems = true;
IsLoading = true;
// #6364ff
AccentColor = ColorHelpers.FromRgb(99, 100, 255);
}
private void AddPosts(List<MastodonStatus> posts)
{
foreach (var p in posts)
{
var postItem = new ListItem(new MastodonPostPage(p))
{
Title = p.Account.DisplayName, // p.ContentAsPlainText(),
Subtitle = $"@{p.Account.Username}",
Icon = new IconInfo(p.Account.Avatar),
// *
Tags = [
new Tag()
{
Icon = new IconInfo("\ue734"), // FavoriteStar
Background = ColorHelpers.FromRgb(255, 255, 0), // Yellow
Foreground = ColorHelpers.FromRgb(64, 64, 0), // Dark Yellow
Text = p.Favorites.ToString(CultureInfo.CurrentCulture),
},
new Tag()
{
Icon = new IconInfo("\ue8ee"), // RepeatAll
Background = ColorHelpers.FromRgb(86, 58, 204), // Mastodon color
Foreground = ColorHelpers.FromRgb(255, 255, 255), // White
Text = p.Boosts.ToString(CultureInfo.CurrentCulture),
},
], // */
Details = new Details()
{
// It was a cool idea to have a single image as the HeroImage, but the scaling is terrible
// HeroImage = new(p.MediaAttachments.Count == 1 ? p.MediaAttachments[0].Url : string.Empty),
Body = p.ContentAsMarkdown(true, true),
},
MoreCommands = [
new CommandContextItem(new OpenUrlCommand(p.Url) { Name = "Open on web" }),
],
};
this._items.Add(postItem);
}
}
public override IListItem[] GetItems()
{
if (_items.Count == 0)
{
var postsAsync = FetchExplorePage();
postsAsync.ConfigureAwait(false);
var posts = postsAsync.Result;
this.AddPosts(posts);
}
return _items
.ToArray();
}
public override void LoadMore()
{
this.IsLoading = true;
ExtensionHost.LogMessage(new LogMessage() { Message = $"Loading 20 posts, starting with {_items.Count}..." });
var postsAsync = FetchExplorePage(20, this._items.Count);
postsAsync.ContinueWith((res) =>
{
var posts = postsAsync.Result;
this.AddPosts(posts);
ExtensionHost.LogMessage(new LogMessage() { Message = $"... got {posts.Count} new posts" });
this.IsLoading = false;
this.RaiseItemsChanged(this._items.Count);
}).ConfigureAwait(false);
}
public async Task<List<MastodonStatus>> FetchExplorePage() => await FetchExplorePage(20, 0);
public async Task<List<MastodonStatus>> FetchExplorePage(int limit, int offset)
{
var statuses = new List<MastodonStatus>();
try
{
// Make a GET request to the Mastodon trends API endpoint
var response = await Client
.GetAsync($"https://mastodon.social/api/v1/trends/statuses?limit={limit}&offset={offset}");
response.EnsureSuccessStatusCode();
// Read and deserialize the response JSON into a list of MastodonStatus objects
var responseBody = await response.Content.ReadAsStringAsync();
statuses = JsonSerializer.Deserialize<List<MastodonStatus>>(responseBody, Options);
}
catch (Exception e)
{
Console.WriteLine($"An error occurred: {e.Message}");
}
IsLoading = false;
return statuses;
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public partial class MastodonExtensionCommandsProvider : CommandProvider
{
public MastodonExtensionCommandsProvider()
{
DisplayName = "Mastodon extension for cmdpal Commands";
}
private readonly ICommandItem[] _commands = [
new CommandItem(new MastodonExtensionPage()) { Subtitle = "Explore top posts on mastodon.social" },
];
public override ICommandItem[] TopLevelCommands() => _commands;
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public partial class MastodonPostForm : FormContent
{
private readonly MastodonStatus post;
public MastodonPostForm(MastodonStatus post)
{
this.post = post;
DataJson = $$"""
{
"author_display_name": {{JsonSerializer.Serialize(post.Account.DisplayName)}},
"author_username": {{JsonSerializer.Serialize(post.Account.Username)}},
"post_content": {{JsonSerializer.Serialize(post.ContentAsMarkdown(false, false))}},
"author_avatar_url": "{{post.Account.Avatar}}",
"timestamp": "2017-02-14T06:08:39Z",
"post_url": "{{post.Url}}"
}
""";
var img_block = string.Empty;
if (post.MediaAttachments.Count > 0)
{
img_block = string.Join(',', post.MediaAttachments
.Select(media => $$""",{"type": "Image","url":"{{media.Url}}","size": "stretch"}""").ToArray());
}
TemplateJson = $$"""
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.5",
"body": [
{
"type": "Container",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"url": "${author_avatar_url}",
"size": "Medium",
"style": "Person"
}
]
},
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "TextBlock",
"weight": "Bolder",
"wrap": true,
"spacing": "small",
"text": "${author_display_name}"
},
{
"type": "TextBlock",
"weight": "Lighter",
"wrap": true,
"text": "@${author_username}",
"spacing": "Small",
"isSubtle": true,
"size": "Small"
}
]
}
]
},
{
"type": "TextBlock",
"text": "${post_content}",
"wrap": true
}{{img_block}}
]
}
],
"actions": [
{
"type": "Action.OpenUrl",
"title": "View on Mastodon",
"url": "${post_url}"
}
]
}
""";
}
public override ICommandResult SubmitForm(string inputs) => CommandResult.Dismiss();
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public partial class MastodonPostPage : ContentPage
{
private readonly MastodonStatus post;
public MastodonPostPage(MastodonStatus post)
{
Name = "View post";
this.post = post;
}
public override IContent[] GetContent()
{
var postsAsync = GetRepliesAsync();
postsAsync.ConfigureAwait(false);
var posts = postsAsync.Result;
return posts.Select(p => new MastodonPostForm(p)).ToArray();
}
private async Task<List<MastodonStatus>> GetRepliesAsync()
{
// Start with our post...
var replies = new List<MastodonStatus>([this.post]);
try
{
// Make a GET request to the Mastodon context API endpoint
var url = $"https://mastodon.social/api/v1/statuses/{post.Id}/context";
var response = await MastodonExtensionPage.Client.GetAsync(url);
response.EnsureSuccessStatusCode();
// Read and deserialize the response JSON into a MastodonContext object
var responseBody = await response.Content.ReadAsStringAsync();
var context = JsonSerializer.Deserialize<MastodonContext>(responseBody, MastodonExtensionPage.Options);
// Extract the list of replies (descendants)
if (context?.Descendants != null)
{
// Add others if we need them
replies.AddRange(context.Descendants);
}
}
catch (Exception e)
{
Console.WriteLine($"An error occurred: {e.Message}");
}
return replies;
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public class MastodonStatus
{
[JsonPropertyName("id")]
public string Id { get; set; }
[JsonPropertyName("content")]
public string Content { get; set; }
[JsonPropertyName("url")]
public string Url { get; set; }
[JsonPropertyName("uri")]
public string Uri { get; set; }
[JsonPropertyName("created_at")]
public DateTime CreatedAt { get; set; }
[JsonPropertyName("account")]
public MastodonAccount Account { get; set; }
[JsonPropertyName("favorites_count")]
public int Favorites { get; set; }
[JsonPropertyName("reblogs_count")]
public int Boosts { get; set; }
[JsonPropertyName("replies_count")]
public int Replies { get; set; }
[JsonPropertyName("media_attachments")]
public List<MediaAttachment> MediaAttachments { get; set; }
public string ContentAsPlainText()
{
var doc = new HtmlDocument();
doc.LoadHtml(Content);
var plainTextBuilder = new StringBuilder();
foreach (var node in doc.DocumentNode.ChildNodes)
{
plainTextBuilder.Append(ParseNodeToPlaintext(node));
}
return plainTextBuilder.ToString();
}
public string ContentAsMarkdown(bool escapeHashtags, bool addMedia)
{
var doc = new HtmlDocument();
doc.LoadHtml(Content.Replace("<br>", "\n\n").Replace("<br />", "\n\n"));
var markdownBuilder = new StringBuilder();
foreach (var node in doc.DocumentNode.ChildNodes)
{
markdownBuilder.Append(ParseNodeToMarkdown(node, escapeHashtags));
}
// change this to >1 if you want to try the HeroImage thing
if (addMedia && MediaAttachments.Count > 0)
{
foreach (var mediaAttachment in MediaAttachments)
{
// A newline in a img tag blows up the image parser :upside_down:
var desc = mediaAttachment.Description ?? string.Empty;
var img = $"\n![{desc.Replace("\n", " ")}]({mediaAttachment.Url})";
markdownBuilder.Append(img);
}
}
return markdownBuilder.ToString();
}
private static string ParseNodeToMarkdown(HtmlNode node, bool escapeHashtags)
{
var innerText = escapeHashtags ? node.InnerText.Replace("#", "\\#") : node.InnerText;
switch (node.Name)
{
case "strong":
case "b":
return $"**{node.InnerText}**";
case "em":
case "i":
return $"*{node.InnerText}*";
case "a":
return $"[{node.InnerText}]({node.GetAttributeValue("href", "#")})";
case "p":
return $"{innerText}\n\n";
case "li":
return $"{innerText}\n";
case "#text":
return innerText;
default:
return innerText; // For unhandled nodes, just return the text.
}
}
private static string ParseNodeToPlaintext(HtmlNode node) => node.InnerText;
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public class MastodonAccount
{
[JsonPropertyName("username")]
public string Username { get; set; }
[JsonPropertyName("display_name")]
public string DisplayName { get; set; }
[JsonPropertyName("avatar")]
public string Avatar { get; set; }
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public class MediaAttachment
{
[JsonPropertyName("id")]
public string Id { get; set; }
[JsonPropertyName("type")]
public string Type { get; set; } // e.g., "image", "video", "gifv", etc.
[JsonPropertyName("url")]
public string Url { get; set; }
[JsonPropertyName("preview_url")]
public string PreviewUrl { get; set; }
[JsonPropertyName("description")]
public string Description { get; set; } = string.Empty;
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
public class MastodonContext
{
[JsonPropertyName("ancestors")]
public List<MastodonStatus> Ancestors { get; set; }
[JsonPropertyName("descendants")]
public List<MastodonStatus> Descendants { get; set; }
}

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 rescap">
<Identity
Name="MastodonExtension"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="0.0.1.0" />
<Properties>
<DisplayName>Mastodon extension for cmdpal</DisplayName>
<PublisherDisplayName>A Lone Developer</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="Mastodon extension for cmdpal"
Description="Mastodon extension for cmdpal"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="MastodonExtension.exe" Arguments="-RegisterProcessAsComServer" DisplayName="ClementineExtensionApp">
<com:Class Id="f0e93f1a-2b64-4896-abcc-8d2145480ede" DisplayName="Mastodon extension for cmdpal" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.commandpalette"
Id="PG-SP-ID"
PublicFolder="Public"
DisplayName="Mastodon extension for cmdpal"
Description="Mastodon extension for cmdpal">
<uap3:Properties>
<CmdPalProvider>
<Activation>
<CreateInstance ClassId="f0e93f1a-2b64-4896-abcc-8d2145480ede" />
</Activation>
<SupportedInterfaces>
<Commands/>
</SupportedInterfaces>
</CmdPalProvider>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -1,36 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace MastodonExtension;
public class Program
{
[MTAThread]
public static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
{
using ExtensionServer server = new();
var extensionDisposedEvent = new ManualResetEvent(false);
var extensionInstance = new SampleExtension(extensionDisposedEvent);
// We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called.
// This makes sure that only one instance of SampleExtension is alive, which is returned every time the host asks for the IExtension object.
// If you want to instantiate a new instance each time the host asks, create the new instance inside the delegate.
server.RegisterExtension(() => extensionInstance);
// This will make the main thread wait until the event is signalled by the extension class.
// Since we have single instance of the extension object, we exit as soon as it is disposed.
extensionDisposedEvent.WaitOne();
}
else
{
Console.WriteLine("Not being launched as a Extension... exiting.");
}
}
}

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Platform>ARM64</Platform>
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
<SelfContained>true</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
<PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
<PublishTrimmed Condition="'$(Configuration)' == 'Debug'">False</PublishTrimmed>
<PublishTrimmed Condition="'$(Configuration)' != 'Debug'">False</PublishTrimmed>
</PropertyGroup>
</Project>

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Platform>x64</Platform>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
<SelfContained>true</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
<PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
<PublishTrimmed Condition="'$(Configuration)' == 'Debug'">False</PublishTrimmed>
<PublishTrimmed Condition="'$(Configuration)' != 'Debug'">False</PublishTrimmed>
</PropertyGroup>
</Project>

View File

@@ -1,11 +0,0 @@
{
"profiles": {
"MastodonExtension (Package)": {
"commandName": "MsixPackage",
"doNotLaunchApp": true
},
"MastodonExtension (Unpackaged)": {
"commandName": "Project"
}
}
}

View File

@@ -1,41 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace MastodonExtension;
[ComVisible(true)]
[Guid("f0e93f1a-2b64-4896-abcc-8d2145480ede")]
[ComDefaultInterface(typeof(IExtension))]
public sealed partial class SampleExtension : IExtension, IDisposable
{
private readonly ManualResetEvent _extensionDisposedEvent;
private readonly MastodonExtensionCommandsProvider _provider = new();
public SampleExtension(ManualResetEvent extensionDisposedEvent)
{
this._extensionDisposedEvent = extensionDisposedEvent;
}
public object GetProvider(ProviderType providerType)
{
switch (providerType)
{
case ProviderType.Commands:
return _provider;
default:
return null;
}
}
public void Dispose()
{
this._extensionDisposedEvent.Set();
}
}

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="HackerNewsExtension.app"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- The ID below informs the system that this application is compatible with OS features first introduced in Windows 10.
It is necessary to support features in unpackaged applications, for example the custom titlebar implementation.
For more info see https://docs.microsoft.com/windows/apps/windows-app-sdk/use-windows-app-sdk-run-time#declare-os-compatibility-in-your-application-manifest -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,50 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>MediaControlsExtension</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>false</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPalExtensions\$(RootNamespace)</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
</ItemGroup>
<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<ProjectCapability Include="Msix" />
</ItemGroup>
<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>
</Project>

View File

@@ -1,89 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading.Tasks;
using Microsoft.CommandPalette.Extensions.Toolkit;
using Windows.Media.Control;
namespace MediaControlsExtension;
internal sealed partial class MediaListItem : CommandItem
{
private GlobalSystemMediaTransportControlsSession _mediaSession;
public MediaListItem()
: base(new TogglePlayMediaCommand())
{
var task = GlobalSystemMediaTransportControlsSessionManager.RequestAsync().AsTask();
task.ContinueWith(async t =>
{
var manager = t.Result;
_mediaSession = manager.GetCurrentSession();
((TogglePlayMediaCommand)this.Command).MediaSession = _mediaSession;
_mediaSession.MediaPropertiesChanged += MediaSession_MediaPropertiesChanged;
_mediaSession.PlaybackInfoChanged += MediaSession_PlaybackInfoChanged;
// mediaSession.TimelinePropertiesChanged += MediaSession_TimelinePropertiesChanged;
await this.UpdateProperties();
});
// task.Start();
MoreCommands = null;
}
private async Task UpdateProperties()
{
var properties = await this._mediaSession.TryGetMediaPropertiesAsync().AsTask();
if (properties == null)
{
var a = (TogglePlayMediaCommand)this.Command;
a.Icon = new IconInfo(string.Empty);
a.Name = "No media playing";
return;
}
this.Title = properties.Title;
// hack
((TogglePlayMediaCommand)this.Command).Name = this.Title;
this.Subtitle = properties.Artist;
var status = _mediaSession.GetPlaybackInfo().PlaybackStatus;
var internalAction = (TogglePlayMediaCommand)this.Command;
if (status == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Paused)
{
internalAction.Icon = new IconInfo("\ue768"); // play
internalAction.Name = "Paused";
}
else if (status == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing)
{
internalAction.Icon = new IconInfo("\ue769"); // pause
internalAction.Name = "Playing";
}
MoreCommands = [
new CommandContextItem(new PrevNextTrackCommand(true, _mediaSession)),
new CommandContextItem(new PrevNextTrackCommand(false, _mediaSession))
];
}
private void MediaSession_TimelinePropertiesChanged(GlobalSystemMediaTransportControlsSession sender, TimelinePropertiesChangedEventArgs args)
{
_ = UpdateProperties();
}
private void MediaSession_PlaybackInfoChanged(GlobalSystemMediaTransportControlsSession sender, PlaybackInfoChangedEventArgs args)
{
_ = UpdateProperties();
}
private void MediaSession_MediaPropertiesChanged(GlobalSystemMediaTransportControlsSession sender, MediaPropertiesChangedEventArgs args)
{
_ = UpdateProperties();
}
}

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 rescap">
<Identity
Name="MediaControlsExtension"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="1.0.0.0" />
<Properties>
<DisplayName>Media Controls Sample Extension</DisplayName>
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="Media Controls Sample Extension"
Description="Media Controls Sample Extension"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="MediaControlsExtension.exe" Arguments="-RegisterProcessAsComServer" DisplayName="MediaControlsExtensionApp">
<com:Class Id="bb60a98a-0197-4378-9b40-b684f4068d1d" DisplayName="MediaControlsExtension" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.commandpalette"
Id="PG-SP-ID"
PublicFolder="Public"
DisplayName="Media Controls Sample Extension"
Description="Media Controls for Run">
<uap3:Properties>
<CmdPalProvider>
<Activation>
<CreateInstance ClassId="bb60a98a-0197-4378-9b40-b684f4068d1d" />
</Activation>
<SupportedInterfaces>
<Commands/>
</SupportedInterfaces>
</CmdPalProvider>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -1,36 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace MediaControlsExtension;
public class Program
{
[MTAThread]
public static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
{
using ExtensionServer server = new();
var extensionDisposedEvent = new ManualResetEvent(false);
var extensionInstance = new SampleExtension(extensionDisposedEvent);
// We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called.
// This makes sure that only one instance of SampleExtension is alive, which is returned every time the host asks for the IExtension object.
// If you want to instantiate a new instance each time the host asks, create the new instance inside the delegate.
server.RegisterExtension(() => extensionInstance);
// This will make the main thread wait until the event is signalled by the extension class.
// Since we have single instance of the extension object, we exit as soon as it is disposed.
extensionDisposedEvent.WaitOne();
}
else
{
Console.WriteLine("Not being launched as a Extension... exiting.");
}
}
}

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Platform>ARM64</Platform>
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
<SelfContained>true</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
<PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
<PublishTrimmed Condition="'$(Configuration)' == 'Debug'">False</PublishTrimmed>
<PublishTrimmed Condition="'$(Configuration)' != 'Debug'">False</PublishTrimmed>
</PropertyGroup>
</Project>

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishProtocol>FileSystem</PublishProtocol>
<Platform>x64</Platform>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
<SelfContained>true</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
<PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
<PublishTrimmed Condition="'$(Configuration)' == 'Debug'">False</PublishTrimmed>
<PublishTrimmed Condition="'$(Configuration)' != 'Debug'">False</PublishTrimmed>
</PropertyGroup>
</Project>

View File

@@ -1,10 +0,0 @@
{
"profiles": {
"MediaControlsExtension (Package)": {
"commandName": "MsixPackage"
},
"MediaControlsExtension (Unpackaged)": {
"commandName": "Project"
}
}
}

View File

@@ -1,41 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace MediaControlsExtension;
[ComVisible(true)]
[Guid("bb60a98a-0197-4378-9b40-b684f4068d1d")]
[ComDefaultInterface(typeof(IExtension))]
public sealed partial class SampleExtension : IExtension, IDisposable
{
private readonly ManualResetEvent _extensionDisposedEvent;
private readonly MediaCommandsProvider _provider = new();
public SampleExtension(ManualResetEvent extensionDisposedEvent)
{
this._extensionDisposedEvent = extensionDisposedEvent;
}
public object GetProvider(ProviderType providerType)
{
switch (providerType)
{
case ProviderType.Commands:
return _provider;
default:
return null;
}
}
public void Dispose()
{
this._extensionDisposedEvent.Set();
}
}

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MediaControlsExtension.app"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- The ID below informs the system that this application is compatible with OS features first introduced in Windows 10.
It is necessary to support features in unpackaged applications, for example the custom titlebar implementation.
For more info see https://docs.microsoft.com/windows/apps/windows-app-sdk/use-windows-app-sdk-run-time#declare-os-compatibility-in-your-application-manifest -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>

View File

@@ -1,231 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.InteropServices;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.UI.WindowsAndMessaging;
namespace Menus;
public partial class MenusCommandsProvider : CommandProvider
{
public MenusCommandsProvider()
{
DisplayName = $"Menus from the open windows";
}
private readonly ICommandItem[] _commands = [
new CommandItem(new AllWindowsPage()) { Subtitle = "Search menus in open windows" },
];
public override ICommandItem[] TopLevelCommands()
{
return _commands;
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
internal sealed partial class MenuItemCommand : InvokableCommand
{
private readonly MenuData _menuData;
private readonly HWND _hwnd;
public MenuItemCommand(MenuData data, HWND hwnd)
{
_menuData = data;
_hwnd = hwnd;
}
public override ICommandResult Invoke()
{
PInvoke.SetForegroundWindow(_hwnd);
PInvoke.SetActiveWindow(_hwnd);
PInvoke.PostMessage(_hwnd, 273/*WM_COMMAND*/, _menuData.WID, 0);
return CommandResult.KeepOpen();
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
internal sealed class MenuData
{
public string ItemText { get; set; }
public string PathText { get; set; }
public uint WID { get; set; }
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
internal sealed class WindowData
{
private readonly HWND handle;
private readonly string title = string.Empty;
public string Title => title;
public HWND Handle => handle;
internal WindowData(HWND hWnd)
{
handle = hWnd;
var textLen = PInvoke.GetWindowTextLength(handle);
if (textLen == 0)
{
return;
}
var bufferSize = textLen + 1;
unsafe
{
fixed (char* windowNameChars = new char[bufferSize])
{
if (PInvoke.GetWindowText(handle, windowNameChars, bufferSize) == 0)
{
var errorCode = Marshal.GetLastWin32Error();
if (errorCode != 0)
{
throw new Win32Exception(errorCode);
}
}
title = new string(windowNameChars);
}
}
}
public List<MenuData> GetMenuItems()
{
var hMenu = PInvoke.GetMenu_SafeHandle(handle);
return GetMenuItems(hMenu, string.Empty);
}
public List<MenuData> GetMenuItems(DestroyMenuSafeHandle hMenu, string menuPath)
{
// var s = new SafeMenu();
// s.SetHandle(hMenu);
List<MenuData> results = new();
var menuItemCount = PInvoke.GetMenuItemCount(hMenu);
for (var i = 0; i < menuItemCount; i++)
{
var mii = default(MENUITEMINFOW);
mii.cbSize = (uint)Marshal.SizeOf<MENUITEMINFOW>();
mii.fMask = MENU_ITEM_MASK.MIIM_STRING | MENU_ITEM_MASK.MIIM_ID | MENU_ITEM_MASK.MIIM_SUBMENU;
mii.cch = 256;
unsafe
{
fixed (char* menuTextBuffer = new char[mii.cch])
{
mii.dwTypeData = new PWSTR(menuTextBuffer); // Allocate memory for string
if (PInvoke.GetMenuItemInfo(hMenu, (uint)i, true, ref mii))
{
var itemText = mii.dwTypeData.ToString();
// Sanitize it. If it's got a tab, grab the text before that:
var withoutShortcut = itemText.Split("\t").First();
// Now remove a `&`
var sanitized = withoutShortcut.Replace("&", string.Empty);
var itemPath = $"{menuPath}{sanitized}";
// Leaf item
if (mii.hSubMenu == IntPtr.Zero)
{
// Console.WriteLine($"- Leaf Item: {itemText}");
// TriggerMenuItem(hWnd, mii.wID);
var data = new MenuData() { ItemText = sanitized, PathText = itemPath, WID = mii.wID };
results.Add(data);
}
else
{
// Recursively list submenu items
var subMenuTest = PInvoke.GetSubMenu(hMenu, i);
var otherTest = mii.hSubMenu;
_ = otherTest == subMenuTest.DangerousGetHandle();
var newPath = $"{sanitized} > ";
var subItems = GetMenuItems(subMenuTest, newPath);
results.AddRange(subItems);
}
}
}
}
}
return results;
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
internal sealed partial class WindowMenusPage : ListPage
{
private readonly WindowData _window;
public WindowMenusPage(WindowData window)
{
_window = window;
Icon = new IconInfo(string.Empty);
Name = window.Title;
ShowDetails = false;
}
public override IListItem[] GetItems()
{
return _window.GetMenuItems().Select(menuData => new ListItem(new MenuItemCommand(menuData, _window.Handle)) { Title = menuData.ItemText, Subtitle = menuData.PathText }).ToArray();
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "This is sample code")]
internal sealed partial class AllWindowsPage : ListPage
{
private readonly List<WindowData> windows = new();
public AllWindowsPage()
{
Icon = new IconInfo("\uf0b5"); // ChecklistMirrored
Name = "Open Windows";
ShowDetails = false;
}
public override IListItem[] GetItems()
{
PInvoke.EnumWindows(EnumWindowsCallback, IntPtr.Zero);
return windows
.Where(w => !string.IsNullOrEmpty(w.Title))
.Select(w => new ListItem(new WindowMenusPage(w))
{
Title = w.Title,
})
.ToArray();
}
private BOOL EnumWindowsCallback(HWND hWnd, LPARAM lParam)
{
// Only consider top-level visible windows with menus
if (/*PInvoke.IsWindowVisible(hWnd) &&*/ PInvoke.GetMenu(hWnd) != IntPtr.Zero)
{
try
{
windows.Add(new(hWnd));
}
catch (Exception)
{
}
return true;
}
return true; // Continue enumeration
}
}

View File

@@ -1,57 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>MenusExtension</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>false</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPalExtensions\$(RootNamespace)</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Windows.CsWin32">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
</ItemGroup>
<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<ProjectCapability Include="Msix" />
</ItemGroup>
<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>
</Project>

View File

@@ -1,13 +0,0 @@
GetMenu
GetMenuItemInfoW
SendMessageW
EnumWindows
IsWindowVisible
GetWindowTextW
GetWindowTextLength
GetMenuItemCount
GetSubMenu
PostMessage
SetActiveWindow
SetForegroundWindow

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 rescap">
<Identity
Name="MenusExtension"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="0.0.1.0" />
<Properties>
<DisplayName>Menus from the open windows</DisplayName>
<PublisherDisplayName>A Lone Developer</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="Menus from the open windows"
Description="Menus from the open windows"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="MenusExtension.exe" Arguments="-RegisterProcessAsComServer" DisplayName="ClementineExtensionApp">
<com:Class Id="9db16200-5579-4a62-9050-d67469316bba" DisplayName="Menus from the open windows" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.commandpalette"
Id="PG-SP-ID"
PublicFolder="Public"
DisplayName="Menus from the open windows"
Description="Menus from the open windows">
<uap3:Properties>
<CmdPalProvider>
<Activation>
<CreateInstance ClassId="9db16200-5579-4a62-9050-d67469316bba" />
</Activation>
<SupportedInterfaces>
<Commands/>
</SupportedInterfaces>
</CmdPalProvider>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -1,25 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace Menus;
internal sealed partial class MenusPage : ListPage
{
public MenusPage()
{
Icon = new IconInfo(string.Empty);
Name = "Menus from the open windows";
}
public override IListItem[] GetItems()
{
return [
new ListItem(new NoOpCommand()) { Title = "TODO: Implement your extension here" }
];
}
}

View File

@@ -1,36 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace Menus;
public class Program
{
[MTAThread]
public static void Main(string[] args)
{
if (args.Length > 0 && args[0] == "-RegisterProcessAsComServer")
{
using ExtensionServer server = new();
var extensionDisposedEvent = new ManualResetEvent(false);
var extensionInstance = new SampleExtension(extensionDisposedEvent);
// We are instantiating an extension instance once above, and returning it every time the callback in RegisterExtension below is called.
// This makes sure that only one instance of SampleExtension is alive, which is returned every time the host asks for the IExtension object.
// If you want to instantiate a new instance each time the host asks, create the new instance inside the delegate.
server.RegisterExtension(() => extensionInstance);
// This will make the main thread wait until the event is signalled by the extension class.
// Since we have single instance of the extension object, we exit as soon as it is disposed.
extensionDisposedEvent.WaitOne();
}
else
{
Console.WriteLine("Not being launched as a Extension... exiting.");
}
}
}

View File

@@ -1,11 +0,0 @@
{
"profiles": {
"Menus (Package)": {
"commandName": "MsixPackage",
"doNotLaunchApp": true
},
"Menus (Unpackaged)": {
"commandName": "Project"
}
}
}

View File

@@ -1,39 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.CommandPalette.Extensions;
namespace Menus;
[ComVisible(true)]
[Guid("9db16200-5579-4a62-9050-d67469316bba")]
[ComDefaultInterface(typeof(IExtension))]
public sealed partial class SampleExtension : IExtension
{
private readonly ManualResetEvent _extensionDisposedEvent;
public SampleExtension(ManualResetEvent extensionDisposedEvent)
{
this._extensionDisposedEvent = extensionDisposedEvent;
}
public object GetProvider(ProviderType providerType)
{
switch (providerType)
{
case ProviderType.Commands:
return new MenusCommandsProvider();
default:
return null;
}
}
public void Dispose()
{
this._extensionDisposedEvent.Set();
}
}

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="HackerNewsExtension.app"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- The ID below informs the system that this application is compatible with OS features first introduced in Windows 10.
It is necessary to support features in unpackaged applications, for example the custom titlebar implementation.
For more info see https://docs.microsoft.com/windows/apps/windows-app-sdk/use-windows-app-sdk-run-time#declare-os-compatibility-in-your-application-manifest -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
</windowsSettings>
</application>
</assembly>

View File

@@ -1,124 +0,0 @@
Param(
[string]$Name = "MyNewExtension",
[string]$DisplayName = "My new command palette extension",
[switch]$Help = $false,
[switch]$Verbose = $false
),
$StartTime = Get-Date
if ($Help) {
Write-Host @"
Copyright (c) Microsoft Corporation.
Licensed under the MIT License.
Syntax:
NewExtension.ps1 [options]
Description:
Creates a new Command Palette extension.
Options:
-Name <projectName>
The new name for your project. This will be used to name the folder,
classes, package, etc. This should not include spaces or special characters.
Example: -Name MyCoolExtension
-DisplayName <a friendly display name>
A display name for your extension
Example: -DisplayName "My really cool new extension"
-Help
Display this usage message.
Examples:
.\extensions\NewExtension.ps1 -name MastodonExtension -DisplayName "Mastodon extension for cmdpal"
"@
Exit
}
if(-not $Name) {
Write-Host "You must specify a name for your extension. Use -Name <projectName> to specify the name." -ForegroundColor RED
Exit
}
$Name = $Name -replace " ", ""
$NewGuid = [guid]::NewGuid().ToString()
$ExtensionRoot = Join-Path $PSScriptRoot $Name
$TemplateRoot = Join-Path $PSScriptRoot "TemplateExtension"
if(Test-Path $ExtensionRoot) {
Write-Host "The folder $Name already exists. Please specify a different name." -ForegroundColor RED
Exit
}
Write-Host "Creating new extension $Name"
# Get all the folders and files tracked in git in the template
$TemplateFiles = git ls-files --full-name $TemplateRoot
# Create the new extension folder
New-Item -ItemType Directory -Path $ExtensionRoot -Force | Out-Null
# $TemplateFiles will be relative to the git root. That's something like
# src/modules/cmdpal/extensions/TemplateExtension/
$gitRoot = git rev-parse --show-toplevel
# Copy all the files from the template to the new extension
foreach($file in $TemplateFiles) {
$RelativePath = (Join-Path $gitRoot $file) -replace [regex]::Escape($TemplateRoot), ""
$SourcePath = Join-Path $TemplateRoot $RelativePath
$DestinationPath = Join-Path $ExtensionRoot $RelativePath
if ($Verbose) {
Write-Host "Copying $SourcePath -> $DestinationPath" -ForegroundColor DarkGray
}
$DestinationFolder = Split-Path $DestinationPath -Parent
if(-not (Test-Path $DestinationFolder)) {
New-Item -ItemType Directory -Path $DestinationFolder -Force | Out-Null
}
Copy-Item -Path $SourcePath -Destination $DestinationPath -Force
}
# Replace all the placeholders in the files
$Files = Get-ChildItem -Path $ExtensionRoot -Recurse -File
foreach($file in $Files) {
$Content = Get-Content -Path $file.FullName
$Content = $Content -replace "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", $NewGuid
$Content = $Content -replace "TemplateDisplayName", $DisplayName
$Content = $Content -replace "TemplateExtension", $Name
Set-Content -Path $file.FullName -Value $Content
}
# also rename files with TemplateExtension in the name
$Files = Get-ChildItem -Path $ExtensionRoot -Recurse -File -Filter "*TemplateExtension*"
foreach($file in $Files) {
$NewName = $file.Name -replace "TemplateExtension", $Name
$NewPath = Join-Path $file.DirectoryName $NewName
Move-Item -Path $file.FullName -Destination $NewPath
}
Write-Host "Extension created in $ExtensionRoot" -ForegroundColor GREEN
Write-Host "Don't forget to add your new extension to the 'Sample plugins' in the WindowsCommandPalette solution."
$pathToSolution = Join-Path $gitRoot "src\modules\cmdpal\WindowsCommandPalette.sln"
Write-Host @"
You can open the solution with
start $pathToSolution
and get started by editing the file
$ExtensionRoot\src\${Name}Page.cs
"@
if ($Verbose) {
$TotalTime = (Get-Date)-$StartTime
$TotalMinutes = [math]::Floor($TotalTime.TotalMinutes)
$TotalSeconds = [math]::Ceiling($TotalTime.TotalSeconds)
Write-Host @"
Total Running Time:
$TotalMinutes minutes and $TotalSeconds seconds
"@ -ForegroundColor CYAN
}

View File

@@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap3 rescap">
<Identity
Name="PokedexExtension"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Version="0.0.1.0" />
<Properties>
<DisplayName>Pocket Monsters for the Command Palette</DisplayName>
<PublisherDisplayName>A Lone Developer</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="Pocket Monsters for the Command Palette"
Description="Pocket Monsters for the Command Palette"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="PokedexExtension.exe" Arguments="-RegisterProcessAsComServer" DisplayName="ClementineExtensionApp">
<com:Class Id="89bb01cf-674d-425f-80aa-49cded859ecf" DisplayName="Pocket Monsters for the Command Palette" />
</com:ExeServer>
</com:ComServer>
</com:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.commandpalette"
Id="PG-SP-ID"
PublicFolder="Public"
DisplayName="Pocket Monsters for the Command Palette"
Description="Pocket Monsters for the Command Palette">
<uap3:Properties>
<CmdPalProvider>
<Activation>
<CreateInstance ClassId="89bb01cf-674d-425f-80aa-49cded859ecf" />
</Activation>
<SupportedInterfaces>
<Commands/>
</SupportedInterfaces>
</CmdPalProvider>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -1,507 +0,0 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
namespace PokedexExtension;
public class Pokemon
{
public int Number { get; set; }
public string Name { get; set; }
public List<string> Types { get; set; }
public string IconUrl => $"https://serebii.net/pokedex-sv/icon/new/{Number:D3}.png";
public string SerebiiUrl => $"https://serebii.net/pokedex-sv/{Number:D3}.shtml";
public Pokemon(int number, string name, List<string> types)
{
Number = number;
Name = name;
Types = types;
}
}
internal sealed partial class OpenPokemonCommand : InvokableCommand
{
public OpenPokemonCommand()
{
Name = "Open";
}
public override ICommandResult Invoke(object sender)
{
if (sender is PokemonListItem item)
{
var pokemon = item.Pokemon;
Process.Start(new ProcessStartInfo(pokemon.SerebiiUrl) { UseShellExecute = true });
}
return CommandResult.KeepOpen();
}
}
internal sealed partial class PokemonListItem : ListItem
{
private static readonly OpenPokemonCommand _command = new();
public Pokemon Pokemon { get; private set; }
public PokemonListItem(Pokemon p)
: base(_command)
{
Pokemon = p;
Title = Pokemon.Name;
Icon = new IconInfo(Pokemon.IconUrl);
Subtitle = $"#{Pokemon.Number}";
Tags = Pokemon.Types.Select(t => new Tag() { Text = t, Background = PokedexExtensionPage.GetColorForType(t) }).ToArray();
}
}
internal sealed partial class PokedexExtensionPage : ListPage
{
private readonly List<Pokemon> _kanto =
[
new Pokemon(1, "Bulbasaur", ["Grass", "Poison"]),
new Pokemon(2, "Ivysaur", ["Grass", "Poison"]),
new Pokemon(3, "Venusaur", ["Grass", "Poison"]),
new Pokemon(4, "Charmander", ["Fire"]),
new Pokemon(5, "Charmeleon", ["Fire"]),
new Pokemon(6, "Charizard", ["Fire", "Flying"]),
new Pokemon(7, "Squirtle", ["Water"]),
new Pokemon(8, "Wartortle", ["Water"]),
new Pokemon(9, "Blastoise", ["Water"]),
new Pokemon(10, "Caterpie", ["Bug"]),
new Pokemon(11, "Metapod", ["Bug"]),
new Pokemon(12, "Butterfree", ["Bug", "Flying"]),
new Pokemon(13, "Weedle", ["Bug", "Poison"]),
new Pokemon(14, "Kakuna", ["Bug", "Poison"]),
new Pokemon(15, "Beedrill", ["Bug", "Poison"]),
new Pokemon(16, "Pidgey", ["Normal", "Flying"]),
new Pokemon(17, "Pidgeotto", ["Normal", "Flying"]),
new Pokemon(18, "Pidgeot", ["Normal", "Flying"]),
new Pokemon(19, "Rattata", ["Normal"]),
new Pokemon(20, "Raticate", ["Normal"]),
new Pokemon(21, "Spearow", ["Normal", "Flying"]),
new Pokemon(22, "Fearow", ["Normal", "Flying"]),
new Pokemon(23, "Ekans", ["Poison"]),
new Pokemon(24, "Arbok", ["Poison"]),
new Pokemon(25, "Pikachu", ["Electric"]),
new Pokemon(26, "Raichu", ["Electric"]),
new Pokemon(27, "Sandshrew", ["Ground"]),
new Pokemon(28, "Sandslash", ["Ground"]),
new Pokemon(29, "Nidoran♀", ["Poison"]),
new Pokemon(30, "Nidorina", ["Poison"]),
new Pokemon(31, "Nidoqueen", ["Poison", "Ground"]),
new Pokemon(32, "Nidoran♂", ["Poison"]),
new Pokemon(33, "Nidorino", ["Poison"]),
new Pokemon(34, "Nidoking", ["Poison", "Ground"]),
new Pokemon(35, "Clefairy", ["Fairy"]),
new Pokemon(36, "Clefable", ["Fairy"]),
new Pokemon(37, "Vulpix", ["Fire"]),
new Pokemon(38, "Ninetales", ["Fire"]),
new Pokemon(39, "Jigglypuff", ["Normal", "Fairy"]),
new Pokemon(40, "Wigglytuff", ["Normal", "Fairy"]),
new Pokemon(41, "Zubat", ["Poison", "Flying"]),
new Pokemon(42, "Golbat", ["Poison", "Flying"]),
new Pokemon(43, "Oddish", ["Grass", "Poison"]),
new Pokemon(44, "Gloom", ["Grass", "Poison"]),
new Pokemon(45, "Vileplume", ["Grass", "Poison"]),
new Pokemon(46, "Paras", ["Bug", "Grass"]),
new Pokemon(47, "Parasect", ["Bug", "Grass"]),
new Pokemon(48, "Venonat", ["Bug", "Poison"]),
new Pokemon(49, "Venomoth", ["Bug", "Poison"]),
new Pokemon(50, "Diglett", ["Ground"]),
new Pokemon(51, "Dugtrio", ["Ground"]),
new Pokemon(52, "Meowth", ["Normal"]),
new Pokemon(53, "Persian", ["Normal"]),
new Pokemon(54, "Psyduck", ["Water"]),
new Pokemon(55, "Golduck", ["Water"]),
new Pokemon(56, "Mankey", ["Fighting"]),
new Pokemon(57, "Primeape", ["Fighting"]),
new Pokemon(58, "Growlithe", ["Fire"]),
new Pokemon(59, "Arcanine", ["Fire"]),
new Pokemon(60, "Poliwag", ["Water"]),
new Pokemon(61, "Poliwhirl", ["Water"]),
new Pokemon(62, "Poliwrath", ["Water", "Fighting"]),
new Pokemon(63, "Abra", ["Psychic"]),
new Pokemon(64, "Kadabra", ["Psychic"]),
new Pokemon(65, "Alakazam", ["Psychic"]),
new Pokemon(66, "Machop", ["Fighting"]),
new Pokemon(67, "Machoke", ["Fighting"]),
new Pokemon(68, "Machamp", ["Fighting"]),
new Pokemon(69, "Bellsprout", ["Grass", "Poison"]),
new Pokemon(70, "Weepinbell", ["Grass", "Poison"]),
new Pokemon(71, "Victreebel", ["Grass", "Poison"]),
new Pokemon(72, "Tentacool", ["Water", "Poison"]),
new Pokemon(73, "Tentacruel", ["Water", "Poison"]),
new Pokemon(74, "Geodude", ["Rock", "Ground"]),
new Pokemon(75, "Graveler", ["Rock", "Ground"]),
new Pokemon(76, "Golem", ["Rock", "Ground"]),
new Pokemon(77, "Ponyta", ["Fire"]),
new Pokemon(78, "Rapidash", ["Fire"]),
new Pokemon(79, "Slowpoke", ["Water", "Psychic"]),
new Pokemon(80, "Slowbro", ["Water", "Psychic"]),
new Pokemon(81, "Magnemite", ["Electric", "Steel"]),
new Pokemon(82, "Magneton", ["Electric", "Steel"]),
new Pokemon(83, "Farfetch'd", ["Normal", "Flying"]),
new Pokemon(84, "Doduo", ["Normal", "Flying"]),
new Pokemon(85, "Dodrio", ["Normal", "Flying"]),
new Pokemon(86, "Seel", ["Water"]),
new Pokemon(87, "Dewgong", ["Water", "Ice"]),
new Pokemon(88, "Grimer", ["Poison"]),
new Pokemon(89, "Muk", ["Poison"]),
new Pokemon(90, "Shellder", ["Water"]),
new Pokemon(91, "Cloyster", ["Water", "Ice"]),
new Pokemon(92, "Gastly", ["Ghost", "Poison"]),
new Pokemon(93, "Haunter", ["Ghost", "Poison"]),
new Pokemon(94, "Gengar", ["Ghost", "Poison"]),
new Pokemon(95, "Onix", ["Rock", "Ground"]),
new Pokemon(96, "Drowzee", ["Psychic"]),
new Pokemon(97, "Hypno", ["Psychic"]),
new Pokemon(98, "Krabby", ["Water"]),
new Pokemon(99, "Kingler", ["Water"]),
new Pokemon(100, "Voltorb", ["Electric"]),
new Pokemon(101, "Electrode", ["Electric"]),
new Pokemon(102, "Exeggcute", ["Grass", "Psychic"]),
new Pokemon(103, "Exeggutor", ["Grass", "Psychic"]),
new Pokemon(104, "Cubone", ["Ground"]),
new Pokemon(105, "Marowak", ["Ground"]),
new Pokemon(106, "Hitmonlee", ["Fighting"]),
new Pokemon(107, "Hitmonchan", ["Fighting"]),
new Pokemon(108, "Lickitung", ["Normal"]),
new Pokemon(109, "Koffing", ["Poison"]),
new Pokemon(110, "Weezing", ["Poison"]),
new Pokemon(111, "Rhyhorn", ["Ground", "Rock"]),
new Pokemon(112, "Rhydon", ["Ground", "Rock"]),
new Pokemon(113, "Chansey", ["Normal"]),
new Pokemon(114, "Tangela", ["Grass"]),
new Pokemon(115, "Kangaskhan", ["Normal"]),
new Pokemon(116, "Horsea", ["Water"]),
new Pokemon(117, "Seadra", ["Water"]),
new Pokemon(118, "Goldeen", ["Water"]),
new Pokemon(119, "Seaking", ["Water"]),
new Pokemon(120, "Staryu", ["Water"]),
new Pokemon(121, "Starmie", ["Water", "Psychic"]),
new Pokemon(122, "Mr. Mime", ["Psychic", "Fairy"]),
new Pokemon(123, "Scyther", ["Bug", "Flying"]),
new Pokemon(124, "Jynx", ["Ice", "Psychic"]),
new Pokemon(125, "Electabuzz", ["Electric"]),
new Pokemon(126, "Magmar", ["Fire"]),
new Pokemon(127, "Pinsir", ["Bug"]),
new Pokemon(128, "Tauros", ["Normal"]),
new Pokemon(129, "Magikarp", ["Water"]),
new Pokemon(130, "Gyarados", ["Water", "Flying"]),
new Pokemon(131, "Lapras", ["Water", "Ice"]),
new Pokemon(132, "Ditto", ["Normal"]),
new Pokemon(133, "Eevee", ["Normal"]),
new Pokemon(134, "Vaporeon", ["Water"]),
new Pokemon(135, "Jolteon", ["Electric"]),
new Pokemon(136, "Flareon", ["Fire"]),
new Pokemon(137, "Porygon", ["Normal"]),
new Pokemon(138, "Omanyte", ["Rock", "Water"]),
new Pokemon(139, "Omastar", ["Rock", "Water"]),
new Pokemon(140, "Kabuto", ["Rock", "Water"]),
new Pokemon(141, "Kabutops", ["Rock", "Water"]),
new Pokemon(142, "Aerodactyl", ["Rock", "Flying"]),
new Pokemon(143, "Snorlax", ["Normal"]),
new Pokemon(144, "Articuno", ["Ice", "Flying"]),
new Pokemon(145, "Zapdos", ["Electric", "Flying"]),
new Pokemon(146, "Moltres", ["Fire", "Flying"]),
new Pokemon(147, "Dratini", ["Dragon"]),
new Pokemon(148, "Dragonair", ["Dragon"]),
new Pokemon(149, "Dragonite", ["Dragon", "Flying"]),
new Pokemon(150, "Mewtwo", ["Psychic"]),
new Pokemon(151, "Mew", ["Psychic"]),
];
private readonly List<Pokemon> _johto =
[
new Pokemon(152, "Chikorita", ["Grass"]),
new Pokemon(153, "Bayleef", ["Grass"]),
new Pokemon(154, "Meganium", ["Grass"]),
new Pokemon(155, "Cyndaquil", ["Fire"]),
new Pokemon(156, "Quilava", ["Fire"]),
new Pokemon(157, "Typhlosion", ["Fire"]),
new Pokemon(158, "Totodile", ["Water"]),
new Pokemon(159, "Croconaw", ["Water"]),
new Pokemon(160, "Feraligatr", ["Water"]),
new Pokemon(161, "Sentret", ["Normal"]),
new Pokemon(162, "Furret", ["Normal"]),
new Pokemon(163, "Hoothoot", ["Normal", "Flying"]),
new Pokemon(164, "Noctowl", ["Normal", "Flying"]),
new Pokemon(165, "Ledyba", ["Bug", "Flying"]),
new Pokemon(166, "Ledian", ["Bug", "Flying"]),
new Pokemon(167, "Spinarak", ["Bug", "Poison"]),
new Pokemon(168, "Ariados", ["Bug", "Poison"]),
new Pokemon(169, "Crobat", ["Poison", "Flying"]),
new Pokemon(170, "Chinchou", ["Water", "Electric"]),
new Pokemon(171, "Lanturn", ["Water", "Electric"]),
new Pokemon(172, "Pichu", ["Electric"]),
new Pokemon(173, "Cleffa", ["Fairy"]),
new Pokemon(174, "Igglybuff", ["Normal", "Fairy"]),
new Pokemon(175, "Togepi", ["Fairy"]),
new Pokemon(176, "Togetic", ["Fairy", "Flying"]),
new Pokemon(177, "Natu", ["Psychic", "Flying"]),
new Pokemon(178, "Xatu", ["Psychic", "Flying"]),
new Pokemon(179, "Mareep", ["Electric"]),
new Pokemon(180, "Flaaffy", ["Electric"]),
new Pokemon(181, "Ampharos", ["Electric"]),
new Pokemon(182, "Bellossom", ["Grass"]),
new Pokemon(183, "Marill", ["Water", "Fairy"]),
new Pokemon(184, "Azumarill", ["Water", "Fairy"]),
new Pokemon(185, "Sudowoodo", ["Rock"]),
new Pokemon(186, "Politoed", ["Water"]),
new Pokemon(187, "Hoppip", ["Grass", "Flying"]),
new Pokemon(188, "Skiploom", ["Grass", "Flying"]),
new Pokemon(189, "Jumpluff", ["Grass", "Flying"]),
new Pokemon(190, "Aipom", ["Normal"]),
new Pokemon(191, "Sunkern", ["Grass"]),
new Pokemon(192, "Sunflora", ["Grass"]),
new Pokemon(193, "Yanma", ["Bug", "Flying"]),
new Pokemon(194, "Wooper", ["Water", "Ground"]),
new Pokemon(195, "Quagsire", ["Water", "Ground"]),
new Pokemon(196, "Espeon", ["Psychic"]),
new Pokemon(197, "Umbreon", ["Dark"]),
new Pokemon(198, "Murkrow", ["Dark", "Flying"]),
new Pokemon(199, "Slowking", ["Water", "Psychic"]),
new Pokemon(200, "Misdreavus", ["Ghost"]),
new Pokemon(201, "Unown", ["Psychic"]),
new Pokemon(202, "Wobbuffet", ["Psychic"]),
new Pokemon(203, "Girafarig", ["Normal", "Psychic"]),
new Pokemon(204, "Pineco", ["Bug"]),
new Pokemon(205, "Forretress", ["Bug", "Steel"]),
new Pokemon(206, "Dunsparce", ["Normal"]),
new Pokemon(207, "Gligar", ["Ground", "Flying"]),
new Pokemon(208, "Steelix", ["Steel", "Ground"]),
new Pokemon(209, "Snubbull", ["Fairy"]),
new Pokemon(210, "Granbull", ["Fairy"]),
new Pokemon(211, "Qwilfish", ["Water", "Poison"]),
new Pokemon(212, "Scizor", ["Bug", "Steel"]),
new Pokemon(213, "Shuckle", ["Bug", "Rock"]),
new Pokemon(214, "Heracross", ["Bug", "Fighting"]),
new Pokemon(215, "Sneasel", ["Dark", "Ice"]),
new Pokemon(216, "Teddiursa", ["Normal"]),
new Pokemon(217, "Ursaring", ["Normal"]),
new Pokemon(218, "Slugma", ["Fire"]),
new Pokemon(219, "Magcargo", ["Fire", "Rock"]),
new Pokemon(220, "Swinub", ["Ice", "Ground"]),
new Pokemon(221, "Piloswine", ["Ice", "Ground"]),
new Pokemon(222, "Corsola", ["Water", "Rock"]),
new Pokemon(223, "Remoraid", ["Water"]),
new Pokemon(224, "Octillery", ["Water"]),
new Pokemon(225, "Delibird", ["Ice", "Flying"]),
new Pokemon(226, "Mantine", ["Water", "Flying"]),
new Pokemon(227, "Skarmory", ["Steel", "Flying"]),
new Pokemon(228, "Houndour", ["Dark", "Fire"]),
new Pokemon(229, "Houndoom", ["Dark", "Fire"]),
new Pokemon(230, "Kingdra", ["Water", "Dragon"]),
new Pokemon(231, "Phanpy", ["Ground"]),
new Pokemon(232, "Donphan", ["Ground"]),
new Pokemon(233, "Porygon2", ["Normal"]),
new Pokemon(234, "Stantler", ["Normal"]),
new Pokemon(235, "Smeargle", ["Normal"]),
new Pokemon(236, "Tyrogue", ["Fighting"]),
new Pokemon(237, "Hitmontop", ["Fighting"]),
new Pokemon(238, "Smoochum", ["Ice", "Psychic"]),
new Pokemon(239, "Elekid", ["Electric"]),
new Pokemon(240, "Magby", ["Fire"]),
new Pokemon(241, "Miltank", ["Normal"]),
new Pokemon(242, "Blissey", ["Normal"]),
new Pokemon(243, "Raikou", ["Electric"]),
new Pokemon(244, "Entei", ["Fire"]),
new Pokemon(245, "Suicune", ["Water"]),
new Pokemon(246, "Larvitar", ["Rock", "Ground"]),
new Pokemon(247, "Pupitar", ["Rock", "Ground"]),
new Pokemon(248, "Tyranitar", ["Rock", "Dark"]),
new Pokemon(249, "Lugia", ["Psychic", "Flying"]),
new Pokemon(250, "Ho-Oh", ["Fire", "Flying"]),
new Pokemon(251, "Celebi", ["Psychic", "Grass"]),
];
private readonly List<Pokemon> _hoenn =
[
new Pokemon(252, "Treecko", ["Grass"]),
new Pokemon(253, "Grovyle", ["Grass"]),
new Pokemon(254, "Sceptile", ["Grass"]),
new Pokemon(255, "Torchic", ["Fire"]),
new Pokemon(256, "Combusken", ["Fire", "Fighting"]),
new Pokemon(257, "Blaziken", ["Fire", "Fighting"]),
new Pokemon(258, "Mudkip", ["Water"]),
new Pokemon(259, "Marshtomp", ["Water", "Ground"]),
new Pokemon(260, "Swampert", ["Water", "Ground"]),
new Pokemon(261, "Poochyena", ["Dark"]),
new Pokemon(262, "Mightyena", ["Dark"]),
new Pokemon(263, "Zigzagoon", ["Normal"]),
new Pokemon(264, "Linoone", ["Normal"]),
new Pokemon(265, "Wurmple", ["Bug"]),
new Pokemon(266, "Silcoon", ["Bug"]),
new Pokemon(267, "Beautifly", ["Bug", "Flying"]),
new Pokemon(268, "Cascoon", ["Bug"]),
new Pokemon(269, "Dustox", ["Bug", "Poison"]),
new Pokemon(270, "Lotad", ["Water", "Grass"]),
new Pokemon(271, "Lombre", ["Water", "Grass"]),
new Pokemon(272, "Ludicolo", ["Water", "Grass"]),
new Pokemon(273, "Seedot", ["Grass"]),
new Pokemon(274, "Nuzleaf", ["Grass", "Dark"]),
new Pokemon(275, "Shiftry", ["Grass", "Dark"]),
new Pokemon(276, "Taillow", ["Normal", "Flying"]),
new Pokemon(277, "Swellow", ["Normal", "Flying"]),
new Pokemon(278, "Wingull", ["Water", "Flying"]),
new Pokemon(279, "Pelipper", ["Water", "Flying"]),
new Pokemon(280, "Ralts", ["Psychic", "Fairy"]),
new Pokemon(281, "Kirlia", ["Psychic", "Fairy"]),
new Pokemon(282, "Gardevoir", ["Psychic", "Fairy"]),
new Pokemon(283, "Surskit", ["Bug", "Water"]),
new Pokemon(284, "Masquerain", ["Bug", "Flying"]),
new Pokemon(285, "Shroomish", ["Grass"]),
new Pokemon(286, "Breloom", ["Grass", "Fighting"]),
new Pokemon(287, "Slakoth", ["Normal"]),
new Pokemon(288, "Vigoroth", ["Normal"]),
new Pokemon(289, "Slaking", ["Normal"]),
new Pokemon(290, "Nincada", ["Bug", "Ground"]),
new Pokemon(291, "Ninjask", ["Bug", "Flying"]),
new Pokemon(292, "Shedinja", ["Bug", "Ghost"]),
new Pokemon(293, "Whismur", ["Normal"]),
new Pokemon(294, "Loudred", ["Normal"]),
new Pokemon(295, "Exploud", ["Normal"]),
new Pokemon(296, "Makuhita", ["Fighting"]),
new Pokemon(297, "Hariyama", ["Fighting"]),
new Pokemon(298, "Azurill", ["Normal", "Fairy"]),
new Pokemon(299, "Nosepass", ["Rock"]),
new Pokemon(300, "Skitty", ["Normal"]),
new Pokemon(301, "Delcatty", ["Normal"]),
new Pokemon(302, "Sableye", ["Dark", "Ghost"]),
new Pokemon(303, "Mawile", ["Steel", "Fairy"]),
new Pokemon(304, "Aron", ["Steel", "Rock"]),
new Pokemon(305, "Lairon", ["Steel", "Rock"]),
new Pokemon(306, "Aggron", ["Steel", "Rock"]),
new Pokemon(307, "Meditite", ["Fighting", "Psychic"]),
new Pokemon(308, "Medicham", ["Fighting", "Psychic"]),
new Pokemon(309, "Electrike", ["Electric"]),
new Pokemon(310, "Manectric", ["Electric"]),
new Pokemon(311, "Plusle", ["Electric"]),
new Pokemon(312, "Minun", ["Electric"]),
new Pokemon(313, "Volbeat", ["Bug"]),
new Pokemon(314, "Illumise", ["Bug"]),
new Pokemon(315, "Roselia", ["Grass", "Poison"]),
new Pokemon(316, "Gulpin", ["Poison"]),
new Pokemon(317, "Swalot", ["Poison"]),
new Pokemon(318, "Carvanha", ["Water", "Dark"]),
new Pokemon(319, "Sharpedo", ["Water", "Dark"]),
new Pokemon(320, "Wailmer", ["Water"]),
new Pokemon(321, "Wailord", ["Water"]),
new Pokemon(322, "Numel", ["Fire", "Ground"]),
new Pokemon(323, "Camerupt", ["Fire", "Ground"]),
new Pokemon(324, "Torkoal", ["Fire"]),
new Pokemon(325, "Spoink", ["Psychic"]),
new Pokemon(326, "Grumpig", ["Psychic"]),
new Pokemon(327, "Spinda", ["Normal"]),
new Pokemon(328, "Trapinch", ["Ground"]),
new Pokemon(329, "Vibrava", ["Ground", "Dragon"]),
new Pokemon(330, "Flygon", ["Ground", "Dragon"]),
new Pokemon(331, "Cacnea", ["Grass"]),
new Pokemon(332, "Cacturne", ["Grass", "Dark"]),
new Pokemon(333, "Swablu", ["Normal", "Flying"]),
new Pokemon(334, "Altaria", ["Dragon", "Flying"]),
new Pokemon(335, "Zangoose", ["Normal"]),
new Pokemon(336, "Seviper", ["Poison"]),
new Pokemon(337, "Lunatone", ["Rock", "Psychic"]),
new Pokemon(338, "Solrock", ["Rock", "Psychic"]),
new Pokemon(339, "Barboach", ["Water", "Ground"]),
new Pokemon(340, "Whiscash", ["Water", "Ground"]),
new Pokemon(341, "Corphish", ["Water"]),
new Pokemon(342, "Crawdaunt", ["Water", "Dark"]),
new Pokemon(343, "Baltoy", ["Ground", "Psychic"]),
new Pokemon(344, "Claydol", ["Ground", "Psychic"]),
new Pokemon(345, "Lileep", ["Rock", "Grass"]),
new Pokemon(346, "Cradily", ["Rock", "Grass"]),
new Pokemon(347, "Anorith", ["Rock", "Bug"]),
new Pokemon(348, "Armaldo", ["Rock", "Bug"]),
new Pokemon(349, "Feebas", ["Water"]),
new Pokemon(350, "Milotic", ["Water"]),
new Pokemon(351, "Castform", ["Normal"]),
new Pokemon(352, "Kecleon", ["Normal"]),
new Pokemon(353, "Shuppet", ["Ghost"]),
new Pokemon(354, "Banette", ["Ghost"]),
new Pokemon(355, "Duskull", ["Ghost"]),
new Pokemon(356, "Dusclops", ["Ghost"]),
new Pokemon(357, "Tropius", ["Grass", "Flying"]),
new Pokemon(358, "Chimecho", ["Psychic"]),
new Pokemon(359, "Absol", ["Dark"]),
new Pokemon(360, "Wynaut", ["Psychic"]),
new Pokemon(361, "Snorunt", ["Ice"]),
new Pokemon(362, "Glalie", ["Ice"]),
new Pokemon(363, "Spheal", ["Ice", "Water"]),
new Pokemon(364, "Sealeo", ["Ice", "Water"]),
new Pokemon(365, "Walrein", ["Ice", "Water"]),
new Pokemon(366, "Clamperl", ["Water"]),
new Pokemon(367, "Huntail", ["Water"]),
new Pokemon(368, "Gorebyss", ["Water"]),
new Pokemon(369, "Relicanth", ["Water", "Rock"]),
new Pokemon(370, "Luvdisc", ["Water"]),
new Pokemon(371, "Bagon", ["Dragon"]),
new Pokemon(372, "Shelgon", ["Dragon"]),
new Pokemon(373, "Salamence", ["Dragon", "Flying"]),
new Pokemon(374, "Beldum", ["Steel", "Psychic"]),
new Pokemon(375, "Metang", ["Steel", "Psychic"]),
new Pokemon(376, "Metagross", ["Steel", "Psychic"]),
new Pokemon(377, "Regirock", ["Rock"]),
new Pokemon(378, "Regice", ["Ice"]),
new Pokemon(379, "Registeel", ["Steel"]),
new Pokemon(380, "Latias", ["Dragon", "Psychic"]),
new Pokemon(381, "Latios", ["Dragon", "Psychic"]),
new Pokemon(382, "Kyogre", ["Water"]),
new Pokemon(383, "Groudon", ["Ground"]),
new Pokemon(384, "Rayquaza", ["Dragon", "Flying"]),
new Pokemon(385, "Jirachi", ["Steel", "Psychic"]),
new Pokemon(386, "Deoxys", ["Psychic"]),
];
public PokedexExtensionPage()
{
Icon = new IconInfo("https://e7.pngegg.com/pngimages/311/5/png-clipart-pokedex-pokemon-go-hoenn-pokemon-x-and-y-hoenn-pokedex-pokemon-ash-thumbnail.png");
Name = "Pokedex";
}
public override IListItem[] GetItems() => _kanto.AsEnumerable().Concat(_johto.AsEnumerable()).Concat(_hoenn.AsEnumerable()).Select(GetPokemonListItem).ToArray();
private static ListItem GetPokemonListItem(Pokemon pokemon) => new PokemonListItem(pokemon);
// Dictionary mapping Pokémon types to their corresponding colors
private static readonly Dictionary<string, OptionalColor> TypeColors = new()
{
{ "Normal", ColorHelpers.FromArgb(255, 168, 168, 120) }, // Light Brownish Grey
{ "Fire", ColorHelpers.FromArgb(255, 240, 128, 48) }, // Orange-Red
{ "Water", ColorHelpers.FromArgb(255, 104, 144, 240) }, // Medium Blue
{ "Electric", ColorHelpers.FromArgb(255, 248, 208, 48) }, // Yellow
{ "Grass", ColorHelpers.FromArgb(255, 120, 200, 80) }, // Green
{ "Ice", ColorHelpers.FromArgb(255, 152, 216, 216) }, // Cyan
{ "Fighting", ColorHelpers.FromArgb(255, 192, 48, 40) }, // Red
{ "Poison", ColorHelpers.FromArgb(255, 160, 64, 160) }, // Purple
{ "Ground", ColorHelpers.FromArgb(255, 224, 192, 104) }, // Yellowish Brown
{ "Flying", ColorHelpers.FromArgb(255, 168, 144, 240) }, // Light Blue
{ "Psychic", ColorHelpers.FromArgb(255, 248, 88, 136) }, // Pink
{ "Bug", ColorHelpers.FromArgb(255, 168, 184, 32) }, // Greenish Yellow
{ "Rock", ColorHelpers.FromArgb(255, 184, 160, 56) }, // Brown
{ "Ghost", ColorHelpers.FromArgb(255, 112, 88, 152) }, // Dark Purple
{ "Dragon", ColorHelpers.FromArgb(255, 112, 56, 248) }, // Blue-Violet
{ "Dark", ColorHelpers.FromArgb(255, 112, 88, 72) }, // Dark Brown
{ "Steel", ColorHelpers.FromArgb(255, 184, 184, 208) }, // Light Grey
{ "Fairy", ColorHelpers.FromArgb(255, 238, 153, 172) }, // Light Pink
};
// Method to get the color for a given type
public static OptionalColor GetColorForType(string type) =>
// Check if the type exists in the dictionary
TypeColors.TryGetValue(type, out var color) ? color : ColorHelpers.NoColor();
}

View File

@@ -1,64 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\Common.Dotnet.CsWinRT.props" />
<Import Project="..\..\..\..\Common.Dotnet.AotCompatibility.props" />
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>PokedexExtension</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>false</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPalExtensions\$(RootNamespace)</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj" />
</ItemGroup>
<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<ProjectCapability Include="Msix" />
</ItemGroup>
<ItemGroup>
<Folder Include="Data\" />
<Folder Include="Forms\" />
<Folder Include="Commands\" />
</ItemGroup>
<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
<HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<PublishSingleFile>true</PublishSingleFile>
<PublishAot>true</PublishAot>
</PropertyGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show More