Compare commits

...
394 Commits
Author SHA1 Message Date
Aigio Liu 865e317d4e Update Nuget Packages & Remove ZXing.Net.Mobile Add MLKit + Camera2 2021-08-17 16:04:56 +08:00
Aigio Liu da11f5973a Readme 2021-08-16 16:34:55 +08:00
Aigio Liu 849eb14cec del Package_TemporaryKey.pfx 2021-08-16 15:27:04 +08:00
Aigio Liu a573c24e32 fix FastLRB Bind 2021-08-16 12:52:57 +08:00
Aigio Liu 246f7a4f45 fix 2021-08-16 11:18:35 +08:00
Aigio Liu d17fab17ba 添加编辑资料监听用户信息变化时更改用于比较的原始数据 2021-08-16 09:40:41 +08:00
Aigio Liu 3b2aeca0fc 绑定账号不关闭当前窗口 2021-08-16 09:27:34 +08:00
Aigio Liu 0d63c553a2 fix 2021-08-16 09:15:57 +08:00
rmbgame 0479743c31 Fix 2021-08-16 09:16:09 +08:00
Aigio Liu 0892677473 remove visualelementsmanifest.xml BackgroundColor 2021-08-16 09:02:29 +08:00
Aigio Liu cf7fc27040 release v2.4.9 2021-08-16 08:57:04 +08:00
rmbgame d6cb8403b7 Update Avalonia Package
Update UI
2021-08-16 01:39:52 +08:00
rmbgame ee1012c84d fix #364 2021-08-16 01:20:48 +08:00
rmbgame db80c8e268 UI 2021-08-16 00:52:57 +08:00
Aigio Liu 07e679a17a *.sh text eol=lf 2021-08-15 23:01:07 +08:00
Aigio Liu de8c033e1d fix 2021-08-15 22:57:03 +08:00
Aigio Liu 5e9af6dc69 fix 2021-08-15 22:52:12 +08:00
Aigio Liu d36d93584d build-osx-app.sh 2021-08-15 22:35:29 +08:00
Aigio Liu b2e8d926a5 Info.plist 2021-08-15 22:22:34 +08:00
Aigio Liu ed6b476a2f 服务端文本多语言机翻 2021-08-15 18:03:15 +08:00
Aigio Liu 2360b726b7 开始菜单磁贴背景颜色改为透明 & 服务端字符串资源 2021-08-15 02:11:08 +08:00
Aigio Liu 2130c5bff2 fix 2021-08-14 19:42:17 +08:00
Aigio Liu 07ee187a94 改进拼接字符串 2021-08-14 19:32:03 +08:00
Aigio Liu 4b1ea2c311 del ws arg 2021-08-14 19:22:22 +08:00
Aigio Liu f4820adf2d fix 2021-08-14 19:08:12 +08:00
rmbgame fa9d8f3a34 UserProfile UI 2021-08-14 18:18:07 +08:00
Aigio Liu e5c0d28d03 fix login text 2021-08-14 16:48:59 +08:00
Aigio Liu 112028b1c4 fix 2021-08-14 16:32:01 +08:00
Aigio Liu f40f469839 fix Bind LRB 2021-08-14 16:18:26 +08:00
Aigio Liu 6ec3671d54 fix Close Window 2021-08-14 13:20:39 +08:00
Aigio Liu 4c31a020e5 fix Bind LRB 2021-08-14 13:18:16 +08:00
rmbgame ea185d683d release desc 2021-08-14 04:30:26 +08:00
rmbgame 9827dfe6b1 Style 2021-08-14 03:49:39 +08:00
Mossimo 1e7dbc4c7e save 2021-08-13 21:40:25 +08:00
Mossimo d6f5e79f1d fix phone no close 2021-08-13 21:39:33 +08:00
rmbgame 7ea480e72c Ui 2021-08-13 21:36:23 +08:00
Aigio Liu 8acfab11df fix LRB 2021-08-13 20:52:45 +08:00
Mossimo 68d2d64ea7 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-08-13 16:54:45 +08:00
Mossimo 703f1c496b save 2021-08-13 16:54:25 +08:00
Aigio Liu 22c2baf321 fix AppUpdate 2021-08-12 20:56:53 +08:00
Aigio Liu c872c8a159 fix UnitTest 2021-08-12 20:56:52 +08:00
Aigio Liu b8712ea371 SevenZipExtractor 2021-08-12 18:48:16 +08:00
rmbgame 37c2a73d41 Fix 2021-08-12 17:02:53 +08:00
rmbgame c32ffdb9aa Fix 2021-08-12 17:02:29 +08:00
Aigio Liu 251e350381 const MaxProgress 2021-08-12 17:00:19 +08:00
Aigio Liu a7fb68aeb5 Hosts Encoding ANSICodePage 2021-08-12 17:00:17 +08:00
rmbgame eb760621f9 改进库存游戏占用显示情况 2021-08-12 16:51:16 +08:00
Aigio Liu afcbb475d0 SizeConverter 2021-08-12 15:05:22 +08:00
Aigio Liu 55bee3795f GeneralSettings.HostsEncodingType 2021-08-12 14:41:13 +08:00
rmbgame 9231325b2a Style 2021-08-12 05:29:45 +08:00
rmbgame ae3525aef6 Misc 2021-08-12 05:18:01 +08:00
rmbgame d37e315ccc Update 2021-08-12 05:08:57 +08:00
rmbgame bf37e576db Style 2021-08-12 04:40:14 +08:00
rmbgame ae98762d7b Style 2021-08-12 04:37:16 +08:00
rmbgame 79376bd7f5 库存游戏列表显示已安装游戏占用空间 2021-08-12 04:36:23 +08:00
rmbgame 39f9c5044f Submodule Update 2021-08-12 03:38:30 +08:00
rmbgame 01f1c584da Fix Crash Bug 2021-08-12 03:32:43 +08:00
rmbgame b5379c9e55 Fix 2021-08-11 23:26:46 +08:00
rmbgame 078fd87541 Fix 2021-08-11 23:12:57 +08:00
rmbgame e8de9d77be UI 2021-08-11 23:02:54 +08:00
Aigio Liu b94b4424c5 fix 2021-08-11 22:58:06 +08:00
Aigio Liu 2c80778627 AppUpdate Fix 2021-08-11 22:44:21 +08:00
rmbgame 6e13cb8f34 Misc 2021-08-11 22:40:21 +08:00
rmbgame b8fa063141 FIx 2021-08-11 22:38:58 +08:00
rmbgame 29300ae5f3 release template update 2021-08-11 20:31:36 +08:00
Aigio Liu 782099e225 v2.4.9 2021-08-11 20:11:12 +08:00
rmbgame d29e3a2d38 UI Fix 2021-08-11 19:50:30 +08:00
Aigio Liu d25e25b0d7 tryfix #329 2021-08-11 19:29:20 +08:00
Aigio Liu 288eb16fd2 Unified logic 2021-08-11 18:43:26 +08:00
Aigio Liu f11e2341a1 fix Desktop TextBoxWindowViewModel.ShowDialogAsync 2021-08-11 18:39:25 +08:00
rmbgame 11e06efe3e Misc 2021-08-11 18:35:08 +08:00
Aigio Liu ecb1ca9aff EnableCompressionInSingleFile false 2021-08-11 18:20:36 +08:00
rmbgame f7de4faf85 改进令牌改名方式 2021-08-11 18:10:53 +08:00
Aigio Liu 3aefd5e877 Remove CEF 2021-08-11 17:09:53 +08:00
rmbgame 3e5e6a116a Misc 2021-08-11 16:42:53 +08:00
rmbgame 6ce12ce286 Misc 2021-08-11 15:57:58 +08:00
Aigio Liu c1054c0fa5 Convert Java Code to Kotlin Code 2021-08-11 14:27:45 +08:00
Aigio Liu 9f25b1853f C# 10 2021-08-11 13:49:30 +08:00
Aigio L 24cd01c47b Create dotnet.yml 2021-08-11 13:28:53 +08:00
Aigio Liu ccaad35cc8 Update .NET 6 Preview 7 2021-08-11 13:19:54 +08:00
Aigio Liu aab2e417ba Translate 2021-08-11 13:04:05 +08:00
Aigio Liu 85abe84774 Update .editorconfig 2021-08-11 12:43:39 +08:00
Aigio Liu f22ec12782 fix 2021-08-10 12:50:25 +08:00
rmbgame 54e613dec0 Misc 2021-08-09 15:57:27 +08:00
rmbgame 3d9618c0d1 Misc 2021-08-09 13:52:00 +08:00
Mossimo e6cbf1bcea Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-08-09 10:20:53 +08:00
Mossimo 5a6507aad4 fastLogin 2021-08-09 10:20:24 +08:00
Aigio Liu 1bc80d2ab4 fix Translate tool & Add translated text 2021-08-09 09:16:56 +08:00
Aigio Liu 082a3b70ed fix GetQrCodeStreamAsync & ReadCommand 2021-08-09 08:05:07 +08:00
Aigio Liu b681fd2235 Remove resx Key AchievementManage 2021-08-07 22:43:09 +08:00
Aigio Liu fe6ac9623f ProofreadCommand 2021-08-07 19:45:00 +08:00
Aigio Liu 4e97e1b7f6 社区加速 rename 网络加速 2021-08-07 14:41:23 +08:00
Aigio Liu 4d539baa15 Translate Tool 2021-08-07 14:34:46 +08:00
Aigio Liu cadf6c2be6 PlatformNotificationServiceImpl & pubxml 2021-08-06 14:09:29 +08:00
Mossimo 2faa8e824c Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-08-06 13:55:49 +08:00
Mossimo efc278f2a4 fix api url 2021-08-06 13:55:37 +08:00
Aigio Liu ca90312476 fix 2021-08-05 18:46:27 +08:00
Aigio Liu 0546522eb5 ClearAllPackCacheDir 2021-08-05 18:35:21 +08:00
Aigio Liu 1a6438eff6 Android Notification 2021-08-05 18:21:51 +08:00
rmbgame edb2f8affb Fix 2021-08-05 16:53:34 +08:00
rmbgame dab60bcd25 新增steam登录时通知我设置项 2021-08-05 16:31:05 +08:00
rmbgame 1ba0c1f785 Fix 2021-08-05 16:15:00 +08:00
rmbgame 4a1ae528ab windows托盘通知实现 2021-08-05 15:52:55 +08:00
rmbgame de29d52ee3 NotifyIcon 2021-08-05 10:00:11 +08:00
rmbgame 16997b6c6a Misc 2021-08-05 10:00:11 +08:00
Aigio Liu 2209595917 fix Desktop Bridge System Boot Run 2021-08-05 08:20:39 +08:00
Mossimo d136360505 save 2021-08-04 19:29:12 +08:00
Mossimo 28b25f3ce8 fix errror 2021-08-04 19:27:01 +08:00
Aigio Liu e1f44b817d fix DesktopBrider BootAutoStart 2021-08-04 19:26:04 +08:00
Aigio Liu bbd2b88ce0 fix 2021-08-04 18:13:14 +08:00
Aigio Liu 24aeacc177 fix Android WaitForActivityAsync 2021-08-04 13:43:13 +08:00
Aigio Liu 1b46ebc96a Android AppUpdate 2021-08-04 13:31:51 +08:00
Aigio Liu 9a14d52844 pubxml 2021-08-04 13:31:50 +08:00
Aigio Liu 296552db2b fix 2021-08-04 00:33:20 +08:00
Aigio L fa3ceaccdc Update dotnet.yml 2021-08-04 00:27:06 +08:00
Aigio Liu 8cfb83ddb9 FastLRBHelper 2021-08-04 00:04:06 +08:00
Aigio Liu a93b1cbb78 add Obsolete msg 2021-08-03 22:25:49 +08:00
mossimo 79a88c7bbd Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-08-03 22:25:12 +08:00
mossimo d009f9aad4 save 2021-08-03 22:24:29 +08:00
Aigio Liu 2b34cf92b1 fix slnf 2021-08-03 21:17:32 +08:00
Aigio Liu 3e71678f9f fix 2021-08-03 21:07:08 +08:00
Aigio Liu 52fd23f382 Correction Comment 2021-08-03 21:07:07 +08:00
Aigio Liu 27297c4baf fix 2021-08-03 20:49:09 +08:00
Aigio Liu c9ca3e21dd CI 2021-08-03 19:28:39 +08:00
mossimo de8bd62033 f 2021-08-03 15:56:33 +08:00
mossimo 9c755091c3 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-08-03 15:44:05 +08:00
mossimo 22914a8fef save 2021-08-03 15:43:50 +08:00
rmbgame a7b0c99156 新增存储空间设置项
改进库存游戏UI
2021-08-03 14:21:20 +08:00
Aigio Liu fd77a16261 add SecurityKeyPadding & del CefNet Source 2021-08-03 13:58:58 +08:00
Aigio Liu 1e10c603cf Desktop Bridge & fix AppUpdate & update nuget packages 2021-08-03 13:24:05 +08:00
Aigio Liu 5a6f7ff65c fix SteamAuthTradeActivity 2021-08-03 02:21:47 +08:00
Aigio Liu b09d781ed9 fix 2021-08-02 13:29:12 +08:00
Aigio Liu 5922816b74 AppUpdate 2021-08-02 04:36:36 +08:00
Aigio Liu 953f8d6522 v2.4.9 2021-08-01 19:57:29 +08:00
mossimo 003df684bd Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-08-01 18:53:09 +08:00
mossimo 7449fd962b chaneg 2021-08-01 18:52:31 +08:00
Aigio Liu 74e3cbd2bc Update Windows SDK for .NET 5 & Enable PublishSingleFile & fix Android RecycleViewAdapter 2021-08-01 14:13:47 +08:00
rmbgame 96af648f29 增加下载更新渠道设置 2021-08-01 13:08:54 +08:00
rmbgame cc7f53a335 修复部分游戏被错误屏蔽没有加载 2021-08-01 12:11:40 +08:00
rmbgame f5029746bb Misc 2021-08-01 12:11:40 +08:00
Aigio Liu 7fd234802e fix Res Link 2021-07-31 20:09:03 +08:00
Aigio Liu d6a0dff432 Android Explorer BaseDirectory 2021-07-31 17:03:09 +08:00
mossimo 3160664403 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-31 14:22:11 +08:00
mossimo 4566696e33 fix 2021-07-31 14:21:38 +08:00
rmbgame fa10d1052e Misc 2021-07-31 06:54:13 +08:00
rmbgame c51142652f 家庭库共享排序功能优化 2021-07-31 06:54:13 +08:00
Aigio Liu 948a2dbb9f fix 2021-07-30 22:58:33 +08:00
Aigio Liu 16f5d88851 Android Settings UI Impl 2021-07-30 22:43:35 +08:00
Aigio Liu aa9eb5062a Settings Android UI 2021-07-30 18:42:30 +08:00
mossimo d2f56f5e9a save 2021-07-30 15:39:13 +08:00
mossimo 424c0f7822 Fix cancellationToken 2021-07-30 15:34:47 +08:00
rmbgame 3af13c52d1 UI Fix 2021-07-30 15:30:29 +08:00
rmbgame db868de4a7 UI Fix
NugetPackage Update
2021-07-30 14:32:19 +08:00
rmbgame 4748483016 新增使用硬件加速设置项 2021-07-30 14:25:43 +08:00
mossimo 50aeca6c87 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-30 13:41:28 +08:00
mossimo 58e91f098f websocket 2021-07-30 13:41:16 +08:00
rmbgame bc25996f85 整体UI改进 2021-07-30 12:14:14 +08:00
Aigio Liu a91abe6de5 About Android UI 2021-07-30 11:47:44 +08:00
Aigio Liu a0968ebcb2 UpdateChannelType 2021-07-30 10:07:39 +08:00
rmbgame c96af3133e fix 2021-07-30 09:44:14 +08:00
rmbgame bf9d9214ad 提示框支持设置不再提示 2021-07-30 09:35:03 +08:00
Aigio Liu 4b7f5c383c del test line 2021-07-30 08:56:11 +08:00
rmbgame ae371e5943 about ui 2021-07-30 08:23:07 +08:00
rmbgame 4ca3da708b 桌面端令牌二维码UI 2021-07-30 07:57:27 +08:00
Aigio Liu 3eda478d04 SubscribeInMainThread 2021-07-29 11:00:52 +08:00
rmbgame ab26ba1401 库存游戏 界面交互 改进 2021-07-29 10:55:57 +08:00
Aigio Liu 7f0cee6a1a SettingsHost2 2021-07-28 11:32:47 +08:00
rmbgame f268c1a530 Fix Inject Steam Bug 2021-07-28 03:33:31 +08:00
Aigio Liu 573b874e74 GetQRCodeAsync 2021-07-27 21:26:01 +08:00
Aigio Liu eb4c142c45 Improved Auth QR code format 2021-07-26 12:24:23 +08:00
Aigio Liu 8feb787b7f ExportAuthToQRCode Format & Brotli 2021-07-26 01:31:33 +08:00
Aigio Liu 21fe71edff LocalAuth ShowQRCode 2021-07-25 20:30:25 +08:00
rmbgame 9a4e60266d Update UI 2021-07-25 09:57:48 +08:00
Aigio Liu babe4e2d80 fix 2021-07-24 23:21:24 +08:00
Aigio Liu d6d0d1bfa1 QRCode Scan ImportSteamPlusPlusV2 & SteamAuthTrade check all with bottom actions 2021-07-24 19:25:49 +08:00
Aigio Liu d938aa33a5 SteamAuthTradeActivity 2021-07-23 19:52:45 +08:00
Aigio Liu 82bac88306 Remove Local Auth FAB 2021-07-23 13:46:46 +08:00
Aigio Liu 7b2888de34 local auth toolbar menu 2021-07-22 23:54:31 +08:00
Aigio Liu e3eb1776de fix FirstLoadedAuthenticatorsEmpty 2021-07-22 16:09:29 +08:00
Aigio Liu 92e7460fe5 AutoRefreshCode Impl 2021-07-22 15:04:55 +08:00
Aigio Liu 545d421347 AutoRefreshCode UI 2021-07-21 22:36:45 +08:00
Aigio Liu 4fe04bdf6a Android localization following system 2021-07-21 14:45:35 +08:00
Aigio Liu cf5bf182ec SteamAuthTradeActivity 2021-07-20 12:38:24 +08:00
Aigio Liu 94c1199602 fix Authenticator Rename error 2021-07-19 13:11:11 +08:00
Aigio Liu ec2b13277f AuthDetailActivity 2021-07-18 22:20:19 +08:00
Aigio Liu f607effc77 new API Clipboard2 & AuthDetailActivity 2021-07-18 19:55:08 +08:00
Aigio Liu 28d53082ab Optimize loading auths 2021-07-18 03:54:15 +08:00
Aigio Liu c996bbb721 Async Load Authenticators 2021-07-18 03:47:14 +08:00
Aigio Liu 4a5beaea9e style fix 2021-07-18 03:07:40 +08:00
mossimo 479580c5d0 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-18 01:04:26 +08:00
mossimo 59d77db55d save 2021-07-18 01:04:09 +08:00
Aigio Liu a8965dad8a fix 2021-07-18 01:03:20 +08:00
mossimo 0dc0e01efb Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-18 00:46:36 +08:00
mossimo 91a47ada6e fix 2021-07-18 00:45:48 +08:00
rmbgame f5dbf91e93 Misc 2021-07-17 23:52:22 +08:00
mossimo abe58fed60 fixtitle 2021-07-17 23:48:06 +08:00
Aigio Liu 94882bc6a3 fix android auth 2021-07-17 23:27:22 +08:00
mossimo 8863852db2 empt pwd jump 2021-07-17 22:05:13 +08:00
rmbgame bc8dd1f11f Fix 2021-07-17 20:34:37 +08:00
rmbgame ca95502b5d TextBoxWindow 2021-07-17 19:54:16 +08:00
mossimo e15d2359b6 fix title 2021-07-17 14:08:41 +08:00
Aigio Liu cc4dc1f289 fix macOS NotifyIcon 2021-07-17 13:54:16 +08:00
Aigio Liu 62fa42e661 fix macOS NotifyIcon 2021-07-17 13:44:35 +08:00
Aigio Liu 92f9e74058 fix2 2021-07-16 21:02:05 +08:00
Aigio Liu 0dca54692d fix 2021-07-16 20:36:15 +08:00
rmbgame cdc133b946 MainWindow Null Error Fix 2021-07-16 19:50:05 +08:00
rmbgame 8cabdf1be7 Bugs fix 2021-07-16 19:38:47 +08:00
rmbgame c773027cd4 update nuget package 2021-07-16 19:38:47 +08:00
mossimo 827de1afa7 fix sudo 2021-07-16 16:15:38 +08:00
mossimo b85ae2aae0 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-16 13:20:41 +08:00
mossimo 32a0608054 save 2021-07-16 13:20:33 +08:00
Aigio Liu f01b5ae652 new API FilePicker2 2021-07-16 04:02:35 +08:00
Aigio Liu a21b44f072 fix CI 2021-07-15 23:39:56 +08:00
Aigio Liu ec6ae4f161 Update .Net SDK 6 Preview 6 2021-07-15 23:34:39 +08:00
rmbgame 77319fa4ef TextboxWindow Auto Height 2021-07-15 21:19:08 +08:00
rmbgame 8654dd3e24 Misc 2021-07-15 21:19:08 +08:00
Aigio Liu 481c4ee310 fix UI 2021-07-15 19:20:26 +08:00
Aigio Liu 9c7172efa2 Obsolete PasswordWindowViewModel 2021-07-15 17:43:48 +08:00
Aigio Liu 1938a16bcf fix viewbinding and vmbinding 2021-07-15 12:45:11 +08:00
Aigio Liu 050cdeaf0f Android alpha release 2021-07-15 11:31:23 +08:00
Aigio Liu d95522537d SteamAuthTrade new icons 2021-07-15 10:08:11 +08:00
Aigio Liu 8fc34fc5f6 AddItemDecoration 2021-07-13 23:35:22 +08:00
Aigio Liu e9f07d0153 new API MainThread2/Email2 2021-07-13 21:57:30 +08:00
mossimo b7e8e69e04 1 2021-07-13 19:38:53 +08:00
mossimo bb42416ced fix 2021-07-13 18:27:16 +08:00
mossimo 4635377b35 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-13 17:46:48 +08:00
mossimo ab8cc4f253 fix error 2021-07-13 17:46:27 +08:00
Aigio Liu 3c7bf29bf6 SteamAuthTradeActivity 2021-07-13 15:21:12 +08:00
Aigio Liu 67b3c025f3 fragment_local_auth_import_steam_user.xml 2021-07-12 19:35:44 +08:00
rmbgame ab21452409 Update ASF 2021-07-12 18:44:41 +08:00
rmbgame fa33bd533f fix asf login disconnected 2021-07-12 18:44:41 +08:00
rmbgame ddb5343f6c Misc 2021-07-12 18:44:41 +08:00
Aigio Liu c34ab74594 AuthTrade Android View 2021-07-11 22:22:37 +08:00
Aigio Liu 0cdb6f060e activity_steam_auth_trade.xml 2021-07-11 00:39:16 +08:00
Aigio Liu 20d15460c1 LocalAuthPage Activities 2021-07-10 21:36:15 +08:00
mossimo 5cb5faacb0 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-10 21:07:12 +08:00
mossimo d22e16c44b fixMacOS 2021-07-10 21:06:38 +08:00
Aigio Liu 65425e87f0 AddAuth Fragments 2021-07-10 13:12:33 +08:00
Aigio Liu 91c4843d84 fix macOS 2021-07-09 23:57:21 +08:00
mossimo e9ec97b152 fix 2021-07-09 23:53:27 +08:00
mossimo 296bc1597d fix 2021-07-09 23:19:15 +08:00
mossimo 90eeb05620 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-09 23:00:27 +08:00
mossimo 5962f4c4dc MasOS Bate 80% 2021-07-09 22:59:50 +08:00
mossimo a50f099e73 MacOS EDIT Cer Fix 2021-07-09 22:28:57 +08:00
Aigio Liu ec3f14099e use WebHost on EMBEDDED_IN_STEAMPLUSPLUS 2021-07-09 19:21:29 +08:00
Aigio Liu 8988155734 WebRequest.CreateHttp 2021-07-09 18:18:24 +08:00
rmbgame 1fb407f110 ASF 2021-07-09 18:17:33 +08:00
mossimo 97ad4af6a4 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-09 16:11:50 +08:00
Aigio Liu a650c698ad fix macOS 2021-07-09 16:08:10 +08:00
Aigio Liu dcc4647001 fix 2021-07-09 15:26:27 +08:00
mossimo d8c7ea4043 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-09 15:15:22 +08:00
Aigio Liu 3fa07a7418 pubxml 2021-07-09 15:12:31 +08:00
mossimo a9870ab3e5 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-09 15:11:52 +08:00
Aigio Liu fd404f4431 macOS/linux TFM -> net5.0 2021-07-09 15:06:08 +08:00
Aigio Liu 137f400740 ST.Services.CloudService TFM del net5.0 2021-07-09 14:54:49 +08:00
mossimo 627adcac29 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-08 19:40:32 +08:00
mossimo e8b4df592d save 2021-07-08 19:39:53 +08:00
Aigio Liu 3c82561858 LocalAuth Mobile Views 2021-07-08 17:34:24 +08:00
Aigio Liu 6754802cb8 remove fab_ids 2021-07-07 23:05:07 +08:00
Aigio Liu 73fd1d8b48 LocalAuthFragment FAB SpeedDial 2021-07-07 22:56:00 +08:00
mossimo 264516d12a Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-07 19:49:50 +08:00
mossimo 861b0576c1 save 2021-07-07 19:49:45 +08:00
Aigio Liu c63dba2e28 fix 2021-07-07 09:55:42 +08:00
rmbgame cbe3b954fc fix 2021-07-07 08:14:04 +08:00
rmbgame 6b74930e1a ConsoleShell 2021-07-07 08:12:39 +08:00
Aigio Liu 37ac356c70 fix 2021-07-06 20:09:23 +08:00
Aigio Liu a7cc28a299 LocalAuthPage Mobile VM 2021-07-06 19:49:58 +08:00
rmbgame e1294ce0c2 update titanium web proxy 2021-07-06 01:53:32 +08:00
rmbgame 36dc7cc946 Misc 2021-07-06 01:53:32 +08:00
Aigio Liu d0de493cea GAPAuthenticatorAdapter 2021-07-05 14:24:05 +08:00
Aigio Liu fe587f3054 fix CI 2021-07-05 11:22:40 +08:00
Aigio Liu 160b65563d remove console project 2021-07-05 02:15:25 +08:00
Aigio Liu a21ec579fb feature #317 2021-07-04 21:14:01 +08:00
Aigio Liu 19ee399a94 fix 2021-07-04 19:34:05 +08:00
Aigio Liu 5ee361bc06 LinkHelpers for Bin 2021-07-04 19:31:04 +08:00
mossimo f3494ba13b Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-07-04 15:56:32 +08:00
mossimo 05dce06dcd savefix 2021-07-04 15:56:21 +08:00
Aigio Liu 0cea7caef2 del macos tfm 2021-07-04 13:03:49 +08:00
Aigio Liu f9ebc32f8b Mac TFM to 6.0 2021-07-03 11:45:47 +08:00
rmbgame 2de1a12e42 ConsoleShell 2021-07-03 09:00:34 +08:00
Aigio Liu d2874d88ea fix bugs
https://appcenter.ms/orgs/BeyondDimension/apps/Steam/crashes/errors/1815188879u/overview
https://appcenter.ms/orgs/BeyondDimension/apps/Steam/crashes/errors/2624424033u/overview
https://appcenter.ms/orgs/BeyondDimension/apps/Steam/crashes/errors/842356268u/overview
https://appcenter.ms/orgs/BeyondDimension/apps/Steam/crashes/errors/1871155023u/overview
https://appcenter.ms/orgs/BeyondDimension/apps/Steam/crashes/errors/1572585065u/overview
2021-07-03 02:10:50 +08:00
rmbgame cd39edeefd AvalonEdit 2021-07-02 10:16:51 +08:00
Aigio Liu fe000c95b6 新增 QQ 登录渠道,修复 第三方账号绑定或登录时的个人资料没有同步显示 2021-07-01 20:19:33 +08:00
rmbgame 868143a248 Add AvaloniaEdit 2021-07-01 08:14:09 +08:00
rmbgame cddf671fd6 menu tip 2021-07-01 08:14:09 +08:00
Aigio Liu ed9cab2175 Mobile Auth GAP & QQLogin 2021-06-30 23:49:46 +08:00
mossimo fc1e2f3cac Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-30 18:51:58 +08:00
mossimo 4fd203eab8 fix Content-Type 2021-06-30 18:51:34 +08:00
Aigio Liu 4defb58b0e ASF Log redirection 2021-06-30 11:28:11 +08:00
Aigio Liu 42c0842a1d ASF Log Config 2021-06-30 00:45:04 +08:00
rmbgame 725112e350 Misc 2021-06-29 23:40:28 +08:00
rmbgame 7d9607b97e 改进加速计时逻辑 2021-06-29 23:40:28 +08:00
rmbgame ebfcb9779b asf 2021-06-29 23:40:28 +08:00
Aigio Liu a99f6f5e14 Update Translate Tool 2021-06-29 20:16:09 +08:00
Aigio Liu 8dd516e5d2 Translation Tool/WriteCommand 2021-06-29 17:46:55 +08:00
Aigio Liu 6cede51159 Translation Tool 2021-06-29 01:41:01 +08:00
Aigio Liu d4a7714751 UserProfileActivity 2021-06-26 23:23:54 +08:00
Aigio Liu 7f57f0192c fix SendSmsUIHelper for Android, improve RSAUtils & API Error 1006 2021-06-26 00:26:59 +08:00
Aigio Liu 9921781f74 VisualElements 2021-06-25 18:00:26 +08:00
Aigio Liu 1a4cfd3f51 fix pubxml ref rid not found error 2021-06-25 11:50:28 +08:00
mossimo b8964286c9 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-24 22:07:49 +08:00
Aigio Liu 5f8e33e015 FileSystemDesktopMac 2021-06-24 21:33:03 +08:00
Aigio L b68a2eeb37 Update dotnet.yml 2021-06-24 20:44:50 +08:00
Aigio L c903f3e755 Update dotnet.yml 2021-06-24 20:40:05 +08:00
Aigio L 0e7ccbb641 Update dotnet.yml 2021-06-24 20:36:34 +08:00
mossimo b51fe94053 savechange 2021-06-24 17:03:19 +08:00
mossimo 151afb0ba3 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-24 16:19:24 +08:00
mossimo 2b276e9440 save 2021-06-24 16:19:11 +08:00
Aigio L 7f5ebf1cb6 Update dotnet.yml 2021-06-24 16:18:34 +08:00
Aigio Liu 457867b0b1 fix 2021-06-24 15:59:23 +08:00
Aigio Liu 549100a52c fix 2021-06-24 13:08:40 +08:00
Aigio Liu 9a6d4353c7 fix CI 2021-06-24 13:05:33 +08:00
mossimo f8475322cf Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-24 12:40:29 +08:00
mossimo 2a350c24c8 save 2021-06-24 12:39:51 +08:00
Aigio Liu a47d17055b fix CI 2021-06-24 12:38:55 +08:00
Aigio Liu 07e61dea44 Add IPlatformService 2021-06-24 12:34:57 +08:00
Aigio Liu 664f242a11 ico & icns 2021-06-24 12:05:47 +08:00
mossimo 029801c386 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-24 12:04:12 +08:00
mossimo 26d39bb33a save 2021-06-24 12:03:54 +08:00
Aigio Liu 2fa8f40086 fix CI 2021-06-24 11:14:19 +08:00
Aigio Liu 95b53cab0d Update submodule 2021-06-24 11:05:29 +08:00
Aigio Liu 675ae06395 v2.4.2 2021-06-24 01:49:22 +08:00
rmbgame 470c244d16 Misc 2021-06-24 00:37:21 +08:00
rmbgame 5865364e6a Submodule 2021-06-24 00:37:21 +08:00
rmbgame 2559fc2c5d CI Build Error Fix 2021-06-24 00:37:21 +08:00
Aigio Liu a184cc069a UserProfile for Android 2021-06-23 22:29:50 +08:00
mossimo 03a9e83481 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-23 17:27:41 +08:00
mossimo f7e5fc2421 OK 2021-06-23 17:27:03 +08:00
rmbgame 3c29b8efdf Flyout Style Fix 2021-06-23 14:29:38 +08:00
rmbgame 83f5c370fe Misc 2021-06-23 14:29:38 +08:00
Aigio Liu 9e2e8d7d59 ShowWindowServiceImpl for Android 2021-06-22 21:22:04 +08:00
mossimo 63cb5c11d7 save 2021-06-22 00:39:51 +08:00
mossimo 1fff72915c ShareManage (Edit Save) Ok
wait details
2021-06-22 00:39:12 +08:00
Aigio Liu 7e9925f05b AboutActivity 2021-06-21 20:49:55 +08:00
rmbgame e332bee93a submodule 2021-06-21 19:06:26 +08:00
mossimo 87ce027ca5 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-21 17:56:16 +08:00
mossimo a669560415 shareManage 2021-06-21 17:55:51 +08:00
rmbgame 8067fea514 update 2021-06-21 16:50:04 +08:00
rmbgame 6d73c19d27 save 2021-06-21 15:29:21 +08:00
rmbgame d9ef9e3dcd add asf submodule references 2021-06-21 15:29:20 +08:00
rmbgame 549ec79bfa 库存游戏可浏览已安装的游戏文件夹 2021-06-21 15:29:20 +08:00
rmbgame 8aaf814ff7 save 2021-06-21 15:29:20 +08:00
rmbgame 7e2b893104 asf download 2021-06-21 15:29:20 +08:00
rmbgame 8ce4861846 save 2021-06-21 15:29:20 +08:00
rmbgame 60abff7a13 save 2021-06-21 15:29:20 +08:00
Aigio Liu ae8ec51642 about page Android UI 2021-06-20 23:00:41 +08:00
Aigio Liu 318b360212 PhoneNumberLoginOrRegisterFragment 2021-06-20 19:55:49 +08:00
Aigio Liu 3ff117ecec LoginOrRegisterPage 2021-06-19 21:31:50 +08:00
Aigio Liu dc54aae844 MyPage 2021-06-19 00:33:18 +08:00
Aigio Liu 39ad55dde0 Fix Avalonia.Designer Call 2021-06-18 19:17:21 +08:00
Aigio Liu 11830c1c95 Toolbar Style 2021-06-18 18:37:42 +08:00
Aigio Liu 0139aa65cd Upgrade to .NET 6.0.100-preview.5.21302.13 2021-06-18 12:47:01 +08:00
Aigio Liu 271514f51b LoginOrRegisterActivity 2021-06-17 19:10:33 +08:00
Aigio Liu b2c8ed2081 fix ItemOnClick 2021-06-17 12:50:34 +08:00
Aigio Liu 5b34289212 MyPreferenceButtonAdapter 2021-06-16 23:19:26 +08:00
mossimo 3b4c06047a Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-16 00:18:37 +08:00
Aigio Liu c88cb29142 IsConnected 2021-06-15 18:54:15 +08:00
mossimo 7d4210febe try macos Install CerCertificate 2021-06-15 18:19:59 +08:00
Aigio Liu 9b385e43bb MyPage 2021-06-15 15:04:46 +08:00
mossimo 8aefabec2e try fix macos Accountchange 2021-06-15 11:39:15 +08:00
mossimo 64080fa4e4 fix textEdit 2021-06-15 09:44:36 +08:00
mossimo 5690613db2 1 2021-06-15 09:11:13 +08:00
Aigio Liu 6b66a2e3bd BaseRecycleViewAdapter 2021-06-14 18:58:30 +08:00
Aigio Liu eae82859f3 Android Res Links 2021-06-14 02:47:27 +08:00
Aigio Liu 3fcc001308 Remove Xamarin.Forms, Add Android Native UI 2021-06-13 16:11:47 +08:00
rmbgame c519cfe735 fix 2021-06-13 13:16:45 +08:00
rmbgame 697a8f54f1 asf 70% 2021-06-13 13:16:45 +08:00
Aigio Liu 686171f73c android fast login ui 2021-06-12 17:20:34 +08:00
mossimo d597f992e4 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-12 05:04:00 +08:00
mossimo 174ec43551 fix macos install cer 2021-06-12 05:03:34 +08:00
Aigio Liu 90f1aae4bd Android Native UI 2021-06-11 22:30:29 +08:00
Aigio Liu 99270e730e fix 2021-06-11 16:07:25 +08:00
Aigio Liu 080ed55860 fix 2021-06-11 16:07:24 +08:00
Aigio Liu ea0cd59763 AttachDevTools2 2021-06-11 15:40:17 +08:00
Aigio Liu a8780568d6 AttachDevTools2 2021-06-11 15:40:13 +08:00
rmbgame 9b9de32f3c 调整深色和浅色模式的视觉效果
添加asf功能 50%
2021-06-11 05:20:24 +08:00
rmbgame 288f947730 重写webview3 2021-06-10 21:01:39 +08:00
rmbgame 3c65d716b1 save 2021-06-10 21:01:39 +08:00
Aigio Liu ebef7ede81 fix 2021-06-10 18:48:43 +08:00
mossimo be5bb78773 Merge branch 'develop' of https://github.com/SteamTools-Team/SteamTools into develop 2021-06-10 18:34:52 +08:00
Aigio Liu db636e894f fix 2021-06-10 18:33:32 +08:00
mossimo 808f0c1b9d host edit 2021-06-10 18:09:04 +08:00
Aigio Liu 20af863f4e macOS AppLogo 2021-06-10 00:58:49 +08:00
Aigio Liu 15ddeddf0d fix 2021-06-10 00:46:30 +08:00
Aigio Liu 3eff9a45c6 IHttpService.GetImageAsync use Polly & AppLogo Update SVG & Mobile UI MyPage 2021-06-10 00:42:53 +08:00
Aigio Liu c3fbeb3c4a fix 2021-06-08 17:08:41 +08:00
Mossimo efc3cf6797 NoSandBox fix macos 2021-06-08 17:02:39 +08:00
Aigio Liu b78ac16667 增量更新 v2 2021-06-08 14:10:31 +08:00
mossimo a492968401 1 2021-06-06 18:16:50 +08:00
mossimo b4f220e683 NoSteamRunTips 2021-06-06 18:16:06 +08:00
Aigio Liu b356d80c3e fix 2021-06-06 12:11:12 +08:00
Aigio Liu 049072ea5d v2.4.1 2021-06-06 10:33:05 +08:00
rmbgame 9c13426781 fix more screen 2021-06-06 01:48:44 +08:00
rmbgame 67ec02af0c fix taskbar high dpi error 2021-06-06 01:42:11 +08:00
1212 changed files with 249235 additions and 30552 deletions
+2 -2
View File
@@ -4,7 +4,7 @@
root = true
# Unix-style newlines with a newline ending every file
[*]
[*.{sh}]
end_of_line = lf
insert_final_newline = true
@@ -17,7 +17,7 @@ charset = utf-8
[Makefile]
indent_style = tab
[*.{js,json,xaml,axaml}]
[*.{js,json,xaml,axaml,xml,resx,resw,csproj,wapproj,appxmanifest}]
indent_style = space
indent_size = 2
+1
View File
@@ -2,6 +2,7 @@
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
*.sh text eol=lf
###############################################################################
# Set default behavior for command prompt diff.
+13 -4
View File
@@ -11,7 +11,8 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ windows-latest, macOS-latest, ubuntu-latest ]
# os: [ windows-latest, macOS-latest, ubuntu-latest ]
os: [ windows-latest ]
steps:
- uses: actions/checkout@v2
- name: Setup .NET 5
@@ -21,7 +22,15 @@ jobs:
- name: Setup .NET 6
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.100-preview.4.21255.9
dotnet-version: 6.0.100-preview.7.21379.14
# - name: Install macOS SDK(macOS)
# if: matrix.os == 'macOS-latest'
# run: sudo dotnet workload install microsoft-macos-sdk-full
# - name: Install macOS SDK(Windows)
# if: matrix.os == 'windows-latest'
# run: dotnet workload install microsoft-macos-sdk-full
- name: Checkout repository
uses: actions/checkout@v2
@@ -37,11 +46,11 @@ jobs:
- name: dotnet restore SteamToolsV2+.Linux.sln
if: matrix.os == 'ubuntu-latest'
run: dotnet restore ./SteamToolsV2+.Linux.sln
run: dotnet restore ./SteamToolsV2+.Linux.slnf
- name: dotnet restore SteamToolsV2+.Mac.sln
if: matrix.os == 'macOS-latest'
run: dotnet restore ./SteamToolsV2+.Mac.sln
run: dotnet restore ./SteamToolsV2+.Mac.slnf
- name: dotnet AvaloniaApp build
run: dotnet build ./src/ST.Client.Desktop.Avalonia.App/ST.Client.Desktop.Avalonia.App.csproj
+6
View File
@@ -19,3 +19,9 @@
[submodule "references/WinAuth"]
path = references/WinAuth
url = https://github.com/SteamTools-Team/WinAuth
[submodule "references/ArchiSteamFarm"]
path = references/ArchiSteamFarm
url = https://github.com/SteamTools-Team/ArchiSteamFarm.git
[submodule "references/sqlite-net"]
path = references/sqlite-net
url = https://github.com/SteamTools-Team/sqlite-net.git
+3 -7
View File
@@ -1,20 +1,16 @@
<Project>
<PropertyGroup>
<LangVersion>9.0</LangVersion>
<LangVersion>preview</LangVersion>
<Nullable>enable</Nullable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<TrimMode>link</TrimMode>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>
<PropertyGroup Condition=" Exists('$(MSBuildProjectDirectory)\..\..\Unicorn.pfx') ">
<DefineConstants>SIGN_ASSEMBLY;$(DefineConstants)</DefineConstants>
<SignAssembly>true</SignAssembly>
<DelaySign>false</DelaySign>
<AssemblyOriginatorKeyFile>..\..\Unicorn.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)'=='Release' ">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
<AssemblyOriginatorKeyFile>$(MSBuildProjectDirectory)\..\..\Unicorn.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
</Project>
+46 -22
View File
@@ -11,11 +11,11 @@
[![GitHub Fork](https://img.shields.io/github/forks/rmbadmin/SteamTools?style=flat-square)](https://github.com/rmbadmin/SteamTools/network/members)
![GitHub Repo size](https://img.shields.io/github/repo-size/rmbadmin/SteamTools?style=flat-square&color=3cb371)
[![GitHub Repo Languages](https://img.shields.io/github/languages/top/SteamTools-Team/SteamTools?style=flat-square)](https://github.com/SteamTools-Team/SteamTools/search?l=c%23)
[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4)
[![C# 9.0](https://img.shields.io/badge/c%23-9.0-green.svg?style=flat-square&color=6da86a)](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9)
[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-7)
[![C# 10.0](https://img.shields.io/badge/c%23-10.0-green.svg?style=flat-square&color=6da86a)](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10)
[![Desktop GUI](https://img.shields.io/badge/gui@desktop-AvaloniaUI-purple.svg?style=flat-square&color=8c45ab)](https://github.com/AvaloniaUI/Avalonia)
[![Mobile GUI](https://img.shields.io/badge/gui@mobile-Xamarin.Forms-blue.svg?style=flat-square&color=3498db)](https://github.com/xamarin/Xamarin.Forms)
[![Desktop UI](https://img.shields.io/badge/ui@desktop-AvaloniaUI-purple.svg?style=flat-square&color=8c45ab)](https://github.com/AvaloniaUI/Avalonia)
![Mobile UI](https://img.shields.io/badge/ui@mobile-Platform_Native_UI-blue.svg?style=flat-square&color=3498db)
[![Official WebSite](https://img.shields.io/badge/website@official-Ant%20Design%20of%20React-blue.svg?style=flat-square&color=61dafb)](https://github.com/ant-design/ant-design)
[![BackManage WebSite](https://img.shields.io/badge/website@back_manage-Ant%20Design%20of%20Blazor-purple.svg?style=flat-square&color=512bd4)](https://github.com/ant-design-blazor/ant-design-blazor)
@@ -28,6 +28,12 @@
English | [简体中文](./README.md)
## 🚀 Download channel
- [GitHub Releases](https://github.com/SteamTools-Team/SteamTools/releases)
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
- [Microsoft Store](https://www.microsoft.com/store/apps/9MTCFHS560NG)
- [Official WebSite](https://steampp.net)
## ✨ Functions
1. Local reverse proxy for Steam's community webpage to enable normal access in **the Chinese Mainland, Mainland of China**
2. Quickly switch the Steam account that the current PC has remembered to log into
@@ -41,34 +47,45 @@ English | [简体中文](./README.md)
<!--Prerequisites Microsoft Visual C++ 2015-2019 Redistributable [64 bit](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 bit](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
## 🖥 Supported Operating Systems
- Desktop(Only 64 bit is supported)
- Windows 10 1607+ / Windows Server, version 1909+ / Windows Server 2019 / Windows Server 2016
- Desktop(Only X64 and ARM64 are supported)
- Windows 10 / Windows Server, Version 20H2
- Windows 10 / Windows Server, Version 2004
- Windows 10 / Windows Server, Version 1909
- Windows 10 / Windows Server, Version 1903
- Windows 10, Version 1809
- Windows 10, Version 1803
- Windows 10, Version 1709
- Windows 10, Version 1607
- Windows 8.1 / Windows Server 2012 R2
- Windows 7 SP1 [ESU](https://docs.microsoft.com/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq)
- Prerequisites
- KB3063858 [64 bit](https://www.microsoft.com/download/details.aspx?id=47442) / [32 bit](https://www.microsoft.com/download/details.aspx?id=47409)
- macOS 10.13 High Sierra Or Higher
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
- macOS 10.14 Mojave Or Higher
- Linux Distribution
- Arch Linux
- Alpine Linux 3.11+
- Alpine Linux 3.13+
- CentOS 7+
- Debian 9+
- Debian 10+
- Deepin 20.1 / UOS 20
- Fedora 32+
- Linux Mint 18+
- openSUSE 15+
- Red Hat Enterprise Linux 7+
- SUSE Enterprise Linux (SLES) 12 SP2+
- Ubuntu 20.10, 20.04, 18.04, 16.04
- Mobile(Only ARM64 or ARM32 are supported)
- Android 5.0+
- iOS 10.0+
- Ubuntu 16.04, 18.04, 20.04+
- Mobile
- Android 5.0/API 21+ (Only [arm64-v8a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#arm64-v8a) and [armeabiv-v7a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#v7a) are supported)
- iOS 10.0+ (ARM64 only)
## ⛔ Unsupported Operating System
- Windows 8
- [Due to Microsoft's official support for the product has ended](https://docs.microsoft.com/lifecycle/products/windows-8), so this program cannot run on this operating system, [It is recommended to upgrade to Windows 8.1](https://support.microsoft.com/windows/update-to-windows-8-1-from-windows-8-17fc54a7-a465-6b5a-c1a0-34140afd0669)
- Windows Server 2012 / 2008 R2 SP1
- Only version 1.X is available, and version 2.X is not supported. It is recommended to upgrade to **Windows Server 2012 R2** or higher
- Windows Server 2008 R2 SP1
- Only version 1.x is available, 2.x is not supported at first, and it is recommended to upgrade to a higher version
- Windows Server / Linux version without desktop GUI
## 🌏 Roadmap
@@ -78,7 +95,7 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
[Visual Studio 2019 Version 16.10 Or Higher](https://visualstudio.microsoft.com/vs/) Or [JetBrains Rider](https://www.jetbrains.com/rider/) Or ~~[Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/)~~ Or ~~[Visual Studio Code](https://code.visualstudio.com/)~~
- Supported Operating Systems
- [Windows 10 version 2004 or higher: Home, Professional, Education, and Enterprise (LTSC and S are not supported)](https://docs.microsoft.com/en-us/visualstudio/releases/2019/system-requirements)
- [macOS 10.13 High Sierra Or Higher](https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2019-system-requirements-mac)
- [macOS 10.14 Mojave Or Higher](https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2019-system-requirements-mac)
- Workload
- Web and Cloud
- ASP.NET and Web Development
@@ -95,6 +112,9 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
[Android Studio 4.2+](https://developer.android.com/studio/)
[Xcode 13](https://developer.apple.com/xcode/)
## 📄 Thanks to the following Open Source Projects
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
* [MetroRadiance](https://github.com/Grabacr07/MetroRadiance)
@@ -125,7 +145,7 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
* [Polly](https://github.com/App-vNext/Polly)
* [TaskScheduler](https://github.com/dahall/taskscheduler)
* [SharpZipLib](https://github.com/icsharpcode/SharpZipLib)
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
* [SevenZipSharp](https://github.com/squid-box/SevenZipSharp)
* [Depressurizer](https://github.com/Depressurizer/Depressurizer)
* [NLog](https://github.com/nlog/NLog)
* [NUnit](https://github.com/nunit/nunit)
@@ -135,26 +155,30 @@ Read what we [milestones](https://github.com/SteamTools-Team/SteamTools/mileston
* [AvaloniaGif](https://github.com/jmacato/AvaloniaGif)
* [Avalonia XAML Behaviors](https://github.com/wieslawsoltes/AvaloniaBehaviors)
* [APNG.NET](https://github.com/jz5/APNG.NET)
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
* [Moq](https://github.com/moq/moq4)
* [NPOI](https://github.com/nissl-lab/npoi)
* [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
* [AspNet.Security.OpenId.Providers](https://github.com/aspnet-contrib/AspNet.Security.OpenId.Providers)
* [AspNet.Security.OAuth.Providers](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers)
* [CefNet](https://github.com/CefNet/CefNet)
* [CefSharp](https://github.com/cefsharp/CefSharp)
* [ZXing.Net](https://github.com/micjahn/ZXing.Net)
* [QRCoder](https://github.com/codebude/QRCoder)
* [React](https://github.com/facebook/react)
* [Ant Design](https://github.com/ant-design/ant-design)
* [Ant Design Blazor](https://github.com/ant-design-blazor/ant-design-blazor)
* [Toast messages for Xamarin.iOS](https://github.com/andrius-k/Toast)
* [XF.Material Library](https://github.com/Baseflow/XF-Material-Library)
* [Floating Action Button Speed Dial](https://github.com/leinardi/FloatingActionButtonSpeedDial)
* [Visual Studio App Center SDK for .NET](https://github.com/microsoft/appcenter-sdk-dotnet)
* [AppCenter-XMac](https://github.com/nor0x/AppCenter-XMac)
* [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras)
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
* [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)
* [Open Source Components for Xamarin](https://github.com/xamarin/XamarinComponents)
* [Google Play Services / Firebase / ML Kit for Xamarin.Android](https://github.com/xamarin/GooglePlayServicesComponents)
* [Picasso](https://github.com/square/picasso)
* [OkHttp](https://github.com/square/okhttp)
* [Material Components for Android](https://github.com/material-components/material-components-android)
* [AndroidX for Xamarin.Android](https://github.com/xamarin/AndroidX)
* [Android Jetpack](https://github.com/androidx/androidx)
* [ConstraintLayout](https://github.com/androidx/constraintlayout)
* [MSAL.NET](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet)
* [Entity Framework Core](https://github.com/dotnet/efcore)
* [ASP.NET Core](https://github.com/dotnet/aspnetcore)
+54 -23
View File
@@ -11,11 +11,11 @@
[![GitHub Fork](https://img.shields.io/github/forks/rmbadmin/SteamTools?style=flat-square)](https://github.com/rmbadmin/SteamTools/network/members)
![GitHub Repo size](https://img.shields.io/github/repo-size/rmbadmin/SteamTools?style=flat-square&color=3cb371)
[![GitHub Repo Languages](https://img.shields.io/github/languages/top/SteamTools-Team/SteamTools?style=flat-square)](https://github.com/SteamTools-Team/SteamTools/search?l=c%23)
[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-4)
[![C# 9.0](https://img.shields.io/badge/c%23-9.0-brightgreen.svg?style=flat-square&color=6da86a)](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9)
[![NET 6.0](https://img.shields.io/badge/dotnet-6.0-purple.svg?style=flat-square&color=512bd4)](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-7)
[![C# 10.0](https://img.shields.io/badge/c%23-10.0-brightgreen.svg?style=flat-square&color=6da86a)](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10)
[![Desktop GUI](https://img.shields.io/badge/gui@desktop-AvaloniaUI-purple.svg?style=flat-square&color=8c45ab)](https://github.com/AvaloniaUI/Avalonia)
[![Mobile GUI](https://img.shields.io/badge/gui@mobile-Xamarin.Forms-blue.svg?style=flat-square&color=3498db)](https://github.com/xamarin/Xamarin.Forms)
[![Desktop UI](https://img.shields.io/badge/ui@desktop-AvaloniaUI-purple.svg?style=flat-square&color=8c45ab)](https://github.com/AvaloniaUI/Avalonia)
![Mobile UI](https://img.shields.io/badge/ui@mobile-Platform_Native_UI-blue.svg?style=flat-square&color=3498db)
[![Official WebSite](https://img.shields.io/badge/website@official-Ant%20Design%20of%20React-blue.svg?style=flat-square&color=61dafb)](https://github.com/ant-design/ant-design)
[![BackManage WebSite](https://img.shields.io/badge/website@back_manage-Ant%20Design%20of%20Blazor-purple.svg?style=flat-square&color=512bd4)](https://github.com/ant-design-blazor/ant-design-blazor)
@@ -29,6 +29,12 @@
[English](./README.en.md) | 简体中文
## 🚀 下载渠道
- [GitHub Releases](https://github.com/SteamTools-Team/SteamTools/releases)
- [Gitee Releases](https://gitee.com/rmbgame/SteamTools/releases)
- [Microsoft Store](https://www.microsoft.com/store/apps/9MTCFHS560NG)
- [Official WebSite](https://steampp.net)
## ✨ 功能
1. 反代 Steam 的社区网页使其能正常访问
- 功能类似羽翼城大佬的 [steamcommunity_302](https://www.dogfight360.com/blog/686/)
@@ -50,34 +56,45 @@
<!--发布配置SelfContained=true时会自动打包VC++相关程序集-->
<!--先决条件 Microsoft Visual C++ 2015-2019 Redistributable [64 位](https://aka.ms/vs/16/release/vc_redist.x64.exe) / [32 位](https://aka.ms/vs/16/release/vc_redist.x86.exe)-->
## 🖥 系统要求
- 桌面端(仅支持 64 位)
- Windows 10 1607+ / Windows Server 版本 1903+ / Windows Server 2019 / Windows Server 2016
- Windows 8.1 / Windows Server 2012 R2
- 桌面端(仅支持 X64 和 ARM64)
- Windows 10/Windows Server 版本 20H2
- Windows 10/Windows Server 版本 2004
- Windows 10/Windows Server 版本 1909
- Windows 10/Windows Server 版本 1903
- Windows 10 版本 1809
- Windows 10 版本 1803
- Windows 10 版本 1709
- Windows 10 版本 1607
- Windows 8.1
- Windows 7 SP1 [ESU](https://docs.microsoft.com/zh-cn/troubleshoot/windows-client/windows-7-eos-faq/windows-7-extended-security-updates-faq)
- 先决条件
- KB3063858 [64 位](https://www.microsoft.com/zh-cn/download/details.aspx?id=47442) / [32 位](https://www.microsoft.com/zh-cn/download/details.aspx?id=47409)
- macOS 10.13 High Sierra 或更高版本
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
- macOS 10.14 Mojave 或更高版本
- Linux 发行版
- Arch Linux
- Alpine Linux 3.11+
- Alpine Linux 3.13+
- CentOS 7+
- Debian 9+
- Debian 10+
- Deepin 20.1 / UOS 20
- Fedora 32+
- Linux Mint 18+
- openSUSE 15+
- Red Hat Enterprise Linux 7+
- SUSE Enterprise Linux (SLES) 12 SP2+
- Ubuntu 20.10, 20.04, 18.04, 16.04
- 移动端(仅支持 ARM64 或 ARM32)
- Android 5.0+
- iOS 10.0+
- Ubuntu 16.04, 18.04, 20.04+
- 移动端
- Android 5.0/API 21+ (仅支持 [arm64-v8a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#arm64-v8a) 和 [armeabiv-v7a](https://developer.android.google.cn/ndk/guides/abis?hl=zh_cn#v7a))
- iOS 10.0+ (仅支持 ARM64)
## ⛔ 不受支持的操作系统
- Windows 8
- [由于微软官方对该产品的支持已结束](https://docs.microsoft.com/zh-cn/lifecycle/products/windows-8),故本程序无法在此操作系统上运行,[建议升级到 Windows 8.1](https://support.microsoft.com/zh-cn/windows/%E4%BB%8E-windows-8-%E6%9B%B4%E6%96%B0%E5%88%B0-windows-8-1-17fc54a7-a465-6b5a-c1a0-34140afd0669)
- Windows Server 2012 / 2008 R2 SP1
- 仅可使用 1.X 版本,2.X 开始不受支持,建议升级到 **Windows Server 2012 R2** 或更高版本
- Windows Server 2008 R2 SP1
- 仅可使用 1.X 版本,2.X 开始不受支持,建议升级到更高版本
- 无桌面 GUI 的 Windows Server / Linux 版本
## 🌏 路线图
@@ -87,7 +104,7 @@
[Visual Studio 2019 版本 16.10 或更高版本](https://visualstudio.microsoft.com/zh-hans/vs/) 或 [JetBrains Rider](https://www.jetbrains.com/rider/) 或 ~~[Visual Studio for Mac](https://visualstudio.microsoft.com/zh-hans/vs/mac/)~~ 或 ~~[Visual Studio Code](https://code.visualstudio.com/)~~
- 系统要求
- [Windows 10 版本 2004 或更高版本:家庭版、专业版、教育版和企业版(不支持 LTSC 和 Windows 10 S,在较早的操作系统上可能不受支持)](https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements)
- [macOS 10.13 High Sierra 或更高版本](https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2019-system-requirements-mac)
- [macOS 10.14 Mojave 或更高版本](https://docs.microsoft.com/zh-cn/visualstudio/productinfo/vs2019-system-requirements-mac)
- 工作负载
- Web 和云
- ASP.NET 和 Web 开发
@@ -104,8 +121,18 @@
- [Avalonia for Visual Studio](https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaforVisualStudio)
- [NUnit VS Templates](https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnitTemplatesforVisualStudio)
[Android Studio 4.2+](https://developer.android.google.cn/studio/)
[Xcode 13](https://developer.apple.com/xcode/)
## 🏗️ [项目结构](./src/README.md)
<!--
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
* [CefNet](https://github.com/CefNet/CefNet)
* [CefSharp](https://github.com/cefsharp/CefSharp)
* [ZXing.Net.Mobile](https://github.com/Redth/ZXing.Net.Mobile)
-->
<!--👇图标如果发生更改,还需更改 Tools.OpenSourceLibraryList(Program.OpenSourceLibraryListEmoji) -->
## 📄 感谢以下开源项目
* [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json)
@@ -137,7 +164,7 @@
* [Polly](https://github.com/App-vNext/Polly)
* [TaskScheduler](https://github.com/dahall/taskscheduler)
* [SharpZipLib](https://github.com/icsharpcode/SharpZipLib)
* [LibVLCSharp](https://github.com/videolan/libvlcsharp)
* [SevenZipSharp](https://github.com/squid-box/SevenZipSharp)
* [Depressurizer](https://github.com/Depressurizer/Depressurizer)
* [NLog](https://github.com/nlog/NLog)
* [NUnit](https://github.com/nunit/nunit)
@@ -147,26 +174,30 @@
* [AvaloniaGif](https://github.com/jmacato/AvaloniaGif)
* [Avalonia XAML Behaviors](https://github.com/wieslawsoltes/AvaloniaBehaviors)
* [APNG.NET](https://github.com/jz5/APNG.NET)
* [Chromium Embedded Framework (CEF)](https://github.com/chromiumembedded/cef)
* [Moq](https://github.com/moq/moq4)
* [NPOI](https://github.com/nissl-lab/npoi)
* [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore)
* [AspNet.Security.OpenId.Providers](https://github.com/aspnet-contrib/AspNet.Security.OpenId.Providers)
* [AspNet.Security.OAuth.Providers](https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers)
* [CefNet](https://github.com/CefNet/CefNet)
* [CefSharp](https://github.com/cefsharp/CefSharp)
* [ZXing.Net](https://github.com/micjahn/ZXing.Net)
* [QRCoder](https://github.com/codebude/QRCoder)
* [React](https://github.com/facebook/react)
* [Ant Design](https://github.com/ant-design/ant-design)
* [Ant Design Blazor](https://github.com/ant-design-blazor/ant-design-blazor)
* [Toast messages for Xamarin.iOS](https://github.com/andrius-k/Toast)
* [XF.Material Library](https://github.com/Baseflow/XF-Material-Library)
* [Floating Action Button Speed Dial](https://github.com/leinardi/FloatingActionButtonSpeedDial)
* [Visual Studio App Center SDK for .NET](https://github.com/microsoft/appcenter-sdk-dotnet)
* [AppCenter-XMac](https://github.com/nor0x/AppCenter-XMac)
* [MSBuild.Sdk.Extras](https://github.com/novotnyllc/MSBuildSdkExtras)
* [Xamarin.Essentials](https://github.com/xamarin/essentials)
* [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)
* [Open Source Components for Xamarin](https://github.com/xamarin/XamarinComponents)
* [Google Play Services / Firebase / ML Kit for Xamarin.Android](https://github.com/xamarin/GooglePlayServicesComponents)
* [Picasso](https://github.com/square/picasso)
* [OkHttp](https://github.com/square/okhttp)
* [Material Components for Android](https://github.com/material-components/material-components-android)
* [AndroidX for Xamarin.Android](https://github.com/xamarin/AndroidX)
* [Android Jetpack](https://github.com/androidx/androidx)
* [ConstraintLayout](https://github.com/androidx/constraintlayout)
* [MSAL.NET](https://github.com/AzureAD/microsoft-authentication-library-for-dotnet)
* [Entity Framework Core](https://github.com/dotnet/efcore)
* [ASP.NET Core](https://github.com/dotnet/aspnetcore)
File diff suppressed because it is too large Load Diff
+41
View File
@@ -0,0 +1,41 @@
{
"solution": {
"path": "SteamToolsV2+.sln",
"projects": [
"src\\Common.AreaLib\\Common.AreaLib.csproj",
"src\\Common.ClientLib\\Common.ClientLib.csproj",
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
"src\\Common.CoreLib\\Common.CoreLib.csproj",
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
"references\\WinAuth\\Authenticator\\Authenticator.csproj",
"references\\AvaloniaGif\\AvaloniaGif\\AvaloniaGif.csproj",
"references\\AvaloniaGif\\LibAPNG\\LibAPNG.csproj",
"references\\SteamAchievementManager\\SAM.API\\SAM.API.csproj",
"references\\Steam4NET\\Steam4NET\\Steam4NET.csproj",
"references\\Titanium-Web-Proxy\\src\\Titanium.Web.Proxy\\Titanium.Web.Proxy.csproj",
"references\\ArchiSteamFarm\\ArchiSteamFarm.Library\\ArchiSteamFarm.Library.csproj",
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
"tests\\Common.UnitTest.Droid\\Common.UnitTest.Droid.csproj",
"tests\\Common.UnitTest.Droid.App\\Common.UnitTest.Droid.App.csproj",
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj",
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
"src\\ST\\ST.csproj",
"src\\ST.Client\\ST.Client.csproj",
"src\\ST.Client.Desktop\\ST.Client.Desktop.csproj",
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Desktop.Avalonia.csproj",
"src\\ST.Client.Desktop.Linux\\ST.Client.Desktop.Linux.csproj",
"src\\ST.Client.Mobile\\ST.Client.Mobile.csproj",
"src\\ST.Client.Mobile.Droid\\ST.Client.Mobile.Droid.csproj",
"src\\ST.Client.Mobile.iOS\\ST.Client.Mobile.iOS.csproj",
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
"src\\ST.Services.CloudService\\ST.Services.CloudService.csproj",
"src\\ST.Tools.AreaImport\\ST.Tools.AreaImport.csproj",
"src\\ST.Tools.MinifyStaticSites\\ST.Tools.MinifyStaticSites.csproj",
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
"src\\ST.Tools.AndroidResourceLink\\ST.Tools.AndroidResourceLink.csproj"
]
}
}
File diff suppressed because it is too large Load Diff
+41
View File
@@ -0,0 +1,41 @@
{
"solution": {
"path": "SteamToolsV2+.sln",
"projects": [
"src\\Common.AreaLib\\Common.AreaLib.csproj",
"src\\Common.ClientLib\\Common.ClientLib.csproj",
"src\\Common.ClientLib.Droid\\Common.ClientLib.Droid.csproj",
"src\\Common.ClientLib.iOS\\Common.ClientLib.iOS.csproj",
"src\\Common.CoreLib\\Common.CoreLib.csproj",
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
"references\\WinAuth\\Authenticator\\Authenticator.csproj",
"references\\AvaloniaGif\\AvaloniaGif\\AvaloniaGif.csproj",
"references\\AvaloniaGif\\LibAPNG\\LibAPNG.csproj",
"references\\SteamAchievementManager\\SAM.API\\SAM.API.csproj",
"references\\Steam4NET\\Steam4NET\\Steam4NET.csproj",
"references\\Titanium-Web-Proxy\\src\\Titanium.Web.Proxy\\Titanium.Web.Proxy.csproj",
"references\\ArchiSteamFarm\\ArchiSteamFarm.Library\\ArchiSteamFarm.Library.csproj",
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
"tests\\Common.UnitTest.Droid\\Common.UnitTest.Droid.csproj",
"tests\\Common.UnitTest.Droid.App\\Common.UnitTest.Droid.App.csproj",
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj",
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
"src\\ST\\ST.csproj",
"src\\ST.Client\\ST.Client.csproj",
"src\\ST.Client.Desktop\\ST.Client.Desktop.csproj",
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Desktop.Avalonia.csproj",
"src\\ST.Client.Desktop.Mac\\ST.Client.Desktop.Mac.csproj",
"src\\ST.Client.Mobile\\ST.Client.Mobile.csproj",
"src\\ST.Client.Mobile.Droid\\ST.Client.Mobile.Droid.csproj",
"src\\ST.Client.Mobile.iOS\\ST.Client.Mobile.iOS.csproj",
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
"src\\ST.Services.CloudService\\ST.Services.CloudService.csproj",
"src\\ST.Tools.AreaImport\\ST.Tools.AreaImport.csproj",
"src\\ST.Tools.MinifyStaticSites\\ST.Tools.MinifyStaticSites.csproj",
"src\\ST.Tools.OpenSourceLibraryList\\ST.Tools.OpenSourceLibraryList.csproj",
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
"src\\ST.Tools.AndroidResourceLink\\ST.Tools.AndroidResourceLink.csproj"
]
}
}
+267 -232
View File
@@ -7,11 +7,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Root", "_Root", "{66839CD8
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
.gitignore = .gitignore
packaging\build-osx-app.sh = packaging\build-osx-app.sh
Directory.Build.props = Directory.Build.props
global.json = global.json
nuget.config = nuget.config
README.en.md = README.en.md
README.md = README.md
release-template.md = release-template.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0_Common", "0_Common", "{83186945-EC14-4B3F-8C6F-B205AA184CA4}"
@@ -42,8 +44,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Authenticator", "references
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AvaloniaGif", "references\AvaloniaGif\AvaloniaGif\AvaloniaGif.csproj", "{86505E07-1D61-450C-96ED-263E80349DE0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CefNet.Avalonia", "references\CefNet\CefNet.Avalonia\CefNet.Avalonia.csproj", "{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibAPNG", "references\AvaloniaGif\LibAPNG\LibAPNG.csproj", "{6AA8CA67-02A5-43C6-BECB-51BE246FA740}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SAM.API", "references\SteamAchievementManager\SAM.API\SAM.API.csproj", "{7A19537B-0D75-4131-A36C-0460B87637CC}"
@@ -100,25 +100,29 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.Packager.Installer
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.Translate", "src\ST.Tools.Translate\ST.Tools.Translate.csproj", "{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.Win7Troubleshoot", "src\ST.Tools.Win7Troubleshoot\ST.Tools.Win7Troubleshoot.csproj", "{1A07EEE0-3533-4FD1-8D08-F89129820B1A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.App.Bridge", "src\ST.Client.Desktop.Avalonia.App.Bridge\ST.Client.Desktop.Avalonia.App.Bridge.csproj", "{D93B5190-AEFF-4C13-8387-D8EC760400DD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Console.App.Bridge", "src\ST.Client.Desktop.Console.App.Bridge\ST.Client.Desktop.Console.App.Bridge.csproj", "{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.App", "src\ST.Client.Desktop.Avalonia.App\ST.Client.Desktop.Avalonia.App.csproj", "{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "ST.Client.Desktop.Avalonia.App.Bridge.Package", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package\ST.Client.Desktop.Avalonia.App.Bridge.Package.wapproj", "{1F659618-71E2-4AAF-9D86-62700FD4CF02}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.Demo.App", "src\ST.Client.Desktop.Avalonia.Demo.App\ST.Client.Desktop.Avalonia.Demo.App.csproj", "{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Console.App", "src\ST.Client.Desktop.Console.App\ST.Client.Desktop.Console.App.csproj", "{912759CD-FEE9-405C-A668-55CEDB64B156}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Mobile.Droid.App", "src\ST.Client.Mobile.Droid.App\ST.Client.Mobile.Droid.App.csproj", "{B355E372-27D2-4217-A129-D3355573681F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Mobile.iOS.App", "src\ST.Client.Mobile.iOS.App\ST.Client.Mobile.iOS.App.csproj", "{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bin", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package.RefLauncher\Bin\Bin.csproj", "{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.AndroidResourceLink", "src\ST.Tools.AndroidResourceLink\ST.Tools.AndroidResourceLink.csproj", "{9A8D2254-9B2B-4B92-8498-43A73BB9A410}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArchiSteamFarm.Library", "references\ArchiSteamFarm\ArchiSteamFarm.Library\ArchiSteamFarm.Library.csproj", "{F4D8CD7B-6DF4-445C-AFA9-44466A552922}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "ST.Client.Desktop.Avalonia.App.Bridge.Package", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package\ST.Client.Desktop.Avalonia.App.Bridge.Package.wapproj", "{1F659618-71E2-4AAF-9D86-62700FD4CF02}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SQLite-net-std", "references\sqlite-net\nuget\SQLite-net-std\SQLite-net-std.csproj", "{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Launcher", "src\ST.Client.Desktop.Avalonia.App.Bridge.Package.RefLauncher\Launcher\Launcher.csproj", "{F75D6FF7-955D-4355-8895-D9333ED9B39F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.Avalonia.App.Bridge", "src\ST.Client.Desktop.Avalonia.App.Bridge\ST.Client.Desktop.Avalonia.App.Bridge.csproj", "{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Tools.DesktopBridgeLink", "src\ST.Tools.DesktopBridgeLink\ST.Tools.DesktopBridgeLink.csproj", "{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Server.Resources", "src\ST.Server.Resources\ST.Server.Resources.csproj", "{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -362,34 +366,6 @@ Global
{86505E07-1D61-450C-96ED-263E80349DE0}.Release|x64.Build.0 = Release|Any CPU
{86505E07-1D61-450C-96ED-263E80349DE0}.Release|x86.ActiveCfg = Release|Any CPU
{86505E07-1D61-450C-96ED-263E80349DE0}.Release|x86.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|ARM64.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhone.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x64.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x64.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x86.ActiveCfg = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Debug|x86.Build.0 = Debug|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|Any CPU.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM64.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|ARM64.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhone.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhone.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x64.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x64.Build.0 = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x86.ActiveCfg = Release|Any CPU
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE}.Release|x86.Build.0 = Release|Any CPU
{6AA8CA67-02A5-43C6-BECB-51BE246FA740}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6AA8CA67-02A5-43C6-BECB-51BE246FA740}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6AA8CA67-02A5-43C6-BECB-51BE246FA740}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -640,8 +616,8 @@ Global
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x64.ActiveCfg = Debug|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x64.Build.0 = Debug|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.ActiveCfg = Debug|x86
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.Build.0 = Debug|x86
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.ActiveCfg = Debug|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Debug|x86.Build.0 = Debug|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|Any CPU.Build.0 = Release|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|ARM.ActiveCfg = Release|Any CPU
@@ -654,8 +630,8 @@ Global
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x64.ActiveCfg = Release|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x64.Build.0 = Release|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.ActiveCfg = Release|x86
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.Build.0 = Release|x86
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.ActiveCfg = Release|Any CPU
{931C8F51-0350-4CFC-92B4-E2D89CC41C9A}.Release|x86.Build.0 = Release|Any CPU
{BC5F6313-435E-4748-99D5-BB6F3B109F91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC5F6313-435E-4748-99D5-BB6F3B109F91}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC5F6313-435E-4748-99D5-BB6F3B109F91}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1188,90 +1164,6 @@ Global
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}.Release|x64.Build.0 = Release|Any CPU
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}.Release|x86.ActiveCfg = Release|Any CPU
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226}.Release|x86.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|ARM64.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhone.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x64.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x64.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x86.ActiveCfg = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Debug|x86.Build.0 = Debug|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|Any CPU.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM64.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|ARM64.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhone.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhone.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x64.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x64.Build.0 = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x86.ActiveCfg = Release|Any CPU
{1A07EEE0-3533-4FD1-8D08-F89129820B1A}.Release|x86.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|ARM64.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhone.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x64.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x64.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x86.ActiveCfg = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Debug|x86.Build.0 = Debug|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|Any CPU.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM64.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|ARM64.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhone.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhone.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x64.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x64.Build.0 = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x86.ActiveCfg = Release|Any CPU
{D93B5190-AEFF-4C13-8387-D8EC760400DD}.Release|x86.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|ARM64.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhone.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x64.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x64.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x86.ActiveCfg = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Debug|x86.Build.0 = Debug|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|Any CPU.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM64.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|ARM64.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhone.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhone.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x64.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x64.Build.0 = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x86.ActiveCfg = Release|Any CPU
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9}.Release|x86.Build.0 = Release|Any CPU
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1300,48 +1192,6 @@ Global
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Release|x64.Build.0 = Release|Any CPU
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Release|x86.ActiveCfg = Release|Any CPU
{1CB40DC8-8FBC-4278-A19A-D872CFA353C0}.Release|x86.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.ActiveCfg = Debug|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Build.0 = Debug|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Deploy.0 = Debug|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.ActiveCfg = Debug|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Build.0 = Debug|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Deploy.0 = Debug|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Build.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.ActiveCfg = Debug|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Build.0 = Debug|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Deploy.0 = Debug|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.ActiveCfg = Debug|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Build.0 = Debug|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Deploy.0 = Debug|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Deploy.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.ActiveCfg = Release|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Build.0 = Release|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Deploy.0 = Release|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.ActiveCfg = Release|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Build.0 = Release|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Deploy.0 = Release|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.ActiveCfg = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Deploy.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.ActiveCfg = Release|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Build.0 = Release|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Deploy.0 = Release|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.ActiveCfg = Release|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Build.0 = Release|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Deploy.0 = Release|x86
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1370,34 +1220,6 @@ Global
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Release|x64.Build.0 = Release|Any CPU
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Release|x86.ActiveCfg = Release|Any CPU
{7EC4BAB6-B7C0-4E87-9FB6-091ABFF10D88}.Release|x86.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|Any CPU.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|ARM64.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhone.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x64.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x64.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x86.ActiveCfg = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Debug|x86.Build.0 = Debug|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|Any CPU.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|Any CPU.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM64.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|ARM64.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhone.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhone.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x64.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x64.Build.0 = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x86.ActiveCfg = Release|Any CPU
{912759CD-FEE9-405C-A668-55CEDB64B156}.Release|x86.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
@@ -1458,34 +1280,244 @@ Global
{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}.Release|x64.ActiveCfg = Release|iPhoneSimulator
{AFC828ED-21EE-4FD4-A40D-FEFED5EED4EA}.Release|x86.ActiveCfg = Release|iPhoneSimulator
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|ARM64.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhone.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x64.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x64.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x86.ActiveCfg = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Debug|x86.Build.0 = Debug|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|Any CPU.Build.0 = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM.Build.0 = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM64.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|ARM64.Build.0 = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhone.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhone.Build.0 = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x64.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x64.Build.0 = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x86.ActiveCfg = Release|Any CPU
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09}.Release|x86.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|ARM64.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhone.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x64.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x64.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x86.ActiveCfg = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Debug|x86.Build.0 = Debug|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|Any CPU.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM64.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|ARM64.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhone.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhone.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x64.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x64.Build.0 = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x86.ActiveCfg = Release|Any CPU
{9A8D2254-9B2B-4B92-8498-43A73BB9A410}.Release|x86.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|ARM64.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhone.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x64.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x64.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x86.ActiveCfg = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Debug|x86.Build.0 = Debug|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|Any CPU.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM64.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|ARM64.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhone.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhone.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x64.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x64.Build.0 = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x86.ActiveCfg = Release|Any CPU
{F4D8CD7B-6DF4-445C-AFA9-44466A552922}.Release|x86.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.ActiveCfg = Debug|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Build.0 = Debug|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM.Deploy.0 = Debug|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.ActiveCfg = Debug|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Build.0 = Debug|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|ARM64.Deploy.0 = Debug|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Build.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.ActiveCfg = Debug|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Build.0 = Debug|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x64.Deploy.0 = Debug|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.ActiveCfg = Debug|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Build.0 = Debug|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Debug|x86.Deploy.0 = Debug|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|Any CPU.Deploy.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.ActiveCfg = Release|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Build.0 = Release|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM.Deploy.0 = Release|ARM
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.ActiveCfg = Release|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Build.0 = Release|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|ARM64.Deploy.0 = Release|ARM64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.ActiveCfg = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhone.Deploy.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.ActiveCfg = Release|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Build.0 = Release|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x64.Deploy.0 = Release|x64
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.ActiveCfg = Release|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Build.0 = Release|x86
{1F659618-71E2-4AAF-9D86-62700FD4CF02}.Release|x86.Deploy.0 = Release|x86
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|ARM64.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhone.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x64.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x64.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x86.ActiveCfg = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Debug|x86.Build.0 = Debug|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|Any CPU.Build.0 = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM.Build.0 = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM64.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|ARM64.Build.0 = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhone.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhone.Build.0 = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x64.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x64.Build.0 = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x86.ActiveCfg = Release|Any CPU
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4}.Release|x86.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|ARM64.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhone.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x64.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x64.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x86.ActiveCfg = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Debug|x86.Build.0 = Debug|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|Any CPU.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM64.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|ARM64.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhone.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhone.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x64.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x64.Build.0 = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x86.ActiveCfg = Release|Any CPU
{F75D6FF7-955D-4355-8895-D9333ED9B39F}.Release|x86.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|ARM64.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhone.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x64.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x64.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x86.ActiveCfg = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Debug|x86.Build.0 = Debug|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|Any CPU.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM64.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|ARM64.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhone.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhone.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x64.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x64.Build.0 = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x86.ActiveCfg = Release|Any CPU
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67}.Release|x86.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|ARM64.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhone.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x64.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x64.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x86.ActiveCfg = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Debug|x86.Build.0 = Debug|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|Any CPU.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM64.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|ARM64.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhone.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhone.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x64.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x64.Build.0 = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x86.ActiveCfg = Release|Any CPU
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5}.Release|x86.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|ARM64.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhone.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x64.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x64.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x86.ActiveCfg = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Debug|x86.Build.0 = Debug|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|Any CPU.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM64.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|ARM64.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhone.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhone.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x64.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x64.Build.0 = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x86.ActiveCfg = Release|Any CPU
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1499,7 +1531,6 @@ Global
{A203BA92-B3B6-411C-91E1-8F3FF7BF2163} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
{FEB554A3-1CAD-4E77-A300-CD8CA520EED6} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{86505E07-1D61-450C-96ED-263E80349DE0} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{AABC2464-E4C7-421E-8BA8-82F2DFA452FE} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{6AA8CA67-02A5-43C6-BECB-51BE246FA740} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{7A19537B-0D75-4131-A36C-0460B87637CC} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{8D034553-3218-4B56-8B3D-00B96FCFF29A} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
@@ -1528,10 +1559,14 @@ Global
{2BF2DA87-7F0E-4384-AF80-275D495A1972} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{A4E53C27-0195-47D3-9DC7-192061402BB8} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{7A27EDB5-2E6A-4E01-AA55-62C8B3117226} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{1A07EEE0-3533-4FD1-8D08-F89129820B1A} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{D93B5190-AEFF-4C13-8387-D8EC760400DD} = {1B889C56-157A-4493-85F2-76366282B002}
{AB473106-1E41-4AFC-91B8-3A7ED331A9E9} = {1B889C56-157A-4493-85F2-76366282B002}
{AC8E40AE-CED2-415A-BC47-A68F3F14CB09} = {1B889C56-157A-4493-85F2-76366282B002}
{9A8D2254-9B2B-4B92-8498-43A73BB9A410} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{F4D8CD7B-6DF4-445C-AFA9-44466A552922} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{1F659618-71E2-4AAF-9D86-62700FD4CF02} = {1B889C56-157A-4493-85F2-76366282B002}
{B1F221F6-E19B-45D8-959D-A9CDA471C2D4} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{F75D6FF7-955D-4355-8895-D9333ED9B39F} = {1B889C56-157A-4493-85F2-76366282B002}
{2A66B796-7BC2-4BE0-A920-1A457BBCCC67} = {1B889C56-157A-4493-85F2-76366282B002}
{137690DF-A3CB-4817-ACB8-9EAF3A52B5B5} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{9252AA73-9CF7-4B09-89CB-7FCB65A5DCFF} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9313F2B4-10DA-43AA-A481-CAA7571C740C}
+2 -2
View File
@@ -1,8 +1,8 @@
{
"msbuild-sdks": {
"MSBuild.Sdk.Extras": "3.0.22"
"MSBuild.Sdk.Extras": "3.0.23"
},
"sdk": {
"version": "6.0.100-preview.4.21255.9"
"version": "6.0.100-preview.7.21379.14"
}
}
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleName</key>
<string>Steam++</string>
<key>CFBundleIdentifier</key>
<string>net.steampp.app</string>
<key>CFBundleShortVersionString</key>
<string>2.4.9</string>
<key>CFBundleVersion</key>
<string>2.4.9.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.13</string>
<key>CFBundleDevelopmentRegion</key>
<string>zh_CN</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>NSHumanReadableCopyright</key>
<string>© 长沙次元超越科技有限公司. All Rights Reserved.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
+93
View File
@@ -0,0 +1,93 @@
create_app_structure() {
APPNAME=$1
APPDIR="$APPNAME.app/Contents"
APPICONS="/Users/mossimo/bin/logo.icns"
if [ ! -d "$APPDIR" ]; then
echo "creating app structure $APPDIR"
mkdir -vp "$APPDIR"/{Resources,Frameworks}
cp -v "$APPICONS" "$APPDIR/Resources/$APPNAME.icns"
fi
}
emit_plist() {
PLIST_APPNAME=$1
PLIST_PATH="$2/Info.plist"
if [ "$3" ]; then
LSUIELEMENT="false"
else
LSUIELEMENT="true"
fi
if [ ! -f "$PLIST_PATH" ]; then
echo "emiting $PLIST_PATH"
cat <<EOF > "$PLIST_PATH"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleName</key>
<string>$PLIST_APPNAME</string>
<key>CFBundleIdentifier</key>
<string>net.steampp.app</string>
<key>CFBundleShortVersionString</key>
<string>2.4.9</string>
<key>CFBundleVersion</key>
<string>2.4.9.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.13</string>
<key>CFBundleDevelopmentRegion</key>
<string>zh_CN</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleExecutable</key>
<string>$PLIST_APPNAME</string>
<key>CFBundleGetInfoString</key>
<string>$PLIST_APPNAME</string>
<key>CFBundleIconFile</key>
<string>$PLIST_APPNAME</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>LSUIElement</key>
<string>$LSUIELEMENT</string>
<key>NSHumanReadableCopyright</key>
<string>© 长沙次元超越科技有限公司. All Rights Reserved.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
EOF
fi
}
cd "/Users/mossimo/bin"
BINARYNAME="Steam++"
echo "Building Avalonia demo..."
APPNAME="$BINARYNAME"
APPDIR="$APPNAME.app/Contents"
rm -rf "$APPDIR"
create_app_structure "$APPNAME"
emit_plist "$APPNAME" "$APPDIR" true
cd "$APPDIR/Frameworks"
APPNAME="$BINARYNAME Helper"
APPDIR="$APPNAME.app/Contents"
create_app_structure "$APPNAME"
emit_plist "$APPNAME" "$APPDIR"
cp -R "../../../steampp/" "../MacOS"
ln -s "../../MacOS" "Frameworks/$APPDIR/MacOS"
chmod +x "../MacOS/$BINARYNAME"
cp "../MacOS/$BINARYNAME" "../MacOS/$APPNAME"
chmod +x "../MacOS/$APPNAME"
BIN
View File
Binary file not shown.
+45
View File
@@ -0,0 +1,45 @@
// https://github.com/NLog/NLog/blob/v4.7.10/src/NLog/LogManager.cs
using NLog;
using NLog.Config;
using System;
namespace ArchiSteamFarm
{
public static class LogManager
{
static readonly LogFactory factory = new();
[CLSCompliant(false)]
public static Logger GetLogger(string name)
{
return factory.GetLogger(name);
}
public static void Flush()
{
factory.Flush();
}
public static void ReconfigExistingLoggers()
{
factory.ReconfigExistingLoggers();
}
public static LoggingConfiguration Configuration
{
get => factory.Configuration;
set => factory.Configuration = value;
}
public static event EventHandler<LoggingConfigurationChangedEventArgs> ConfigurationChanged
{
add => factory.ConfigurationChanged += value;
remove => factory.ConfigurationChanged -= value;
}
public static void Shutdown()
{
factory.Shutdown();
}
}
}
+82
View File
@@ -0,0 +1,82 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
namespace ArchiSteamFarm
{
public static class ASFPathHelper
{
static readonly Lazy<string> _AppDataDirectory = new(() =>
{
var path = Path.Combine(IOPath.AppDataDirectory, "ASF");
IOPath.DirCreateByNotExists(path);
return path;
});
/// <summary>
/// <list type="bullet">
/// <item>
/// AppData\ASF\config
/// </item>
/// <item>
/// AppData\ASF\plugins
/// </item>
/// </list>
/// </summary>
public static string AppDataDirectory => _AppDataDirectory.Value;
/// <summary>
/// <list type="bullet">
/// <item>
/// Windows:Logs\ASF
/// </item>
/// <item>
/// Windows Desktop Bridge:{CacheDirectory}\Logs\ASF
/// </item>
/// </list>
/// </summary>
/// <param name="logDirPath"></param>
/// <returns></returns>
public static string GetLogDirectory([NotNull] string logDirPath)
{
var path = (logDirPath.EndsWith(Path.DirectorySeparatorChar) ? logDirPath : logDirPath + Path.DirectorySeparatorChar) + "ASF";
IOPath.DirCreateByNotExists(path);
return path;
}
public static string GetNLogArchiveFileName([NotNull] string logDirectory)
{
var path = logDirectory + Path.DirectorySeparatorChar + SharedInfo.ArchivalLogFile;
return path;
}
public static string GetNLogFileName([NotNull] string logDirectory)
{
var path = logDirectory + Path.DirectorySeparatorChar + SharedInfo.LogFile;
return path;
}
static readonly Lazy<string> _WebsiteDirectory = new(() =>
{
var path = Path.Combine(IOPath.BaseDirectory, "ASF-ui");
IOPath.DirCreateByNotExists(path);
return path;
});
/// <summary>
/// <list type="bullet">
/// <item>
/// Desktop:ASF-ui
/// </item>
/// </list>
/// </summary>
public static string WebsiteDirectory => _WebsiteDirectory.Value;
#if DEBUG
[Obsolete("use AppDataDirectory")]
public static string HomeDirectory => AppDataDirectory;
#endif
public const string NLogGeneralLayout = NLog.Logging.GeneralLayout;
}
}
@@ -1,44 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!--<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0</TargetFrameworks>-->
<!--<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);net461</TargetFrameworks>-->
<TargetFramework>net5.0</TargetFramework>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<!--<Configurations>Debug;Release;Nuget_Release</Configurations>-->
<Description>.NET binding for the Chromium Embedded Framework (Avalonia control)</Description>
<PackageTags>CefNet, CEF, browser, chromium, Avalonia, AvaloniaUI</PackageTags>
<DefineConstants>AvaloniaBeta;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup>
<DefineConstants>$(DefineConstants);TRACE;AVALONIA</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Internal\CursorInteropHelper.cs" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\CefNet.Windows.Forms\WinApi\DWMWINDOWATTRIBUTE.cs" Link="WinApi\DWMWINDOWATTRIBUTE.cs" />
<Compile Include="..\CefNet.Wpf\Events\PdfPrintFinishedRoutedEventArgs.cs" Link="Events\PdfPrintFinishedRoutedEventArgs.cs" />
<Compile Include="..\CefNet.Wpf\Events\ScriptDialogOpeningRoutedEventArgs.cs" Link="Events\ScriptDialogOpeningRoutedEventArgs.cs" />
<Compile Include="..\CefNet.Wpf\Events\TextFoundRoutedEventArgs.cs" Link="Events\TextFoundRoutedEventArgs.cs" />
<Compile Include="..\CefNet\WebView.CommonImplementation.cs" Link="WebView.CommonImplementation.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.999-cibuild0013694-beta" />
<PackageReference Include="CefNet" Version="90.5.21109.1453" />
</ItemGroup>
<ItemGroup Condition=" Exists('$(MSBuildProjectDirectory)\..\..\..\src\Common.CoreLib\Properties\ThisAssembly.Version.cs') ">
<Compile Include="..\..\..\src\Common.CoreLib\Properties\AssemblyInfo.Version.cs">
<Link>Properties\AssemblyInfo.Version.cs</Link>
</Compile>
<Compile Include="..\..\..\src\Common.CoreLib\Properties\ThisAssembly.Version.cs">
<Link>Properties\ThisAssembly.Version.cs</Link>
</Compile>
</ItemGroup>
</Project>
@@ -1,167 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Interactivity;
using Avalonia.Threading;
namespace CefNet
{
public class CefNetApplicationLifetime : IClassicDesktopStyleApplicationLifetime, IControlledApplicationLifetime, IApplicationLifetime, IDisposable
{
private int _exitCode;
private CancellationTokenSource _cts;
private bool _isShuttingDown;
private HashSet<Window> _windows = new HashSet<Window>();
private static CefNetApplicationLifetime _activeLifetime;
/// <inheritdoc />
public string[] Args { get; internal set; }
/// <inheritdoc />
public ShutdownMode ShutdownMode { get; set; }
/// <inheritdoc />
public Window MainWindow { get; set; }
/// <inheritdoc />
public IReadOnlyList<Window> Windows
{
get { return _windows.ToList(); }
}
/// <inheritdoc />
public event EventHandler<ControlledApplicationLifetimeStartupEventArgs> Startup;
/// <inheritdoc />
public event EventHandler<ControlledApplicationLifetimeExitEventArgs> Exit;
static CefNetApplicationLifetime()
{
Window.WindowOpenedEvent.AddClassHandler(typeof(Window), new EventHandler<RoutedEventArgs>(OnWindowOpened));
Window.WindowClosedEvent.AddClassHandler(typeof(Window), new EventHandler<RoutedEventArgs>(WindowClosedEvent));
}
private static void WindowClosedEvent(object sender, RoutedEventArgs e)
{
var window = sender as Window;
if (window is null)
return;
_activeLifetime?._windows.Remove(window);
_activeLifetime?.HandleWindowClosed(window);
}
private static void OnWindowOpened(object sender, RoutedEventArgs e)
{
var window = sender as Window;
if (window is null)
return;
_activeLifetime?._windows.Add(window);
}
public CefNetApplicationLifetime()
{
if (_activeLifetime is null)
_activeLifetime = this;
else
throw new InvalidOperationException($"Can not have multiple active {this.GetType().Name} instances and the previously created one was not disposed.");
}
protected virtual void HandleWindowClosed(Window window)
{
if (window != null && !_isShuttingDown)
{
if (ShutdownMode == ShutdownMode.OnLastWindowClose && _windows.Count == 0)
{
Shutdown();
}
else if (ShutdownMode == ShutdownMode.OnMainWindowClose && window == MainWindow)
{
Shutdown();
}
}
}
public void Shutdown(int exitCode = 0)
{
if (_isShuttingDown)
throw new InvalidOperationException("Application is already shutting down.");
_exitCode = exitCode;
_isShuttingDown = true;
try
{
foreach (Window window in Windows)
{
window.Close();
}
CefNetApplication.Instance.SignalForShutdown(ShutdownComplete);
}
catch
{
ShutdownComplete();
throw;
}
}
private void ShutdownComplete()
{
_cts?.Cancel();
_cts = null;
_isShuttingDown = false;
}
public int Start(string[] args)
{
try
{
this.Startup?.Invoke(this, new ControlledApplicationLifetimeStartupEventArgs(args));
_cts = new CancellationTokenSource();
MainWindow?.Show();
Dispatcher.UIThread.MainLoop(_cts.Token);
ControlledApplicationLifetimeExitEventArgs e = new ControlledApplicationLifetimeExitEventArgs(_exitCode);
this.Exit?.Invoke(this, e);
Environment.ExitCode = e.ApplicationExitCode;
return e.ApplicationExitCode;
}
finally
{
CefNetApplication.Instance.Shutdown();
}
}
public void Dispose()
{
if (_activeLifetime == this)
_activeLifetime = null;
}
}
public static class CefNetApplicationLifetimeExtensions
{
public static int StartWithCefNetApplicationLifetime<T>(this T builder, string[] args, ShutdownMode shutdownMode = ShutdownMode.OnLastWindowClose)
where T : AppBuilderBase<T>, new()
{
CefNetApplicationLifetime lifetime = new CefNetApplicationLifetime
{
Args = args,
ShutdownMode = shutdownMode
};
builder.SetupWithLifetime(lifetime);
return lifetime.Start(args);
}
}
}
@@ -1,199 +0,0 @@
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Media;
using CefNet.Input;
using CefNet.Internal;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
namespace CefNet.Avalonia
{
public static class CefNetAvaloniaExtensions
{
#pragma warning disable IDE0060
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static void Invoke<TEventArgs>(this RoutedEvent routedEvent, Interactive sender, TEventArgs e)
where TEventArgs : class
{
sender.RaiseEvent(e as RoutedEventArgs);
}
#pragma warning restore IDE0060
/// <summary>
/// Converts the specified <see cref="Key"/> into a virtual key.
/// </summary>
/// <param name="key">The key code.</param>
/// <returns>The virtual key code.</returns>
public static VirtualKeys ToVirtualKey(this Key key)
{
if (key >= Key.LeftShift && key <= Key.RightAlt)
return (VirtualKeys)((key - Key.LeftShift) >> 1) | VirtualKeys.ShiftKey; // VK_SHIFT, VK_CONTROL, VK_MENU
if (key == Key.System)
return VirtualKeys.Menu; // VK_MENU
return (VirtualKeys)KeyInterop.VirtualKeyFromKey(key);
}
public static Color ToColor(this CefColor color)
{
return Color.FromArgb(color.A, color.R, color.G, color.B);
}
/// <summary>
/// Converts a drag drop effects to the CEF dragging operation mask.
/// </summary>
/// <param name="self">The drag drop effects.</param>
/// <returns></returns>
public static CefDragOperationsMask ToCefDragOperationsMask(this DragDropEffects self)
{
CefDragOperationsMask effects = CefDragOperationsMask.None;
if (self.HasFlag(DragDropEffects.Copy))
effects |= CefDragOperationsMask.Copy;
if (self.HasFlag(DragDropEffects.Move))
effects |= CefDragOperationsMask.Move;
if (self.HasFlag(DragDropEffects.Link))
effects |= CefDragOperationsMask.Link;
return effects;
}
/// <summary>
/// Converts the CEF dragging operation mask to drag drop effects.
/// </summary>
/// <param name="self">The CEF dragging operation mask.</param>
/// <returns></returns>
public static DragDropEffects ToDragDropEffects(this CefDragOperationsMask self)
{
DragDropEffects effects = DragDropEffects.None;
if (self.HasFlag(CefDragOperationsMask.Every))
effects |= DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move;
if (self.HasFlag(CefDragOperationsMask.Copy))
effects |= DragDropEffects.Copy;
if (self.HasFlag(CefDragOperationsMask.Move))
effects |= DragDropEffects.Move;
if (self.HasFlag(CefDragOperationsMask.Link))
effects |= DragDropEffects.Link;
return effects;
}
/// <summary>
/// Gets the current state of the SHIFT, CTRL, and ALT keys, as well as the state of the mouse buttons.
/// </summary>
/// <param name="e">The <see cref="DragEventArgs"/> instance containing the event data.</param>
/// <returns></returns>
public static CefEventFlags GetModifiers(this DragEventArgs e)
{
#pragma warning disable CS0618 // Obsoleted InputModifiers
CefEventFlags flags = CefEventFlags.None;
InputModifiers state = e.Modifiers;
if (state.HasFlag(InputModifiers.LeftMouseButton))
flags |= CefEventFlags.LeftMouseButton;
if (state.HasFlag(InputModifiers.RightMouseButton))
flags |= CefEventFlags.RightMouseButton;
if (state.HasFlag(InputModifiers.Shift))
flags |= CefEventFlags.ShiftDown;
if (state.HasFlag(InputModifiers.Control))
flags |= CefEventFlags.ControlDown;
if (state.HasFlag(InputModifiers.MiddleMouseButton))
flags |= CefEventFlags.MiddleMouseButton;
if (state.HasFlag(InputModifiers.Alt))
flags |= CefEventFlags.AltDown;
if (state.HasFlag(InputModifiers.Windows))
flags |= CefEventFlags.CommandDown;
return flags;
#pragma warning restore CS0618
}
/// <summary>
/// Gets the drag data.
/// </summary>
/// <param name="e">The <see cref="DragEventArgs"/> instance containing the event data.</param>
public static CefDragData GetCefDragData(this DragEventArgs e)
{
CefDragData dragData;
if (e.Data.Contains(nameof(CefDragData)))
{
dragData = (CefDragData)e.Data.Get(nameof(CefDragData));
if (dragData != null)
{
dragData.ResetFileContents();
return dragData;
}
}
dragData = new CefDragData();
string[] formats = e.Data.GetDataFormats().ToArray();
if (TryGetFileDropData(e.Data, out IEnumerable<string> fileNames))
{
foreach (string filePath in fileNames)
{
dragData.AddFile(filePath.Replace("\\", "/"), Path.GetFileName(filePath));
}
}
bool isUrl = false;
string s = GetUrlString(e.Data, formats);
if (!string.IsNullOrWhiteSpace(s))
{
isUrl = true;
dragData.LinkUrl = s;
}
if (formats.Contains(CefNetDragData.DataFormatUnicodeText))
{
s = (string)e.Data.Get(CefNetDragData.DataFormatUnicodeText);
if (!isUrl && Uri.IsWellFormedUriString(s, UriKind.Absolute))
dragData.LinkUrl = s;
dragData.FragmentText = s;
}
else if (formats.Contains(DataFormats.Text))
{
s = (string)e.Data.Get(DataFormats.Text);
if (!isUrl && Uri.IsWellFormedUriString(s, UriKind.Absolute))
dragData.LinkUrl = s;
dragData.FragmentText = s;
}
if (formats.Contains(CefNetDragData.DataFormatHtml))
{
dragData.FragmentHtml = Encoding.UTF8.GetString((byte[])e.Data.Get(CefNetDragData.DataFormatHtml));
}
else if (formats.Contains(CefNetDragData.DataFormatTextHtml))
{
dragData.FragmentHtml = Encoding.UTF8.GetString((byte[])e.Data.Get(CefNetDragData.DataFormatTextHtml));
}
return dragData;
}
private static bool TryGetFileDropData(IDataObject data, out IEnumerable<string> fileNames)
{
if (data.Contains(CefNetDragData.DataFormatFileDrop))
fileNames = (IEnumerable<string>)data.Get(CefNetDragData.DataFormatFileDrop);
else if (data.Contains(CefNetDragData.DataFormatFileNames))
fileNames = (IEnumerable<string>)data.Get(CefNetDragData.DataFormatFileNames);
else
fileNames = null;
return fileNames != null;
}
private static string GetUrlString(IDataObject data, string[] formats)
{
if (formats.Contains(CefNetDragData.DataFormatUnicodeUrl))
return Encoding.Unicode.GetString((byte[])data.Get(CefNetDragData.DataFormatUnicodeUrl));
if (formats.Contains(CefNetDragData.DataFormatUrl))
return Encoding.ASCII.GetString((byte[])data.Get(CefNetDragData.DataFormatUrl));
return null;
}
}
}
@@ -1,138 +0,0 @@
using Avalonia.Input;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
namespace CefNet.Avalonia
{
public class CefNetDragData : IDataObject
{
internal const string DataFormatUrl = "UniformResourceLocator";
internal const string DataFormatUnicodeUrl = "UniformResourceLocatorW";
internal const string DataFormatTextHtml = "text/html";
internal const string DataFormatUnicodeText = "UnicodeText";
internal const string DataFormatHtml = "HTML Format";
internal const string DataFormatFileDrop = "FileDrop";
internal const string DataFormatFileNames = "FileNames";
public const string DataFormatCefNetDragData = nameof(CefNetDragData);
public const string DataFormatCefDragData = nameof(CefDragData);
private WeakReference<WebView> _source;
private HashSet<string> _formats;
/// <summary>
/// Initializes a new instance of the <see cref="CefNetDragData"/> class.
/// </summary>
/// <param name="source">The source of the drag event.</param>
/// <param name="data">The original drag data.</param>
public CefNetDragData(WebView source, CefDragData data)
{
var formats = new HashSet<string>();
formats.Add(DataFormatCefNetDragData);
formats.Add(DataFormatCefDragData);
if (data.IsFile)
{
formats.Add(DataFormatFileDrop);
formats.Add(DataFormatFileNames);
}
if (data.IsLink)
{
formats.Add(DataFormatUnicodeUrl);
formats.Add(DataFormatUnicodeText);
}
if (data.IsFragment)
{
formats.Add(DataFormatUnicodeText);
formats.Add(DataFormatHtml);
formats.Add(DataFormatTextHtml);
}
_source = new WeakReference<WebView>(source);
_formats = formats;
this.Data = data;
}
/// <summary>
/// The original drag data.
/// </summary>
public CefDragData Data { get; }
/// <summary>
/// The source of the drag event.
/// </summary>
public WebView Source
{
get
{
if (_source.TryGetTarget(out WebView source))
return source;
return null;
}
}
public bool Contains(string format)
{
return _formats.Contains(format);
}
public object Get(string format)
{
Debug.Print("GetData: " + format);
string s;
if (DataFormatUnicodeUrl.Equals(format, StringComparison.Ordinal))
{
s = Data.LinkUrl;
return s is null ? null : new MemoryStream(Encoding.Unicode.GetBytes(s));
}
if (DataFormatUrl.Equals(format, StringComparison.Ordinal))
{
s = Data.LinkUrl;
return s is null ? null : new MemoryStream(Encoding.ASCII.GetBytes(s));
}
if (DataFormatUnicodeText.Equals(format, StringComparison.Ordinal))
{
if (Data.IsLink)
return Data.LinkUrl;
return Data.FragmentText;
}
if (DataFormatHtml.Equals(format, StringComparison.Ordinal))
return Data.FragmentHtml;
if (DataFormats.Text.Equals(format, StringComparison.Ordinal))
return Data.FragmentText;
if (DataFormatTextHtml.Equals(format, StringComparison.Ordinal))
return Data.FragmentHtml;
if (DataFormatCefDragData.Equals(format, StringComparison.Ordinal))
return Data;
if (DataFormatCefNetDragData.Equals(format, StringComparison.Ordinal))
return this;
return null;
}
public IEnumerable<string> GetDataFormats()
{
return _formats;
}
public IEnumerable<string> GetFileNames()
{
using (var list = new CefStringList())
{
Data.GetFileNames(list);
foreach (string s in list)
yield return s;
}
}
public string GetText()
{
if (Data.IsLink)
return Data.LinkUrl;
return Data.FragmentText;
}
}
}
@@ -1,19 +0,0 @@
using Avalonia.Input;
using System;
using System.ComponentModel;
namespace CefNet.Avalonia
{
public class CursorChangeEventArgs : HandledEventArgs
{
public CursorChangeEventArgs(Cursor cursor, CefCursorType cursorType)
{
this.Cursor = cursor;
this.CursorType = cursorType;
}
public Cursor Cursor { get; }
public CefCursorType CursorType { get; }
}
}
@@ -1,140 +0,0 @@
#if MODERNFORMS
using Modern.Forms;
#else
using Avalonia;
using Avalonia.Input;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
#endif
using CefNet.Internal;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
#if MODERNFORMS
namespace CefNet.Modern.Forms
#else
namespace CefNet.Avalonia
#endif
{
public sealed class CustomCursor
{
public unsafe static Cursor Create(ref CefCursorInfo cursorInfo)
{
return Cursor.Default; // Not supported
/*
CefSize size = cursorInfo.Size;
var bufferSize = size.Width * size.Height * 4;
int ICON_HEADER_SIZE = sizeof(ICONDIR);
var stream = new MemoryStream(bufferSize);
{
if (stream.Seek(ICON_HEADER_SIZE, SeekOrigin.Begin) != ICON_HEADER_SIZE)
{
stream.Seek(0, SeekOrigin.Begin);
stream.Write(new byte[ICON_HEADER_SIZE], 0, ICON_HEADER_SIZE);
}
using (var image = new WriteableBitmap(new PixelSize(size.Width, size.Height), OffscreenGraphics.Dpi, PixelFormat.Bgra8888))
{
using (ILockedFramebuffer frameBuffer = image.Lock())
{
System.Runtime.CompilerServices.Unsafe.CopyBlock((void*)frameBuffer.Address, (void*)cursorInfo.Buffer, (uint)bufferSize);
}
image.Save(stream); // Save in png format!!!
}
stream.Seek(0, SeekOrigin.Begin);
}
CefPoint hotSpot = cursorInfo.Hotspot;
var icon = new ICONDIR();
icon.IconType = 2;
icon.ImagesCount = 1;
icon.Width = (byte)size.Width;
icon.Height = (byte)size.Height;
icon.HotSpotX = (short)hotSpot.X;
icon.HotSpotY = (short)hotSpot.Y;
icon.BytesInRes = (int)stream.Length - ICON_HEADER_SIZE;
icon.ImageOffset = ICON_HEADER_SIZE;
using (var iconHead = new UnmanagedMemoryStream(icon._data, ICON_HEADER_SIZE))
{
iconHead.CopyTo(stream);
stream.Seek(0, SeekOrigin.Begin);
}
return new Cursor(stream);
*/
}
[StructLayout(LayoutKind.Explicit, Pack = 1, Size = 22)]
unsafe struct ICONDIR
{
[FieldOffset(0)]
public fixed byte _data[22];
/// <summary>
/// Reserved. Must always be 0.
/// </summary>
[FieldOffset(0)]
public short IDReserved;
/// <summary>
/// Specifies image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image.
/// </summary>
[FieldOffset(2)]
public short IconType;
/// <summary>
/// Specifies number of images in the file.
/// </summary>
[FieldOffset(4)]
public short ImagesCount;
/// <summary>
/// Specifies image width in pixels. Can be any number between 0 and 255. Value 0 means image width is 256 pixels.
/// </summary>
[FieldOffset(6)]
public byte Width;
/// <summary>
/// Specifies image height in pixels. Can be any number between 0 and 255. Value 0 means image height is 256 pixels.
/// </summary>
[FieldOffset(7)]
public byte Height;
/// <summary>
/// Specifies number of colors in the color palette. Should be 0 if the image does not use a color palette.
/// </summary>
[FieldOffset(8)]
public byte ColorCount;
/// <summary>
/// Reserved. Should be 0.
/// </summary>
[FieldOffset(9)]
public byte IDEReserved;
/// <summary>
/// Specifies the horizontal coordinates of the hotspot in number of pixels from the left.
/// </summary>
[FieldOffset(10)]
public short HotSpotX;
/// <summary>
/// Specifies the vertical coordinates of the hotspot in number of pixels from the top.
/// </summary>
[FieldOffset(12)]
public short HotSpotY;
/// <summary>
/// Specifies the size of the image's data in bytes
/// </summary>
[FieldOffset(14)]
public int BytesInRes;
/// <summary>
/// Specifies the offset of BMP or PNG data from the beginning of the ICO/CUR file
/// </summary>
[FieldOffset(18)]
public int ImageOffset;
}
}
}
@@ -1,121 +0,0 @@
using Avalonia;
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Media;
using Avalonia.Threading;
using CefNet.Avalonia;
using System;
using System.Threading.Tasks;
namespace CefNet.Internal
{
internal sealed class AvaloniaContextMenuRunner
{
private readonly MenuModel Model;
private CefRunContextMenuCallback Callback;
private ContextMenu Menu;
private TaskCompletionSource<bool> _completionSource;
public AvaloniaContextMenuRunner(CefMenuModel model, CefRunContextMenuCallback callback)
{
Model = MenuModel.FromCefMenu(model);
Callback = callback;
}
public void Build()
{
if (Menu != null)
throw new InvalidOperationException();
Menu = new ContextMenu();
Menu.MenuClosed += Menu_Closed;
Build(Model, (AvaloniaList<object>)Menu.Items);
}
private void Menu_Closed(object sender, RoutedEventArgs e)
{
Cancel();
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
var clickedItem = sender as MenuItem;
object cid = clickedItem?.Tag;
if (cid != null)
{
Callback.Continue((int)cid, CefEventFlags.LeftMouseButton);
Callback = null;
}
}
public Task CompletionTask
{
get { return _completionSource?.Task; }
}
private void Build(MenuModel model, AvaloniaList<object> menu)
{
int count = model.Count;
for (int i = 0; i < count; i++)
{
bool isSubmenu = false;
MenuItem menuItem;
switch (model.GetTypeAt(i))
{
case CefMenuItemType.Separator:
menu.Add(new Separator());
continue;
case CefMenuItemType.Check:
menuItem = new MenuItem();
menuItem.Icon = new CheckBox() { IsChecked = model.IsCheckedAt(i), Margin = new Thickness(-2, 0, 0, 0), BorderThickness = new Thickness() };
break;
case CefMenuItemType.Radio:
menuItem = new MenuItem();
menuItem.Icon = new RadioButton() { IsChecked = model.IsCheckedAt(i), Margin = new Thickness(-2, 0, 0, 0), BorderThickness = new Thickness() };
break;
case CefMenuItemType.Command:
menuItem = new MenuItem();
break;
case CefMenuItemType.Submenu:
isSubmenu = true;
menuItem = new MenuItem();
if (model.IsEnabledAt(i))
{
Build(model.GetSubMenuAt(i), (AvaloniaList<object>)menuItem.Items);
}
break;
default:
continue;
}
if (!isSubmenu)
{
menuItem.Click += MenuItem_Click;
menuItem.Tag = model.GetCommandIdAt(i);
}
menuItem.Header = model.GetLabelAt(i).Replace('&', '_');
menuItem.IsEnabled = model.IsEnabledAt(i);
//menuItem.Foreground = model.GetColorAt(i, CefMenuColorType.Text, out CefColor color) ? new SolidColorBrush(color.ToColor()) : SystemColors.MenuTextBrush;
menu.Add(menuItem);
}
}
public void RunMenuAt(Control control, Point point)
{
_completionSource = new TaskCompletionSource<bool>();
Dispatcher.UIThread.Post(() =>
{
Menu.Open(control);
_completionSource.TrySetResult(true);
});
}
public void Cancel()
{
_completionSource?.TrySetResult(false);
Callback?.Cancel();
Callback = null;
}
}
}
@@ -1,125 +0,0 @@
using Avalonia.Input;
using CefNet.Avalonia;
using System;
using System.Diagnostics;
namespace CefNet.Internal
{
public class AvaloniaWebViewGlue : WebViewGlue
{
public AvaloniaWebViewGlue(IAvaloniaWebViewPrivate view)
: base(view)
{
}
public new IAvaloniaWebViewPrivate WebView
{
get { return (IAvaloniaWebViewPrivate)base.WebView; }
}
/// <inheritdoc />
protected override bool OnCursorChange(CefBrowser browser, IntPtr cursorHandle, CefCursorType type, CefCursorInfo customCursorInfo)
{
var ea = new CursorChangeEventArgs(type != CefCursorType.Custom ? CursorInteropHelper.Create(cursorHandle) : CustomCursor.Create(ref customCursorInfo), type);
WebView.RaiseCefCursorChange(ea);
return ea.Handled;
}
/// <inheritdoc />
protected override bool OnTooltip(CefBrowser browser, ref string text)
{
WebView.CefSetToolTip(text);
return true;
}
/// <inheritdoc />
protected override void OnStatusMessage(CefBrowser browser, string message)
{
WebView.CefSetStatusText(message);
}
/// <summary>
/// Called when the user starts dragging content in the web view. OS APIs that run a system message
/// loop may be used within the StartDragging call. Don't call any of CefBrowserHost::DragSource*Ended*
/// methods after returning false. Call CefBrowserHost::DragSourceEndedAt and DragSourceSystemDragEnded
/// either synchronously or asynchronously to inform the web view that the drag operation has ended.
/// </summary>
/// <param name="browser"></param>
/// <param name="dragData">The contextual information about the dragged content.</param>
/// <param name="allowedOps"></param>
/// <param name="x">The X-location in screen coordinates.</param>
/// <param name="y">The Y-location in screen coordinates.</param>
/// <returns>Return false to abort the drag operation or true to handle the drag operation.</returns>
protected override bool StartDragging(CefBrowser browser, CefDragData dragData, CefDragOperationsMask allowedOps, int x, int y)
{
var e = new StartDraggingEventArgs(dragData, allowedOps, x, y);
WebView.RaiseStartDragging(e);
return e.Handled;
}
/// <summary>
/// Called when the web view wants to update the mouse cursor during a drag &amp; drop operation.
/// </summary>
/// <param name="browser"></param>
/// <param name="operation">Describes the allowed operation (none, move, copy, link).</param>
protected override void UpdateDragCursor(CefBrowser browser, CefDragOperationsMask operation)
{
Cursor cursor;
CefCursorType cursorType;
switch(operation)
{
case CefDragOperationsMask.None:
cursor = CursorInteropHelper.Create(StandardCursorType.No);
cursorType = CefCursorType.Notallowed;
break;
case CefDragOperationsMask.Move:
cursor = CursorInteropHelper.Create(StandardCursorType.DragMove);
cursorType = CefCursorType.Move;
break;
case CefDragOperationsMask.Link:
cursor = CursorInteropHelper.Create(StandardCursorType.DragLink);
cursorType = CefCursorType.Alias;
break;
default:
cursor = CursorInteropHelper.Create(StandardCursorType.DragCopy);
cursorType = CefCursorType.Copy;
break;
}
WebView.RaiseCefCursorChange(new CursorChangeEventArgs(cursor, cursorType));
}
/// <inheritdoc />
protected override void OnFindResult(CefBrowser browser, int identifier, int count, CefRect selectionRect, int activeMatchOrdinal, bool finalUpdate)
{
WebView.RaiseTextFound(new TextFoundRoutedEventArgs(identifier, count, selectionRect, activeMatchOrdinal, finalUpdate));
}
/// <inheritdoc />
protected override void OnPdfPrintFinished(string path, bool success)
{
WebView.RaisePdfPrintFinished(new PdfPrintFinishedRoutedEventArgs(path, success));
}
/// <inheritdoc />
protected override bool OnJSDialog(CefBrowser browser, string originUrl, CefJSDialogType dialogType, string messageText, string defaultPromptText, CefJSDialogCallback callback, ref int suppressMessage)
{
ScriptDialogDeferral dialogDeferral = CreateScriptDialogDeferral(callback);
var ea = new ScriptDialogOpeningRoutedEventArgs(originUrl, (ScriptDialogKind)dialogType, messageText, defaultPromptText, dialogDeferral);
WebView.RaiseScriptDialogOpening(ea);
suppressMessage = ea.Suppress ? 1 : 0;
if (!ea.Handled) ((IDisposable)dialogDeferral).Dispose();
return ea.Handled;
}
/// <inheritdoc />
protected override bool OnBeforeUnloadDialog(CefBrowser browser, string messageText, bool isReload, CefJSDialogCallback callback)
{
ScriptDialogDeferral dialogDeferral = CreateScriptDialogDeferral(callback);
var ea = new ScriptDialogOpeningRoutedEventArgs(messageText, isReload, dialogDeferral);
WebView.RaiseScriptDialogOpening(ea);
if (!ea.Handled) ((IDisposable)dialogDeferral).Dispose();
return ea.Handled;
}
}
}
@@ -1,66 +0,0 @@
#if AvaloniaBeta
using Avalonia.Input;
using Avalonia.Platform;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
namespace CefNet.Internal
{
public static class CursorInteropHelper
{
private static readonly Dictionary<IntPtr, Cursor> _Cursors = new Dictionary<IntPtr, Cursor>();
private static readonly Dictionary<StandardCursorType, Cursor> _StdCursors = new Dictionary<StandardCursorType, Cursor>();
private static IntPtr GetPlatformHandle(Cursor cursor)
{
if (cursor != null)
{
if (cursor.PlatformImpl is IPlatformHandle i)
{
return i.Handle;
}
}
return default;
}
static CursorInteropHelper()
{
foreach (StandardCursorType cursorType in Enum.GetValues(typeof(StandardCursorType)))
{
var cursor = new Cursor(cursorType);
var handle = GetPlatformHandle(cursor);
if (handle == default || _Cursors.ContainsKey(handle))
continue;
_Cursors.Add(handle, cursor);
_StdCursors.Add(cursorType, cursor);
}
}
public static Cursor Create(IntPtr cursorHandle)
{
if (_Cursors.TryGetValue(cursorHandle, out Cursor cursor))
return cursor;
return Cursor.Default;
}
public static Cursor Create(StandardCursorType cursorType)
{
Cursor cursor;
lock (_StdCursors)
{
if (!_StdCursors.TryGetValue(cursorType, out cursor))
{
cursor = new Cursor(cursorType);
_StdCursors[cursorType] = cursor;
}
}
return cursor;
}
}
}
#endif
@@ -1,48 +0,0 @@
using Avalonia.Input;
using System;
using System.Collections.Generic;
using System.Text;
namespace CefNet.Internal
{
public static class CursorInteropHelper
{
private static readonly Dictionary<IntPtr, Cursor> _Cursors = new Dictionary<IntPtr, Cursor>();
private static readonly Dictionary<StandardCursorType, Cursor> _StdCursors = new Dictionary<StandardCursorType, Cursor>();
static CursorInteropHelper()
{
foreach(StandardCursorType cursorType in Enum.GetValues(typeof(StandardCursorType)))
{
var cursor = new Cursor(cursorType);
if (_Cursors.ContainsKey(cursor.PlatformCursor.Handle))
continue;
_Cursors.Add(cursor.PlatformCursor.Handle, cursor);
_StdCursors.Add(cursorType, cursor);
}
}
public static Cursor Create(IntPtr cursorHandle)
{
if (_Cursors.TryGetValue(cursorHandle, out Cursor cursor))
return cursor;
return Cursor.Default;
}
public static Cursor Create(StandardCursorType cursorType)
{
Cursor cursor;
lock (_StdCursors)
{
if (!_StdCursors.TryGetValue(cursorType, out cursor))
{
cursor = new Cursor(cursorType);
_StdCursors[cursorType] = cursor;
}
}
return cursor;
}
}
}
@@ -1,61 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using Avalonia;
namespace CefNet.Internal
{
/// <summary>
/// Stores DPI information from which a <see cref="Avalonia.Layout.Visual"/> is rendered.
/// </summary>
///
public struct DpiScale
{
/// <summary>
/// Initializes a new instance of the <see cref="DpiScale"/> structure.
/// </summary>
/// <param name="dpiScaleX">The DPI scale on the X axis.</param>
/// <param name="dpiScaleY">The DPI scale on the Y axis.</param>
public DpiScale(double dpiScaleX, double dpiScaleY)
{
this.DpiScaleX = dpiScaleX;
this.DpiScaleY = dpiScaleY;
this.PixelsPerDip = 96.0;
this.PixelsPerInchX = dpiScaleX * 96.0;
this.PixelsPerInchY = dpiScaleY * 96.0;
}
/// <summary>
/// Gets the DPI scale on the X axis.
/// </summary>
public double DpiScaleX { get; }
/// <summary>
/// Gets the DPI scale on the Y axis.
/// </summary>
public double DpiScaleY { get; }
/// <summary>
/// Gets the PixelsPerDip at which the text should be rendered.
/// </summary>
public double PixelsPerDip { get; }
/// <summary>
/// Gets the DPI along X axis.
/// </summary>
public double PixelsPerInchX { get; }
/// <summary>
/// Gets the DPI along Y axis.
/// </summary>
public double PixelsPerInchY { get; }
/// <summary>
/// Gets the DPI.
/// </summary>
public Vector Dpi
{
get { return new Vector(PixelsPerInchX, PixelsPerInchY); }
}
}
}
@@ -1,172 +0,0 @@
using System;
using System.Collections.Generic;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Interactivity;
using System.Runtime.InteropServices;
using Avalonia.VisualTree;
using CefNet.WinApi;
using CefNet.Avalonia;
namespace CefNet.Internal
{
sealed class GlobalHooks
{
private static bool IsInitialized;
private static Dictionary<IntPtr, GlobalHooks> _HookedWindows = new Dictionary<IntPtr, GlobalHooks>();
private static List<WeakReference<WebView>> _Views = new List<WeakReference<WebView>>();
internal static void Initialize(WebView view)
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
return;
lock(_Views)
{
_Views.Add(new WeakReference<WebView>(view));
}
if (IsInitialized)
return;
IsInitialized = true;
var lifetime = Application.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
if (lifetime is null)
return;
Window.WindowOpenedEvent.AddClassHandler(typeof(Window), TryAddGlobalHook, handledEventsToo: true);
//EventManager.RegisterClassHandler(typeof(Window), FrameworkElement.SizeChangedEvent, new RoutedEventHandler(TryAddGlobalHook));
foreach (Window window in lifetime.Windows)
{
TryAddGlobalHook(window);
}
}
private WindowsHwndSource _source;
private WeakReference<Window> _windowRef;
private GlobalHooks(WindowsHwndSource source, Window window)
{
_source = source;
_windowRef = new WeakReference<Window>(window);
source.WndProcCallback = WndProc;
}
private unsafe IntPtr WndProc(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled)
{
const int WM_ENTERMENULOOP = 0x0211;
const int WM_EXITMENULOOP = 0x0212;
switch (message)
{
case 0x0002: // WM_DESTROY
_source.WndProcCallback = null;
foreach (var tuple in GetViews(hwnd))
{
tuple.Item1.Close();
}
lock (_HookedWindows)
{
_HookedWindows.Remove(_source.Handle);
_source.Dispose();
}
break;
case 0x0047: //WM_WINDOWPOSCHANGED
WINDOWPOS* windowPos = (WINDOWPOS*)lParam;
if ((windowPos->flags & 0x0002) != 0) // SWP_NOMOVE
break;
foreach (var tuple in GetViews(hwnd))
{
tuple.Item1.OnUpdateRootBounds();
}
break;
case 0x0231: // WM_ENTERSIZEMOVE
foreach (var tuple in GetViews(hwnd))
{
tuple.Item1.OnRootResizeBegin(EventArgs.Empty);
}
break;
case 0x0232: // WM_EXITSIZEMOVE
foreach (var tuple in GetViews(hwnd))
{
tuple.Item1.OnRootResizeEnd(EventArgs.Empty);
}
break;
case 0x0112: // WM_SYSCOMMAND
const int SC_KEYMENU = 0xF100;
// Menu loop must not be runned with Alt key
if ((int)(wParam.ToInt64() & 0xFFF0) == SC_KEYMENU && lParam == IntPtr.Zero)
{
handled = true;
}
break;
case WM_ENTERMENULOOP:
if (wParam == IntPtr.Zero)
CefApi.SetOSModalLoop(true);
break;
case WM_EXITMENULOOP:
if (wParam == IntPtr.Zero)
CefApi.SetOSModalLoop(false);
break;
}
return IntPtr.Zero;
}
private IEnumerable<ValueTuple<WebView, Window>> GetViews(IntPtr hwnd)
{
if (hwnd != _source.Handle)
yield break;
Window window;
if (!_windowRef.TryGetTarget(out window))
yield break;
lock (_Views)
{
for (int i = 0; i < _Views.Count; i++)
{
WeakReference<WebView> viewRef = _Views[i];
if (viewRef.TryGetTarget(out WebView view))
{
if (view.GetVisualRoot() == window)
{
yield return new ValueTuple<WebView, Window>(view, window);
}
}
else
{
_Views.RemoveAt(i--);
}
}
}
}
private static void TryAddGlobalHook(object sender, RoutedEventArgs e)
{
TryAddGlobalHook(e.Source as Window);
}
private static void TryAddGlobalHook(Window window)
{
if (window == null)
return;
IntPtr hwnd = window.PlatformImpl.Handle.Handle;
if (_HookedWindows.ContainsKey(hwnd))
return;
WindowsHwndSource source = WindowsHwndSource.FromHwnd(hwnd);
if (source == null)
return;
_HookedWindows.Add(hwnd, new GlobalHooks(source, window));
}
}
}
@@ -1,15 +0,0 @@
using CefNet.Avalonia;
using System;
using System.Collections.Generic;
using System.Text;
namespace CefNet.Internal
{
public interface IAvaloniaWebViewPrivate : IChromiumWebViewPrivate
{
void RaiseCefCursorChange(CursorChangeEventArgs e);
void CefSetToolTip(string text);
void CefSetStatusText(string statusText);
void RaiseStartDragging(StartDraggingEventArgs e);
}
}
@@ -1,726 +0,0 @@
using Avalonia.Input;
#pragma warning disable CS0219
namespace CefNet.Internal
{
/// <summary>
/// Provides static methods to convert between Virtual-Keys and the Key enumeration.
/// </summary>
internal static class KeyInterop
{
/// <summary>
/// Convert Key into a Virtual-Key.
/// </summary>
public static int VirtualKeyFromKey(Key key)
{
const int VK_CANCEL = 0x03;
const int VK_BACK = 0x08;
const int VK_CLEAR = 0x0C;
const int VK_RETURN = 0x0D;
const int VK_PAUSE = 0x13;
const int VK_CAPITAL = 0x14;
const int VK_KANA = 0x15;
const int VK_HANGEUL = 0x15;
const int VK_HANGUL = 0x15;
const int VK_JUNJA = 0x17;
const int VK_FINAL = 0x18;
const int VK_HANJA = 0x19;
const int VK_KANJI = 0x19;
const int VK_ESCAPE = 0x1B;
const int VK_CONVERT = 0x1C;
const int VK_NONCONVERT = 0x1D;
const int VK_ACCEPT = 0x1E;
const int VK_MODECHANGE = 0x1F;
const int VK_SPACE = 0x20;
const int VK_PRIOR = 0x21;
const int VK_NEXT = 0x22;
const int VK_END = 0x23;
const int VK_HOME = 0x24;
const int VK_LEFT = 0x25;
const int VK_UP = 0x26;
const int VK_RIGHT = 0x27;
const int VK_DOWN = 0x28;
const int VK_SELECT = 0x29;
const int VK_PRINT = 0x2A;
const int VK_EXECUTE = 0x2B;
const int VK_SNAPSHOT = 0x2C;
const int VK_INSERT = 0x2D;
const int VK_DELETE = 0x2E;
const int VK_HELP = 0x2F;
const int VK_0 = 0x30;
const int VK_1 = 0x31;
const int VK_2 = 0x32;
const int VK_3 = 0x33;
const int VK_4 = 0x34;
const int VK_5 = 0x35;
const int VK_6 = 0x36;
const int VK_7 = 0x37;
const int VK_8 = 0x38;
const int VK_9 = 0x39;
const int VK_A = 0x41;
const int VK_B = 0x42;
const int VK_C = 0x43;
const int VK_D = 0x44;
const int VK_E = 0x45;
const int VK_F = 0x46;
const int VK_G = 0x47;
const int VK_H = 0x48;
const int VK_I = 0x49;
const int VK_J = 0x4A;
const int VK_K = 0x4B;
const int VK_L = 0x4C;
const int VK_M = 0x4D;
const int VK_N = 0x4E;
const int VK_O = 0x4F;
const int VK_P = 0x50;
const int VK_Q = 0x51;
const int VK_R = 0x52;
const int VK_S = 0x53;
const int VK_T = 0x54;
const int VK_U = 0x55;
const int VK_V = 0x56;
const int VK_W = 0x57;
const int VK_X = 0x58;
const int VK_Y = 0x59;
const int VK_Z = 0x5A;
const int VK_LWIN = 0x5B;
const int VK_RWIN = 0x5C;
const int VK_APPS = 0x5D;
const int VK_POWER = 0x5E;
const int VK_SLEEP = 0x5F;
const int VK_NUMPAD0 = 0x60;
const int VK_NUMPAD1 = 0x61;
const int VK_NUMPAD2 = 0x62;
const int VK_NUMPAD3 = 0x63;
const int VK_NUMPAD4 = 0x64;
const int VK_NUMPAD5 = 0x65;
const int VK_NUMPAD6 = 0x66;
const int VK_NUMPAD7 = 0x67;
const int VK_NUMPAD8 = 0x68;
const int VK_NUMPAD9 = 0x69;
const int VK_MULTIPLY = 0x6A;
const int VK_ADD = 0x6B;
const int VK_SEPARATOR = 0x6C;
const int VK_SUBTRACT = 0x6D;
const int VK_DECIMAL = 0x6E;
const int VK_DIVIDE = 0x6F;
const int VK_F1 = 0x70;
const int VK_F2 = 0x71;
const int VK_F3 = 0x72;
const int VK_F4 = 0x73;
const int VK_F5 = 0x74;
const int VK_F6 = 0x75;
const int VK_F7 = 0x76;
const int VK_F8 = 0x77;
const int VK_F9 = 0x78;
const int VK_F10 = 0x79;
const int VK_F11 = 0x7A;
const int VK_F12 = 0x7B;
const int VK_F13 = 0x7C;
const int VK_F14 = 0x7D;
const int VK_F15 = 0x7E;
const int VK_F16 = 0x7F;
const int VK_F17 = 0x80;
const int VK_F18 = 0x81;
const int VK_F19 = 0x82;
const int VK_F20 = 0x83;
const int VK_F21 = 0x84;
const int VK_F22 = 0x85;
const int VK_F23 = 0x86;
const int VK_F24 = 0x87;
const int VK_NUMLOCK = 0x90;
const int VK_SCROLL = 0x91;
const int VK_RSHIFT = 0xA1;
const int VK_BROWSER_BACK = 0xA6;
const int VK_BROWSER_FORWARD = 0xA7;
const int VK_BROWSER_REFRESH = 0xA8;
const int VK_BROWSER_STOP = 0xA9;
const int VK_BROWSER_SEARCH = 0xAA;
const int VK_BROWSER_FAVORITES = 0xAB;
const int VK_BROWSER_HOME = 0xAC;
const int VK_VOLUME_MUTE = 0xAD;
const int VK_VOLUME_DOWN = 0xAE;
const int VK_VOLUME_UP = 0xAF;
const int VK_MEDIA_NEXT_TRACK = 0xB0;
const int VK_MEDIA_PREV_TRACK = 0xB1;
const int VK_MEDIA_STOP = 0xB2;
const int VK_MEDIA_PLAY_PAUSE = 0xB3;
const int VK_LAUNCH_MAIL = 0xB4;
const int VK_LAUNCH_MEDIA_SELECT = 0xB5;
const int VK_LAUNCH_APP1 = 0xB6;
const int VK_LAUNCH_APP2 = 0xB7;
const int VK_PROCESSKEY = 0xE5;
const int VK_PACKET = 0xE7;
const int VK_ATTN = 0xF6;
const int VK_CRSEL = 0xF7;
const int VK_EXSEL = 0xF8;
const int VK_EREOF = 0xF9;
const int VK_PLAY = 0xFA;
const int VK_ZOOM = 0xFB;
const int VK_NONAME = 0xFC;
const int VK_PA1 = 0xFD;
const int VK_OEM_CLEAR = 0xFE;
const int VK_TAB = 0x09;
const int VK_SHIFT = 0x10;
const int VK_CONTROL = 0x11;
const int VK_MENU = 0x12;
const int VK_LSHIFT = 0xA0;
const int VK_RMENU = 0xA5;
const int VK_LMENU = 0xA4;
const int VK_LCONTROL = 0xA2;
const int VK_RCONTROL = 0xA3;
const int VK_LBUTTON = 0x01;
const int VK_RBUTTON = 0x02;
const int VK_MBUTTON = 0x04;
const int VK_XBUTTON1 = 0x05;
const int VK_XBUTTON2 = 0x06;
const int VK_OEM_1 = 0xBA;
const int VK_OEM_PLUS = 0xBB;
const int VK_OEM_COMMA = 0xBC;
const int VK_OEM_MINUS = 0xBD;
const int VK_OEM_PERIOD = 0xBE;
const int VK_OEM_2 = 0xBF;
const int VK_OEM_3 = 0xC0;
const int VK_C1 = 0xC1; // ABNT_C1 (Brazilian)
const int VK_C2 = 0xC2; // ABNT_C2 (Brazilian)
const int VK_OEM_4 = 0xDB;
const int VK_OEM_5 = 0xDC;
const int VK_OEM_6 = 0xDD;
const int VK_OEM_7 = 0xDE;
const int VK_OEM_8 = 0xDF;
const int VK_OEM_AX = 0xE1;
const int VK_OEM_102 = 0xE2;
const int VK_OEM_RESET = 0xE9;
const int VK_OEM_JUMP = 0xEA;
const int VK_OEM_PA1 = 0xEB;
const int VK_OEM_PA2 = 0xEC;
const int VK_OEM_PA3 = 0xED;
const int VK_OEM_WSCTRL = 0xEE;
const int VK_OEM_CUSEL = 0xEF;
const int VK_OEM_ATTN = 0xF0;
const int VK_OEM_FINISH = 0xF1;
const int VK_OEM_COPY = 0xF2;
const int VK_OEM_AUTO = 0xF3;
const int VK_OEM_ENLW = 0xF4;
const int VK_OEM_BACKTAB = 0xF5;
switch (key)
{
case Key.Cancel:
return VK_CANCEL;
case Key.Back:
return VK_BACK;
case Key.Tab:
return VK_TAB;
case Key.Clear:
return VK_CLEAR;
case Key.Return:
return VK_RETURN;
case Key.Pause:
return VK_PAUSE;
case Key.Capital:
return VK_CAPITAL;
case Key.KanaMode:
return VK_KANA;
case Key.JunjaMode:
return VK_JUNJA;
case Key.FinalMode:
return VK_FINAL;
case Key.KanjiMode:
return VK_KANJI;
case Key.Escape:
return VK_ESCAPE;
case Key.ImeConvert:
return VK_CONVERT;
case Key.ImeNonConvert:
return VK_NONCONVERT;
case Key.ImeAccept:
return VK_ACCEPT;
case Key.ImeModeChange:
return VK_MODECHANGE;
case Key.Space:
return VK_SPACE;
case Key.Prior:
return VK_PRIOR;
case Key.Next:
return VK_NEXT;
case Key.End:
return VK_END;
case Key.Home:
return VK_HOME;
case Key.Left:
return VK_LEFT;
case Key.Up:
return VK_UP;
case Key.Right:
return VK_RIGHT;
case Key.Down:
return VK_DOWN;
case Key.Select:
return VK_SELECT;
case Key.Print:
return VK_PRINT;
case Key.Execute:
return VK_EXECUTE;
case Key.Snapshot:
return VK_SNAPSHOT;
case Key.Insert:
return VK_INSERT;
case Key.Delete:
return VK_DELETE;
case Key.Help:
return VK_HELP;
case Key.D0:
return VK_0;
case Key.D1:
return VK_1;
case Key.D2:
return VK_2;
case Key.D3:
return VK_3;
case Key.D4:
return VK_4;
case Key.D5:
return VK_5;
case Key.D6:
return VK_6;
case Key.D7:
return VK_7;
case Key.D8:
return VK_8;
case Key.D9:
return VK_9;
case Key.A:
return VK_A;
case Key.B:
return VK_B;
case Key.C:
return VK_C;
case Key.D:
return VK_D;
case Key.E:
return VK_E;
case Key.F:
return VK_F;
case Key.G:
return VK_G;
case Key.H:
return VK_H;
case Key.I:
return VK_I;
case Key.J:
return VK_J;
case Key.K:
return VK_K;
case Key.L:
return VK_L;
case Key.M:
return VK_M;
case Key.N:
return VK_N;
case Key.O:
return VK_O;
case Key.P:
return VK_P;
case Key.Q:
return VK_Q;
case Key.R:
return VK_R;
case Key.S:
return VK_S;
case Key.T:
return VK_T;
case Key.U:
return VK_U;
case Key.V:
return VK_V;
case Key.W:
return VK_W;
case Key.X:
return VK_X;
case Key.Y:
return VK_Y;
case Key.Z:
return VK_Z;
case Key.LWin:
return VK_LWIN;
case Key.RWin:
return VK_RWIN;
case Key.Apps:
return VK_APPS;
case Key.Sleep:
return VK_SLEEP;
case Key.NumPad0:
return VK_NUMPAD0;
case Key.NumPad1:
return VK_NUMPAD1;
case Key.NumPad2:
return VK_NUMPAD2;
case Key.NumPad3:
return VK_NUMPAD3;
case Key.NumPad4:
return VK_NUMPAD4;
case Key.NumPad5:
return VK_NUMPAD5;
case Key.NumPad6:
return VK_NUMPAD6;
case Key.NumPad7:
return VK_NUMPAD7;
case Key.NumPad8:
return VK_NUMPAD8;
case Key.NumPad9:
return VK_NUMPAD9;
case Key.Multiply:
return VK_MULTIPLY;
case Key.Add:
return VK_ADD;
case Key.Separator:
return VK_SEPARATOR;
case Key.Subtract:
return VK_SUBTRACT;
case Key.Decimal:
return VK_DECIMAL;
case Key.Divide:
return VK_DIVIDE;
case Key.F1:
return VK_F1;
case Key.F2:
return VK_F2;
case Key.F3:
return VK_F3;
case Key.F4:
return VK_F4;
case Key.F5:
return VK_F5;
case Key.F6:
return VK_F6;
case Key.F7:
return VK_F7;
case Key.F8:
return VK_F8;
case Key.F9:
return VK_F9;
case Key.F10:
return VK_F10;
case Key.F11:
return VK_F11;
case Key.F12:
return VK_F12;
case Key.F13:
return VK_F13;
case Key.F14:
return VK_F14;
case Key.F15:
return VK_F15;
case Key.F16:
return VK_F16;
case Key.F17:
return VK_F17;
case Key.F18:
return VK_F18;
case Key.F19:
return VK_F19;
case Key.F20:
return VK_F20;
case Key.F21:
return VK_F21;
case Key.F22:
return VK_F22;
case Key.F23:
return VK_F23;
case Key.F24:
return VK_F24;
case Key.NumLock:
return VK_NUMLOCK;
case Key.Scroll:
return VK_SCROLL;
case Key.LeftShift:
return VK_LSHIFT;
case Key.RightShift:
return VK_RSHIFT;
case Key.LeftCtrl:
return VK_LCONTROL;
case Key.RightCtrl:
return VK_RCONTROL;
case Key.LeftAlt:
return VK_LMENU;
case Key.RightAlt:
return VK_RMENU;
case Key.BrowserBack:
return VK_BROWSER_BACK;
case Key.BrowserForward:
return VK_BROWSER_FORWARD;
case Key.BrowserRefresh:
return VK_BROWSER_REFRESH;
case Key.BrowserStop:
return VK_BROWSER_STOP;
case Key.BrowserSearch:
return VK_BROWSER_SEARCH;
case Key.BrowserFavorites:
return VK_BROWSER_FAVORITES;
case Key.BrowserHome:
return VK_BROWSER_HOME;
case Key.VolumeMute:
return VK_VOLUME_MUTE;
case Key.VolumeDown:
return VK_VOLUME_DOWN;
case Key.VolumeUp:
return VK_VOLUME_UP;
case Key.MediaNextTrack:
return VK_MEDIA_NEXT_TRACK;
case Key.MediaPreviousTrack:
return VK_MEDIA_PREV_TRACK;
case Key.MediaStop:
return VK_MEDIA_STOP;
case Key.MediaPlayPause:
return VK_MEDIA_PLAY_PAUSE;
case Key.LaunchMail:
return VK_LAUNCH_MAIL;
case Key.SelectMedia:
return VK_LAUNCH_MEDIA_SELECT;
case Key.LaunchApplication1:
return VK_LAUNCH_APP1;
case Key.LaunchApplication2:
return VK_LAUNCH_APP2;
case Key.OemSemicolon:
return VK_OEM_1;
case Key.OemPlus:
return VK_OEM_PLUS;
case Key.OemComma:
return VK_OEM_COMMA;
case Key.OemMinus:
return VK_OEM_MINUS;
case Key.OemPeriod:
return VK_OEM_PERIOD;
case Key.OemQuestion:
return VK_OEM_2;
case Key.OemTilde:
return VK_OEM_3;
case Key.AbntC1:
return VK_C1;
case Key.AbntC2:
return VK_C2;
case Key.OemOpenBrackets:
return VK_OEM_4;
case Key.OemPipe:
return VK_OEM_5;
case Key.OemCloseBrackets:
return VK_OEM_6;
case Key.OemQuotes:
return VK_OEM_7;
case Key.Oem8:
return VK_OEM_8;
case Key.OemBackslash:
return VK_OEM_102;
case Key.ImeProcessed:
return VK_PROCESSKEY;
case Key.OemAttn:
return VK_OEM_ATTN; // VK_DBE_ALPHANUMERIC
case Key.OemFinish:
return VK_OEM_FINISH; // VK_DBE_KATAKANA
case Key.OemCopy:
return VK_OEM_COPY; // VK_DBE_HIRAGANA
case Key.OemAuto:
return VK_OEM_AUTO; // VK_DBE_SBCSCHAR
case Key.OemEnlw:
return VK_OEM_ENLW; // VK_DBE_DBCSCHAR
case Key.OemBackTab:
return VK_OEM_BACKTAB; // VK_DBE_ROMAN
case Key.Attn:
return VK_ATTN; // VK_DBE_NOROMAN
case Key.CrSel:
return VK_CRSEL; // VK_DBE_ENTERWORDREGISTERMODE
case Key.ExSel:
return VK_EXSEL; // VK_DBE_ENTERIMECONFIGMODE
case Key.EraseEof:
return VK_EREOF; // VK_DBE_FLUSHSTRING
case Key.Play:
return VK_PLAY; // VK_DBE_CODEINPUT
case Key.Zoom:
return VK_ZOOM; // VK_DBE_NOCODEINPUT
case Key.NoName:
return VK_NONAME; // VK_DBE_DETERMINESTRING
case Key.Pa1:
return VK_PA1; // VK_ENTERDLGCONVERSIONMODE
case Key.OemClear:
return VK_OEM_CLEAR;
case Key.DeadCharProcessed:
return 0; // There is no Win32 VKey for this.
default:
return 0;
}
}
}
}
@@ -1,209 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace CefNet.Internal
{
internal sealed class MenuModel
{
private sealed class MenuModelItem
{
public int Command;
public string Label;
public CefMenuItemType Type;
public int Group;
public bool Visible;
public bool Enabled;
public bool Checked;
public CefColor[] Colors;
public Accelerator Accelerator;
public MenuModel SubMenu;
}
private sealed class Accelerator
{
public int KeyCode;
public bool Alt;
public bool Shift;
public bool Ctrl;
}
private MenuModelItem[] _items;
private MenuModel(MenuModelItem[] items)
{
_items = items;
}
public static MenuModel FromCefMenu(CefMenuModel model)
{
var items = new MenuModelItem[model.Count];
CopyItems(model, items);
return new MenuModel(items);
}
private static void CopyItems(CefMenuModel model, MenuModelItem[] dest)
{
for (int i = 0; i < dest.Length; i++)
{
var item = new MenuModelItem
{
Command = model.GetCommandIdAt(i),
Label = model.GetLabelAt(i),
Type = model.GetTypeAt(i),
Group = model.GetGroupIdAt(i),
Visible = model.IsVisibleAt(i),
Enabled = model.IsEnabledAt(i),
Checked = model.IsCheckedAt(i),
};
CefColor color = default;
item.Colors = new CefColor[(int)CefMenuColorType.Count];
for (int j = 0; j < item.Colors.Length; j++)
{
item.Colors[j] = model.GetColorAt(i, (CefMenuColorType)j, ref color) ? color : default;
}
int keycode = 0, alt = 0, ctrl = 0, shift = 0;
if (model.GetAcceleratorAt(i, ref keycode, ref shift, ref ctrl, ref alt))
{
item.Accelerator = new Accelerator { KeyCode = keycode, Alt = alt != 0, Ctrl = ctrl != 0, Shift = shift != 0 };
}
if (item.Type == CefMenuItemType.Submenu)
{
CefMenuModel submenu = model.GetSubMenuAt(i);
var items = new MenuModelItem[submenu.Count];
CopyItems(submenu, items);
item.SubMenu = new MenuModel(items) { IsSubMenu = true };
}
dest[i] = item;
}
}
/// <summary>
/// Returns true if this menu is a submenu.
/// </summary>
public bool IsSubMenu { get; private set; }
/// <summary>
/// Returns the number of items in this menu.
/// </summary>
public int Count
{
get { return _items.Length; }
}
/// <summary>
/// Returns the command id at the specified |index| or -1 if not found due to
/// invalid range or the index being a separator.
/// </summary>
public int GetCommandIdAt(int index)
{
return _items[index].Command;
}
/// <summary>
/// Returns the label at the specified |index| or NULL if not found due to
/// invalid range or the index being a separator.
/// The resulting string must be freed by calling cef_string_userfree_free().
/// </summary>
public string GetLabelAt(int index)
{
return _items[index].Label;
}
/// <summary>
/// Returns the item type at the specified |index|.
/// </summary>
public CefMenuItemType GetTypeAt(int index)
{
return _items[index].Type;
}
/// <summary>
/// Returns the group id at the specified |index| or -1 if invalid.
/// </summary>
public int GetGroupIdAt(int index)
{
return _items[index].Group;
}
/// <summary>
/// Returns the submenu at the specified |index| or NULL if invalid.
/// </summary>
public MenuModel GetSubMenuAt(int index)
{
return _items[index].SubMenu;
}
/// <summary>
/// Returns true if the specified |index| is visible.
/// </summary>
public bool IsVisibleAt(int index)
{
return _items[index].Visible;
}
/// <summary>
/// Returns true if the specified |index| is enabled.
/// </summary>
public bool IsEnabledAt(int index)
{
return _items[index].Enabled;
}
/// <summary>
/// Returns true if the specified |index| is checked. Only applies to check
/// and radio items.
/// </summary>
public bool IsCheckedAt(int index)
{
return _items[index].Checked;
}
/// <summary>
/// Returns true if the specified |index| has a keyboard accelerator
/// assigned.
/// </summary>
public bool HasAcceleratorAt(int index)
{
return _items[index].Accelerator != null;
}
/// <summary>
/// Retrieves the keyboard accelerator for the specified |index|. Returns true on success.
/// </summary>
public bool GetAcceleratorAt(int index, out int keyCode, out bool shift, out bool ctrl, out bool alt)
{
Accelerator accelerator = _items[index].Accelerator;
if (accelerator == null)
{
keyCode = 0;
shift = false;
ctrl = false;
alt = false;
return false;
}
keyCode = accelerator.KeyCode;
shift = accelerator.Shift;
ctrl = accelerator.Ctrl;
alt = accelerator.Alt;
return true;
}
/// <summary>
/// Returns in |color| the color that was explicitly set for |command_id| and
/// |color_type|. Specify an |index| value of -1 to return the default color in
/// |color|. If a color was not set then 0 will be returned in |color|. Returns
/// true on success.
/// </summary>
public bool GetColorAt(int index, CefMenuColorType colorType, out CefColor color)
{
color = _items[index].Colors[(int)colorType];
return color != 0;
}
}
}
@@ -1,234 +0,0 @@
using System;
using System.Buffers;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using Avalonia;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using CefNet.Avalonia;
namespace CefNet.Internal
{
public sealed class OffscreenGraphics
{
private class PixelBuffer : IDisposable
{
public byte[] DIB;
private List<CefRect> _dirtyRects = new List<CefRect>();
public int Width;
public int Height;
public WriteableBitmap Surface;
public PixelBuffer(int width, int height)
{
this.Width = width;
this.Height = height;
this.DIB = ArrayPool<byte>.Shared.Rent(width * height * 4);
}
~PixelBuffer()
{
Dispose(false);
}
private void Dispose(bool disposing)
{
byte[] buffer = Interlocked.Exchange(ref DIB, null);
if (buffer != null)
{
ArrayPool<byte>.Shared.Return(buffer);
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public int Stride
{
get { return Width * 4; }
}
public int Size
{
get
{
return Width * Height * 4;
}
}
public void AddDirtyRects(CefRect[] dirtyRects)
{
_dirtyRects.AddRange(dirtyRects);
}
//public Int32Rect GetDirtyRectangle()
//{
// if (_dirtyRects.Count == 0)
// return new Int32Rect();
// CefRect r = _dirtyRects[0];
// Int32Rect dirtyRect = new Int32Rect(r.X, r.Y, r.Width, r.Height);
// for (int i = 1; i < _dirtyRects.Count; i++)
// {
// dirtyRect.Union(_dirtyRects[i]);
// }
// return dirtyRect;
//}
public void ClearDirtyRectangle()
{
_dirtyRects.Clear();
}
}
private PixelBuffer ViewPixels;
private PixelBuffer PopupPixels;
private readonly object _syncRoot;
private CefRect _bounds;
private CefRect _popupBounds;
public OffscreenGraphics()
{
_syncRoot = new object();
_bounds = new CefRect(0, 0, 1, 1);
}
public static DpiScale DpiScale { get; set; } = new DpiScale(1, 1);
public void SetLocation(int x, int y)
{
_bounds.X = x;
_bounds.Y = y;
}
public bool SetSize(int width, int height)
{
width = Math.Max(width, 1);
height = Math.Max(height, 1);
_bounds.Width = width;
_bounds.Height = height;
lock (_syncRoot)
{
return ViewPixels == null || ViewPixels.Width != width || ViewPixels.Height != height;
}
}
public CefRect GetBounds()
{
return _bounds;
}
public void Draw(CefPaintEventArgs e)
{
lock (_syncRoot)
{
PixelBuffer pixelBuffer;
if (e.PaintElementType == CefPaintElementType.View)
{
if (ViewPixels == null || ViewPixels.Width != e.Width || ViewPixels.Height != e.Height)
{
if (ViewPixels != null)
ViewPixels.Dispose();
ViewPixels = new PixelBuffer(e.Width, e.Height);
}
pixelBuffer = ViewPixels;
}
else if(e.PaintElementType == CefPaintElementType.Popup)
{
if (PopupPixels == null || PopupPixels.Width != e.Width || PopupPixels.Height != e.Height)
{
if (PopupPixels != null)
PopupPixels.Dispose();
PopupPixels = new PixelBuffer(e.Width, e.Height);
}
pixelBuffer = PopupPixels;
}
else
{
return;
}
Marshal.Copy(e.Buffer, pixelBuffer.DIB, 0, pixelBuffer.Size);
pixelBuffer.AddDirtyRects(e.DirtyRects);
}
}
public unsafe void Render(DrawingContext drawingContext)
{
lock (_syncRoot)
{
if (ViewPixels != null)
{
PixelSize pixelSize;
WriteableBitmap surface;
surface = GetSurface(ViewPixels);
pixelSize = surface.PixelSize;
drawingContext.DrawImage(surface, new Rect(0, 0, pixelSize.Width, pixelSize.Height), new Rect(surface.Size));
PixelBuffer pixelBuffer = PopupPixels;
if (pixelBuffer == null)
return;
surface = GetSurface(pixelBuffer);
Size size = surface.Size;
pixelSize = surface.PixelSize;
drawingContext.DrawImage(surface,
new Rect(0, 0, pixelSize.Width, pixelSize.Height),
new Rect(_popupBounds.X, _popupBounds.Y, size.Width, size.Height));
}
}
}
private WriteableBitmap GetSurface(PixelBuffer pixelBuffer)
{
if (!Monitor.IsEntered(_syncRoot))
throw new InvalidOperationException();
WriteableBitmap surface = pixelBuffer.Surface;
if (surface is null || surface.PixelSize != new PixelSize(pixelBuffer.Width, pixelBuffer.Height))
{
surface?.Dispose();
surface = new WriteableBitmap(new PixelSize(pixelBuffer.Width, pixelBuffer.Height), OffscreenGraphics.DpiScale.Dpi, PixelFormat.Bgra8888, AlphaFormat.Premul);
pixelBuffer.Surface = surface;
}
using (ILockedFramebuffer frameBuffer = surface.Lock())
{
Marshal.Copy(pixelBuffer.DIB, 0, frameBuffer.Address, pixelBuffer.Size);
pixelBuffer.ClearDirtyRectangle();
}
return surface;
}
public void SetPopup(PopupShowEventArgs e)
{
if (e.Visible)
{
_popupBounds = e.Bounds;
}
else
{
lock (_syncRoot)
{
PopupPixels?.Dispose();
PopupPixels = null;
}
}
}
}
}
@@ -1,91 +0,0 @@
using System;
using System.ComponentModel;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using CefNet.WinApi;
namespace CefNet.Internal
{
internal delegate IntPtr WindowsWindowProcDelegate(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled);
internal sealed class WindowsHwndSource : CriticalFinalizerObject, IDisposable
{
private delegate IntPtr WindowProc(IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam);
private bool _disposed;
private IntPtr hWndProcHook;
private readonly WindowProc fnWndProcHook;
public static WindowsHwndSource FromHwnd(IntPtr hwnd)
{
const int GWLP_WNDPROC = -4;
uint tid = NativeMethods.GetWindowThreadProcessId(hwnd, IntPtr.Zero);
if (tid == 0)
throw new Win32Exception(Marshal.GetLastWin32Error());
var source = new WindowsHwndSource(hwnd);
source.hWndProcHook = NativeMethods.SetWindowLong(hwnd, GWLP_WNDPROC, Marshal.GetFunctionPointerForDelegate(source.fnWndProcHook));
if (source.hWndProcHook == IntPtr.Zero)
throw new Win32Exception(Marshal.GetLastWin32Error());
return source;
}
private WindowsHwndSource(IntPtr hwnd)
{
hWndProcHook = IntPtr.Zero;
this.Handle = hwnd;
fnWndProcHook = new WindowProc(WndProcHook);
}
~WindowsHwndSource()
{
Dispose(false);
}
private void Dispose(bool disposing)
{
if (_disposed)
return;
if (hWndProcHook != IntPtr.Zero)
{
const int GWLP_WNDPROC = -4;
NativeMethods.SetWindowLong(this.Handle, GWLP_WNDPROC, hWndProcHook);
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public IntPtr Handle { get; }
public WindowsWindowProcDelegate WndProcCallback { get; set; }
private unsafe IntPtr WndProcHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam)
{
IntPtr retval = IntPtr.Zero;
WindowsWindowProcDelegate wndproc = this.WndProcCallback;
if (wndproc != null)
{
bool handled = false;
retval = wndproc(hwnd, msg, wParam, lParam, ref handled);
if (handled)
return retval;
}
return NativeMethods.CallWindowProc(hWndProcHook, hwnd, msg, wParam, lParam);
}
}
}
@@ -1,51 +0,0 @@
using Avalonia.Interactivity;
using System;
using System.Collections.Generic;
using System.Text;
namespace CefNet.Avalonia
{
/// <summary>
/// Provides data for the <see cref="WebView.StartDragging"/> event.
/// </summary>
public class StartDraggingEventArgs : RoutedEventArgs
{
/// <summary>
/// Initializes a new instance of the <see cref="StartDraggingEventArgs"/> class.
/// </summary>
/// <param name="source"></param>
/// <param name="data">The data associated with this event.</param>
/// <param name="allowedOps">Drag-and-drop operations which allowed by the source of the drag event.</param>
/// <param name="x">The X-location in screen coordinates.</param>
/// <param name="y">The Y-location in screen coordinates.</param>
public StartDraggingEventArgs(CefDragData data, CefDragOperationsMask allowedOps, int x, int y)
: base(WebView.StartDraggingEvent)
{
this.Data = data;
this.AllowedEffects = allowedOps;
this.X = x;
this.Y = y;
}
/// <summary>
/// The contextual information about the dragged content.
/// </summary>
public CefDragData Data { get; }
/// <summary>
/// Gets which drag-and-drop operations are allowed by the originator (or source) of the drag event.
/// </summary>
public CefDragOperationsMask AllowedEffects { get; }
/// <summary>
/// Gets the X-location of the mouse pointer in screen coordinates.
/// </summary>
public int X { get; }
/// <summary>
/// Gets the Y-location of the mouse pointer in screen coordinates.
/// </summary>
public int Y { get; }
}
}
File diff suppressed because it is too large Load Diff
@@ -1,14 +0,0 @@
using System;
using System.Runtime.InteropServices;
namespace CefNet.WinApi
{
[StructLayout(LayoutKind.Sequential)]
internal struct CWPSTRUCT
{
public IntPtr lParam;
public IntPtr wParam;
public int message;
public IntPtr hwnd;
}
}
@@ -1,45 +0,0 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace CefNet.WinApi
{
static class NativeMethods
{
[DllImport("user32.dll")]
public static extern IntPtr GetKeyboardLayout(uint idThread);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr ActivateKeyboardLayout(IntPtr hkl, int flags);
[DllImport("user32.dll", EntryPoint = "VkKeyScanW", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern ushort VkKeyScan(char ch);
public static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
{
if (IntPtr.Size == 8)
return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
else
return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32()));
}
[DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr pPid);
[DllImport("Dwmapi.dll", CharSet = CharSet.Auto)]
public static unsafe extern int DwmGetWindowAttribute(IntPtr hwnd, DWMWINDOWATTRIBUTE attribute, void* value, int size);
[DllImport("Dwmapi.dll", CharSet = CharSet.Auto, PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();
}
}
@@ -1,20 +0,0 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace CefNet.WinApi
{
[StructLayout(LayoutKind.Sequential)]
internal struct WINDOWPOS
{
public IntPtr hwnd;
public IntPtr hwndInsertAfter;
public int x;
public int y;
public int cx;
public int cy;
public int flags;
}
}
@@ -1,22 +0,0 @@
namespace CefNet.WinApi
{
internal enum DWMWINDOWATTRIBUTE
{
NCRenderingEnabled = 1,
NCRenderingPolicy,
TransitionsForceDisabled,
AllowNCPaint,
CaptionButtonBounds,
NonClientRtlLayout,
ForceIconicRepresentation,
Flip3DPolicy,
ExtendedFrameBounds,
HasIconicBitmap,
DisallowPeek,
ExcludedFromPeek,
ExceludedFromPeek,
Cloak,
Cloaked,
FreezeRepresentation
}
}
@@ -1,42 +0,0 @@
#if AVALONIA
using Avalonia.Interactivity;
#elif WPF
using System.Windows;
#endif
#if AVALONIA
namespace CefNet.Avalonia
#elif WPF
namespace CefNet.Wpf
#endif
{
/// <summary>
/// Represents PDF printing results.
/// </summary>
public sealed class PdfPrintFinishedRoutedEventArgs : RoutedEventArgs, IPdfPrintFinishedEventArgs
{
/// <summary>
/// Initializes a new instance of the <see cref="PdfPrintFinishedEventArgs"/> class.
/// </summary>
/// <param name="path">The path to PDF file.</param>
/// <param name="success">A value which indicates that the PDF printing completed successfully.</param>
public PdfPrintFinishedRoutedEventArgs(string path, bool success)
: base(WebView.PdfPrintFinishedEvent)
{
this.Path = path;
this.Success = success;
}
/// <summary>
/// Gets the path to PDF file.
/// </summary>
public string Path { get; }
/// <summary>
/// Gets a value which indicates that the PDF printing completed successfully.
/// </summary>
/// <value></value>
public bool Success { get; }
}
}
@@ -1,81 +0,0 @@
#if AVALONIA
using Avalonia.Interactivity;
#elif WPF
using System.Windows;
#endif
using System;
#if AVALONIA
namespace CefNet.Avalonia
#elif WPF
namespace CefNet.Wpf
#endif
{
/// <summary>
/// Event args for the <see cref="IChromiumWebView.ScriptDialogOpening"/> event.
/// </summary>
public sealed class ScriptDialogOpeningRoutedEventArgs : RoutedEventArgs, IScriptDialogOpeningEventArgs
{
private readonly ScriptDialogDeferral _callback;
/// <summary>
/// Initializes a new instance of the <see cref="ScriptDialogOpeningEventArgs"/> class.
/// </summary>
/// <param name="originUrl">The URI of the page that requested the dialog box.</param>
/// <param name="kind">The kind of JavaScript dialog box.</param>
/// <param name="message">The message of the dialog box.</param>
/// <param name="defaultText">The default value to use for the result of the prompt JavaScript function.</param>
/// <param name="callback"></param>
public ScriptDialogOpeningRoutedEventArgs(string originUrl, ScriptDialogKind kind, string message, string defaultText, ScriptDialogDeferral callback)
: base(WebView.ScriptDialogOpeningEvent)
{
this.Uri = Uri.TryCreate(originUrl, UriKind.Absolute, out Uri uri) ? uri : null;
this.Kind = kind;
this.Message = message;
this.DefaultText = defaultText;
_callback = callback;
}
/// <summary>
/// Initializes a new instance of the <see cref="ScriptDialogOpeningEventArgs"/> class.
/// </summary>
/// <param name="kind">The kind of JavaScript dialog box.</param>
/// <param name="message">The message of the dialog box.</param>
/// <param name="reload">Indicates that the event is fired before page reloading.</param>
/// <param name="callback"></param>
public ScriptDialogOpeningRoutedEventArgs(string message, bool reload, ScriptDialogDeferral callback)
: base(WebView.ScriptDialogOpeningEvent)
{
this.Uri = null;
this.Kind = ScriptDialogKind.BeforeUnload;
this.Message = message;
this.IsReload = reload;
_callback = callback;
}
/// <inheritdoc/>
public Uri Uri { get; }
/// <inheritdoc/>
public ScriptDialogKind Kind { get; }
/// <inheritdoc/>
public string Message { get; }
/// <inheritdoc/>
public string DefaultText { get; }
/// <inheritdoc/>
public bool Suppress { get; set; }
/// <inheritdoc />
public bool IsReload { get; set; }
/// <inheritdoc/>
public ScriptDialogDeferral GetDeferral()
{
this.Handled = true;
return _callback;
}
}
}
@@ -1,39 +0,0 @@
#if AVALONIA
using Avalonia.Interactivity;
#elif WPF
using System.Windows;
#endif
#if AVALONIA
namespace CefNet.Avalonia
#elif WPF
namespace CefNet.Wpf
#endif
{
/// <summary>
/// Represents find results.
/// </summary>
public sealed class TextFoundRoutedEventArgs : RoutedEventArgs, ITextFoundEventArgs
{
public TextFoundRoutedEventArgs(int identifier, int count, CefRect selectionRect, int index, bool finalUpdate)
: base(WebView.TextFoundEvent)
{
this.ID = identifier;
this.Count = count;
this.SelectionRect = selectionRect;
this.Index = index;
this.FinalUpdate = finalUpdate;
}
public int ID { get; }
public int Index { get; }
public int Count { get; }
public CefRect SelectionRect { get; }
public bool FinalUpdate { get; }
}
}
File diff suppressed because it is too large Load Diff
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020 CefNet
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+7
View File
@@ -0,0 +1,7 @@
using System.Runtime.CompilerServices;
using static System.Properties.ThisAssembly;
[assembly: SuppressIldasm]
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client" + PublicKey)]
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Mobile" + PublicKey)]
[assembly: InternalsVisibleTo("System.Application.SteamTools.Client.Desktop" + PublicKey)]
Binary file not shown.
File diff suppressed because it is too large Load Diff
+86 -28
View File
@@ -1,32 +1,90 @@
1. 修复 添加令牌时引发的闪退
2. CLR 升级至 .NET 6 Preview 4
3. 64 位程序支持,从此版本开始不再提供 32 位程序支持
4. CEF 升级至 90.6.3
5. 改进 程序目录结构,所有相关 dll 将放入 bin 文件夹中
6. 新增 全新的托盘菜单
7. 改进 隐藏游戏列表与挂机游戏列表实时刷新
8. 新增 JumpList 菜单切换账号
9. 修复 Win7 中右上角按钮样式错误
10. 改进 缓存获取加速项目数据,避免失败时无数据
11. 修复 手动检查更新时有概率出现两个新版本窗口
12. 改进 未使用社区加速时退出程序不再清理 hosts 文件
### 新增内容
1. CLR 升级至 .NET 6 Preview 7
2. 新增 库存游戏可浏览已安装的游戏文件夹
3. 新增 创意工坊划词翻译脚本
4. 新增 通用设置-使用硬件加速设置项,也可通过命令行参数禁用硬件加速启动 -clt devtools -disable_gpu
5. 新增 账号切换内新增家庭库共享排序功能,该功能可调整当前设备的多个家庭共享账号库存的优先级顺序。
6. 新增 QQ 快速登录渠道
7. 新增 意大利语支持
8. 新增 西班牙语支持
9. 新增 通用设置内可支持访问程序的 AppData、Cache、Logs 文件夹和查看缓存及日志占用空间大小情况
10. 新增 本地令牌可以查看令牌二维码导入到移动端
11. Android/macOS/Linux 版现已开启 Beta/Alpha 测试,可从 GitHub/Gitee 上下载
12. 现已通过 Desktop Bridge 转制为 UWP 上架 Microsoft Store
| File | Checksum (SHA256) |
| ---- | ---- |
| Steam++_win_x64_v2.4.0.7z | SHA256 |
| Steam++_win_x64_v2.4.0.exe | SHA256 |
| Steam++_win_x64_v2.4.0.msix | SHA256 |
| Steam++_win_arm64_v2.4.0.7z | SHA256 |
| Steam++_win_arm64_v2.4.0.exe | SHA256 |
| Steam++_win_arm64_v2.4.0.msix | SHA256 |
| Steam++_linux_x64_v2.4.0.7z | SHA256 |
| Steam++_linux_x64_v2.4.0.deb | SHA256 |
| Steam++_macos_x64_v2.4.0.dmg | SHA256 |
| Steam++_macos_arm64_v2.4.0.dmg | SHA256 |
| Steam++_android_v2.4.0.apk | SHA256 |
| Steam++_android_arm64_v2.4.0.apk | SHA256 |
| Steam++_android_arm_v2.4.0.apk | SHA256 |
### 修复问题
1. 修复 开机自启动在 2.4.x 中不生效
2. 改进 深色和浅色模式的视觉效果
3. 改进 社区加速计时逻辑
4. 更正 导出令牌窗口标题文本错误
5. 改进 添加令牌弹窗可调整窗口大小
6. 改进 本地令牌自定义修改名称操作
7. 修复 我的面板中出现垂直滚动条
8. 改进 解锁成就风险提示弹窗可以设置不再提示
9. 修复 任务栏位于顶部时托盘菜单位置不正确
10. 修复 挂时长运行中列表移除游戏时引发的闪退
11. 改进 自动更新机制
12. 改进 开机自启动现仅对当前用户生效
13. 改进 第三方账号快速登录,现使用系统浏览器进行快速登录
14. 改进 现已编译为 ReadyToRun (R2R) 格式,这将改进应用程序的启动时间和延迟(仅 Windows 版)
15. 修复 库存游戏中部分游戏被错误屏蔽没有加载
16. 改进 部分语言的翻译文本
17. 改进 本地令牌上移下移功能顺序错乱问题
18. 修复 程序在加载库存游戏时有概率闪退的问题
19. 修复 打开托盘菜单有概率导致程序闪退的问题
20. 修复 程序启动时界面不会加载任何内容无法正常使用的问题
21. 改进 账号切换功能UI
22. 改进 移除了CEF模块,缩减程序体积和运行时内存占用
23. 改进 库存游戏支持显示已安装游戏占用空间大小
24. 改进 库存游戏封面大小调节可支持滚动调节
25. 改进 hosts 文件编码在 Windows 上使用系统的活动代码页(ANSICodePage),例如 GB2312/936,其他操作系统则使用 UTF-8,还原 V1 版本行为
26. 改进 开始菜单磁贴背景由黑色更改为透明
27. 修复 账号切换修改账号备注重启后被还原
### 已知问题
- macOS
- 尚未公证,这会影响 macOS Catalina(版本 10.15)以上
- 自动更新不可用
- Linux
- 托盘不生效,这将影响程序不能正常退出
- 窗口弹出位置不正确
- 自动更新不可用
***
由于程序体积较大,推荐从 [官网 https://steampp.net](https://steampp.net) 中下载
<!-- 1. 新增 ASF Plus 本地挂卡
3. 改进 新增守护进程,当程序闪退时将自动重启 -->
| RuntimeIdentifier | Available | Edition |
| ---- | ---- | ---- |
| win-x64 | ✅ | Stable |
| win-x64(DesktopBridge/msix) | ✅ | β |
| osx-x64 | ✅ | β |
| linux-x64 | ✅ | α |
| android-arm64 | ✅ | α |
| android-arm | ✅ | α |
| win-arm64 | ❌ | |
| osx-arm64 | ❌ | |
| linux-arm64 | ❌ | |
| ios-arm64 | ❌ | |
| File | Checksum (SHA256) |
| ---- | ---- |
| Steam++_win_x64_v2.4.9.7z | SHA256 |
| Steam++_win_x64_v2.4.9.exe | SHA256 |
| | |
| Steam++_win_arm64_v2.4.9.7z | SHA256 |
| Steam++_win_arm64_v2.4.9.exe | SHA256 |
| | |
| Steam++_linux_x64_v2.4.9.7z | SHA256 |
| Steam++_linux_x64_v2.4.9.deb | SHA256 |
| | |
| Steam++_macos_x64_v2.4.9.dmg | SHA256 |
| Steam++_macos_arm64_v2.4.9.dmg | SHA256 |
| | |
| Steam++_android_arm64_v8a_v2.4.9.apk | SHA256 |
| Steam++_android_armeabi_v7a_v2.4.9.apk | SHA256 |
<!-- ***
由于程序体积较大,推荐从 [官网 https://steampp.net](https://steampp.net) 中下载 -->
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

+5
View File
@@ -0,0 +1,5 @@
<svg id="abee0869-1b5a-43b0-ad2d-68b9c06591d9" data-name="steampp" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 151.22 160.98"><defs><style>.bee71911-c304-409c-b1a3-5c617b033d97{fill:#fff;}.e33bb62c-3cd8-43d8-b337-a8f898048f78{fill:url(#fe73b66f-3888-4385-9976-c891a0dc3db5);}.f52f40e5-9b40-42f3-ad92-92d8d45039d2{fill:url(#f2f22e4f-2cb9-40ee-9151-f69f4c5c4c7f);}</style><linearGradient id="fe73b66f-3888-4385-9976-c891a0dc3db5" x1="53.34" y1="148.33" x2="142.57" y2="59.1" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1890de"/><stop offset="0.07" stop-color="#2195e1"/><stop offset="0.31" stop-color="#3ea3ea"/><stop offset="0.54" stop-color="#53adf1"/><stop offset="0.78" stop-color="#60b3f5"/><stop offset="1" stop-color="#64b5f6"/></linearGradient><linearGradient id="f2f22e4f-2cb9-40ee-9151-f69f4c5c4c7f" x1="162.65" y1="122.92" x2="85.29" y2="45.56" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#81c784"/><stop offset="0.1" stop-color="#6cb46f"/><stop offset="0.21" stop-color="#5ba55f"/><stop offset="0.34" stop-color="#519c55"/><stop offset="0.5" stop-color="#4e9952"/><stop offset="0.66" stop-color="#519c55"/><stop offset="0.79" stop-color="#5ba55f"/><stop offset="0.9" stop-color="#6cb46f"/><stop offset="1" stop-color="#81c784"/></linearGradient></defs>
<path class="e33bb62c-3cd8-43d8-b337-a8f898048f78" d="M121.28,180.51c-3.4,0-6.79,0-10.19,0a6.18,6.18,0,0,1-5.51-4.24c-1.45-5.21-2.87-10.43-4.4-15.61a2.41,2.41,0,0,0-1.43-1.38,77.05,77.05,0,0,1-15.07-6.87,20.55,20.55,0,0,1-2.74-1.69c-1-.8-1.7-.51-2.51.14-3.13,2.47-6.33,4.85-9.36,7.42A5,5,0,0,1,63,158c-2.76-2.7-5.35-5.57-8-8.39-3.37-3.56-6.74-7.12-10.07-10.72a5.91,5.91,0,0,1-.54-7.46c2.48-3.46,4.71-7.09,7.09-10.63a1.41,1.41,0,0,0,0-1.73,83.14,83.14,0,0,1-8.36-18.84,1.73,1.73,0,0,0-1-1q-6.65-1.92-13.33-3.71A5.63,5.63,0,0,1,24.42,90q0-10.2,0-20.4c0-2.64,1.36-4.09,4-4.2,4-.18,8.06-.3,12.1-.41a1.39,1.39,0,0,0,1.56-1.21,44.26,44.26,0,0,1,5.85-12.88,1.57,1.57,0,0,0-.08-2.12c-2.36-3.15-4.66-6.35-7-9.55a3.3,3.3,0,0,1,.77-4.92c4.07-2.86,8.21-5.65,12.23-8.59a4.94,4.94,0,0,1,5.68.09c3,2.3,6.11,4.49,9.08,6.84a2.64,2.64,0,0,0,2.74.5,47.44,47.44,0,0,1,12.43-2.3c.65,0,.94-.25,1-.89.08-.87.26-1.73.34-2.6.18-1.95.3-3.9.5-5.85a2.12,2.12,0,0,1,2.51-1.85,53.28,53.28,0,0,1,5.29.94c3.74.77,7.48,1.57,11.23,2.35a6.31,6.31,0,0,1,5.06,4.53c.84,2.57,1.74,5.13,2.77,7.63a4.14,4.14,0,0,0,1.72,1.64c1,.58,2.11.94,3.15,1.43a3.09,3.09,0,0,1,.67.59,2.63,2.63,0,0,1-.87.09,43.19,43.19,0,0,0-12-1.43c-8.59.2-16.54,2.49-23.3,8A34.77,34.77,0,0,0,71.26,60.66c-2.73,7.4-2.92,15-2,22.67a54.81,54.81,0,0,0,5.41,17.74c1.55,3.14,3.42,6.12,5.13,9.18.45.81.78.92,1.44.13,1.2-1.44,2.51-2.79,3.79-4.16a3.05,3.05,0,0,0,.89-2.37c-.3-6.14-.32-12.31-.94-18.43a6,6,0,0,1,1.88-5.23c4.11-4.46,8.16-9,12.2-13.48a3.3,3.3,0,0,1,2.57-1.18c5.19-.19,10.37-.49,15.56-.71,1.54-.07,2.25.33,2.46,1.69a3.24,3.24,0,0,1-.65,2.35c-4,4.49-8,8.9-12,13.31a1.39,1.39,0,0,0-.33,1.79c1.46,3.18,2.83,6.4,4.28,9.59a1.75,1.75,0,0,0,.88.84c3.38,1.18,6.79,2.31,10.18,3.47.75.26,1.18-.11,1.63-.62q5.73-6.36,11.48-12.68c.3-.32.55-.79.92-.92a4.94,4.94,0,0,1,2.31-.47,2,2,0,0,1,1.58,2.15c.17,3.23.31,6.46.49,9.69.12,2.11.33,4.22.38,6.33a2.87,2.87,0,0,1-.63,1.82q-7,7.84-14.14,15.58a2.57,2.57,0,0,1-1.21.64,7.13,7.13,0,0,1-1.54.17c-6.5.32-13,.63-19.5,1a2.29,2.29,0,0,0-1.43.66c-1.81,1.9-3.55,3.87-5.34,5.8-.7.75-.56,1.24.24,1.83a66.14,66.14,0,0,0,18.27,9.79,50.54,50.54,0,0,0,16.8,2.79c8.41-.07,16.16-2.26,22.88-7.5a34.86,34.86,0,0,0,11-15.07c.24-.6.56-1.15.85-1.72a8.81,8.81,0,0,1,.12,2c-.46,2.87-1,5.71-1.48,8.58a2,2,0,0,0,.37,1.4c2.55,3.37,5.12,6.73,7.74,10,1.93,2.45,2.53,4.88.8,7.78-2.64,4.4-5.06,8.94-7.63,13.38-1.26,2.17-3.18,2.53-5.25,1q-4.09-3-8.11-6.13c-3.2-2.49-3.16-2.49-6.44-.16a39.15,39.15,0,0,1-10.69,5.22,1.43,1.43,0,0,0-1.19,1.7c.14,4.67.12,9.35.37,14a4.3,4.3,0,0,1-4.55,4.62C127.85,180.37,124.56,180.51,121.28,180.51Z" transform="translate(-24.41 -19.59)"/>
<path class="f52f40e5-9b40-42f3-ad92-92d8d45039d2" d="M105.9,39.94a52.29,52.29,0,0,1,18.17,3.85,64.5,64.5,0,0,1,17.47,10.47,67.77,67.77,0,0,1,11,11.42,64.77,64.77,0,0,1,10.06,18.26,68.43,68.43,0,0,1,2.78,9.75,47.72,47.72,0,0,1,.23,16.69,35.77,35.77,0,0,1-7.11,16.37A30.1,30.1,0,0,1,143.14,137a42.13,42.13,0,0,1-12.28,1.72c-.16,0-.32,0-.47,0a1.78,1.78,0,0,1,.45-.28c1.95-.66,3.94-1.23,5.87-2A25.79,25.79,0,0,0,149.25,126a31.24,31.24,0,0,0,4.45-11.76,39.49,39.49,0,0,0,.29-11.78,49.28,49.28,0,0,0-3.15-12.35A58.94,58.94,0,0,0,140.6,72.89a61.58,61.58,0,0,0-14-12.39,53,53,0,0,0-15.64-6.79c-9-2.18-17.72-1.64-25.83,3.11a26.22,26.22,0,0,0-11.19,13C73.09,71.84,72.6,74,72,76c0,.17-.14.34-.2.51a1.55,1.55,0,0,1-.23-.6c.07-1.92.07-3.85.28-5.75A36.07,36.07,0,0,1,77,55a29.6,29.6,0,0,1,9.92-9.86A30.76,30.76,0,0,1,98.22,40.9C100.76,40.5,103.34,40.26,105.9,39.94Z" transform="translate(-24.41 -19.59)"/></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

+3 -5
View File
@@ -1,8 +1,6 @@
<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<VisualElements
ShowNameOnSquare150x150Logo='on'
Square150x150Logo='Assets\VisualElements_150.png'
Square70x70Logo='Assets\VisualElements_70.png'
ForegroundText='light'
BackgroundColor='#000000'/>
</Application>
Square150x150Logo='Assets\SteamPlusPlus.150x150.png'
Square70x70Logo='Assets\SteamPlusPlus.70x70.png'/>
</Application>
+44 -19
View File
@@ -1,13 +1,15 @@
using Android.OS;
using Android.OS;
using Java.Lang;
using System.Collections.Generic;
using System.Linq;
using StringBuilder = System.Text.StringBuilder;
namespace System
{
/// <summary>
/// Android ROM 相关函数集
/// </summary>
[Obsolete("Slow performance")]
public static class AndroidROM
{
/// <summary>
@@ -42,6 +44,15 @@ namespace System
return Type.ToString();
}
public void ToString(StringBuilder b)
{
if (HasVersionString)
{
b.AppendFormat("{0} {1}", Type, VersionString);
}
if (Type != AndroidROMType.Unknown) b.Append(Type.ToString());
}
public static Info Unknown { get; } = new Info(AndroidROMType.Unknown, null);
/// <summary>
@@ -124,39 +135,53 @@ namespace System
/// <summary>
/// 获取当前 ROM 信息
/// </summary>
public static Info Current => mCurrent ?? throw new NullReferenceException("must call AndroidROM.Initialize() before using.");
public static Info Current
{
get
{
if (mCurrent == null)
{
Initialize();
}
return mCurrent!;
}
}
static bool isInit;
static readonly object initLock = new();
/// <summary>
/// 初始化 ROM 信息
/// </summary>
public static void Initialize()
static void Initialize()
{
if (isInit) return;
string? version = null;
var firstOrDefault = identify_keywords_rule_a
.FirstOrDefault(x => SystemProperties.TryGet(x.Key, out version));
if (firstOrDefault.Key != null)
lock (initLock)
{
mCurrent = new Info(firstOrDefault.Value, version);
}
else
{
if (SystemProperties.TryGet(RO_BUILD_DISPLAY_ID, out var value))
if (isInit) return;
string? version = null;
var firstOrDefault = identify_keywords_rule_a
.FirstOrDefault(x => SystemProperties.TryGet(x.Key, out version));
if (firstOrDefault.Key != null)
{
foreach (var item in identify_keywords_rule_b)
mCurrent = new Info(firstOrDefault.Value, version);
}
else
{
if (SystemProperties.TryGet(RO_BUILD_DISPLAY_ID, out var value))
{
if (value.Contains(item.Key, StringComparison.OrdinalIgnoreCase))
foreach (var item in identify_keywords_rule_b)
{
mCurrent = new Info(item.Value, value);
break;
if (value.Contains(item.Key, StringComparison.OrdinalIgnoreCase))
{
mCurrent = new Info(item.Value, value);
break;
}
}
}
}
if (mCurrent == null) mCurrent = Info.Unknown;
isInit = true;
}
if (mCurrent == null) mCurrent = Info.Unknown;
isInit = true;
}
}
}
@@ -1,7 +1,7 @@
using Android.Content;
using Android.Content;
using Android.Content.Res;
using Android.OS;
using AndroidApplication = Android.App.Application;
//using Android.OS;
//using AndroidApplication = Android.App.Application;
namespace System.Application
{
@@ -38,16 +38,16 @@ namespace System.Application
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
static bool IsDarkMode(Context context)
public static bool IsDarkMode(Context context)
{
var isNight = IsNight(context);
return isNight.HasValue && isNight.Value;
}
/// <summary>
/// 是否正在安卓Q中使用深色主题(Dark)
/// </summary>
public static bool IsDarkModeQ
=> Build.VERSION.SdkInt >= BuildVersionCodes.Q && IsDarkMode(AndroidApplication.Context);
///// <summary>
///// 是否正在安卓Q中使用深色主题(Dark)
///// </summary>
//public static bool IsDarkModeQ
// => Build.VERSION.SdkInt >= BuildVersionCodes.Q && IsDarkMode(AndroidApplication.Context);
}
}
@@ -1,4 +1,4 @@
using Android.App;
using Android.App;
using Android.Content;
using Android.Provider;
using AndroidX.Core.Content;
@@ -18,10 +18,23 @@ namespace System.Application
/// <param name="context"></param>
public static void MockHomePressed(Context context)
{
var intent = new Intent(Intent.ActionMain);
intent.SetFlags(ActivityFlags.NewTask);
intent.AddCategory(Intent.CategoryHome);
context.StartActivity(intent);
try
{
var intent = new Intent(Intent.ActionMain)
.SetFlags(ActivityFlags.NewTask)
.AddCategory(Intent.CategoryHome);
context.StartActivity(intent);
}
catch
{
}
}
public static string GetAuthority(Context context)
{
var packageName = context.ApplicationContext!.PackageName;
var value = packageName + ".fileProvider";
return value;
}
/// <summary>
@@ -34,9 +47,7 @@ namespace System.Application
{
file ??= new JFile(Path.GetTempFileName());
// https://github.com/xamarin/Essentials/blob/1.5.3.2/Xamarin.Essentials/Types/FileProvider.android.cs
var imageUri = FileProvider.GetUriForFile(activity,
activity.ApplicationContext().PackageName + ".fileProvider",
file);
var imageUri = FileProvider.GetUriForFile(activity, GetAuthority(activity), file);
#if DEBUG
Android.Util.Log.Debug(nameof(Activity), $"StartCameraForResult imageUri: {imageUri}");
#endif
@@ -60,6 +60,15 @@ namespace System.Application.Properties {
}
}
/// <summary>
/// 查找类似 此应用不支持在模拟器中运行 的本地化字符串。
/// </summary>
internal static string ExitCode_IsEmulator {
get {
return ResourceManager.GetString("ExitCode_IsEmulator", resourceCulture);
}
}
/// <summary>
/// 查找类似 此应用不支持在有ROOT权限的设备中运行 的本地化字符串。
/// </summary>

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