UPDATE: Add precheck version hdiff, support another hdiff
This commit is contained in:
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user