2.12.8.0
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
<local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
|
||||
<StackPanel x:Name="PanMain" Margin="25,25,25,10">
|
||||
<local:MyCard x:Name="CardArgument" Margin="0,0,0,15" Title="启动选项">
|
||||
<StackPanel Margin="25,40,25,15">
|
||||
<StackPanel Margin="25,40,25,25">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="Name" />
|
||||
@@ -29,7 +29,6 @@
|
||||
<RowDefinition Height="28" />
|
||||
<RowDefinition Height="9" />
|
||||
<RowDefinition Height="28" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="默认版本隔离" Margin="0,0,25,0" />
|
||||
<local:MyComboBox local:SettingService.Key="LaunchArgumentIndieV2" x:Name="ComboArgumentIndieV2"
|
||||
@@ -50,7 +49,7 @@
|
||||
Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="1" ToolTip="自定义游戏窗口的标题,若留空则不进行更改。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" HintText="默认" MaxLength="100" />
|
||||
<TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="自定义信息" Margin="0,0,25,0" />
|
||||
<local:MyTextBox local:SettingService.Key="LaunchArgumentInfo"
|
||||
Grid.Row="4" Grid.ColumnSpan="2" Text="PCL" Grid.Column="1" ToolTip="该信息会显示在游戏主界面的左下角,与 F3 调试页面的左上角。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。">
|
||||
Grid.Row="4" Grid.ColumnSpan="2" Text="PCL" Grid.Column="1" ToolTip="注意:Mojang 于 Minecraft 26.1 移除了该设置,因此该设置在新版本中无效。

该信息会显示在游戏主界面的左下角,与 F3 调试页面的左上角。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。">
|
||||
<local:MyTextBox.ValidateRules>
|
||||
<local:ValidateExcept>
|
||||
<local:ValidateExcept.Excepts>
|
||||
@@ -106,21 +105,24 @@
|
||||
</local:MyTextBox.ValidateRules>
|
||||
</local:MyTextBox>
|
||||
</Grid>
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="12" HorizontalAlignment="Left" Text="游戏 Java" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboArgumentJava" Grid.ColumnSpan="2" Grid.Row="12" Grid.Column="1"
|
||||
ToolTip="若将 Java 放在游戏文件夹或 PCL 文件夹,在进行自动选择时 PCL 会尽量优先选择它">
|
||||
<ComboBoxItem Content="加载中……" IsSelected="True" />
|
||||
<!--<local:MyComboBoxItem Content="Java 8 (1.8.0_171),64 位:C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="5" IsSelected="True" ToolTip="C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe" />-->
|
||||
</local:MyComboBox>
|
||||
<Grid Grid.Row="13" Grid.Column="1">
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="12" HorizontalAlignment="Left" Text="Java" Margin="0,0,25,0" />
|
||||
<Grid Grid.ColumnSpan="2" Grid.Row="12" Grid.Column="1" HorizontalAlignment="Stretch">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Path Height="16" HorizontalAlignment="Left" Stretch="Uniform" Margin="6,10.5,0,0" Data="F1 M 20,17L 43.25,17L 56,29.75L 56,40L 52,37.5L 52,34L 39,34L 39,21L 24,21L 24,55L 36,55L 32,59L 20,59L 20,17 Z M 43,22.25L 43,30L 50.75,30L 43,22.25 Z M 48,38C 53.5228,38 58,42.4772 58,48C 58,53.5229 53.5228,58 48,58C 46.1455,58 44.4089,57.4952 42.9201,56.6155L 36.1213,63.4142C 35.3403,64.1953 34.0739,64.1953 33.2929,63.4142L 32.5858,62.7071C 31.8047,61.9261 31.8047,60.6597 32.5858,59.8787L 39.3845,53.0799C 38.5048,51.5911 38,49.8545 38,48C 38,42.4772 42.4771,38 48,38 Z M 48,42C 44.6863,42 42,44.6863 42,48C 42,51.3137 44.6863,54 48,54C 51.3137,54 54,51.3137 54,48C 54,44.6863 51.3137,42 48,42 Z" VerticalAlignment="Top" Fill="{Binding Foreground, ElementName=BtnArgumentJavaSearch}" />
|
||||
<local:MyTextButton HorizontalAlignment="Left" x:Name="BtnArgumentJavaSearch" Text="自动搜索" Padding="25,10,5,5" Grid.Row="5" VerticalContentAlignment="Top" />
|
||||
<Path Height="16" VerticalAlignment="Top" HorizontalAlignment="Left" Stretch="Uniform" Margin="22,10.5,0,0" Grid.Column="1" StrokeThickness="0.5" Data="M827.4 589.1l-30.7-50.7V151.3c0-29.9-25.2-54.3-56.1-54.3h-527c-9.9 0-24.8 6.3-24.8 24.8v700.5c0 20.2 12.1 37 31.7 43.8l169.1 58.6c4.4 1.5 9.1 2.3 13.8 2.3 10.2 0 20.7-3.4 29.9-10 12.9-9.2 20.3-22.4 20.3-36.2l-0.1-16.6h325.7c30.9 0 56.1-24.3 56.1-54.3v-193c0-9.8-2.7-19.4-7.9-27.8z m-423.5 288l-165.6-54.8V153.8l201.5 51.4v439.2c-0.1 0.5-0.8 2.6-3.2 5.3l-20.9 23.4c-7.6 8.4-11.7 18.7-11.7 28.9v175.1zM785.7 810c0 2.2-2.6 4.6-6.4 4.6h-326l-0.6-108.4 20.9-23.4c10.2-11.4 15.9-25 15.9-38.2V205.2c0-21.6-14-39.3-35.7-45.1l-50.4-13.4h337.3c3.8 0 6.4 2.4 6.4 4.6v387.1c0 9.7 2.7 19.4 8 27.9l30.7 50.7v193z" Stroke="{Binding Foreground, ElementName=BtnArgumentJavaSelect}" Fill="{Binding Foreground, ElementName=BtnArgumentJavaSelect}" />
|
||||
<local:MyTextButton x:Name="BtnArgumentJavaSelect" Margin="17,0,0,0" Padding="24.5,10,5,5" Text="手动导入" Grid.Row="5" Grid.Column="1" VerticalContentAlignment="Top" HorizontalAlignment="Left" />
|
||||
<local:MyComboBox
|
||||
x:Name="ComboArgumentJava" Grid.Column="0" ToolTip="若将 Java 放在游戏文件夹或 PCL 文件夹,在进行自动选择时 PCL 会尽量优先选择它">
|
||||
<ComboBoxItem Content="加载中……" IsSelected="True" />
|
||||
<!--<local:MyComboBoxItem Content="Java 8 (1.8.0_171),64 位:C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="5" IsSelected="True" ToolTip="C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe" />-->
|
||||
</local:MyComboBox>
|
||||
<local:MyIconTextButton Margin="5,0,0,0"
|
||||
x:Name="BtnArgumentJavaSearch" Text="搜索" Grid.Column="1"
|
||||
Logo="F1 M 20,17L 43.25,17L 56,29.75L 56,40L 52,37.5L 52,34L 39,34L 39,21L 24,21L 24,55L 36,55L 32,59L 20,59L 20,17 Z M 43,22.25L 43,30L 50.75,30L 43,22.25 Z M 48,38C 53.5228,38 58,42.4772 58,48C 58,53.5229 53.5228,58 48,58C 46.1455,58 44.4089,57.4952 42.9201,56.6155L 36.1213,63.4142C 35.3403,64.1953 34.0739,64.1953 33.2929,63.4142L 32.5858,62.7071C 31.8047,61.9261 31.8047,60.6597 32.5858,59.8787L 39.3845,53.0799C 38.5048,51.5911 38,49.8545 38,48C 38,42.4772 42.4771,38 48,38 Z M 48,42C 44.6863,42 42,44.6863 42,48C 42,51.3137 44.6863,54 48,54C 51.3137,54 54,51.3137 54,48C 54,44.6863 51.3137,42 48,42 Z" />
|
||||
<local:MyIconTextButton
|
||||
x:Name="BtnArgumentJavaSelect" Text="导入" Grid.Column="2"
|
||||
Logo="M827.4 589.1l-30.7-50.7V151.3c0-29.9-25.2-54.3-56.1-54.3h-527c-9.9 0-24.8 6.3-24.8 24.8v700.5c0 20.2 12.1 37 31.7 43.8l169.1 58.6c4.4 1.5 9.1 2.3 13.8 2.3 10.2 0 20.7-3.4 29.9-10 12.9-9.2 20.3-22.4 20.3-36.2l-0.1-16.6h325.7c30.9 0 56.1-24.3 56.1-54.3v-193c0-9.8-2.7-19.4-7.9-27.8z m-423.5 288l-165.6-54.8V153.8l201.5 51.4v439.2c-0.1 0.5-0.8 2.6-3.2 5.3l-20.9 23.4c-7.6 8.4-11.7 18.7-11.7 28.9v175.1zM785.7 810c0 2.2-2.6 4.6-6.4 4.6h-326l-0.6-108.4 20.9-23.4c10.2-11.4 15.9-25 15.9-38.2V205.2c0-21.6-14-39.3-35.7-45.1l-50.4-13.4h337.3c3.8 0 6.4 2.4 6.4 4.6v387.1c0 9.7 2.7 19.4 8 27.9l30.7 50.7v193z" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
@@ -291,7 +293,7 @@
|
||||
<local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" local:SettingService.Key="LaunchAdvanceDisableJLW"
|
||||
ToolTipService.Placement="Right" ToolTip="是否使用 Java Launch Wrapper 修复 Java 18- 在中文路径下可能无法正常启动的问题。
详见:https://github.com/00ll00/java_launch_wrapper" />
|
||||
<local:MyCheckBox Height="28" Text="禁用 LWJGL Unsafe Agent" local:SettingService.Key="LaunchAdvanceDisableLUA"
|
||||
ToolTipService.Placement="Right" ToolTip="是否使用 LWJGL Unsafe Agent 修复 Java 25+ 的一个性能问题。
详见:https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
|
||||
ToolTipService.Placement="Right" ToolTip="是否使用 LWJGL Unsafe Agent 修复 LWJGL 3.4.1 的一个性能问题。
详见:https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
|
||||
<local:MyCheckBox Height="28" Text="使用高性能显卡" local:SettingService.Key="LaunchAdvanceGraphicCard"
|
||||
ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 PCL 和 Java 改为使用高性能显卡。
如果同时有集成显卡和独立显卡,这能确保 MC 使用独立显卡进行渲染,以大幅提高帧率。" />
|
||||
</StackPanel>
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
UpdateRamType()
|
||||
UpdateJavaComboBox()
|
||||
Catch ex As NullReferenceException
|
||||
Log(ex, "启动设置项存在异常,已被自动重置", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "启动设置项存在异常,已被自动重置", LogBehavior.Alert)
|
||||
Reset()
|
||||
Catch ex As Exception
|
||||
Log(ex, "重载启动设置时出错", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "重载启动设置时出错")
|
||||
End Try
|
||||
End Sub
|
||||
Public Sub Reset()
|
||||
@@ -42,7 +42,7 @@
|
||||
JavaSearchLoader.Start(IsForceRestart:=True)
|
||||
Hint("已初始化启动设置!", HintType.Green)
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化启动设置失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "初始化启动设置失败", LogBehavior.Alert)
|
||||
End Try
|
||||
Refresh()
|
||||
End Sub
|
||||
@@ -57,7 +57,7 @@
|
||||
Private Sub RadioSkinType3_Check(sender As Object, e As RouteEventArgs) Handles RadioSkinType4.PreviewCheck
|
||||
If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Return
|
||||
'已有图片则不再选择
|
||||
If File.Exists(PathAppdata & "CustomSkin.png") Then Return
|
||||
If FileUtils.Exists(PathAppdata & "CustomSkin.png") Then Return
|
||||
'没有图片则要求选择
|
||||
Dim SkinInfo As McSkinInfo = McSkinSelect()
|
||||
If Not SkinInfo.IsVaild Then
|
||||
@@ -70,9 +70,8 @@
|
||||
'返回是否成功改变
|
||||
Private Function ChangeSkin(SkinInfo As McSkinInfo) As Boolean
|
||||
Try
|
||||
'拷贝文件
|
||||
File.Delete(PathAppdata & "CustomSkin.png")
|
||||
CopyFile(SkinInfo.LocalFile, PathAppdata & "CustomSkin.png")
|
||||
'复制文件
|
||||
FileUtils.Copy(SkinInfo.LocalFile, PathAppdata & "CustomSkin.png")
|
||||
'将单层皮肤扩展到双层
|
||||
Dim Bitmap As New MyBitmap(PathAppdata & "CustomSkin.png")
|
||||
If Bitmap.Pic.Width = 64 AndAlso Bitmap.Pic.Height = 32 Then
|
||||
@@ -81,15 +80,15 @@
|
||||
Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(NewBitmap)
|
||||
g.DrawImageUnscaled(Img, New System.Drawing.Point(0, 0))
|
||||
End Using
|
||||
File.Delete(PathAppdata & "CustomSkin.png")
|
||||
FileUtils.Delete(PathAppdata & "CustomSkin.png")
|
||||
NewBitmap.Save(PathAppdata & "CustomSkin.png")
|
||||
End If
|
||||
'更新设置
|
||||
Settings.Set("LaunchSkinSlim", SkinInfo.IsSlim)
|
||||
ChangeSkin = True
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Log(ex, "改变离线皮肤失败", NotifyLevel.MsgBox)
|
||||
ChangeSkin = False
|
||||
Logger.Error(ex, "改变离线皮肤失败", LogBehavior.Alert)
|
||||
Return False
|
||||
Finally
|
||||
'设置当前显示
|
||||
PageLaunchLeft.SkinLegacy.Start(IsForceRestart:=True)
|
||||
@@ -97,11 +96,11 @@
|
||||
End Function
|
||||
Private Sub BtnSkinDelete_Click(sender As Object, e As EventArgs) Handles BtnSkinDelete.Click
|
||||
Try
|
||||
File.Delete(PathAppdata & "CustomSkin.png")
|
||||
FileUtils.Delete(PathAppdata & "CustomSkin.png")
|
||||
RadioSkinType0.SetChecked(True, True)
|
||||
Hint("离线皮肤已清空!", HintType.Green)
|
||||
Catch ex As Exception
|
||||
Log(ex, "清空离线皮肤失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "清空离线皮肤失败", LogBehavior.Alert)
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub BtnSkinSave_Click(sender As Object, e As EventArgs) Handles BtnSkinSave.Click
|
||||
@@ -115,7 +114,7 @@
|
||||
PageLaunchLeft.SkinLegacy.Start()
|
||||
'设置 UI 改变
|
||||
If FrmSetupLaunch Is Nothing Then Return
|
||||
Select Case Settings.Get("LaunchSkinType")
|
||||
Select Case Settings.Get(Of Integer)("LaunchSkinType")
|
||||
Case 0, 1, 2 '默认
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Collapsed
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Collapsed
|
||||
@@ -135,7 +134,7 @@
|
||||
|
||||
Public Shared Sub UpdateRamType()
|
||||
If FrmSetupLaunch?.SliderRamCustom Is Nothing Then Return
|
||||
FrmSetupLaunch.SliderRamCustom.IsEnabled = Settings.Get("LaunchRamType") = 1
|
||||
FrmSetupLaunch.SliderRamCustom.IsEnabled = Settings.Get(Of Integer)("LaunchRamType") = 1
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
@@ -278,7 +277,7 @@
|
||||
'------------------------------------------
|
||||
|
||||
Dim RamGive As Double
|
||||
If Settings.Get("LaunchRamType") = 0 Then
|
||||
If Settings.Get(Of Integer)("LaunchRamType") = 0 Then
|
||||
'自动配置
|
||||
Dim RamAvailable As Double = Math.Round(My.Computer.Info.AvailablePhysicalMemory / 1024 / 1024 / 1024 * 10) / 10
|
||||
'确定需求的内存值
|
||||
@@ -289,7 +288,7 @@
|
||||
If Instance IsNot Nothing AndAlso Not Instance.IsLoaded Then Instance.Load()
|
||||
If Instance IsNot Nothing AndAlso Instance.Modable Then
|
||||
'可安装 Mod 的版本
|
||||
Dim ModDir As New DirectoryInfo(Instance.PathIndie & "mods\")
|
||||
Dim ModDir = DirectoryUtils.GetInfo(Instance.PathIndie & "mods\")
|
||||
Dim ModCount As Integer = If(ModDir.Exists, ModDir.GetFiles.Count(Function(f) {".jar", ".zip", ".litemod"}.Contains(f.Extension.Lower)), 0)
|
||||
RamMininum = 0.5 + ModCount / 150
|
||||
RamTarget1 = 1.5 + ModCount / 90
|
||||
@@ -334,7 +333,7 @@ PreFin:
|
||||
RamGive = Math.Round(Math.Max(RamGive, RamMininum), 1)
|
||||
Else
|
||||
'手动配置
|
||||
Dim Value As Integer = Settings.Get("LaunchRamCustom")
|
||||
Dim Value = Settings.Get(Of Integer)("LaunchRamCustom")
|
||||
If Value <= 12 Then
|
||||
RamGive = Value * 0.1 + 0.3
|
||||
ElseIf Value <= 25 Then
|
||||
@@ -359,10 +358,10 @@ PreFin:
|
||||
If ComboArgumentJava Is Nothing Then Return
|
||||
'初始化列表
|
||||
ComboArgumentJava.Items.Clear()
|
||||
ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择合适的 Java", .Tag = "自动选择"})
|
||||
ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择(推荐)", .Tag = "自动选择"})
|
||||
'更新列表
|
||||
Dim SelectedItem As MyComboBoxItem = Nothing
|
||||
Dim SelectedBySetup As String = Settings.Get("LaunchArgumentJavaSelect")
|
||||
Dim SelectedBySetup As String = Settings.Get(Of String)("LaunchArgumentJavaSelect")
|
||||
Try
|
||||
For Each Java In JavaList.ToList().OrderByDescending(Function(v) v.MajorVersion)
|
||||
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
|
||||
@@ -374,7 +373,7 @@ PreFin:
|
||||
Next
|
||||
Catch ex As Exception
|
||||
Settings.Set("LaunchArgumentJavaSelect", "")
|
||||
Log(ex, "更新设置 Java 下拉框失败", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "更新设置 Java 下拉框失败")
|
||||
End Try
|
||||
'更新选择项
|
||||
If SelectedItem Is Nothing AndAlso JavaList.Any Then SelectedItem = ComboArgumentJava.Items(0) '选中 “自动选择”
|
||||
@@ -403,11 +402,11 @@ PreFin:
|
||||
If "自动选择".Equals(SelectedJava) Then
|
||||
'选择 “自动”
|
||||
Settings.Set("LaunchArgumentJavaSelect", "")
|
||||
Log("[Java] 修改 Java 选择设置:自动选择")
|
||||
Logger.Info("修改 Java 选择设置:自动选择")
|
||||
Else
|
||||
'选择指定项
|
||||
Settings.Set("LaunchArgumentJavaSelect", CType(SelectedJava.ToJson(), JObject).ToString(Newtonsoft.Json.Formatting.None))
|
||||
Log("[Java] 修改 Java 选择设置:" & SelectedJava.ToString)
|
||||
Logger.Info($"修改 Java 选择设置:{SelectedJava}")
|
||||
End If
|
||||
RefreshRam(True)
|
||||
End Sub
|
||||
@@ -419,16 +418,16 @@ PreFin:
|
||||
Return
|
||||
End If
|
||||
'选择 Java
|
||||
Dim JavaSelected As String = SelectFile("javaw.exe|javaw.exe", "选择 bin 文件夹中的 javaw.exe 文件")
|
||||
If JavaSelected = "" Then Return
|
||||
JavaSelected = GetPathFromFullPath(JavaSelected)
|
||||
Dim JavaSelected As String = Dialogs.SelectFile("选择 bin 文件夹中的 javaw.exe 文件", False, filter:={({"exe"}, "javaw.exe")}).FirstOrDefault()
|
||||
If String.IsNullOrEmpty(JavaSelected) Then Return
|
||||
JavaSelected = PathUtils.AddSlashSuffix(PathUtils.RemoveLastPart(JavaSelected))
|
||||
Try
|
||||
'验证 Java 可用
|
||||
Dim NewEntry As New JavaEntry(JavaSelected, True)
|
||||
NewEntry.Check()
|
||||
'加入列表
|
||||
Dim JavaNewList As New JArray From {NewEntry.ToJson}
|
||||
For Each JsonEntry In GetJson(Settings.Get("LaunchArgumentJavaAll"))
|
||||
For Each JsonEntry In GetJson(Settings.Get(Of String)("LaunchArgumentJavaAll"))
|
||||
Dim Entry = JavaEntry.FromJson(JsonEntry)
|
||||
If Entry.PathFolder = NewEntry.PathFolder Then Continue For
|
||||
JavaNewList.Add(JsonEntry)
|
||||
@@ -438,7 +437,7 @@ PreFin:
|
||||
JavaSearchLoader.Start(IsForceRestart:=True)
|
||||
Hint("已将该 Java 加入 Java 列表!", HintType.Green)
|
||||
Catch ex As Exception
|
||||
Log(ex, "该 Java 存在异常,无法使用", NotifyLevel.MsgBox, "异常的 Java")
|
||||
Logger.Error(ex, "该 Java 存在异常,无法使用", LogBehavior.Alert)
|
||||
Return
|
||||
End Try
|
||||
End Sub
|
||||
@@ -488,7 +487,7 @@ PreFin:
|
||||
If Not CheckArgumentRam.Checked Then Return
|
||||
If MyMsgBox("内存优化会显著延长启动耗时,建议仅在内存不足时开启。" & vbCrLf &
|
||||
"如果你在使用机械硬盘,这还可能导致一小段时间的严重卡顿。" &
|
||||
If(IsAdmin(), "", $"{vbCrLf}{vbCrLf}每次启动游戏,PCL 都需要申请管理员权限以进行内存优化。{vbCrLf}若想自动授予权限,可以右键 PCL,打开 属性 → 兼容性 → 以管理员身份运行此程序。"),
|
||||
If(SystemUtils.HasAdminRole(), "", $"{vbCrLf}{vbCrLf}每次启动游戏,PCL 都需要申请管理员权限以进行内存优化。{vbCrLf}若想自动授予权限,可以右键 PCL,打开 属性 → 兼容性 → 以管理员身份运行此程序。"),
|
||||
"提醒", "确定", "取消") = 2 Then
|
||||
CheckArgumentRam.Checked = False
|
||||
End If
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
Private Sub PageSetupLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
||||
'是否处于隐藏的子页面
|
||||
Dim IsHiddenPage As Boolean = False
|
||||
If ItemLaunch.Checked AndAlso Settings.Get("UiHiddenSetupLaunch") Then IsHiddenPage = True
|
||||
If ItemUI.Checked AndAlso Settings.Get("UiHiddenSetupUi") Then IsHiddenPage = True
|
||||
If ItemSystem.Checked AndAlso Settings.Get("UiHiddenSetupSystem") Then IsHiddenPage = True
|
||||
If ItemLink.Checked AndAlso Settings.Get("UiHiddenSetupLink") Then IsHiddenPage = True
|
||||
If ItemLaunch.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then IsHiddenPage = True
|
||||
If ItemUI.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") Then IsHiddenPage = True
|
||||
If ItemSystem.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then IsHiddenPage = True
|
||||
If ItemLink.Checked AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then IsHiddenPage = True
|
||||
If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
|
||||
'若页面错误,或尚未加载,则继续
|
||||
If IsLoad AndAlso Not IsHiddenPage Then Return
|
||||
@@ -17,13 +17,13 @@
|
||||
PageSetupUI.HiddenRefresh()
|
||||
'选择第一个未被禁用的子页面
|
||||
If IsPageSwitched Then Return
|
||||
If Not Settings.Get("UiHiddenSetupLaunch") Then
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then
|
||||
ItemLaunch.SetChecked(True, False, False)
|
||||
ElseIf Not Settings.Get("UiHiddenSetupUi") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then
|
||||
ItemUI.SetChecked(True, False, False)
|
||||
ElseIf Not Settings.Get("UiHiddenSetupSystem") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then
|
||||
ItemSystem.SetChecked(True, False, False)
|
||||
ElseIf Not Settings.Get("UiHiddenSetupLink") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
|
||||
ItemLink.SetChecked(True, False, False)
|
||||
Else
|
||||
ItemLaunch.SetChecked(True, False, False)
|
||||
@@ -42,13 +42,13 @@
|
||||
Public Sub New()
|
||||
InitializeComponent()
|
||||
'选择第一个未被禁用的子页面
|
||||
If Not Settings.Get("UiHiddenSetupLaunch") Then
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then
|
||||
PageID = FormMain.PageSubType.SetupLaunch
|
||||
ElseIf Not Settings.Get("UiHiddenSetupUi") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then
|
||||
PageID = FormMain.PageSubType.SetupUI
|
||||
ElseIf Not Settings.Get("UiHiddenSetupSystem") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then
|
||||
PageID = FormMain.PageSubType.SetupSystem
|
||||
ElseIf Not Settings.Get("UiHiddenSetupLink") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
|
||||
PageID = FormMain.PageSubType.SetupLink
|
||||
Else
|
||||
PageID = FormMain.PageSubType.SetupLaunch
|
||||
@@ -115,7 +115,7 @@
|
||||
|
||||
PageID = ID
|
||||
Catch ex As Exception
|
||||
Log(ex, "切换分页面失败(ID " & ID & ")", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, $"切换分页面失败(ID {ID})")
|
||||
Finally
|
||||
AniControlEnabled -= 1
|
||||
End Try
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
Public Sub Reset()
|
||||
Try
|
||||
SettingService.ResetSettings(Me)
|
||||
Log("[Setup] 已初始化联机页设置")
|
||||
Logger.Info("已初始化联机页设置")
|
||||
Hint("已初始化联机页设置!", HintType.Green, False)
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化联机页设置失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "初始化联机页设置失败", LogBehavior.Alert)
|
||||
End Try
|
||||
Reload()
|
||||
End Sub
|
||||
|
||||
@@ -30,10 +30,10 @@
|
||||
Public Sub Reset()
|
||||
Try
|
||||
SettingService.ResetSettings(Me)
|
||||
Log("[Setup] 已初始化启动器页设置")
|
||||
Logger.Info("已初始化启动器页设置")
|
||||
Hint("已初始化启动器页设置!", HintType.Green, False)
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化启动器页设置失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "初始化启动器页设置失败", LogBehavior.Alert)
|
||||
End Try
|
||||
Reload()
|
||||
End Sub
|
||||
@@ -58,7 +58,7 @@
|
||||
End Sub
|
||||
Private Sub SliderDownloadThread_PreviewChange(sender As Object, e As RouteEventArgs) Handles SliderDownloadThread.PreviewChange
|
||||
If SliderDownloadThread.Value < 100 Then Return
|
||||
If Not Settings.Get("HintDownloadThread") Then
|
||||
If Not Settings.Get(Of Boolean)("HintDownloadThread") Then
|
||||
Settings.Set("HintDownloadThread", True)
|
||||
MyMsgBox("如果设置过多的下载线程,可能会导致下载时出现非常严重的卡顿。" & vbCrLf &
|
||||
"一般设置 64 线程即可满足大多数下载需求,除非你知道你在干什么,否则不建议设置更多的线程数!", "警告", "我知道了", IsWarn:=True)
|
||||
@@ -109,12 +109,12 @@
|
||||
Public Shared Function IsLauncherNewest() As Boolean?
|
||||
Try
|
||||
'确认服务器公告是否正常
|
||||
Dim ServerContent As String = ReadFile(PathTemp & "Cache\Notice.cfg")
|
||||
Dim ServerContent As String = If(FileUtils.TryReadAsString(PathTemp & "Cache\Notice.cfg"), "")
|
||||
If ServerContent.Split("|").Count < 3 Then Return Nothing
|
||||
'确认是否为最新
|
||||
Return ServerContent.Split("|")(If(BuildType = BuildTypes.Release, 2, 1)) <= VersionCode
|
||||
Catch ex As Exception
|
||||
Log(ex, "确认启动器更新失败", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "确认启动器更新失败")
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
@@ -269,11 +269,11 @@
|
||||
<local:MyComboBoxItem local:SettingService.Value="0" Content="你知道吗?" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="1" Content="回声洞" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="2" Content="Minecraft 新闻(作者:最亮的信标)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="3" Content="简单主页(作者:MFn233)" />
|
||||
<!--<local:MyComboBoxItem local:SettingService.Value="3" Content="简单主页(作者:MFn233)" />-->
|
||||
<local:MyComboBoxItem local:SettingService.Value="4" Content="每日整合包推荐(作者:wkea)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="5" Content="Minecraft 皮肤推荐(作者:wkea)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="6" Content="OpenBMCLAPI 仪表盘 Lite(作者:Silverteal、Mxmilu666)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="7" Content="PCL 主页市场(作者:凌云)" />
|
||||
<!--<local:MyComboBoxItem local:SettingService.Value="7" Content="PCL 主页市场(作者:凌云)" />-->
|
||||
<!--<local:MyComboBoxItem local:SettingService.Value="8" Content="PCL 新闻速报(作者:Joker2184)" />-->
|
||||
<local:MyComboBoxItem local:SettingService.Value="9" Content="PCL 新功能说明书(作者:WForst-Breeze)" />
|
||||
<!--<local:MyComboBoxItem local:SettingService.Value="10" Content="OpenMCIM 仪表盘(作者:SALTWOOD)" />-->
|
||||
@@ -282,6 +282,7 @@
|
||||
<local:MyComboBoxItem local:SettingService.Value="13" Content="Minecraft 更新摘要(作者:pynickle)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="14" Content="今日新闻热点(作者:EYicheng)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="15" Content="Minecraft 芝士站(作者:awaEric233)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="16" Content="整合包推荐引擎(作者:CHMYGZ)" />
|
||||
</local:MyComboBox>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
@@ -54,19 +54,19 @@
|
||||
'主页
|
||||
OnMainPageTypeChanged()
|
||||
Catch ex As NullReferenceException
|
||||
Log(ex, "个性化设置项存在异常,已被自动重置", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "个性化设置项存在异常,已被自动重置", LogBehavior.Alert)
|
||||
Reset()
|
||||
Catch ex As Exception
|
||||
Log(ex, "重载个性化设置时出错", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "重载个性化设置时出错")
|
||||
End Try
|
||||
End Sub
|
||||
Public Sub Reset()
|
||||
Try
|
||||
SettingService.ResetSettings(Me)
|
||||
Log("[Setup] 已初始化个性化设置!")
|
||||
Logger.Info("已初始化个性化设置!")
|
||||
Hint("已初始化个性化设置", HintType.Green, False)
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化个性化设置失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "初始化个性化设置失败", LogBehavior.Alert)
|
||||
End Try
|
||||
Refresh()
|
||||
End Sub
|
||||
@@ -97,7 +97,7 @@
|
||||
End Sub
|
||||
Private Sub BtnBackgroundClear_Click(sender As Object, e As EventArgs) Handles BtnBackgroundClear.Click
|
||||
If MyMsgBox("即将删除背景图片文件夹中的所有文件。" & vbCrLf & "此操作不可撤销,是否确定?", "警告",, "取消", IsWarn:=True) = 1 Then
|
||||
DeleteDirectory(PathExeFolder & "PCL\Pictures")
|
||||
DirectoryUtils.Delete(PathExeFolder & "PCL\Pictures")
|
||||
BackgroundRefresh(False, True)
|
||||
Hint("背景图片已清空!", HintType.Green)
|
||||
End If
|
||||
@@ -113,10 +113,9 @@
|
||||
'获取可用的图片文件
|
||||
DirectoryUtils.Create(PathExeFolder & "PCL\Pictures\")
|
||||
Dim Pic As New List(Of String)
|
||||
For Each File In EnumerateFiles(PathExeFolder & "PCL\Pictures\")
|
||||
If File.Extension.Lower <> ".ini" AndAlso File.Extension.Lower <> ".db" Then '文件夹可能会被加入 .ini 和 thumbs.db
|
||||
Pic.Add(File.FullName)
|
||||
End If
|
||||
For Each File In DirectoryUtils.GetFiles(PathExeFolder & "PCL\Pictures\")
|
||||
Dim Extension As String = PathUtils.GetExtension(File)
|
||||
If Extension <> "ini" AndAlso Extension <> "db" Then Pic.Add(File) '文件夹可能会被加入 .ini 和 thumbs.db
|
||||
Next
|
||||
'加载
|
||||
If Not Pic.Any() Then
|
||||
@@ -133,18 +132,16 @@
|
||||
If Refresh Then
|
||||
Dim Address As String = RandomOne(Pic)
|
||||
Try
|
||||
Log("[UI] 加载背景图片:" & Address)
|
||||
Logger.Info($"加载背景图片:{Address}")
|
||||
FrmMain.ImgBack.Background = New MyBitmap(Address)
|
||||
FrmMain.ImgBack.Visibility = Visibility.Visible
|
||||
FrmMain.UpdateBackgroundAndTitleBar()
|
||||
If IsHint Then Hint("背景图片已刷新:" & GetFileNameFromPath(Address), HintType.Green, False)
|
||||
If IsHint Then Hint("背景图片已刷新:" & PathUtils.GetLastPart(Address), HintType.Green, False)
|
||||
Catch ex As Exception
|
||||
If ex.Message.Contains("参数无效") Then
|
||||
Log("刷新背景图片失败,该图片文件可能并非标准格式。" & vbCrLf &
|
||||
"你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。" & vbCrLf &
|
||||
"文件:" & Address, NotifyLevel.MsgBox)
|
||||
Logger.Error($"刷新背景图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{Address}", LogBehavior.Alert)
|
||||
Else
|
||||
Log(ex, "刷新背景图片失败(" & Address & ")", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, $"刷新背景图片失败({Address})", LogBehavior.Alert)
|
||||
End If
|
||||
End Try
|
||||
End If
|
||||
@@ -152,27 +149,26 @@
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
Log(ex, "刷新背景图片时出现未知错误", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "刷新背景图片时出现未知错误")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'顶部栏
|
||||
Private Sub BtnLogoChange_Click(sender As Object, e As EventArgs) Handles BtnLogoChange.Click
|
||||
Dim FileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.jpeg;*.gif;*.webp)|*.png;*.jpg;*.jpeg;*.gif;*.webp", "选择图片")
|
||||
If FileName = "" Then Return
|
||||
Dim FileName As String = Dialogs.SelectFile("选择图片", False, filter:={({"png", "jpg", "jpeg", "gif", "webp"}, "常用图片文件")}).FirstOrDefault()
|
||||
If String.IsNullOrEmpty(FileName) Then Return
|
||||
Dim TargetPath As String = PathExeFolder & "PCL\Logo.png"
|
||||
Try
|
||||
'拷贝文件
|
||||
File.Delete(PathExeFolder & "PCL\Logo.png")
|
||||
CopyFile(FileName, PathExeFolder & "PCL\Logo.png")
|
||||
'复制文件
|
||||
FileUtils.Copy(FileName, TargetPath)
|
||||
'设置当前显示
|
||||
FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
|
||||
FrmMain.ImageTitleLogo.Source = PathExeFolder & "PCL\Logo.png"
|
||||
FrmMain.ImageTitleLogo.Source = TargetPath
|
||||
Catch ex As Exception
|
||||
If ex.Message.Contains("参数无效") Then
|
||||
Log("改变标题栏图片失败,该图片文件可能并非标准格式。" & vbCrLf &
|
||||
"你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。", NotifyLevel.MsgBox)
|
||||
Logger.Error($"改变标题栏图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{TargetPath}", LogBehavior.Alert)
|
||||
Else
|
||||
Log(ex, "设置标题栏图片失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "设置标题栏图片失败", LogBehavior.Alert)
|
||||
End If
|
||||
FrmMain.ImageTitleLogo.Source = Nothing
|
||||
End Try
|
||||
@@ -181,50 +177,48 @@
|
||||
If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Return
|
||||
Refresh:
|
||||
'已有图片则不再选择
|
||||
If File.Exists(PathExeFolder & "PCL\Logo.png") Then
|
||||
Dim TargetPath As String = PathExeFolder & "PCL\Logo.png"
|
||||
If FileUtils.Exists(TargetPath) Then
|
||||
Try
|
||||
FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
|
||||
FrmMain.ImageTitleLogo.Source = PathExeFolder & "PCL\Logo.png"
|
||||
FrmMain.ImageTitleLogo.Source = TargetPath
|
||||
Catch ex As Exception
|
||||
If ex.Message.Contains("参数无效") Then
|
||||
Log("调整标题栏图片失败,该图片文件可能并非标准格式。" & vbCrLf &
|
||||
"你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。", NotifyLevel.MsgBox)
|
||||
Logger.Error($"改变标题栏图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{TargetPath}", LogBehavior.Alert)
|
||||
Else
|
||||
Log(ex, "调整标题栏图片失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "调整标题栏图片失败", LogBehavior.Alert)
|
||||
End If
|
||||
FrmMain.ImageTitleLogo.Source = Nothing
|
||||
e.Handled = True
|
||||
Try
|
||||
File.Delete(PathExeFolder & "PCL\Logo.png")
|
||||
FileUtils.Delete(TargetPath)
|
||||
Catch exx As Exception
|
||||
Log(exx, "清理错误的标题栏图片失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(exx, "清理错误的标题栏图片失败", LogBehavior.Alert)
|
||||
End Try
|
||||
End Try
|
||||
Return
|
||||
End If
|
||||
'没有图片则要求选择
|
||||
Dim FileName As String = SelectFile("常用图片文件(*.png;*.jpeg;*.jpg;*.gif;*.webp)|*.png;*.jpeg;*.jpg;*.gif;*.webp", "选择图片")
|
||||
If FileName = "" Then
|
||||
Dim FileName As String = Dialogs.SelectFile("选择图片", False, filter:={({"png", "jpeg", "jpg", "gif", "webp"}, "常用图片文件")}).FirstOrDefault()
|
||||
If String.IsNullOrEmpty(FileName) Then
|
||||
FrmMain.ImageTitleLogo.Source = Nothing
|
||||
e.Handled = True
|
||||
Else
|
||||
Try
|
||||
'拷贝文件
|
||||
File.Delete(PathExeFolder & "PCL\Logo.png")
|
||||
CopyFile(FileName, PathExeFolder & "PCL\Logo.png")
|
||||
FileUtils.Copy(FileName, TargetPath)
|
||||
GoTo Refresh
|
||||
Catch ex As Exception
|
||||
Log(ex, "复制标题栏图片失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "复制标题栏图片失败", LogBehavior.Alert)
|
||||
End Try
|
||||
End If
|
||||
End Sub
|
||||
Private Sub BtnLogoDelete_Click(sender As Object, e As EventArgs) Handles BtnLogoDelete.Click
|
||||
Try
|
||||
File.Delete(PathExeFolder & "PCL\Logo.png")
|
||||
FileUtils.Delete(PathExeFolder & "PCL\Logo.png")
|
||||
RadioLogoType1.SetChecked(True, True)
|
||||
Hint("标题栏图片已清空!", HintType.Green)
|
||||
Catch ex As Exception
|
||||
Log(ex, "清空标题栏图片失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "清空标题栏图片失败", LogBehavior.Alert)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -242,7 +236,7 @@ Refresh:
|
||||
PanMusicDetail.Visibility = Visibility.Visible
|
||||
BtnMusicClear.Visibility = Visibility.Visible
|
||||
CardMusic.Title = "背景音乐(" &
|
||||
EnumerateFiles(PathExeFolder & "PCL\Musics\").Count(Function(f) Not {".ini", ".jpg", ".txt", ".cfg", ".lrc", ".db", ".png"}.Contains(f.Extension.Lower)) &
|
||||
DirectoryUtils.GetFiles(PathExeFolder & "PCL\Musics\").Count(Function(f) Not {"ini", "jpg", "txt", "cfg", "lrc", "db", "png"}.Contains(PathUtils.GetExtension(f))) &
|
||||
" 首)"
|
||||
Else
|
||||
PanMusicVolume.Visibility = Visibility.Collapsed
|
||||
@@ -264,16 +258,16 @@ Refresh:
|
||||
Thread.Sleep(200)
|
||||
'删除文件
|
||||
Try
|
||||
DeleteDirectory(PathExeFolder & "PCL\Musics")
|
||||
DirectoryUtils.Delete(PathExeFolder & "PCL\Musics")
|
||||
Hint("背景音乐已删除!", HintType.Green)
|
||||
Catch ex As Exception
|
||||
Log(ex, "删除背景音乐失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "删除背景音乐失败", LogBehavior.Alert)
|
||||
End Try
|
||||
Try
|
||||
DirectoryUtils.Create(PathExeFolder & "PCL\Musics\")
|
||||
RunInUi(Sub() MusicRefreshPlay(False))
|
||||
Catch ex As Exception
|
||||
Log(ex, "重建背景音乐文件夹失败", NotifyLevel.MsgBox)
|
||||
Logger.Error(ex, "重建背景音乐文件夹失败", LogBehavior.Alert)
|
||||
End Try
|
||||
End Sub)
|
||||
End If
|
||||
@@ -290,14 +284,14 @@ Refresh:
|
||||
'主页
|
||||
Private Sub BtnCustomFile_Click(sender As Object, e As EventArgs) Handles BtnCustomFile.Click
|
||||
Try
|
||||
If File.Exists(PathExeFolder & "PCL\Custom.xaml") Then
|
||||
If FileUtils.Exists(PathExeFolder & "PCL\Custom.xaml") Then
|
||||
If MyMsgBox("当前已存在布局文件,继续生成教学文件将会覆盖现有布局文件!", "覆盖确认", "继续", "取消", IsWarn:=True) = 2 Then Return
|
||||
End If
|
||||
FileUtils.Write(PathExeFolder & "PCL\Custom.xaml", GetResources("Custom"))
|
||||
ExtractResources(PathExeFolder & "PCL\Custom.xaml", "Custom")
|
||||
Hint("教学文件已生成!", HintType.Green)
|
||||
OpenExplorer(PathExeFolder & "PCL\Custom.xaml")
|
||||
Catch ex As Exception
|
||||
Log(ex, "生成教学文件失败", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "生成教学文件失败")
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub BtnCustomRefresh_Click() Handles BtnCustomRefresh.Click
|
||||
@@ -314,7 +308,7 @@ Refresh:
|
||||
End Sub
|
||||
Public Shared Sub OnMainPageTypeChanged()
|
||||
If FrmSetupUI Is Nothing Then Return
|
||||
Select Case CInt(Settings.Get("UiCustomType"))
|
||||
Select Case CInt(Settings.Get(Of Integer)("UiCustomType"))
|
||||
Case 0 '无
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
@@ -326,7 +320,7 @@ Refresh:
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get(Of Boolean)("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
|
||||
CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.None)
|
||||
Case 2 '联网
|
||||
@@ -334,7 +328,7 @@ Refresh:
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get(Of Boolean)("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
|
||||
CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.打开网页)
|
||||
CustomEventService.SetEventData(FrmSetupUI.HintCustom, "https://github.com/Meloong-Git/PCL/discussions/2528")
|
||||
@@ -435,56 +429,56 @@ Refresh:
|
||||
If FrmMain.PanTitleSelect Is Nothing OrElse Not FrmMain.PanTitleSelect.IsLoaded Then Return
|
||||
Try
|
||||
'顶部栏
|
||||
If Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageDownload") AndAlso Settings.Get("UiHiddenPageLink") AndAlso Settings.Get("UiHiddenPageSetup") AndAlso Settings.Get("UiHiddenPageOther") Then
|
||||
If Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageDownload") AndAlso Settings.Get(Of Boolean)("UiHiddenPageLink") AndAlso Settings.Get(Of Boolean)("UiHiddenPageSetup") AndAlso Settings.Get(Of Boolean)("UiHiddenPageOther") Then
|
||||
'顶部栏已被全部隐藏
|
||||
FrmMain.PanTitleSelect.Visibility = Visibility.Collapsed
|
||||
Else
|
||||
'顶部栏未被全部隐藏
|
||||
FrmMain.PanTitleSelect.Visibility = Visibility.Visible
|
||||
FrmMain.BtnTitleSelect1.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageDownload"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect2.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect3.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageSetup"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect4.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageOther"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect1.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageDownload"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect2.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect3.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageSetup"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect4.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageOther"), Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
'功能
|
||||
FrmLaunchLeft.RefreshButtonsUI()
|
||||
If FrmSetupUI IsNot Nothing Then
|
||||
FrmSetupUI.CardSwitch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenFunctionHidden"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.CardSwitch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenFunctionHidden"), Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
'设置子页面
|
||||
If FrmSetupLeft IsNot Nothing Then
|
||||
FrmSetupLeft.ItemLaunch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupLaunch"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemUI.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupUi"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemLink.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemSystem.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupSystem"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemLaunch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLaunch"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemUI.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemLink.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemSystem.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem"), Visibility.Collapsed, Visibility.Visible)
|
||||
'隐藏左边选择卡
|
||||
Dim AvaliableCount As Integer = 0
|
||||
If Not Settings.Get("UiHiddenSetupLaunch") Then AvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenSetupUi") Then AvaliableCount += 1
|
||||
'If Not Settings.Get("UiHiddenSetupLink") Then AvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenSetupSystem") Then AvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then AvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then AvaliableCount += 1
|
||||
'If Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then AvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then AvaliableCount += 1
|
||||
FrmSetupLeft.PanItem.Visibility = If(AvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
'更多子页面
|
||||
Dim OtherAvaliableCount As Integer = 0
|
||||
If Not Settings.Get("UiHiddenOtherHelp") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherAbout") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherTest") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherFeedback") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherVote") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenOtherTest") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenOtherFeedback") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenOtherVote") Then OtherAvaliableCount += 1
|
||||
If FrmOtherLeft IsNot Nothing Then
|
||||
FrmOtherLeft.ItemHelp.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherHelp"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemFeedback.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherFeedback"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemVote.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherVote"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemAbout.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherAbout"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemTest.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherTest"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemHelp.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherHelp"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemFeedback.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherFeedback"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemVote.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherVote"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemAbout.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemTest.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest"), Visibility.Collapsed, Visibility.Visible)
|
||||
'隐藏左边选择卡
|
||||
FrmOtherLeft.PanItem.Visibility = If(OtherAvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
If OtherAvaliableCount = 1 AndAlso Not HiddenForceShow Then
|
||||
If Not Settings.Get("UiHiddenOtherHelp") Then
|
||||
If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then
|
||||
FrmMain.BtnTitleSelect4.Text = "帮助"
|
||||
ElseIf Not Settings.Get("UiHiddenOtherAbout") Then
|
||||
ElseIf Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then
|
||||
FrmMain.BtnTitleSelect4.Text = "关于"
|
||||
Else
|
||||
FrmMain.BtnTitleSelect4.Text = "百宝箱"
|
||||
@@ -499,7 +493,7 @@ Refresh:
|
||||
'备注
|
||||
If FrmSetupUI IsNot Nothing Then FrmSetupUI.CardSwitch.Title = If(HiddenForceShow, "功能隐藏(已暂时关闭,按 F12 以重新启用)", "功能隐藏")
|
||||
Catch ex As Exception
|
||||
Log(ex, "刷新功能隐藏项目失败", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, "刷新功能隐藏项目失败")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -514,7 +508,7 @@ Refresh:
|
||||
CheckHiddenSetupUI.Checked = True
|
||||
Else
|
||||
'关闭
|
||||
If Settings.Get("UiHiddenSetupLaunch") AndAlso Settings.Get("UiHiddenSetupUi") AndAlso Settings.Get("UiHiddenSetupSystem") AndAlso Settings.Get("UiHiddenSetupLink") Then
|
||||
If Settings.Get(Of Boolean)("UiHiddenSetupLaunch") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
|
||||
CheckHiddenSetupLaunch.Checked = False
|
||||
CheckHiddenSetupSystem.Checked = False
|
||||
CheckHiddenSetupLink.Checked = False
|
||||
@@ -524,7 +518,7 @@ Refresh:
|
||||
End Sub
|
||||
Private Sub HiddenSetupSub() Handles CheckHiddenSetupLaunch.Change, CheckHiddenSetupSystem.Change, CheckHiddenSetupLink.Change, CheckHiddenSetupUI.Change
|
||||
'设置子页面
|
||||
If Settings.Get("UiHiddenSetupLaunch") AndAlso Settings.Get("UiHiddenSetupUi") AndAlso Settings.Get("UiHiddenSetupSystem") AndAlso Settings.Get("UiHiddenSetupLink") Then
|
||||
If Settings.Get(Of Boolean)("UiHiddenSetupLaunch") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
|
||||
'已被全部隐藏
|
||||
CheckHiddenPageSetup.Checked = True
|
||||
Else
|
||||
@@ -543,8 +537,8 @@ Refresh:
|
||||
CheckHiddenOtherHelp.Checked = True
|
||||
Else
|
||||
'关闭
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") AndAlso
|
||||
Settings.Get("UiHiddenOtherVote") AndAlso Settings.Get("UiHiddenOtherFeedback") Then
|
||||
If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") AndAlso
|
||||
Settings.Get(Of Boolean)("UiHiddenOtherVote") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherFeedback") Then
|
||||
CheckHiddenOtherAbout.Checked = False
|
||||
CheckHiddenOtherTest.Checked = False
|
||||
CheckHiddenOtherFeedback.Checked = False
|
||||
@@ -555,7 +549,7 @@ Refresh:
|
||||
End Sub
|
||||
Private Sub HiddenOtherSub(sender As Object, user As Boolean) Handles CheckHiddenOtherHelp.Change, CheckHiddenOtherAbout.Change, CheckHiddenOtherTest.Change
|
||||
'更多子页面(有具体内容的)
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") Then
|
||||
If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then
|
||||
'已被全部隐藏
|
||||
CheckHiddenPageOther.Checked = True
|
||||
Else
|
||||
@@ -564,7 +558,7 @@ Refresh:
|
||||
End If
|
||||
'修改无具体内容的项
|
||||
If Not user Then Return
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") Then
|
||||
If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then
|
||||
CheckHiddenOtherFeedback.Checked = True
|
||||
CheckHiddenOtherVote.Checked = True
|
||||
End If
|
||||
@@ -572,8 +566,8 @@ Refresh:
|
||||
Private Sub HiddenOtherNet(sender As Object, user As Boolean) Handles CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change
|
||||
'更多子页面(无具体内容的)
|
||||
If Not user Then Return
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") AndAlso
|
||||
(Not Settings.Get("UiHiddenOtherFeedback") OrElse Not Settings.Get("UiHiddenOtherVote")) Then
|
||||
If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") AndAlso
|
||||
(Not Settings.Get(Of Boolean)("UiHiddenOtherFeedback") OrElse Not Settings.Get(Of Boolean)("UiHiddenOtherVote")) Then
|
||||
CheckHiddenOtherAbout.Checked = False
|
||||
CheckHiddenOtherTest.Checked = False
|
||||
CheckHiddenOtherHelp.Checked = False
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Public Class Settings
|
||||
Private Shared ReadOnly Entries As Dictionary(Of String, Setting) = (New List(Of Setting) From {
|
||||
Public Shared ReadOnly Entries As Dictionary(Of String, Setting) = (New List(Of Setting) From {
|
||||
New Setting("Identify", "", Source:=Sources.Registry),
|
||||
New Setting("WindowHeight", 550),
|
||||
New Setting("WindowWidth", 900),
|
||||
@@ -27,7 +27,7 @@
|
||||
New Setting("SystemHighestBetaVersionReg", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemHighestAlphaVersionReg", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemHelpVersion", 0, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugMode", False, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugMode", False, Source:=Sources.Registry, OnChanged:=Sub() Logger.Instance.MinLevel = If(ModeDebug, LogLevel.Trace, LogLevel.Info)),
|
||||
New Setting("SystemDebugAnim", 9, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugDelay", False, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugSkipCopy", False, Source:=Sources.Registry),
|
||||
@@ -47,11 +47,11 @@
|
||||
New Setting("CacheMsName", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Migrated", False, Source:=Sources.Registry),
|
||||
New Setting("CacheMsV2OAuthRefresh", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2OAuthExpires", 0, Source:=Sources.Registry),
|
||||
New Setting("CacheMsV2Access", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2ProfileJson", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Uuid", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Name", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Expires", 0L, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideAccess", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideClient", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideUuid", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
@@ -193,12 +193,12 @@
|
||||
New Setting("VersionServerAuthServer", "", Source:=Sources.Instance)
|
||||
}).ToDictionary(Function(e) e.Key)
|
||||
|
||||
Private Enum Sources
|
||||
Public Enum Sources
|
||||
Normal
|
||||
Registry
|
||||
Instance
|
||||
End Enum
|
||||
Private Class Setting
|
||||
Public Class Setting
|
||||
Public Key As String
|
||||
Public Encrypted As Boolean
|
||||
Public DefaultValue As Object
|
||||
@@ -220,7 +220,7 @@
|
||||
Me.Type = If(Value, "").GetType
|
||||
Me.OnChanged = OnChanged
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化设置项失败", NotifyLevel.MsgBoxAndFeedback) '#5095 的 fallback
|
||||
Logger.Error(ex, "初始化设置项失败") '#5095 的 fallback
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -228,10 +228,11 @@
|
||||
''' 读取过的设置的缓存,若从未读取过则为 Nothing。
|
||||
''' 若为版本独立设置,键为版本路径;否则,键为空字符串。
|
||||
''' </summary>
|
||||
Private ValueCache As New Dictionary(Of String, Object)
|
||||
Public ValueCache As New ConcurrentDictionary(Of String, Object)
|
||||
Public Function GetCache(Instance As McInstance)
|
||||
Dim Key As String = If(Source = Sources.Instance, Instance.PathVersion, "")
|
||||
Return If(ValueCache.ContainsKey(Key), ValueCache(Key), Nothing)
|
||||
Dim Result = Nothing
|
||||
Return If(ValueCache.TryGetValue(Key, Result), Result, Nothing)
|
||||
End Function
|
||||
Public Sub [Set](Value As Object, Instance As McInstance)
|
||||
Dim Key As String = If(Source = Sources.Instance, Instance.PathVersion, "")
|
||||
@@ -243,12 +244,13 @@
|
||||
''' </summary>
|
||||
Public Sub Save(Optional Instance As McInstance = Nothing)
|
||||
Dim Value As String = GetCache(Instance)
|
||||
Logger.Trace($"保存设置:{Key} = {Value}{If(Instance Is Nothing, "", $"(实例:{Instance?.PathVersion})")}")
|
||||
If Encrypted Then
|
||||
Try
|
||||
If Value Is Nothing Then Value = ""
|
||||
Value = SecretEncrypt(Value, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "加密设置失败:" & Key, NotifyLevel.DevelopOnly)
|
||||
Logger.Warn(ex, $"加密设置失败:{Key}")
|
||||
End Try
|
||||
End If
|
||||
Select Case Source
|
||||
@@ -281,7 +283,7 @@
|
||||
'触发改变事件(必须在保存之后,以保证 VersionServerLogin 之类的在事件中读取到的是最新的值)
|
||||
If Entry.OnChanged IsNot Nothing Then Entry.OnChanged.Invoke(Value)
|
||||
Catch ex As Exception
|
||||
Log(ex, "设置设置项时出错(" & Key & ", " & Value & ")", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, $"设置设置项时出错({Key}, {Value})")
|
||||
End Try
|
||||
End Sub
|
||||
''' <summary>
|
||||
@@ -336,7 +338,7 @@
|
||||
Try
|
||||
GotValue = SecretDecrypt(GotValue, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "解密设置失败:" & Key, NotifyLevel.DevelopOnly)
|
||||
Logger.Warn(ex, $"解密设置失败:{Key}")
|
||||
GotValue = Entry.DefaultValue
|
||||
Entry.Set(Entry.DefaultValue, Instance)
|
||||
Entry.Save(Instance)
|
||||
@@ -345,11 +347,14 @@
|
||||
End If
|
||||
Entry.Set(CTypeDynamic(GotValue, Entry.Type), Instance)
|
||||
Catch ex As Exception
|
||||
Log(ex, "读取设置失败:" & Key, NotifyLevel.AllUsers)
|
||||
Logger.Error(ex, $"读取设置失败:{Key}", LogBehavior.Toast)
|
||||
Entry.Set(CTypeDynamic(Entry.DefaultValue, Entry.Type), Instance)
|
||||
End Try
|
||||
Return Entry.GetCache(Instance)
|
||||
End Function
|
||||
Public Shared Function [Get](Of T)(Key As String, Optional Instance As McInstance = Nothing) As T
|
||||
Return [Get](Key, Instance)
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 获取某个未经加密的设置项的值。
|
||||
''' 若该设置项经过了加密,则会抛出异常。
|
||||
@@ -385,7 +390,7 @@
|
||||
'触发改变事件
|
||||
If Entry.OnChanged IsNot Nothing Then Entry.OnChanged.Invoke(Entry.DefaultValue)
|
||||
Catch ex As Exception
|
||||
Log(ex, "重置设置项时出错(" & Key & ")", NotifyLevel.MsgBoxAndFeedback)
|
||||
Logger.Error(ex, $"重置设置项时出错({Key})")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
|
||||
Reference in New Issue
Block a user