PageVersionExport.xaml.vb 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. Public Class PageVersionExport
  2. Private Sub PageVersionExport_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  3. Reload()
  4. End Sub
  5. Public ItemVersion As MyListItem
  6. Private SelectedEntries As New List(Of String)
  7. Public Sub Reload()
  8. AniControlEnabled += 1
  9. TbExportName.HintText = PageVersionLeft.Version.Name
  10. TbExportDesc.HintText = PageVersionLeft.Version.Info
  11. PanDisplayItem.Children.Clear()
  12. ItemVersion = PageSelectRight.McVersionListItem(PageVersionLeft.Version.Load())
  13. ItemVersion.IsHitTestVisible = False
  14. If Not String.IsNullOrEmpty(CustomLogo) Then ItemVersion.Logo = CustomLogo
  15. PanDisplayItem.Children.Add(ItemVersion)
  16. ItemVersion.Title = If(String.IsNullOrWhiteSpace(TbExportName.Text), PageVersionLeft.Version.Name, TbExportName.Text)
  17. ItemVersion.Info = If(String.IsNullOrWhiteSpace(TbExportDesc.Text), PageVersionLeft.Version.Info, TbExportDesc.Text)
  18. #If BETA Then
  19. CheckIncludePCL.IsEnabled = True
  20. #Else
  21. CheckIncludePCL.IsEnabled = False
  22. TbHint.Text = "你可以在此勾选需要包含进整合包的文件或文件夹,其他文件或文件夹在高级选项添加。" & vbCrLf & "你当前的 PCL 不是正式版,有二次分发的限制,因此不能选择是否包含 PCL 程序。"
  23. #End If
  24. CheckIncludeSetup.IsEnabled = CheckIncludePCL.IsEnabled
  25. ReloadFileList()
  26. AniControlEnabled -= 1
  27. End Sub
  28. Private Sub ReloadFileList()
  29. Dim tb As TextBlock = PanFileList.Children(0)
  30. PanFileList.Children.Clear()
  31. PanFileList.Children.Add(tb)
  32. For Each d In Directory.EnumerateDirectories(PageVersionLeft.Version.Path)
  33. If Directory.EnumerateFileSystemEntries(d).Count = 0 Then Continue For
  34. d = GetFolderNameFromPath(d)
  35. If IsVerRedundant(d) Then Continue For
  36. Dim title As String = ""
  37. Dim listItem As New MyListItem
  38. If Titles.TryGetValue(d, title) Then 'title 作为引用类型传入
  39. listItem.Title = title
  40. listItem.Info = d
  41. Else
  42. listItem.Title = d
  43. End If
  44. '图标按钮
  45. Dim btnSwap As New MyIconButton
  46. btnSwap.Path = New Shapes.Path With {.HorizontalAlignment = HorizontalAlignment.Right, .Stretch = Stretch.Uniform, .Height = 6, .Width = 10, .VerticalAlignment = VerticalAlignment.Top, .Margin = New Thickness(0, 17, 16, 0), .Data = New GeometryConverter().ConvertFromString("M2,4 l-2,2 10,10 10,-10 -2,-2 -8,8 -8,-8 z"), .RenderTransform = New RotateTransform(180), .RenderTransformOrigin = New Point(0.5, 0.5)}
  47. AddHandler btnSwap.Click, AddressOf BtnSwap_Click
  48. listItem.Buttons = {btnSwap}
  49. listItem.Type = MyListItem.CheckType.CheckBox
  50. listItem.Height = 35
  51. listItem.Logo = Logo.IconButtonOpen
  52. PanFileList.Children.Add(listItem)
  53. Next
  54. End Sub
  55. Private Titles As New Dictionary(Of String, String) From {
  56. {"saves", "存档"},
  57. {"resourcepacks", "资源包"},
  58. {"config", "Mod 配置"},
  59. {"shaderpacks", "光影包"},
  60. {"options.txt", "游戏配置"},
  61. {"servers.dat", "服务器列表"}
  62. }
  63. Private Sub BtnSwap_Click(sender As MyIconButton, e As Object)
  64. MsgBox("测试") 'TODO:处理展开操作
  65. End Sub
  66. Private ReadOnly Property Saves As List(Of String)
  67. Get
  68. If Directory.Exists(PageVersionLeft.Version.Path & "saves\") Then
  69. Return Directory.EnumerateDirectories(PageVersionLeft.Version.Path & "saves\").ToList
  70. End If
  71. Return New List(Of String)
  72. End Get
  73. End Property
  74. #Region "整合包信息 & 预览栏"
  75. Private Sub TbExportName_TextChanged(sender As MyTextBox, e As TextChangedEventArgs) Handles TbExportName.TextChanged
  76. ItemVersion.Title = If(String.IsNullOrWhiteSpace(sender.Text), PageVersionLeft.Version.Name, sender.Text)
  77. End Sub
  78. Private Sub TbExportDesc_TextChanged(sender As MyTextBox, e As TextChangedEventArgs) Handles TbExportDesc.TextChanged
  79. ItemVersion.Info = If(String.IsNullOrWhiteSpace(sender.Text), PageVersionLeft.Version.Info, sender.Text)
  80. End Sub
  81. Private CustomLogoVal As String
  82. ''' <summary>
  83. ''' 自定义 Logo 的路径。
  84. ''' </summary>
  85. Public Property CustomLogo() As String
  86. Get
  87. Return CustomLogoVal
  88. End Get
  89. Set(value As String)
  90. If AniControlEnabled <> 0 Then Exit Property
  91. CustomLogoVal = value
  92. ItemVersion.Logo = value
  93. Reload()
  94. End Set
  95. End Property
  96. Private Sub ComboDisplayLogo_SelectionChanged(sender As MyComboBox, e As SelectionChangedEventArgs) Handles ComboDisplayLogo.SelectionChanged
  97. If Not AniControlEnabled = 0 Then Exit Sub
  98. '选择 自定义 时修改图片
  99. If ComboDisplayLogo.SelectedItem Is ItemDisplayLogoCustom Then
  100. Dim FileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.gif)|*.png;*.jpg;*.gif", "选择图片")
  101. If String.IsNullOrWhiteSpace(FileName) Then Exit Sub
  102. CustomLogo = FileName
  103. Else
  104. CustomLogo = sender.SelectedItem.Tag
  105. End If
  106. End Sub
  107. #End Region
  108. #Region "基本信息"
  109. Private Sub CheckIncludePCL_Change(sender As Object, user As Boolean) Handles CheckIncludePCL.Change
  110. CheckIncludeSetup.IsEnabled = CheckIncludePCL.IsEnabled
  111. End Sub
  112. #End Region
  113. #Region "导出"
  114. 'Private Sub ComboExportType_Change(sender As ComboBox, e As SelectionChangedEventArgs) Handles ComboExportType.SelectionChanged
  115. ' If AniControlEnabled <> 0 Then Exit Sub
  116. ' Type = sender.SelectedIndex
  117. ' Select Case Type
  118. ' Case ModpackType.Modrinth
  119. ' If IncludePCL() Then 'TODO:修改这里的条件
  120. ' If GridCompressed IsNot Nothing Then GridCompressed.Visibility = Visibility.Visible
  121. ' If GridModrinth IsNot Nothing Then GridModrinth.Visibility = Visibility.Collapsed
  122. ' Else
  123. ' If GridCompressed IsNot Nothing Then GridCompressed.Visibility = Visibility.Collapsed
  124. ' If GridModrinth IsNot Nothing Then GridModrinth.Visibility = Visibility.Visible
  125. ' End If
  126. ' End Select
  127. ' CardExport.TriggerForceResize()
  128. 'End Sub
  129. Private Sub BtnExportExport_Click() Handles BtnExportExport.Click
  130. '获取需要包含的文件夹
  131. Dim contains As New List(Of String)
  132. For Each c In PanFiles.Children
  133. If TypeOf c IsNot MyCheckBox Then Continue For
  134. If String.IsNullOrEmpty(c.Tag) Then Continue For
  135. contains.Add(c.Tag)
  136. Next
  137. Dim savePath As String = SelectAs(
  138. "选择导出位置", $"整合包 - {If(String.IsNullOrWhiteSpace(TbExportName.Text), PageVersionLeft.Version.Name, TbExportName.Text)}" & If(CheckIncludePCL.Checked, ".zip", ".mrpack"),
  139. If(CheckIncludePCL.Checked, "整合包文件(*.zip)|*.zip", "Modrinth 整合包(*.mrpack)|*.mrpack"))
  140. If String.IsNullOrEmpty(savePath) Then Exit Sub
  141. ModpackExport(New ExportOptions(PageVersionLeft.Version, savePath, CheckIncludePCL.Checked, {}, 'TODO:改成要保留的文件列表
  142. PCLSetupGlobal:=CheckIncludeSetup.Checked, Name:=TbExportName.Text, VerID:=TbExportVersion.Text))
  143. End Sub
  144. #End Region
  145. End Class