UPDATE: Add precheck version hdiff, support another hdiff

This commit is contained in:
2025-08-29 21:13:10 +07:00
parent a4de02bc18
commit d58e76d821
12 changed files with 212 additions and 154 deletions

View File

@@ -103,89 +103,80 @@ export default function DiffPage() {
}
const handleUpdateGame = async () => {
const handleResult = (ok: boolean, error: string) => {
if (!ok) {
toast.error(error)
return false
}
return true
}
try {
setIsDiffLoading(true)
if (!gameDir || !diffDir) {
toast.error('Please select game directory and diff file')
setIsDiffLoading(false)
return
}
setStageType('Check Type HDiff')
setProgressUpdate(0)
setMaxProgressUpdate(1)
const [isOk, validType, errorType] = await DiffService.CheckTypeHDiff(diffDir)
if (!isOk) {
toast.error(errorType)
setIsDiffLoading(false)
return
}
if (!handleResult(isOk, errorType)) return
setProgressUpdate(1)
if (validType === 'hdiffmap.json') {
if (['hdiffmap.json', 'hdifffiles.txt', 'hdifffiles.json'].includes(validType)) {
setStageType('Version Validate')
setProgressUpdate(0)
setMaxProgressUpdate(1)
const [validVersion, errorVersion] = await DiffService.VersionValidate(gameDir, diffDir)
if (!validVersion) {
toast.error(errorVersion)
setIsDiffLoading(false)
return
}
const isNeedHDiff = validType !== 'hdiffmap.json'
const [validVersion, errorVersion] = await DiffService.VersionValidate(gameDir, diffDir, isNeedHDiff)
if (!handleResult(validVersion, errorVersion)) return
setProgressUpdate(1)
}
const isSkipVerify = validType === 'manifest' || validType === 'hdifffiles.txt'
const isSkipVerify = ['manifest', 'hdifffiles.txt', 'hdifffiles.json'].includes(validType)
setStageType('Data Extract')
const [validData, errorData] = await DiffService.DataExtract(gameDir, diffDir, isSkipVerify)
if (!validData) {
toast.error(errorData)
setIsDiffLoading(false)
return
}
if (!handleResult(validData, errorData)) return
setStageType('Cut Data')
setMessageUpdate('')
const [validCut, errorCut] = await DiffService.CutData(gameDir)
if (!validCut) {
toast.error(errorCut)
setIsDiffLoading(false)
return
}
if ( validType === 'hdifffiles.txt' || validType === 'hdiffmap.json') {
setStageType('Patch Data')
const [validPatch, errorPatch] = await DiffService.HDiffPatchData(gameDir)
if (!validPatch) {
toast.error(errorPatch)
setIsDiffLoading(false)
return
if (!handleResult(validCut, errorCut)) return
switch (validType) {
case 'hdifffiles.txt':
case 'hdiffmap.json':
case 'hdifffiles.json': {
setStageType('Patch Data')
const [validPatch, errorPatch] = await DiffService.HDiffPatchData(gameDir)
if (!handleResult(validPatch, errorPatch)) return
setStageType('Delete old files')
const [validDelete, errorDelete] = await DiffService.DeleteFiles(gameDir)
if (!handleResult(validDelete, errorDelete)) return
break
}
setStageType('Delete old files')
const [validDelete, errorDelete] = await DiffService.DeleteFiles(gameDir)
if (!validDelete) {
toast.error(errorDelete)
setIsDiffLoading(false)
return
}
} else if (validType === 'manifest') {
setStageType('Patch Data')
const [validPatch, errorPatch] = await DiffService.LDiffPatchData(gameDir)
if (!validPatch) {
toast.error(errorPatch)
setIsDiffLoading(false)
return
case 'manifest': {
setStageType('Patch Data')
const [validPatch, errorPatch] = await DiffService.LDiffPatchData(gameDir)
if (!handleResult(validPatch, errorPatch)) return
break
}
}
toast.success('Update game completed')
} catch (err: any) {
console.error(err)
toast.error('PickFile error:', err)
setIsDiffLoading(false)
toast.error(`PickFile error: ${err}`)
} finally {
setIsDiffLoading(false)
}
}
return (
<div className="p-2 mx-4">