PageDownloadMod.xaml.vb 4.0 KB

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