imp(VersionOverall): 优化版本重命名处理逻辑

This commit is contained in:
ENC_Euphony
2025-08-01 23:27:22 +08:00
parent 28ef67ee0f
commit 340e7457f8
@@ -116,16 +116,18 @@
Dim TempName As String = NewName & "_temp" Dim TempName As String = NewName & "_temp"
Dim TempPath As String = PathMcFolder & "versions\" & TempName & "\" Dim TempPath As String = PathMcFolder & "versions\" & TempName & "\"
Dim IsCaseChangedOnly As Boolean = NewName.ToLower = OldName.ToLower Dim IsCaseChangedOnly As Boolean = NewName.ToLower = OldName.ToLower
'重新读取版本 JSON 信息,避免 JsonObject 中已被合并的项被重新存储
'读取版本 JSON 信息
Dim JsonObject As JObject Dim JsonObject As JObject
Dim OldJsonPath As String = ""
Try Try
Dim JsonPath As String = PageVersionLeft.Version.GetJsonPath() OldJsonPath = PageVersionLeft.Version.GetJsonPath()
JsonObject = GetJson(ReadFile(JsonPath)) JsonObject = GetJson(ReadFile(OldJsonPath))
File.Delete(JsonPath)
Catch ex As Exception Catch ex As Exception
Log(ex, "在重命名读取 json 时失败") Log(ex, "在重命名读取 json 时失败")
JsonObject = PageVersionLeft.Version.JsonObject JsonObject = PageVersionLeft.Version.JsonObject
End Try End Try
'重命名主文件夹 '重命名主文件夹
My.Computer.FileSystem.RenameDirectory(OldPath, TempName) My.Computer.FileSystem.RenameDirectory(OldPath, TempName)
My.Computer.FileSystem.RenameDirectory(TempPath, NewName) My.Computer.FileSystem.RenameDirectory(TempPath, NewName)
@@ -160,13 +162,54 @@
If ReadIni(PathMcFolder & "PCL.ini", "Version") = OldName Then If ReadIni(PathMcFolder & "PCL.ini", "Version") = OldName Then
WriteIni(PathMcFolder & "PCL.ini", "Version", NewName) WriteIni(PathMcFolder & "PCL.ini", "Version", NewName)
End If End If
'写入版本 Json
'处理JSON文件:先写入新文件,再删除旧文件
Try Try
'更新JSON内容中的id
JsonObject("id") = NewName JsonObject("id") = NewName
'写入新的JSON文件
WriteFile(NewPath & NewName & ".json", JsonObject.ToString) WriteFile(NewPath & NewName & ".json", JsonObject.ToString)
'删除旧的JSON文件(现在在新路径下)
Dim OldJsonInNewPath As String = NewPath & OldName & ".json"
If File.Exists(OldJsonInNewPath) Then
File.Delete(OldJsonInNewPath)
End If
Catch ex As Exception Catch ex As Exception
Log(ex, "重命名版本 json 失败") Log(ex, "重命名版本 json 失败")
'如果JSON处理失败,尝试回滚整个操作
Try
'首先尝试恢复文件夹名
If Directory.Exists(NewPath) AndAlso Not Directory.Exists(OldPath) Then
'还原jar文件名
If File.Exists($"{NewPath}{NewName}.jar") Then
Try
My.Computer.FileSystem.RenameFile($"{NewPath}{NewName}.jar", $"{OldName}.jar")
Catch
'忽略jar文件还原失败
End Try End Try
End If
'还原natives文件夹名
If Directory.Exists($"{NewPath}{NewName}-natives") Then
Try
My.Computer.FileSystem.RenameDirectory($"{NewPath}{NewName}-natives", $"{OldName}-natives")
Catch
'忽略natives文件夹还原失败
End Try
End If
'还原文件夹名
My.Computer.FileSystem.RenameDirectory(NewPath, OldName)
Hint("重命名失败:无法处理版本配置文件,已回滚更改", HintType.Critical)
Return
End If
Catch rollbackEx As Exception
Log(rollbackEx, "重命名失败后尝试回滚也失败")
Hint("重命名失败:版本文件可能已损坏,请检查版本文件夹", HintType.Critical)
Return
End Try
Throw ex
End Try
'刷新与提示 '刷新与提示
Hint("重命名成功!", HintType.Finish) Hint("重命名成功!", HintType.Finish)
PageVersionLeft.Version = New McVersion(NewName).Load() PageVersionLeft.Version = New McVersion(NewName).Load()