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
341
PowerToys.sln
@@ -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}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"EverythingExtension (Package)": {
|
||||
"commandName": "MsixPackage",
|
||||
"commandLineArgs": "-RegisterProcessAsComServer"
|
||||
},
|
||||
"EverythingExtension (Unpackaged)": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
Before Width: | Height: | Size: 432 B |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 637 B |
|
Before Width: | Height: | Size: 283 B |
|
Before Width: | Height: | Size: 456 B |
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"HackerNewsExtension (Package)": {
|
||||
"commandName": "MsixPackage",
|
||||
"doNotLaunchApp": true
|
||||
},
|
||||
"HackerNewsExtension (Unpackaged)": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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";
|
||||
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; }
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"MastodonExtension (Package)": {
|
||||
"commandName": "MsixPackage",
|
||||
"doNotLaunchApp": true
|
||||
},
|
||||
"MastodonExtension (Unpackaged)": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
Before Width: | Height: | Size: 432 B |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 637 B |
|
Before Width: | Height: | Size: 283 B |
|
Before Width: | Height: | Size: 456 B |
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -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>
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"MediaControlsExtension (Package)": {
|
||||
"commandName": "MsixPackage"
|
||||
},
|
||||
"MediaControlsExtension (Unpackaged)": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -1,13 +0,0 @@
|
||||
|
||||
GetMenu
|
||||
GetMenuItemInfoW
|
||||
SendMessageW
|
||||
EnumWindows
|
||||
IsWindowVisible
|
||||
GetWindowTextW
|
||||
GetWindowTextLength
|
||||
GetMenuItemCount
|
||||
GetSubMenu
|
||||
PostMessage
|
||||
SetActiveWindow
|
||||
SetForegroundWindow
|
||||
@@ -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>
|
||||
@@ -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" }
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"Menus (Package)": {
|
||||
"commandName": "MsixPackage",
|
||||
"doNotLaunchApp": true
|
||||
},
|
||||
"Menus (Unpackaged)": {
|
||||
"commandName": "Project"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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>
|
||||