Skip to content

Commit

Permalink
Merge branch 'ResourceFavorites' into MyBranchCollection
Browse files Browse the repository at this point in the history
  • Loading branch information
tangge233 committed Oct 13, 2024
2 parents f426d58 + 2d39394 commit 3557ab5
Show file tree
Hide file tree
Showing 12 changed files with 392 additions and 7 deletions.
1 change: 1 addition & 0 deletions Plain Craft Launcher 2/FormMain.xaml.vb
Original file line number Diff line number Diff line change
Expand Up @@ -1120,6 +1120,7 @@ Install:
DownloadLiteLoader = 9
DownloadMod = 11
DownloadPack = 12
DownloadCompFavorites = 13
SetupLaunch = 0
SetupUI = 1
SetupSystem = 2
Expand Down
164 changes: 164 additions & 0 deletions Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
Original file line number Diff line number Diff line change
Expand Up @@ -1512,5 +1512,169 @@ Retry:
End Sub

#End Region
Class CompFavorites
''' <summary>
''' 通过项目 Id 判断是否来自 CurseForge
''' </summary>
''' <param name="Id"></param>
''' <returns></returns>
Public Shared Function IsFromCurseForge(Id As String) As Boolean
Dim res As Integer = 0
Return Integer.TryParse(Id, res) 'CurseForge 数字 ID Modrinth 乱序 ID
End Function

''' <summary>
''' 获取全部的收藏工程
''' </summary>
''' <returns></returns>
Public Shared Function GetAll() As List(Of String)
If FavoritesList IsNot Nothing Then Return FavoritesList
Dim RawData As String = Setup.Get("CustomCompFavorites")
FavoritesList = New List(Of String)
If String.IsNullOrWhiteSpace(RawData) Then
Return FavoritesList
End If
Dim RawList As JArray = JArray.Parse(RawData)
For Each CompRawItem As JValue In RawList
FavoritesList.Add(CompRawItem.Value)
Next
Return FavoritesList
End Function

''' <summary>
''' 将指定的内容直接覆盖
''' </summary>
''' <param name="items"></param>
Public Shared Sub ReplaceAll(items As List(Of CompProject))
Dim RawList As JArray = New JArray()
For Each item As CompProject In items
RawList.Add(item.Id)
Next
Setup.Set("CustomCompFavorites", RawList.ToString())
FavoritesList = Nothing
End Sub
Public Shared Sub ReplaceAll(items As List(Of String))
Dim RawList As JArray = New JArray()
For Each item As String In items
RawList.Add(item)
Next
Setup.Set("CustomCompFavorites", RawList.ToString())
FavoritesList = items
End Sub

Public Shared Sub Save()
Dim RawList As JArray = New JArray()
For Each item As String In GetAll()
RawList.Add(item)
Next
Setup.Set("CustomCompFavorites", RawList.ToString())
End Sub

''' <summary>
''' 是否已经收藏
''' </summary>
''' <param name="item">工程</param>
''' <returns></returns>
Public Shared Function Has(item As CompProject) As Boolean
Return GetAll().Find(Function(e) e = item.Id) IsNot Nothing
End Function
Public Shared Function Has(item As String) As Boolean
Return GetAll().Find(Function(e) e = item) IsNot Nothing
End Function

''' <summary>
''' 添加收藏
''' </summary>
''' <param name="item">想要收藏的工程</param>
''' <returns>如果有重复会返回 False</returns>
Public Shared Function Add(item As CompProject) As Boolean
If Has(item) Then Return False
GetAll().Add(item.Id)
Save()
Return True
End Function
Public Shared Function Add(item As String) As Boolean
If Has(item) Then Return False
GetAll().Add(item)
Save()
Return True
End Function
''' <summary>
''' 删除收藏
''' </summary>
''' <param name="item">想要删除收藏的工程</param>
''' <returns>如果不存在会返回 False</returns>
Public Shared Function Del(item As CompProject) As Boolean
Dim SearchRes = GetAll().Where(Function(e) e = item.Id).ToList()
If Not SearchRes.Any() Then Return False
GetAll().Remove(SearchRes.First())
Save()
Return True
End Function
Public Shared Function Del(item As String) As Boolean
Dim SearchRes = GetAll().Where(Function(e) e = item).ToList()
If Not SearchRes.Any() Then Return False
GetAll().Remove(SearchRes.First())
Save()
Return True
End Function

Public Shared Function GetAllCompProjects(Input As List(Of String)) As List(Of CompProject)
If Not Input.Any() Then Return New List(Of CompProject)
Dim RawList As List(Of String) = Input
Dim ModrinthProjectIds As List(Of String) = New List(Of String)
Dim CurseForgeProjectIds As List(Of String) = New List(Of String)
Dim Res As List(Of CompProject) = New List(Of CompProject)
For Each Item In RawList
If CompFavorites.IsFromCurseForge(Item) Then
CurseForgeProjectIds.Add(Item)
Else
ModrinthProjectIds.Add(Item)
End If
Next
Dim RawProjectsData As JArray
Dim FinishedTask = 0
Dim NeedCompleteTask = 0
If CurseForgeProjectIds.Any() Then
NeedCompleteTask += 1
RunInNewThread(Sub()
Try
RawProjectsData = GetJson(DlModRequest("https://api.curseforge.com/v1/mods",
"POST", "{""modIds"": [" & CurseForgeProjectIds.Join(",") & "]}", "application/json"))("data")
For Each RawData In RawProjectsData
Res.Add(New CompProject(RawData))
Next
FinishedTask += 1
Catch ex As Exception
Log(ex, "[Favorites] 获取 CurseForge 数据失败")
End Try
End Sub, "CompFavorites CurseForge")
End If
If ModrinthProjectIds.Any() Then
NeedCompleteTask += 1
RunInNewThread(Sub()
Try
RawProjectsData = DlModRequest($"https://api.modrinth.com/v2/projects?ids=[""{ModrinthProjectIds.Join(""",""")}""]", IsJson:=True)
For Each RawData In RawProjectsData
Res.Add(New CompProject(RawData))
Next
FinishedTask += 1
Catch ex As Exception
Log(ex, "[Favorites] 获取 Modrinth 数据失败")
End Try
End Sub, "CompFavorites Modrinth")
End If
Do Until FinishedTask = NeedCompleteTask
Thread.Sleep(50)
Loop
Return Res
End Function

''' <summary>
''' 首次读取后创建的列表,之后改动只需要保存此列表即可
''' 请使用 GetAll 获取而不是直接对此改动……
''' </summary>
Public Shared FavoritesList As List(Of String)

End Class
End Module
3 changes: 3 additions & 0 deletions Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ RetryStart:
If FrmMain.PageCurrent.Page = FormMain.PageType.CompDetail Then
TargetVersion = FrmMain.PageCurrent.Additional(2)
TargetLoader = FrmMain.PageCurrent.Additional(3)
ElseIf FrmMain.PageCurrent.Page = FormMain.PageType.Download AndAlso FrmMain.PageCurrentSub = FormMain.PageSubType.DownloadCompFavorites Then
TargetVersion = ""
TargetLoader = CompModLoaderType.Any
Else
Select Case CType(sender.Tag, CompProject).Type
Case CompType.Mod
Expand Down
1 change: 1 addition & 0 deletions Plain Craft Launcher 2/Modules/ModMain.vb
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ EndHint:
Public FrmDownloadFabric As PageDownloadFabric
Public FrmDownloadMod As PageDownloadMod
Public FrmDownloadPack As PageDownloadPack
Public FrmDownloadCompFavorites As PageDownloadCompFavorites

'设置页面声明
Public FrmSetupLeft As PageSetupLeft
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@
</Grid.RowDefinitions>
<local:MyCard Margin="0,0,0,25" x:Name="CardIntro">
<StackPanel Margin="22,18,22,19" x:Name="PanIntro">
<StackPanel Orientation="Horizontal" Height="35">
<local:MyButton x:Name="BtnIntroWeb" MinWidth="140" Text="{StaticResource LangDownloadCompToCurseForge}" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" />
<local:MyButton x:Name="BtnIntroWiki" MinWidth="140" Text="{StaticResource LangDownloadCompToMCMod}" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
<local:MyButton x:Name="BtnIntroCopy" MinWidth="140" Text="{StaticResource LangDownloadCompCopyName}" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
</StackPanel>
<Grid Height="35">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<local:MyButton x:Name="BtnIntroWeb" MinWidth="140" Text="{StaticResource LangDownloadCompToCurseForge}" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" />
<local:MyButton x:Name="BtnIntroWiki" MinWidth="140" Text="{StaticResource LangDownloadCompToMCMod}" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
<local:MyButton x:Name="BtnIntroCopy" MinWidth="140" Text="{StaticResource LangDownloadCompCopyName}" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
<local:MyButton x:Name="BtnFavorites" MinWidth="140" Text="收藏" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
</StackPanel>
</Grid>
</StackPanel>
</local:MyCard>
<StackPanel Grid.Row="1" Grid.RowSpan="2" Name="PanMain" Grid.IsSharedSizeScope="True" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,11 @@
AniControlEnabled += 1
Project = FrmMain.PageCurrent.Additional(0)
PanBack.ScrollToHome()

If CompFavorites.Has(Project) Then
BtnFavorites.Text = "取消收藏"
Else
BtnFavorites.Text = "收藏"
End If
'重启加载器
If IsFirstInit Then
'在 Me.Initialized 已经初始化了加载器,不再重复初始化
Expand Down Expand Up @@ -327,5 +331,14 @@
Private Sub BtnIntroCopy_Click(sender As Object, e As EventArgs) Handles BtnIntroCopy.Click
ClipboardSet(CompItem.LabTitle.Text)
End Sub
Private Sub BtnFavorites_Click(sender As Object, e As EventArgs) Handles BtnFavorites.Click
If CompFavorites.Has(Project) Then
If CompFavorites.Del(Project) Then Hint("已取消收藏!", HintType.Finish)
BtnFavorites.Text = "收藏"
Else
If CompFavorites.Add(Project) Then Hint("已收藏!", HintType.Finish)
BtnFavorites.Text = "取消收藏"
End If
End Sub

End Class
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<local:MyPageRight
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PCL" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" x:Class="PageDownloadCompFavorites"
PanScroll="{Binding ElementName=PanBack}">
<local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
<Grid>
<Grid x:Name="PanContent">
<StackPanel Orientation="Vertical" Margin="25">
<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"/>
<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>
</StackPanel>
</StackPanel>
<local:MyCard HorizontalAlignment="Center" VerticalAlignment="Center" Margin="40" x:Name="CardNoContent">
<Grid Margin="20,17">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.ColumnSpan="4" Margin="0,0,0,9" HorizontalAlignment="Center" Text="还没有收藏内容" FontSize="19" UseLayoutRounding="True" SnapsToDevicePixels="True" Foreground="{DynamicResource ColorBrush3}" />
<Rectangle Grid.Row="1" Grid.ColumnSpan="4" HorizontalAlignment="Stretch" Height="2" Fill="{DynamicResource ColorBrush3}" />
<TextBlock Grid.Row="2" Grid.ColumnSpan="4" Margin="10,15,10,5" Text="在资源详细信息界面的右上角可以点击收藏按钮进行收藏" TextWrapping="Wrap" />
</Grid>
</local:MyCard>
</Grid>
<local:MyCard HorizontalAlignment="Center" VerticalAlignment="Center" SnapsToDevicePixels="True" x:Name="PanLoad" UseAnimation="False" Margin="40,50">
<local:MyLoading Text="正在加载收藏夹列表" Margin="20,20,20,17" x:Name="Load" HorizontalAlignment="Center" VerticalAlignment="Center" />
</local:MyCard>
</Grid>
</local:MyScrollViewer>
</local:MyPageRight>
Loading

0 comments on commit 3557ab5

Please sign in to comment.