Compare commits

..
10 Commits
Author SHA1 Message Date
Aigio Liu 3781465d70 v2.4.11 release 2021-08-24 22:33:28 +08:00
Aigio Liu b8a5906184 update submodules 2021-08-24 22:26:29 +08:00
Aigio Liu 763bbae5a9 fix 2021-08-24 22:22:52 +08:00
RMBGAME 57a592d472 Fix 2021-08-24 22:15:30 +08:00
Aigio Liu 0c39c7eafd v2.4.11 release 2021-08-24 22:02:52 +08:00
RMBGAME af7635f972 修复托盘有时候无法打开菜单的问题
移除菜单栏用户手机号显示
调整库存游戏列表菜单顺序#406
修复库存游戏的磁盘占用UI错位问题
修复快速登录等待中UI错位问题
修复IOPath.OpenRead导致的闪退问题
2021-08-24 21:53:11 +08:00
RMBGAME 3a6468ad9f Misc 2021-08-24 21:53:11 +08:00
Aigio Liu 60b03fe6a8 fix 2021-08-24 17:36:16 +08:00
Mossimo 8ed21f5f26 tryfix liunx account 2021-08-24 16:28:14 +08:00
Mossimo fa8c599477 fixtips 2021-08-24 16:28:14 +08:00
46 changed files with 906 additions and 190 deletions
+2 -2
View File
@@ -33,9 +33,9 @@ emit_plist() {
<key>CFBundleIdentifier</key>
<string>net.steampp.app</string>
<key>CFBundleShortVersionString</key>
<string>2.4.10</string>
<string>2.4.11</string>
<key>CFBundleVersion</key>
<string>2.4.10.0</string>
<string>2.4.11.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.14</string>
<key>CFBundleDevelopmentRegion</key>
+44 -32
View File
@@ -1,41 +1,53 @@
# 前言
Steam++项目创建于2018年5月8日,不过并不是耗时三年才做出来,之前一直由于软软(软件原作者)的工作原因,并没有多少空闲时间,直到去年中旬软软辞职了,才开始猛肝。
去年年底发布了Steam++的第一个版本,受到了其乐广大用户的喜爱,并有了高达数百位网友的赞助支持。在此动力下,一直一个人更新维护到今年2月份。之后又找来几位朋友一起全职合作开发,并创立了我们自己的公司来进行运营这一产品。
在每人每天近16小时的高强度爆肝下,我们使用了最新的技术、最新的框架,将Steam++原先的代码全部重写,重新制作了UI。于是乎,Steam++2.0崭新出炉了。
Steam++目前处于一个完全开源的状态,所以对于软件报毒可以不用担心安全问题。我们也制作了自己的产品[官网](https://www.steampp.net),大家可以去官网下载到我们的工具。
Steam++是完全开源的,请不要在非官方渠道下载软件,对于软件报毒情况确实是误报问题。我们也制作了自己的产品[官网](https://www.steampp.net),大家可以去官网或者开源仓库地址下载。
# Steam++工具箱
## 更新内容
## 2.4.10更新内容
### 2.3.0
```
1. 改进 端口被占用检测进程名
2. 修复 部分 Toast 没有正确显示
3. 新增 账号注销功能
4. 改进 hosts 文件写入无权操作时显示的错误文本
5. 新增 快速登录后可绑定手机号
6. 新增 解绑快速登录账号
7. 新增 隐藏库存游戏
8. 新增 游戏功能-无边框窗口化
9. 新增 关于-更新日志
10. 新增 令牌加密设置,现在新增令牌默认将不启用本机加密
11. 修复 非正常退出程序时导致残留进程且无法启动程序
12. 改进 不再写入 C:\Users\用户名\AppData\Local 目录
13. 修复 文本框中某些符号可能无法正确输入
14. 改进 令牌排序上移下移
15. 新增 令牌导入导出
16. 新增 游戏时长挂机功能
17. 新增 Microsoft 账号快速登录与绑定
18. 新增 社区加速 hCaptcha 验证码 / EPIC 验证码 / artstation / v2ex
19. 修复 社区加速 discord 更新下载
### 新增内容
1. Linux/macOS 版本中的 CLR 升级至 .NET 6 Preview 7
2. Desktop 现已适配 WinUI 3 / Windows 11 / Fluent Design System 样式风格新UI
3. 新增 Android 上从图库选择二维码图片导入令牌
4. 新增 Android 上文件导入选择二维码图片导入令牌
5. 新增 Desktop 上现可刷新头像
6. 新增 UI设置-主题色设置
7. 新增 UI设置-自定义背景图片设置
```
### 修复问题
1. 修复 Desktop 上账号切换功能
2. 改进 Desktop 上受保护的成就不在支持勾选
3. 修复 Linux 上因字体引发的启动时闪退
4. 修复 Android 上扫码导入功能
5. 修复 Android 上 Toast 不能正常显示
6. 改进 Android 上的令牌导入方式
7. 修复 Android 上导入带密码的令牌时不显示密码输入框
8. 修复 导入带密码的令牌时密码输入文本框窗口不能正确取消
9. 修复 Desktop 上使用火狐浏览器无法进行快速登录
10. 修复 Android 8.0 以下启动时闪退
11. 修复 Desktop 上部分用户库存游戏已安装游戏无法读取
12. 尝试修复 Windows 上托盘菜单有时无法打开窗口
13. 改进 Android 上确认交易页面上的显示隐藏逻辑
### 已知问题
- Desktop
- macOS
- 尚未公证,这会影响 macOS Catalina(版本 10.15)以上
- 某些窗口顶部会有两个标题栏
- 自动更新不可用
- Linux
- 托盘不生效,这将影响程序不能正常退出
- 窗口弹出位置不正确
- 自动更新不可用
- Shared
- 主题切换需重启软件后生效,且跟随系统暂不可用
- Mobile
- Android
- 本地令牌倒计时存在误差不够精确,可能导致令牌值不一致
- 确认交易列表刷新后数据显示不正确
- 自动更新暂不可用
***
## 工具介绍
@@ -96,7 +108,7 @@ Steam++目前处于一个完全开源的状态,所以对于软件报毒可以
### 6. 更新计划(画饼时间到)
我们预计会在6月份将推出本地挂卡、挂时长功能。并且同步推出iOS、安卓端App,用户可以利用手机查看多个账号的令牌,一键确认上架,并且支持手机挂卡。
#### 并且,以上功能全部免费!
#### 并且,以上功能全部免费。
------
+19 -28
View File
@@ -1,24 +1,14 @@
### 新增内容
1. Linux/macOS 版本中的 CLR 升级至 .NET 6 Preview 7
2. Desktop 现已适配 WinUI 3 / Windows 11 / Fluent Design System 样式风格
3. 新增 Android 上从图库选择二维码图片导入令牌
4. 新增 Android 上文件导入选择二维码图片导入令牌
5. 新增 Desktop 上现可刷新头像
1. 部分新增文本的其他语言翻译
### 修复问题
1. 修复 Desktop 上账号切换功能
2. 改进 Desktop 上受保护的成就不在支持勾选
3. 修复 Linux 上因字体引发的启动时闪退
4. 修复 Android 上扫码导入功能
5. 修复 Android 上 Toast 不能正常显示
6. 改进 Android 上的令牌导入方式
7. 修复 Android 上导入带密码的令牌时不显示密码输入框
8. 修复 导入带密码的令牌时密码输入文本框窗口不能正确取消
9. 修复 Desktop 上使用火狐浏览器无法进行快速登录
10. 修复 Android 8.0 以下启动时闪退
11. 修复 Desktop 上部分用户库存游戏已安装游戏无法读取
12. 尝试修复 Windows 上托盘菜单有时无法打开窗口
13. 改进 Android 上确认交易页面上的显示隐藏逻辑
1. 修复 Desktop 上因登录或注册后头像引发的无限闪退
2. 修复 Windows 上托盘菜单有时无法打开窗口
3. 改进 Desktop 上库存游戏右键菜单隐藏游戏项位置
4. 移除 Desktop 上菜单栏用户手机号显示
5. 修复 Desktop 上库存游戏中磁盘占用 UI 错位
6. 修复 Desktop 上快速登录等待中 UI 错位
7. 修复一些杂项问题,增强程序稳定性
### 已知问题
- Desktop
@@ -29,7 +19,7 @@
- Linux
- 托盘不生效,这将影响程序不能正常退出
- 窗口弹出位置不正确
- 某些窗口顶部会有两个标题栏
- 窗口顶部会有两个标题栏
- 自动更新不可用
- Shared
- 主题切换需重启软件后生效,且跟随系统暂不可用
@@ -74,18 +64,19 @@
| File | Checksum (SHA256) |
| ---- | ---- |
| Steam++_win_x64_v2.4.10.7z | 767FEC42DA14A632E92D517E96487F74184F55D6AFB7D95E57747E6AB3F4AC37 |
| Steam++_win_x64_v2.4.10.exe | D598A9807F6325D2E07C1FF7CE4ADFC1605501E5115FC94014FEAF88FBCBEA1B |
| Steam++_win_x64_v2.4.11.7z | SHA256 |
| Steam++_win_x64_v2.4.11.exe | SHA256 |
| | |
| Steam++_linux_x64_v2.4.10.7z | 691ABC49640E244BF18240A5AE692DADB44E10129262793E3F19BA0D16F43FBE |
| Steam++_linux_arm64_v2.4.10.7z | 71A0A924661091859529471D715E8F79B914BDDB79A3AEA397FE49382E54DEB2 |
| Steam++_linux_arm_v2.4.10.7z | 4038B1A73EDA7FB27A759BB814C3A74A3C52F1BDBE777341727B26F0E123507F |
| Steam++_linux_x64_v2.4.11.7z | SHA256 |
| Steam++_linux_arm64_v2.4.11.7z | SHA256 |
| Steam++_linux_arm_v2.4.11.7z | SHA256 |
| | |
| Steam++_macos_x64_v2.4.10.app.zip | 660D729FDCEE55C36E27FFD9A65B930BB87BFCF7BA3EEA89FA25586FF4A1952B |
| Steam++_macos_x64_v2.4.10.7z | 7B5CC77F45596FE83157E72A2F2EA4B125B0A9A350B106DDE893E1BC49B3EF79 |
| Steam++_macos_x64_v2.4.11.dmg | SHA256 |
| Steam++_macos_x64_v2.4.11.app.zip | SHA256 |
| Steam++_macos_x64_v2.4.11.7z | SHA256 |
| | |
| Steam++_android_arm64_v8a_v2.4.10.apk | 432046DF7C9BBA5CCBD8AC476CE31C9A8022C3F46508F8A32E7D42081A29DDA3 |
| Steam++_android_armeabi_v7a_v2.4.10.apk | 25584531B040E2B50EB0855D1E3242978E37EF554019241E6C4FDB25E7B8533D |
| Steam++_android_arm64_v8a_v2.4.11.apk | SHA256 |
| Steam++_android_armeabi_v7a_v2.4.11.apk | SHA256 |
<!-- ***
+5 -4
View File
@@ -256,13 +256,14 @@ namespace System
static FileStream OpenReadCore(string filePath) => new(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
[Obsolete("use TryOpenRead")]
[return: NotNullIfNotNull("filePath")]
public static FileStream? OpenRead(string? filePath)
{
if (filePath == null) return null;
var fileStream = OpenReadCore(filePath);
return fileStream;
//var fileStream = OpenReadCore(filePath);
TryOpenRead(filePath, out var stream, out var ex);
if (ex != null)
Log.Error(nameof(OpenRead), ex, "OpenRead Error");
return stream;
}
#if !NET35
@@ -12,7 +12,7 @@ namespace System.Properties
/// <item> macOS:\packaging\build-osx-app.sh &lt;CFBundleVersion&gt; &lt;CFBundleShortVersionString&gt; </item>
/// </list>
/// </summary>
public const string Version = "2.4.10";
public const string Version = "2.4.11";
//public const string InfoVersion = Version + "-beta";
}
@@ -324,6 +324,8 @@ namespace System.Application.UI
#endif
MainWindow;
IWindowService.Instance.MainWindow.Initialize();
desktop.Startup += Desktop_Startup;
desktop.Exit += ApplicationLifetime_Exit;
desktop.ShutdownMode =
@@ -12,10 +12,9 @@ namespace System.Application.Converters
if (value == null)
return null;
int width = 0;
if (parameter is string para)
if (parameter is int w)
{
if (int.TryParse(para, out int w))
width = w;
width = w;
}
if (value is string rawUri)
@@ -45,8 +45,10 @@ namespace System.Application.Converters
}
}
protected static Bitmap GetBitmap(ImageClipStream ics, int width = 0)
protected static Bitmap? GetBitmap(ImageClipStream ics, int width = 0)
{
if (ics.Stream == null)
return null;
TryReset(ics.Stream);
using var ms = new MemoryStream();
ics.Stream.CopyTo(ms);
@@ -90,7 +92,10 @@ namespace System.Application.Converters
protected static Bitmap GetDecodeBitmap(string s, int width)
{
return GetDecodeBitmap(IOPath.OpenRead(s), width);
if (IOPath.TryOpenRead(s, out var stream, out var ex))
return GetDecodeBitmap(stream, width);
else
return null;
}
protected static Stream OpenAssets(Uri uri)
@@ -253,11 +253,11 @@
Foreground="{DynamicResource HighlightForegroundBrushKey}"
FontSize="14"
VerticalAlignment="Center"/>
<TextBlock Text="{ReflectionBinding Path=PhoneNumber,Mode=OneWay,Source={x:Static service:UserService.Current}}"
<!--<TextBlock Text="{ReflectionBinding Path=PhoneNumber,Mode=OneWay,Source={x:Static service:UserService.Current}}"
IsVisible="{ReflectionBinding Path=User.HasPhoneNumber,Mode=OneWay,Source={x:Static service:UserService.Current}}"
Foreground="{DynamicResource InactiveForegroundBrushKey}"
FontSize="12"
VerticalAlignment="Center"/>
VerticalAlignment="Center"/>-->
</StackPanel>
</DockPanel>
@@ -70,8 +70,8 @@
Header="筛选"
ExpandDirection="Down"
Margin="20 0 20 10">-->
<Border DockPanel.Dock="Top"
Margin="{StaticResource ScrollMargin}"
<Border DockPanel.Dock="Top"
Margin="{StaticResource ScrollMargin}"
Padding="10"
Classes="paper"
Background="{DynamicResource ThemeBrushKey}">
@@ -189,7 +189,7 @@
ToolTip.Tip="{ReflectionBinding Path=Res.GameList_IdleGamesManger,Mode=OneWay,Source={x:Static resx:R.Current}}">
<PathIcon Data="{StaticResource TopSpeedDrawing}" />
</Button>
<Menu Classes="BindMenu">
<MenuItem Items="{Binding MenuItems}"
Classes="BindItem"
@@ -287,14 +287,6 @@
<PathIcon Data="{StaticResource TrophyDrawing}" Width="16"></PathIcon>
</MenuItem.Icon>
</MenuItem>
<MenuItem
Header="{ReflectionBinding Path=Res.GameList_HideTheGame,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{ReflectionBinding #u.DataContext.AddHideAppList}"
CommandParameter="{Binding}" >
<MenuItem.Icon>
<PathIcon Data="{StaticResource EyeHideDrawing}" Width="14"></PathIcon>
</MenuItem.Icon>
</MenuItem>
<MenuItem
Header="{ReflectionBinding Path=Res.GameList_AddAfkGameList,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{ReflectionBinding #u.DataContext.AddAFKAppList}"
@@ -303,11 +295,6 @@
<PathIcon Data="{StaticResource TopSpeedDrawing}" Width="14"></PathIcon>
</MenuItem.Icon>
</MenuItem>
<!--<MenuItem
Header="{ReflectionBinding Path=Res.GameList_SetCustomImage,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{ReflectionBinding #u.DataContext.DeleteUserButton_Click}"
CommandParameter="{Binding}" />-->
<MenuItem
Header="{ReflectionBinding Path=Res.GameList_OpenFolder,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{ReflectionBinding #u.DataContext.OpenFolder}"
@@ -317,6 +304,10 @@
<PathIcon Data="{StaticResource FolderOpenDrawing}" Width="14"></PathIcon>
</MenuItem.Icon>
</MenuItem>
<!--<MenuItem
Header="{ReflectionBinding Path=Res.GameList_SetCustomImage,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{ReflectionBinding #u.DataContext.DeleteUserButton_Click}"
CommandParameter="{Binding}" />-->
<MenuItem Header="-"></MenuItem>
<MenuItem
Header="{ReflectionBinding Path=Res.GameList_OpenStoreUrl,Mode=OneWay,Source={x:Static resx:R.Current}}"
@@ -342,6 +333,16 @@
<PathIcon Data="{StaticResource GlobeSearchDrawing}" Width="14"></PathIcon>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="-"/>
<MenuItem
Header="{ReflectionBinding Path=Res.GameList_HideTheGame,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{ReflectionBinding #u.DataContext.AddHideAppList}"
CommandParameter="{Binding}" >
<MenuItem.Icon>
<PathIcon Data="{StaticResource EyeHideDrawing}" Width="14"></PathIcon>
</MenuItem.Icon>
</MenuItem>
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
<Panel x:Name="app" Width="{ReflectionBinding $parent.Width}">
@@ -375,8 +376,7 @@
Background="#3D4450"
HorizontalAlignment="Center"
VerticalAlignment="Bottom">
<WrapPanel Margin="10 3"
Orientation="Horizontal"
<DockPanel Margin="10 3"
HorizontalAlignment="Center">
<TextBlock Text="{Binding InstalledDrive}"
Foreground="#FFFFFFFF"
@@ -384,12 +384,12 @@
VerticalAlignment="Center"
Margin="0 0 5 0"
FontSize="11"/>
<TextBlock Text="{Binding SizeOnDisk,Converter={StaticResource SizeConverter}}"
<controls:ScrollingTextBlock Text="{Binding SizeOnDisk,Converter={StaticResource SizeConverter}}"
Foreground="#FFFFFFFF"
TextWrapping="Wrap"
VerticalAlignment="Center"
FontSize="11"/>
</WrapPanel>
</DockPanel>
</Border>
</Panel>
</Border>
@@ -204,7 +204,7 @@
Height="100">
</controls:ProgressRing>
<WrapPanel HorizontalAlignment="Center" Margin="0 0 0 40">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 0 0 40">
<Button Classes="plain"
Margin="0 0 25 0"
HorizontalContentAlignment="Center"
@@ -217,7 +217,7 @@
Content="{ReflectionBinding Path=Res.Retry,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{Binding ChooseChannel}"
CommandParameter="{Binding CurrentSelectChannel}"/>
</WrapPanel>
</StackPanel>
<WrapPanel HorizontalAlignment="Center" Margin="20 0 0 20">
<Button Classes="plain"
Margin="0 0 25 0"
@@ -29,7 +29,7 @@
<MenuItem Width="50" Command="{ReflectionBinding About_Click}"
ToolTip.Tip="{ReflectionBinding Path=Res.Helper,Mode=OneWay,Source={x:Static resx:R.Current}}">
<MenuItem.Header>
<ui:SymbolIcon Symbol="Help" FontSize="16"/>
<ui:SymbolIcon Symbol="Help" FontSize="18"/>
</MenuItem.Header>
</MenuItem>
<MenuItem Width="50" Command="{ReflectionBinding Refresh_Click}"
@@ -47,7 +47,7 @@
</Menu>
<TextBlock IsVisible="{CompiledBinding IsAuthorizedListEmpty}"
Text="{ReflectionBinding Path=Res.GameList_AddHideAppEmpty,Mode=OneWay,Source={x:Static resx:R.Current}}"
Text="{ReflectionBinding Path=Res.SteamAccountPage_ShareEmpt,Mode=OneWay,Source={x:Static resx:R.Current}}"
TextWrapping="WrapWithOverflow"
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
@@ -86,6 +86,9 @@
<TextBlock FontSize="12"
TextWrapping="Wrap"
Text="{ReflectionBinding Path=Res.UploadYourAvatarDesc,Mode=OneWay,Source={x:Static resx:R.Current}}"/>
<TextBlock FontSize="12"
TextWrapping="Wrap"
Text="{ReflectionBinding Path=Res.UnderConstruction,Mode=OneWay,Source={x:Static resx:R.Current}}"/>
</StackPanel>
</DockPanel>
<Grid>
@@ -221,7 +224,7 @@
Height="100">
</controls:ProgressRing>
<WrapPanel HorizontalAlignment="Center" Margin="0 0 0 40">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 0 0 40">
<Button Classes="plain"
Margin="0 0 25 0"
HorizontalContentAlignment="Center"
@@ -233,7 +236,7 @@
Content="{ReflectionBinding Path=Res.Retry,Mode=OneWay,Source={x:Static resx:R.Current}}"
Command="{Binding OnBindFastLoginClick}"
CommandParameter="{Binding CurrentSelectChannel}"/>
</WrapPanel>
</StackPanel>
<WrapPanel HorizontalAlignment="Center" Margin="20 0 0 20">
<Button Classes="plain"
Margin="0 0 25 0"
@@ -49,9 +49,39 @@ namespace System.Application.Services.Implementation
}
public string GetLastSteamLoginUserName() => string.Empty;
public string? GetRegistryVdfPath()
{
var value = string.Format(
"{0}home{0}{1}{0}.steam{0}registry.vdf",
Path.DirectorySeparatorChar,
Environment.UserName);
return value;
}
public void SetCurrentUser(string userName)
{
try
{
var registryVdfPath = GetRegistryVdfPath();
if (!string.IsNullOrWhiteSpace(registryVdfPath) && File.Exists(registryVdfPath))
{
dynamic v = VdfHelper.Read(registryVdfPath);
var autoLoginUser = v.Value.HKCU.Software.Valve.Steam.AutoLoginUser;
if (autoLoginUser != null)
{
var oldStr = $"\t\t\t\t\t\"AutoLoginUser\"\t\t\"{autoLoginUser}\"\n";
var newStr = $"\t\t\t\t\t\"AutoLoginUser\"\t\t\"{userName}\"\n";
VdfHelper.UpdateValueByReplaceNoPattern(registryVdfPath, oldStr, newStr);
}
else
{
Log.Error("SetCurrentUser", "UpdateAuthorizedAutoLoginUser Fail(0). AutoLoginUser IsNull");
}
}
}
catch (Exception e)
{
Log.Error("SetCurrentUser", e, "UpdateAuthorizedAutoLoginUser Fail(0).");
}
}
static string GetMachineSecretKey()
@@ -214,10 +214,38 @@ namespace System.Application.Services.Implementation
}
public string GetLastSteamLoginUserName() => string.Empty;
public string? GetRegistryVdfPath() {
var value = string.Format(
"{0}Users{0}{1}{0}Library{0}Application Support{0}Steam{0}registry.vdf",
Path.DirectorySeparatorChar,
Environment.UserName);
return value;
}
public void SetCurrentUser(string userName)
{
try
{
var registryVdfPath = GetRegistryVdfPath();
if (!string.IsNullOrWhiteSpace(registryVdfPath) && File.Exists(registryVdfPath))
{
dynamic v = VdfHelper.Read(registryVdfPath);
var autoLoginUser = v.Value.HKCU.Software.Valve.Steam.AutoLoginUser;
if (autoLoginUser != null)
{
var oldStr = $"\t\t\t\t\t\"AutoLoginUser\"\t\t\"{autoLoginUser}\"\n";
var newStr = $"\t\t\t\t\t\"AutoLoginUser\"\t\t\"{userName}\"\n";
VdfHelper.UpdateValueByReplaceNoPattern(registryVdfPath, oldStr, newStr);
}
else
{
Log.Error("SetCurrentUser","UpdateAuthorizedAutoLoginUser Fail(0). AutoLoginUser IsNull");
}
}
}
catch (Exception e)
{
Log.Error("SetCurrentUser", e, "UpdateAuthorizedAutoLoginUser Fail(0).");
}
}
@@ -20,7 +20,7 @@ namespace System.Application.Services.Implementation
{
const string TAG = "WindowsDesktopPlatformS";
const string SteamRegistryPath = @"SOFTWARE\Valve\Steam";
public string? GetRegistryVdfPath() { return null; }
public string GetCommandLineArgs(Process process)
{
try
+19 -13
View File
@@ -305,13 +305,16 @@ namespace System.Application.UI
/// <see cref="IntPtr.Zero"/>.</param>
public void ShowBalloonTip(string title, string message, NIIF flags, IntPtr balloonIconHandle)
{
iconData.szInfo = message ?? string.Empty;
iconData.szInfoTitle = title ?? string.Empty;
iconData.uFlags = NIF.INFO | NIF.ICON;
//iconData.CustomBalloonIconHandle = balloonIconHandle;
iconData.dwInfoFlags = flags;
if (iconData != null)
{
iconData.szInfo = message ?? string.Empty;
iconData.szInfoTitle = title ?? string.Empty;
iconData.uFlags |= NIF.INFO;
//iconData.CustomBalloonIconHandle = balloonIconHandle;
iconData.dwInfoFlags = flags;
var result = UnmanagedMethods.Shell_NotifyIcon(UnmanagedMethods.NIM.MODIFY, iconData);
var result = UnmanagedMethods.Shell_NotifyIcon(UnmanagedMethods.NIM.MODIFY, iconData);
}
}
/// <summary>
@@ -319,9 +322,12 @@ namespace System.Application.UI
/// </summary>
public void HideBalloonTip()
{
// reset balloon by just setting the info to an empty string
iconData.szInfo = iconData.szInfoTitle = string.Empty;
UnmanagedMethods.Shell_NotifyIcon(UnmanagedMethods.NIM.MODIFY, iconData);
if (iconData != null)
{
// reset balloon by just setting the info to an empty string
iconData.szInfo = iconData.szInfoTitle = string.Empty;
UnmanagedMethods.Shell_NotifyIcon(UnmanagedMethods.NIM.MODIFY, iconData);
}
}
/// <summary>
@@ -329,10 +335,10 @@ namespace System.Application.UI
/// </summary>
public void WndProc(uint msg, IntPtr wParam, IntPtr lParam)
{
//Log.Debug(TAG, "WndProc: MSG={0}, wParam={1}, lParam={2}",
// ((UnmanagedMethods.CustomWindowsMessage)msg).ToString(),
// ((UnmanagedMethods.WindowsMessage)wParam.ToInt32()).ToString(),
// ((UnmanagedMethods.WindowsMessage)lParam.ToInt32()).ToString());
System.Diagnostics.Debug.WriteLine(string.Format("WndProc: MSG={0}, wParam={1}, lParam={2}",
((UnmanagedMethods.CustomWindowsMessage)msg).ToString(),
((UnmanagedMethods.WindowsMessage)wParam.ToInt32()).ToString(),
((UnmanagedMethods.WindowsMessage)lParam.ToInt32()).ToString()));
// We only care about tray icon messages
if (msg != (uint)UnmanagedMethods.CustomWindowsMessage.WM_TRAYMOUSE)
@@ -5,12 +5,12 @@ namespace System.Application.Models
{
public class ImageClipStream : IDisposable
{
public ImageClipStream(Stream stream)
public ImageClipStream(Stream? stream)
{
Stream = stream;
}
public Stream Stream { get; set; }
public Stream? Stream { get; set; }
public float Top { get; set; }
@@ -167,6 +167,7 @@ namespace System.Application.Services
/// <inheritdoc cref="ISteamService.SteamProgramPath"/>
string? GetSteamProgramPath();
string? GetRegistryVdfPath();
/// <inheritdoc cref="ISteamService.GetLastLoginUserName"/>
string GetLastSteamLoginUserName();
@@ -90,8 +90,7 @@ namespace System.Application.Services
bool UpdateAppListJson(List<SteamApp> apps, string filePath);
bool UpdateAppListJson(string appsJsonStr, string filePath);
bool UpdateRegistryVdfPath(string name);
bool UpdateAppListJson(string appsJsonStr, string filePath);
void DeleteLocalUserData(SteamUser user, bool IsDeleteUserData = false);
void UpdateLocalUserData(SteamUser user);
@@ -37,13 +37,13 @@ namespace System.Application.Services.Implementation
/// </summary>
readonly string? UserVdfPath;
readonly string? ConfigVdfPath;
readonly string? RegistryVdfPath;
readonly string? AppInfoPath;
readonly string? LibrarycacheDirPath;
const string UserDataDirectory = "userdata";
readonly IDesktopPlatformService platformService;
readonly string? mSteamDirPath;
readonly string? mSteamProgramPath;
readonly string? mRegistryVdfPath;
readonly string[] steamProcess = new[] { "steam", "steam_osx", "steamservice", "steamwebhelper" };
readonly Lazy<IHttpService> _http = new(() => DI.Get<IHttpService>());
IHttpService Http => _http.Value;
@@ -56,7 +56,7 @@ namespace System.Application.Services.Implementation
UserVdfPath = SteamDirPath == null ? null : Path.Combine(SteamDirPath, "config", "loginusers.vdf");
AppInfoPath = SteamDirPath == null ? null : Path.Combine(SteamDirPath, "appcache", "appinfo.vdf");
LibrarycacheDirPath = SteamDirPath == null ? null : Path.Combine(SteamDirPath, "appcache", "librarycache");
RegistryVdfPath = SteamDirPath == null ? null : Path.Combine(SteamDirPath, "registry.vdf");
mRegistryVdfPath = platformService.GetRegistryVdfPath();// SteamDirPath == null ? null : Path.Combine(SteamDirPath, "registry.vdf");
//RegistryVdfPath = SteamDirPath == null ? null : Path.Combine(SteamDirPath, "registry.vdf");
ConfigVdfPath = SteamDirPath == null ? null : Path.Combine(SteamDirPath, "config", "config.vdf");
@@ -67,6 +67,7 @@ namespace System.Application.Services.Implementation
}
public string? SteamDirPath => mSteamDirPath;
public string? RegistryVdfPath => mRegistryVdfPath;
public string? SteamProgramPath => mSteamProgramPath;
@@ -131,7 +132,7 @@ namespace System.Application.Services.Implementation
{
if (!string.IsNullOrEmpty(SteamProgramPath))
{
DI.Get<IDesktopPlatformService>().OpenProcess(SteamProgramPath, arguments, true);
platformService.OpenProcess(SteamProgramPath, arguments, true);
}
}
@@ -190,34 +191,7 @@ namespace System.Application.Services.Implementation
}
return users;
}
public bool UpdateRegistryVdfPath(string name)
{
try
{
if (!string.IsNullOrWhiteSpace(RegistryVdfPath) && File.Exists(RegistryVdfPath))
{
dynamic v = VdfHelper.Read(RegistryVdfPath);
var autoLoginUser = v.Value.HKCU.Software.Valve.Steam.AutoLoginUser;
if (autoLoginUser != null)
{
var oldStr = $"\t\t\t\t\t\"AutoLoginUser\"\t\t\"{autoLoginUser}\"\n";
var newStr = $"\t\t\t\t\t\"AutoLoginUser\"\t\t\"{name}\"\n";
VdfHelper.UpdateValueByReplaceNoPattern(RegistryVdfPath, oldStr, newStr);
return true;
}
else
{
return false;
}
}
}
catch (Exception e)
{
Log.Error(TAG, e, "UpdateAuthorizedDeviceList Fail(0).");
return false;
}
return false;
}
public bool UpdateAuthorizedDeviceList(IEnumerable<AuthorizedDevice> model)
{
var authorizeds = new List<AuthorizedDevice>();
@@ -433,7 +407,12 @@ namespace System.Application.Services.Implementation
{
if (string.IsNullOrEmpty(AppInfoPath) && !File.Exists(AppInfoPath))
return apps;
using (BinaryReader binaryReader = new(IOPath.OpenRead(AppInfoPath)))
using var stream = IOPath.OpenRead(AppInfoPath);
if (stream == null)
{
return apps;
}
using (BinaryReader binaryReader = new(stream))
{
uint num = binaryReader.ReadUInt32();
if (num != MagicNumber)
@@ -218,12 +218,30 @@ namespace System.Application.Services
#if !__MOBILE__
CurrentSteamUser = await ISteamworksWebApiService.Instance.GetUserInfo(User.SteamAccountId.Value);
CurrentSteamUser.AvatarStream = IHttpService.Instance.GetImageAsync(CurrentSteamUser.AvatarFull, ImageChannelType.SteamAvatars);
AvaterPath = CircleImageStream.Convert(await CurrentSteamUser.AvatarStream) ?? DefaultAvaterPath;
var ava = CircleImageStream.Convert(await CurrentSteamUser.AvatarStream);
AvaterPath = ava ?? DefaultAvaterPath;
return;
#else
AvaterPath = DefaultAvaterPath;
#endif
}
else if (User?.AvatarUrl.Any_Nullable() ?? false)
{
var order = new[] {
FastLoginChannel.QQ,
FastLoginChannel.Microsoft,
FastLoginChannel.Apple,
FastLoginChannel.Steam,
};
foreach (var item in order)
{
if (User.AvatarUrl!.ContainsKey(item))
{
AvaterPath = User.AvatarUrl[item];
return;
}
}
}
else
{
AvaterPath = DefaultAvaterPath;
+9
View File
@@ -3574,6 +3574,15 @@ namespace System.Application.UI.Resx {
}
}
/// <summary>
/// 查找类似 家庭共享库为空。 的本地化字符串。
/// </summary>
public static string SteamAccountPage_ShareEmpt {
get {
return ResourceManager.GetString("SteamAccountPage_ShareEmpt", resourceCulture);
}
}
/// <summary>
/// 查找类似 软件 的本地化字符串。
/// </summary>
@@ -1985,4 +1985,76 @@
<value>retry</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>Refresh the avatar</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>Synchronize steam avatars</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>After binding a Steam account, you can manually sync and refresh your Steam account profile picture.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>Theme color</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>Customization</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>Enable the fillet interface</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>Not signed in</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>Scan QR codes</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>All selected</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>Help</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>Customize the background picture</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>reset</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>Select the picture</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>Sign in manually</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>Please paste the contents of the web page copy.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>The input cannot be empty.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>Data decryption failed, make sure the data was retried correctly.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>The home share library is empty.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -1986,4 +1986,76 @@
<value>reintentar</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>Actualizar el avatar</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>Sincronizar avatares de vapor</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>Después de enlazar una cuenta de Steam, puedes sincronizar y actualizar manualmente la imagen de perfil de tu cuenta de Steam.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>Color del tema</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>Personalización</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>Habilitar la interfaz de filete</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>No ha iniciado sesión</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>Escanear códigos QR</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>Todos los seleccionados</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>Ayuda</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>Personalizar la imagen de fondo</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>restablecimiento</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>Seleccione la imagen</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>Iniciar sesión manualmente</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>Por favor, pegue el contenido de la copia de la página web.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>La entrada no puede estar vacía.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>Error de descifrado de datos, asegúrese de que los datos se reintentó correctamente.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>La biblioteca de recursos compartidos principal está vacía.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -1986,4 +1986,76 @@ Sicuro di voler continuare?</value>
<value>ripetere</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>Aggiorna l&apos;avatar</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>Sincronizzare avatar di vapore</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>Dopo aver rilegato un account Steam, puoi sincronizzare e aggiornare manualmente l&apos;immagine del profilo del tuo account Steam.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>Colore tema</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>Personalizzazione</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>Abilitare l&apos;interfaccia del raccordo</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>Non è stato effettuato l&apos;accesso</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>Scansiona codici QR</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>Tutti i selezionati</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>Guida</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>Personalizzare l&apos;immagine di sfondo</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>resettare</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>Selezionare l&apos;immagine</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>Accedere manualmente</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>Incollare il contenuto della copia della pagina Web.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>L&apos;input non può essere vuoto.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>Decrittografia dei dati non riuscita, assicurarsi che i dati siano stati ritentati correttamente.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>La libreria di condivisione domestica è vuota.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -1981,4 +1981,76 @@
<value>再試行します</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>アバターを更新します</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>Steam アバターを同期します</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>Steam アカウントをバインドすると、Steam アカウントアバターを使用して手動で同期的に更新できます。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>テーマの色</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>カスタマイズ</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>フィレット インターフェイスを有効にします</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>ログインしていません</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>QRコードをスキャンします</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>完全選択</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>助け</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>背景画像をカスタマイズします</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>リセットします</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>画像を選択します</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>手動でサインインします</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>Web ページによってコピーされたコンテンツを貼り付けてください。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>入力内容を空にすることはできません。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>データの復号化に失敗しました。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>ホーム共有ライブラリが空です。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -1981,4 +1981,76 @@
<value>다시 시도하십시오</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>아바타를 새로 고칩니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>Steam 아바타를 동기화합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>Steam 계정을 바인딩한 후 Steam 계정 아바타를 사용하여 수동으로 동기화할 수 있습니다.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>테마 색상입니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>사용자 지정</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>모깎기 인터페이스를 활성화합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>로그인하지 않았습니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>QR 코드를 스캔합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>모두 선택</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>도움말</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>배경 이미지를 사용자 지정합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>재설정합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>그림을 선택합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>수동으로 로그인합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>웹 페이지에서 복사한 내용을 붙여넣으십시오.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>입력한 내용은 비어 있을 수 없습니다.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>데이터 암호 해독에 실패했습니다.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>홈 공유 라이브러리가 비어 있습니다.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -1589,4 +1589,7 @@
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>数据解密失败,请确定数据正确重试。</value>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>家庭共享库为空。</value>
</data>
</root>
@@ -1981,4 +1981,76 @@
<value>Повторите попытку</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>Обновите аватар</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>Синхронизируйте аватары Steam</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>После привязки учетной записи Steam можно вручную одновременно обновить аватар учетной записи Steam.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>Цвет темы</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>Настройка</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>Включите закругленный интерфейс</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>Не вошел в систему</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>Сканирование QR-кода</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>Полный выбор</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>Помощь</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>Настройка фонового изображения</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>Сброс</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>Выберите изображение</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>Войдите в систему вручную</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>Вставьте содержимое, скопированное на веб-странице.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>Введенное содержимое не может быть пустым.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>Не удалось расшифровать данные, убедитесь, что данные были правильно повторен.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>Библиотека семейного доступа пуста.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -1981,4 +1981,76 @@
<value>重試</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="RefreshAvatar" xml:space="preserve">
<value>刷新頭像</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatar" xml:space="preserve">
<value>同步 Steam 頭像</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="AsyncSteamAvatarDesc" xml:space="preserve">
<value>綁定 Steam 帳號後可手動同步刷新使用 Steam 帳號頭像。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_ThemeAccent" xml:space="preserve">
<value>主題色</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_Custom" xml:space="preserve">
<value>自訂</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_EnableFilletUI" xml:space="preserve">
<value>啟用圓角介面</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="User_UnLogin" xml:space="preserve">
<value>未登錄</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ScanQRCode" xml:space="preserve">
<value>掃描二維碼</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SelectAll" xml:space="preserve">
<value>全選</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Helper" xml:space="preserve">
<value>説明</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_CustomBackgroundImage" xml:space="preserve">
<value>自訂背景圖片</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Reset" xml:space="preserve">
<value>重置</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Settings_UI_SelectImage" xml:space="preserve">
<value>選擇圖片</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLogin" xml:space="preserve">
<value>手動登錄</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="LoginInputManualLoginToken" xml:space="preserve">
<value>請貼貼網頁複製的內容。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_ManualLoginEmpt" xml:space="preserve">
<value>輸入的內容不能為空。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="Login_WebSocketOnMessage" xml:space="preserve">
<value>數據解密失敗,請確定數據正確重試。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="SteamAccountPage_ShareEmpt" xml:space="preserve">
<value>家庭共用庫為空。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -82,6 +82,10 @@ namespace System.Application.UI.ViewModels
public bool IsVisible =>
IShowWindowService.Instance.IsVisibleWindow(this);
public virtual void Initialize()
{
}
/// <summary>
/// 关闭当前viewmodel绑定的窗口
/// </summary>
@@ -58,7 +58,8 @@ namespace System.Application.UI.ViewModels
void OnBindSuccessed() { }
}
public static async Task ManualLoginAsync(this IViewModel vm)
public static async Task ManualLoginAsync(this IViewModel vm)
{
await MainThread2.InvokeOnMainThreadAsync(async () =>
{
@@ -70,11 +71,16 @@ namespace System.Application.UI.ViewModels
await TextBoxWindowViewModel.ShowDialogAsync(modelvm);
if (string.IsNullOrWhiteSpace(modelvm.Value))
{
Toast.Show(AppResources.Login_ManualLoginEmpt);
if (modelvm.Value != null)
{
Toast.Show(AppResources.Login_ManualLoginEmpt);
}
return;
}
else
{
await OnMessage(vm, modelvm.Value, null);
}
});
}
/// <summary>
@@ -87,10 +93,12 @@ namespace System.Application.UI.ViewModels
{
if (vm.TempAes == null) return;
var byteArray = msg.Base64UrlDecodeToByteArray();
try {
byteArray = vm.TempAes.Decrypt(byteArray);
try
{
byteArray = vm.TempAes.Decrypt(byteArray);
}
catch {
catch
{
if (socket == null)
Toast.Show(AppResources.Login_WebSocketOnMessage);
return;
@@ -112,7 +112,7 @@ namespace System.Application.UI.ViewModels
_SelectedItem = TabItems.First();
Task.Run(Initialize).ForgetAndDispose();
//Task.Run(Initialize).ForgetAndDispose();
//this.WhenAnyValue(x => x.SelectedItem)
// .Subscribe(x =>
@@ -121,21 +121,24 @@ namespace System.Application.UI.ViewModels
// });
}
public void Initialize()
public override async void Initialize()
{
Threading.Thread.CurrentThread.IsBackground = true;
ProxyService.Current.Initialize();
SteamConnectService.Current.Initialize();
if (!IsInitialized)
await Task.Run(() =>
{
Parallel.ForEach(TabItems, item =>
Threading.Thread.CurrentThread.IsBackground = true;
ProxyService.Current.Initialize();
SteamConnectService.Current.Initialize();
if (!IsInitialized)
{
item.Initialize();
//Task.Run(item.Initialize).ForgetAndDispose();
});
IsInitialized = true;
}
Parallel.ForEach(TabItems, item =>
{
item.Initialize();
//Task.Run(item.Initialize).ForgetAndDispose();
});
IsInitialized = true;
}
});
}
void AddTabItem<TabItemVM>() where TabItemVM : TabItemViewModel, new()
@@ -144,10 +144,7 @@ namespace System.Application.UI.ViewModels
//if (IsFirstActivation)
if (IsAuthenticatorsEmptyButHasSourceAuths)
{
await Task.Run(async () =>
{
await AuthService.Current.InitializeAsync(auths);
});
await AuthService.Current.InitializeAsync(auths);
}
#if __MOBILE__
else
@@ -158,12 +155,12 @@ namespace System.Application.UI.ViewModels
base.Activation();
}
#if !__MOBILE__
public async void Refreshing()
{
await AuthService.Current.InitializeAsync();
}
#endif
//#if !__MOBILE__
// public async void Refreshing()
// {
// await AuthService.Current.InitializeAsync();
// }
//#endif
void AddAuthMenu_Click()
{
@@ -171,11 +171,7 @@ namespace System.Application.UI.ViewModels
private void ReStartSteamByUser(SteamUser user)
{
steamService.SetCurrentUser(user.AccountName ?? string.Empty);
if (OperatingSystem2.IsMacOS && user.AccountName != null)
if (!steamService.UpdateRegistryVdfPath(user.AccountName))
Toast.Show(AppResources.Script_Update
);
steamService.TryKillSteamProcess();
steamService.TryKillSteamProcess();
steamService.StartSteam(SteamSettings.SteamStratParameter.Value);
}
@@ -483,8 +483,12 @@ namespace System.Application.Services.Implementation
proxyServer.AddEndPoint(transparentProxyEndPoint);
if (PortInUse(80) == false)
proxyServer.AddEndPoint(new TransparentProxyEndPoint(ProxyIp, 80, false));
try
{
if (PortInUse(80) == false)
proxyServer.AddEndPoint(new TransparentProxyEndPoint(ProxyIp, 80, false));
}
catch { }
}
proxyServer.ExceptionFunc = ((Exception exception) =>
@@ -204,6 +204,8 @@ namespace System.Application.Services.Implementation
if (localCacheFilePathExists) // 存在缓存文件
{
using var fileStream = IOPath.OpenRead(localCacheFilePath);
if (fileStream == null)
return null;
if (FileFormat.IsImage(fileStream, out var format))
{
if (http_helper.SupportedImageFormats.Contains(format)) // 读取缓存并且格式符合要求
@@ -217,4 +217,20 @@
<value>The port number must be of the UInt16 type, contact your webmaster.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>Point to this copy</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>This browser does not support click copy to the clipboard</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>Successfully copied to the clipboard</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>There was an error with the connection program, please manually copy the following to the program click manually to log in.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -217,4 +217,20 @@
<value>El número de puerto debe ser del tipo UInt16, póngase en contacto con su webmaster.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>Apuntar a esta copia</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>Este explorador no admite hacer clic en copiar en el portapapeles</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>Copiado correctamente en el portapapeles</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>Se ha producido un error con el programa de conexión, copie manualmente lo siguiente en el programa, haga clic manualmente para iniciar sesión.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -217,4 +217,20 @@
<value>Il numero di porta deve essere del tipo UInt16, contattare il webmaster.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>Puntare a questa copia</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>Questo browser non supporta la copia dei clic negli Appunti</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>Copiato correttamente negli Appunti</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>Si è verificato un errore con il programma di connessione, copiare manualmente quanto segue nel programma, fare clic manualmente per accedere.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -217,4 +217,20 @@
<value>ポート番号は UInt16 タイプである必要があります。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>このレプリケーションをポイントします</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>ブラウザはタップコピークリップボードをサポートしていません</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>クリップボードに正常にコピーされました</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>接続プログラムにエラーがありますので、手動でログインしてクリックしてプログラムに以下を手動でコピーしてください。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -217,4 +217,20 @@
<value>포트 번호는 UInt16 유형이어야 하며 웹마스터에게 문의하십시오.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>복사를 클릭합니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>브라우저는 클립보드에 복사를 클릭하는 것을 지원하지 않습니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>클립보드에 성공적으로 복사되었습니다</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>연결 프로그램에 오류가 있는 경우 수동 로그인을 클릭하여 프로그램에 다음을 수동으로 복사합니다.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -217,4 +217,20 @@
<value>Номер порта должен быть UInt16, обратитесь к администратору сайта.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>Нажмите Здесь для репликации</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>Браузер не поддерживает копирование щелчков в буфер обмена</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>Успешно скопировано в буфер обмена</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>Что-то пошло не так с соединителем, пожалуйста, скопируйте следующее вручную в программу, нажав кнопку Вручную войти в систему.</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>
@@ -217,4 +217,20 @@
<value>埠號必須為 UInt16 類型,請聯繫網站管理員。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyButton" xml:space="preserve">
<value>點此複製</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopyNoSupport" xml:space="preserve">
<value>該瀏覽器不支援點擊複製到剪貼板</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="CopySuccess" xml:space="preserve">
<value>成功複製到剪貼板</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
<data name="ManualCopyTip" xml:space="preserve">
<value>連接程式出錯,請手動複製以下內容到程式點擊手動登錄。</value>
<comment>Comment=;Author=MicrosoftTranslator</comment>
</data>
</root>