Skip to content

Commit

Permalink
fix: 保存问题
Browse files Browse the repository at this point in the history
feat: 自适应分类卡片
  • Loading branch information
tangge233 committed Dec 24, 2024
1 parent dd05cf1 commit 4e41461
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 47 deletions.
14 changes: 8 additions & 6 deletions Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
Original file line number Diff line number Diff line change
Expand Up @@ -1542,14 +1542,14 @@ Retry:
End Get
Set
_FavoritesList = Value
Dim RawList As New JArray
For Each item In _FavoritesList
RawList.Add(item)
Next
Dim RawList = JArray.FromObject(_FavoritesList)
Setup.Set("CompFavorites", RawList.ToString())
End Set
End Property

Public Shared Sub Save()
FavoritesList = _FavoritesList
End Sub
End Class

Class CompRequest
Expand Down Expand Up @@ -1613,9 +1613,10 @@ Retry:
RunInNewThread(Sub()
Try
Res.AddRange(CompRequest.GetListByIdsFromCurseforge(CurseForgeProjectIds))
FinishedTask += 1
Catch ex As Exception
Log(ex, "[Favorites] 获取 CurseForge 数据失败", LogLevel.Hint)
Finally
FinishedTask += 1
End Try
End Sub, "Favorites CurseForge")
End If
Expand All @@ -1624,9 +1625,10 @@ Retry:
RunInNewThread(Sub()
Try
Res.AddRange(CompRequest.GetListByIdsFromModrinth(ModrinthProjectIds))
FinishedTask += 1
Catch ex As Exception
Log(ex, "[Favorites] 获取 Modrinth 数据失败", LogLevel.Hint)
Finally
FinishedTask += 1
End Try
End Sub, "Favorites Modrinth")
End If
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,7 @@
Hint($"已收藏 {Project.TranslatedName}!", HintType.Finish)
BtnFavorites.Text = "取消收藏"
End If
CompFavorites.Save()
End Sub

End Class
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,18 @@
<local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
<Grid x:Name="PanContent">
<StackPanel Orientation="Vertical" Margin="25">
<StackPanel x:Name="PanContentList">
<StackPanel>
<local:MySearchBox HintText="搜索收藏夹内容" x:Name="PanSearchBox" Margin="0,0,0,15"/>
<local:MyHint Text="部分资源在线信息获取失败,当前收藏夹内容可能不齐全。" IsWarn="True" Margin="0,0,0,15" x:Name="HintGetFail" Visibility="Collapsed"/>
<local:MyCard x:Name="CardProjectsMod" Title="Mod" IsSwaped="True" CanSwap="True" Margin="0,0,0,15">
<StackPanel x:Name="PanContentList">

</StackPanel>
<!--<local:MyCard x:Name="CardProjectsMod" Title="Mod" IsSwaped="True" CanSwap="True" Margin="0,0,0,15">
<StackPanel x:Name="PanProjectsMod" Margin="12,38,12,12" />
</local:MyCard>
<local:MyCard x:Name="CardProjectsModpack" Title="整合包" IsSwaped="True" CanSwap="True" Margin="0,0,0,15">
<StackPanel x:Name="PanProjectsModpack" Margin="12,38,12,12" />
</local:MyCard>
</local:MyCard>-->
</StackPanel>
</StackPanel>
<local:MyCard HorizontalAlignment="Center" VerticalAlignment="Center" Margin="40" x:Name="CardNoContent">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,58 @@
Private SelectedItemList As New List(Of MyListItem)

#Region "UI 化"
Class CompListItemContainer ' 用来存储自动依据类型生成的卡片及其相关信息
Public Property Card As MyCard
Public Property ContentList As StackPanel
Public Property Title As String
Public Property CompType As Integer
End Class

Dim ItemList As New List(Of CompListItemContainer)

''' <summary>
''' 返回适合当前工程项目的卡片记录
''' </summary>
''' <param name="Type">工程项目类型</param>
''' <returns></returns>
Private Function GetSuitListContainer(Type As Integer) As CompListItemContainer
If ItemList.Any(Function(e) e.CompType.Equals(Type)) Then
Return ItemList.First(Function(e) e.CompType.Equals(Type))
Else
Dim NewItem As New CompListItemContainer With {
.Card = New MyCard With {
.IsSwaped = True,
.CanSwap = True,
.Margin = New Thickness(0, 0, 0, 15)
},
.ContentList = New StackPanel With {
.Orientation = Orientation.Vertical,
.Margin = New Thickness(12, 38, 12, 12)
},
.CompType = Type
}
Select Case Type
Case -1
NewItem.Title = "搜索结果 ({0})" ' 搜索结果
Case CompType.Mod
NewItem.Title = "Mod ({0})"
Case CompType.ModPack
NewItem.Title = "整合包 ({0})"
Case CompType.ResourcePack
NewItem.Title = "资源包 ({0})"
Case Else
NewItem.Title = "未分类类型 ({0})"
End Select
NewItem.Card.Title = String.Format(NewItem.Title, 0)
NewItem.Card.Children.Add(NewItem.ContentList)
ItemList.Add(NewItem)
Return NewItem
End If
End Function

'结果 UI 化
Private Sub Load_OnFinish()
ItemList.Clear()
Try
AllowSearch = False
PanSearchBox.Text = String.Empty
Expand Down Expand Up @@ -67,58 +117,45 @@
If CompItemList.Any() Then '有收藏
If Not IsSearching Then
PanSearchBox.Visibility = Visibility.Visible
CardProjectsMod.Visibility = Visibility.Visible
CardProjectsModpack.Visibility = Visibility.Visible
PanContentList.Visibility = Visibility.Visible
CardNoContent.Visibility = Visibility.Collapsed
End If
Else '没有收藏
PanSearchBox.Visibility = Visibility.Collapsed
CardProjectsMod.Visibility = Visibility.Collapsed
CardProjectsModpack.Visibility = Visibility.Collapsed
PanContentList.Visibility = Visibility.Collapsed
CardNoContent.Visibility = Visibility.Visible
End If

RefreshCardTitle()
RefreshContent()
RefreshCardTitle()
Catch ex As Exception
Log(ex, "可视化收藏夹列表出错", LogLevel.Feedback)
End Try
End Sub

Private Sub RefreshContent()
PanProjectsMod.Children.Clear()
PanProjectsModpack.Children.Clear()
For Each item In ItemList ' 清除逻辑父子关系
item.ContentList.Children.Clear()
Next
PanContentList.Children.Clear()
Dim DataSource As List(Of MyListItem) = If(IsSearching, SearchResult, CompItemList)
For Each item As MyListItem In DataSource
If IsSearching Then
CardProjectsMod.Visibility = Visibility.Visible
CardProjectsModpack.Visibility = Visibility.Collapsed
PanProjectsMod.Children.Add(item)
Continue For
Else
CardProjectsModpack.Visibility = Visibility.Visible
CardProjectsMod.Visibility = Visibility.Visible
End If
If item.Tag.Type = CompType.Mod Then
PanProjectsMod.Children.Add(item)
ElseIf item.Tag.Type = CompType.ModPack Then
PanProjectsModpack.Children.Add(item)
Else
Log("[Favorites] 未知工程类型:" & item.Tag.Type)
End If
GetSuitListContainer(If(IsSearching, -1, CType(item.Tag, CompProject).Type)).ContentList.Children.Add(item)
Next
For Each item In ItemList
If item.ContentList.Children.Count = 0 Then Continue For
PanContentList.Children.Add(item.Card)
Next
End Sub

Private Sub RefreshCardTitle()
If IsSearching Then
CardProjectsMod.Title = $"搜索结果 ({SearchResult.Count})"
Else
Dim ModRes As Integer = 0
Dim ModpackRes As Integer = 0
ModRes = CompItemList.Where(Function(e) e.Tag.Type.Equals(CompType.Mod)).Count()
CardProjectsMod.Title = $"Mod ({ModRes})"
ModpackRes = CompItemList.Where(Function(e) e.Tag.Type.Equals(CompType.ModPack)).Count()
CardProjectsModpack.Title = $"整合包 ({ModpackRes})"
For Each item In ItemList
item.Card.Title = String.Format(item.Title, CompItemList.Where(Function(e) CType(e.Tag, CompProject).Type = item.CompType).Count())
Next
If Not ItemList.Any(Function(e) e.CompType.Equals(-1)) Then Return
Dim SearchItem = ItemList.First(Function(e) e.CompType.Equals(-1))
If SearchItem IsNot Nothing Then
SearchItem.Card.Title = String.Format(SearchItem.Title, SearchResult.Count)
End If
End Sub

Expand Down Expand Up @@ -215,12 +252,15 @@
End Sub

Private Sub Items_SetSelectAll(TargetStatus As Boolean)
For Each item As MyListItem In PanProjectsMod.Children
item.Checked = TargetStatus
Next
For Each item As MyListItem In PanProjectsModpack.Children
item.Checked = TargetStatus
Next
If IsSearching Then
For Each Item As MyListItem In SearchResult
Item.Checked = TargetStatus
Next
Else
For Each Item As MyListItem In CompItemList
Item.Checked = TargetStatus
Next
End If
SelectedItemList = CompItemList.Where(Function(e) e.Checked).ToList()
End Sub

Expand All @@ -229,6 +269,7 @@
If SelectedItemList.Contains(Item) Then SelectedItemList.Remove(Item)
If SearchResult.Contains(Item) Then SearchResult.Remove(Item)
CompFavorites.FavoritesList.Remove(Item.Tag.Id)
CompFavorites.Save()
End Sub

Private Sub Page_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
Expand Down

0 comments on commit 4e41461

Please sign in to comment.