PageDownloadPack.xaml.vb 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. Public Class PageDownloadPack
  2. '初始化加载器信息
  3. Private Sub PageDownloadMod_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
  4. PageLoaderInit(Load, PanLoad, CardProjects, PanAlways, Loader, AddressOf Load_OnFinish, AddressOf LoaderInput)
  5. End Sub
  6. Public Shared Loader As New LoaderTask(Of DlCfProjectRequest, DlCfProjectResult)("DlCfProject ModPack", AddressOf DlCfProjectSub, AddressOf LoaderInput) With {.ReloadTimeout = 60 * 1000}
  7. Private Shared Function LoaderInput() As DlCfProjectRequest
  8. If FrmDownloadPack IsNot Nothing AndAlso FrmDownloadPack.IsLoaded Then
  9. Return New DlCfProjectRequest With {
  10. .SearchFilter = FrmDownloadPack.TextSearchName.Text,
  11. .GameVersion = If(FrmDownloadPack.TextSearchVersion.Text.Contains("."), FrmDownloadPack.TextSearchVersion.Text, Nothing),
  12. .CategoryId = Val(FrmDownloadPack.ComboSearchTag.SelectedItem.Tag),
  13. .IsModPack = True
  14. } '处理列表加载失败后的点击加载器重试
  15. Else
  16. Return New DlCfProjectRequest With {.IsModPack = True}
  17. End If
  18. End Function
  19. '结果 UI 化
  20. Private Sub Load_OnFinish()
  21. Try
  22. PanProjects.Children.Clear()
  23. If Loader.Input.SearchFilter = "" Then
  24. CardProjects.Title = "热门整合包"
  25. Else
  26. CardProjects.Title = "搜索结果 (" & Loader.Output.Projects.Count & If(Loader.Output.Projects.Count < Loader.Output.RealCount, "+", "") & ")"
  27. End If
  28. For Each Project In Loader.Output.Projects
  29. PanProjects.Children.Add(Project.ToCfItem(Loader.Input.GameVersion Is Nothing, Loader.Input.ModLoader Is Nothing OrElse Loader.Input.ModLoader = 0, AddressOf ProjectClick))
  30. Next
  31. Catch ex As Exception
  32. Log(ex, "可视化整合包列表出错", LogLevel.Feedback)
  33. End Try
  34. End Sub
  35. '自动重试
  36. Private Sub Load_State(sender As Object, state As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState) Handles Load.StateChanged
  37. Select Case Loader.State
  38. Case LoadState.Failed
  39. Dim ErrorMessage As String = ""
  40. If DlCfFileLoader.Error IsNot Nothing Then ErrorMessage = DlCfFileLoader.Error.Message
  41. If ErrorMessage.Contains("不是有效的 Json 文件") Then
  42. Log("[Download] 下载的整合包列表 Json 文件损坏,已自动重试", LogLevel.Debug)
  43. PageLoaderRestart()
  44. End If
  45. End Select
  46. End Sub
  47. Private Sub Load_OnStart()
  48. PanLoad.Visibility = Visibility.Visible
  49. AniStart({
  50. AaOpacity(PanLoad, 1 - PanLoad.Opacity, 150),
  51. AaOpacity(CardProjects, -CardProjects.Opacity, 150),
  52. AaCode(Sub()
  53. CardProjects.Visibility = Visibility.Collapsed
  54. PanProjects.Children.Clear()
  55. End Sub,, True)
  56. }, "FrmDownloadPack Load Switch")
  57. End Sub
  58. Public Sub ProjectClick(sender As MyCfItem, e As EventArgs)
  59. FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CfDetail, .Additional = sender.Tag})
  60. End Sub
  61. Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
  62. If e.Key = Key.Enter Then StartSearch()
  63. End Sub
  64. Private Shared Sub StartSearch() Handles BtnSearchRun.Click
  65. Loader.Start()
  66. End Sub
  67. Private Sub BtnSearchReset_Click(sender As Object, e As EventArgs) Handles BtnSearchReset.Click
  68. TextSearchName.Text = ""
  69. TextSearchVersion.SelectedIndex = 0
  70. TextSearchVersion.Text = "全部"
  71. ComboSearchTag.SelectedIndex = 0
  72. Loader.LastFinishedTime = 0 '要求强制重新开始
  73. End Sub
  74. Private Sub BtnSearchInstall_Click(sender As Object, e As EventArgs) Handles BtnSearchInstall.Click
  75. ModpackInstall()
  76. End Sub
  77. End Class