PageSetupSystem.xaml.vb 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. Class PageSetupSystem
  2. #Region "语言"
  3. 'Private Sub PageSetupUI_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  4. ' AniControlEnabled -= 1
  5. ' '读取设置
  6. ' Select Case Lang
  7. ' Case "zh_CN"
  8. ' ComboLang.SelectedIndex = 0
  9. ' Case "zh_HK"
  10. ' ComboLang.SelectedIndex = 1
  11. ' Case "en_US"
  12. ' ComboLang.SelectedIndex = 2
  13. ' End Select
  14. ' CheckDebug.Checked = ReadReg("SystemDebugMode", "False")
  15. ' AniControlEnabled += 1
  16. 'End Sub
  17. 'Private Sub RefreshLang() Handles ComboLang.SelectionChanged
  18. ' If IsLoaded Then
  19. ' If Not ComboLang.IsLoaded Then Exit Sub
  20. ' Lang = CType(ComboLang.SelectedItem, MyComboBoxItem).Tag
  21. ' Application.Current.Resources.MergedDictionaries(1) = New ResourceDictionary With {.Source = New Url("Languages\" & Lang & ".xaml", UrlKind.Relative)}
  22. ' WriteReg("Lang", Lang)
  23. ' End If
  24. 'End Sub
  25. #End Region
  26. Private Shadows IsLoaded As Boolean = False
  27. Private Sub PageSetupSystem_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  28. '重复加载部分
  29. PanBack.ScrollToHome()
  30. #If Not BETA Then
  31. ItemSystemUpdateDownload.Content = "在有新版本时自动下载(更新快照版可能需要更新密钥)"
  32. #End If
  33. '非重复加载部分
  34. If IsLoaded Then Exit Sub
  35. IsLoaded = True
  36. AniControlEnabled += 1
  37. Reload()
  38. SliderLoad()
  39. AniControlEnabled -= 1
  40. End Sub
  41. Public Sub Reload()
  42. '下载
  43. SliderDownloadThread.Value = Setup.Get("ToolDownloadThread")
  44. SliderDownloadSpeed.Value = Setup.Get("ToolDownloadSpeed")
  45. ComboDownloadVersion.SelectedIndex = Setup.Get("ToolDownloadVersion")
  46. ComboDownloadTranslate.SelectedIndex = Setup.Get("ToolDownloadTranslate")
  47. CheckDownloadKeepModpack.Checked = Setup.Get("ToolDownloadKeepModpack")
  48. 'Minecraft 更新提示
  49. CheckUpdateRelease.Checked = Setup.Get("ToolUpdateRelease")
  50. CheckUpdateSnapshot.Checked = Setup.Get("ToolUpdateSnapshot")
  51. '辅助设置
  52. CheckHelpChinese.Checked = Setup.Get("ToolHelpChinese")
  53. '系统设置
  54. ComboSystemUpdate.SelectedIndex = Setup.Get("SystemSystemUpdate")
  55. ComboSystemActivity.SelectedIndex = Setup.Get("SystemSystemActivity")
  56. TextSystemCache.Text = Setup.Get("SystemSystemCache")
  57. '调试选项
  58. CheckDebugMode.Checked = Setup.Get("SystemDebugMode")
  59. SliderDebugAnim.Value = Setup.Get("SystemDebugAnim")
  60. CheckDebugDelay.Checked = Setup.Get("SystemDebugDelay")
  61. CheckDebugSkipCopy.Checked = Setup.Get("SystemDebugSkipCopy")
  62. End Sub
  63. '初始化
  64. Public Sub Reset()
  65. Try
  66. Setup.Reset("ToolDownloadThread")
  67. Setup.Reset("ToolDownloadSpeed")
  68. Setup.Reset("ToolDownloadVersion")
  69. Setup.Reset("ToolDownloadTranslate")
  70. Setup.Reset("ToolDownloadKeepModpack")
  71. Setup.Reset("ToolUpdateRelease")
  72. Setup.Reset("ToolUpdateSnapshot")
  73. Setup.Reset("ToolHelpChinese")
  74. Setup.Reset("SystemDebugMode")
  75. Setup.Reset("SystemDebugAnim")
  76. Setup.Reset("SystemDebugDelay")
  77. Setup.Reset("SystemDebugSkipCopy")
  78. Setup.Reset("SystemSystemCache")
  79. Setup.Reset("SystemSystemUpdate")
  80. Setup.Reset("SystemSystemActivity")
  81. Log("[Setup] 已初始化启动器页设置")
  82. Hint("已初始化启动器页设置!", HintType.Finish, False)
  83. Catch ex As Exception
  84. Log(ex, "初始化启动器页设置失败", LogLevel.Msgbox)
  85. End Try
  86. Reload()
  87. End Sub
  88. '将控件改变路由到设置改变
  89. Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckDebugMode.Change, CheckDebugDelay.Change, CheckDebugSkipCopy.Change, CheckUpdateRelease.Change, CheckUpdateSnapshot.Change, CheckHelpChinese.Change, CheckDownloadKeepModpack.Change
  90. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
  91. End Sub
  92. Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderDebugAnim.Change, SliderDownloadThread.Change, SliderDownloadSpeed.Change
  93. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
  94. End Sub
  95. Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboDownloadVersion.SelectionChanged, ComboDownloadTranslate.SelectionChanged, ComboSystemUpdate.SelectionChanged, ComboSystemActivity.SelectionChanged
  96. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
  97. End Sub
  98. Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextSystemCache.ValidatedTextChanged
  99. If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Text)
  100. End Sub
  101. '滑动条
  102. Private Sub SliderLoad()
  103. SliderDownloadThread.GetHintText = Function(Value As Integer)
  104. Return Value + 1
  105. End Function
  106. SliderDownloadSpeed.GetHintText = Function(Value As Integer)
  107. If Value <= 14 Then
  108. Return (Value + 1) * 0.1 & " M/s"
  109. ElseIf Value <= 31 Then
  110. Return (Value - 11) * 0.5 & " M/s"
  111. ElseIf Value <= 41 Then
  112. Return (Value - 21) & " M/s"
  113. Else
  114. Return "无限制"
  115. End If
  116. End Function
  117. SliderDebugAnim.GetHintText = Function(Value As Integer)
  118. Return If(Value > 29, "关闭", (Value / 10 + 0.1) & "x")
  119. End Function
  120. End Sub
  121. Private Sub SliderDownloadThread_PreviewChange(sender As Object, e As RouteEventArgs) Handles SliderDownloadThread.PreviewChange
  122. If SliderDownloadThread.Value < 100 Then Exit Sub
  123. If Not Setup.Get("HintDownloadThread") Then
  124. Setup.Set("HintDownloadThread", True)
  125. MyMsgBox("如果设置过多的下载线程,可能会导致下载时出现非常严重的卡顿。" & vbCrLf &
  126. "一般设置 64 线程即可满足大多数下载需求,除非你知道你在干什么,否则不建议设置更多的线程数!", "警告", "我知道了", IsWarn:=True)
  127. End If
  128. End Sub
  129. '调试模式
  130. Private Sub CheckDebugMode_Change() Handles CheckDebugMode.Change
  131. If AniControlEnabled = 0 Then Hint("部分调试信息将在刷新或启动器重启后切换显示!",, False)
  132. End Sub
  133. '清理缓存
  134. Private IsClearingCache As Boolean = False
  135. Private Sub BtnSystemCacheClear_Click(sender As Object, e As EventArgs) Handles BtnSystemCacheClear.Click
  136. If HasDownloadingTask() Then
  137. Hint("请在所有下载任务完成后再清理缓存!", HintType.Critical)
  138. Exit Sub
  139. End If
  140. If PathTemp = IO.Path.GetTempPath() & "PCL\" Then
  141. If MyMsgBox("你确定要清理缓存吗?" & vbCrLf & "在清理缓存后,PCL2 会被强制关闭,以避免缓存缺失带来的异常。", "清理确认", "确定", "取消") = 2 Then
  142. Exit Sub
  143. End If
  144. Else
  145. If MyMsgBox("你已将缓存文件夹手动修改为:" & PathTemp & vbCrLf &
  146. "清理缓存将删除你所设置的这一文件夹中的所有内容,且无法恢复!" & vbCrLf &
  147. "请在继续前,确认其中没有除了 PCL2 缓存以外的重要文件!" & vbCrLf & vbCrLf &
  148. "在清理缓存后,PCL2 会被强制关闭,以避免缓存缺失带来的异常。", "清理确认", "永久删除该文件夹", "取消", IsWarn:=True) = 2 Then
  149. Exit Sub
  150. End If
  151. End If
  152. If IsClearingCache Then Exit Sub
  153. IsClearingCache = True
  154. Try
  155. Dim TotalSize As ULong = DeleteCacheDirectory(PathTemp)
  156. DeleteDirectory(PathTemp, True)
  157. TotalSize += DeleteCacheDirectory(OsDrive & "ProgramData\PCL\")
  158. DeleteDirectory(OsDrive & "ProgramData\PCL\", True)
  159. If TotalSize <= 0 Then
  160. Hint("没有可清理的缓存!")
  161. Else
  162. MyMsgBox("已清理 " & GetString(TotalSize) & " 缓存!" & vbCrLf & "PCL2 即将自动关闭。", "缓存已清理", ForceWait:=True)
  163. FrmMain.EndProgram(False)
  164. End If
  165. Catch ex As Exception
  166. Log(ex, "清理缓存失败", LogLevel.Hint)
  167. Finally
  168. IsClearingCache = False
  169. End Try
  170. End Sub
  171. Private Function DeleteCacheDirectory(Path As String, Optional TotalSize As ULong = 0) As ULong
  172. If Not Directory.Exists(Path) Then Return TotalSize
  173. Dim Temp As String()
  174. Temp = Directory.GetFiles(Path)
  175. For Each str As String In Temp
  176. Try
  177. Dim Info As New FileInfo(str)
  178. Dim FileActualSize = Math.Ceiling(Info.Length / 4096) * 4096
  179. Info.Delete()
  180. TotalSize += FileActualSize
  181. Catch ex As Exception
  182. Log(ex, "删除失败的缓存文件(" & str & ")")
  183. End Try
  184. Next
  185. Temp = Directory.GetDirectories(Path)
  186. For Each str As String In Temp
  187. TotalSize += DeleteCacheDirectory(str)
  188. Next
  189. Return TotalSize
  190. End Function
  191. '自动更新
  192. Private Sub ComboSystemActivity_SizeChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboSystemActivity.SelectionChanged
  193. If AniControlEnabled <> 0 Then Exit Sub
  194. If ComboSystemActivity.SelectedIndex = 2 Then
  195. If MyMsgBox("若选择此项,即使在将来出现严重问题时,你也无法获取相关通知。" & vbCrLf &
  196. "例如,如果发现某个版本游戏存在严重 Bug,你可能就会因为无法得到通知而导致无法预知的后果。" & vbCrLf & vbCrLf &
  197. "一般选择 仅在有重要通知时显示公告 就可以让你尽量不受打扰了。" & vbCrLf &
  198. "除非你在制作服务器整合包,或时常手动更新启动器,否则极度不推荐选择此项!", "警告", "我知道我在做什么", "取消", IsWarn:=True) = 2 Then
  199. ComboSystemActivity.SelectedItem = e.RemovedItems(0)
  200. End If
  201. End If
  202. End Sub
  203. Private Sub ComboSystemUpdate_SizeChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboSystemUpdate.SelectionChanged
  204. If AniControlEnabled <> 0 Then Exit Sub
  205. If ComboSystemUpdate.SelectedIndex = 3 Then
  206. If MyMsgBox("若选择此项,即使在启动器将来出现严重问题时,你也无法获取更新并获得修复。" & vbCrLf &
  207. "例如,如果官方修改了登录方式,从而导致现有启动器无法登录,你可能就会因为无法更新而无法开始游戏。" & vbCrLf & vbCrLf &
  208. "一般选择 仅在有重大漏洞更新时显示提示 就可以让你尽量不受打扰了。" & vbCrLf &
  209. "除非你在制作服务器整合包,或时常手动更新启动器,否则极度不推荐选择此项!", "警告", "我知道我在做什么", "取消", IsWarn:=True) = 2 Then
  210. ComboSystemUpdate.SelectedItem = e.RemovedItems(0)
  211. End If
  212. End If
  213. End Sub
  214. Private Sub BtnSystemUpdate_Click(sender As Object, e As EventArgs) Handles BtnSystemUpdate.Click
  215. UpdateCheckByButton()
  216. End Sub
  217. ''' <summary>
  218. ''' 启动器是否已经是最新版?
  219. ''' 若返回 Nothing,则代表无更新缓存文件或出错。
  220. ''' </summary>
  221. Public Shared Function IsLauncherNewest() As Boolean?
  222. Try
  223. '确认服务器公告是否正常
  224. Dim ServerContent As String = ReadFile(PathTemp & "Cache\Notice.cfg")
  225. If ServerContent.Split("|").Count < 3 Then Return Nothing
  226. '确认是否为最新
  227. #If BETA Then
  228. Dim NewVersionCode As Integer = ServerContent.Split("|")(2)
  229. #Else
  230. Dim NewVersionCode As Integer = ServerContent.Split("|")(1)
  231. #End If
  232. Return NewVersionCode <= VersionCode
  233. Catch ex As Exception
  234. Log(ex, "确认启动器更新失败", LogLevel.Feedback)
  235. Return Nothing
  236. End Try
  237. End Function
  238. End Class