PageDownloadMod.xaml.vb 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. Public Class PageDownloadMod
  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. McVersionHighest = Math.Max(McVersionHighest, Integer.Parse(CType(TextSearchVersion.Items(1), MyComboBoxItem).Content.ToString.Split(".")(1)))
  6. End Sub
  7. Public Shared Loader As New LoaderTask(Of DlCfProjectRequest, DlCfProjectResult)("DlCfProject Mod", AddressOf DlCfProjectSub, AddressOf LoaderInput) With {.ReloadTimeout = 60 * 1000}
  8. Private Shared Function LoaderInput() As DlCfProjectRequest
  9. If FrmDownloadMod IsNot Nothing AndAlso FrmDownloadMod.IsLoaded Then
  10. Return New DlCfProjectRequest With {
  11. .SearchFilter = FrmDownloadMod.TextSearchName.Text,
  12. .GameVersion = If(FrmDownloadMod.TextSearchVersion.Text.Contains("."), FrmDownloadMod.TextSearchVersion.Text, Nothing),
  13. .CategoryId = Val(FrmDownloadMod.ComboSearchTag.SelectedItem.Tag),
  14. .IsModPack = False,
  15. .ModLoader = Val(FrmDownloadMod.ComboSearchLoader.SelectedItem.Tag)
  16. } '处理列表加载失败后的点击加载器重试
  17. Else
  18. Return New DlCfProjectRequest With {.IsModPack = False}
  19. End If
  20. End Function
  21. '结果 UI 化
  22. Private Sub Load_OnFinish()
  23. Try
  24. PanProjects.Children.Clear()
  25. If Loader.Input.SearchFilter = "" Then
  26. CardProjects.Title = "热门 Mod"
  27. Else
  28. CardProjects.Title = "搜索结果 (" & Loader.Output.Projects.Count & If(Loader.Output.Projects.Count < Loader.Output.RealCount, "+", "") & ")"
  29. End If
  30. For Each Project In Loader.Output.Projects
  31. PanProjects.Children.Add(Project.ToCfItem(Loader.Input.GameVersion Is Nothing, Loader.Input.ModLoader Is Nothing OrElse Loader.Input.ModLoader = 0, AddressOf ProjectClick))
  32. Next
  33. Catch ex As Exception
  34. Log(ex, "可视化 Mod 列表出错", LogLevel.Feedback)
  35. End Try
  36. End Sub
  37. '自动重试
  38. Private Sub Load_State(sender As Object, state As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState) Handles Load.StateChanged
  39. Select Case Loader.State
  40. Case LoadState.Failed
  41. Dim ErrorMessage As String = ""
  42. If DlCfFileLoader.Error IsNot Nothing Then ErrorMessage = DlCfFileLoader.Error.Message
  43. If ErrorMessage.Contains("不是有效的 Json 文件") Then
  44. Log("[Download] 下载的 Mod 列表 Json 文件损坏,已自动重试", LogLevel.Debug)
  45. PageLoaderRestart()
  46. End If
  47. End Select
  48. End Sub
  49. '进入详情页面
  50. Public Sub ProjectClick(sender As MyCfItem, e As EventArgs)
  51. FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CfDetail, .Additional = sender.Tag})
  52. End Sub
  53. '搜索
  54. Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
  55. If e.Key = Key.Enter Then StartSearch()
  56. End Sub
  57. Private Shared Sub StartSearch() Handles BtnSearchRun.Click
  58. Loader.Start()
  59. End Sub
  60. Private Sub BtnSearchReset_Click(sender As Object, e As EventArgs) Handles BtnSearchReset.Click
  61. TextSearchName.Text = ""
  62. TextSearchVersion.SelectedIndex = 0
  63. TextSearchVersion.Text = ""
  64. ComboSearchTag.SelectedIndex = 0
  65. ComboSearchLoader.SelectedIndex = 0
  66. Loader.LastFinishedTime = 0 '要求强制重新开始
  67. End Sub
  68. Private Sub TextSearchVersion_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextSearchVersion.TextChanged
  69. If TextSearchVersion.Text = "" Then
  70. ComboSearchLoader.Visibility = Visibility.Collapsed
  71. Grid.SetColumnSpan(TextSearchVersion, 2)
  72. ComboSearchLoader.SelectedIndex = 0
  73. Else
  74. ComboSearchLoader.Visibility = Visibility.Visible
  75. Grid.SetColumnSpan(TextSearchVersion, 1)
  76. End If
  77. End Sub
  78. End Class