Skip to content

Commit

Permalink
fix: Correctly handle some missing forge or missing optifine library …
Browse files Browse the repository at this point in the history
…issue
  • Loading branch information
ci010 committed Mar 6, 2024
1 parent d6b67ea commit c22e545
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 17 deletions.
66 changes: 53 additions & 13 deletions xmcl-keystone-ui/src/composables/instanceVersionDiagnose.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { DiagnoseServiceKey, InstallServiceKey, InstanceServiceKey, LocalVersionHeader, ReadWriteLock, RuntimeVersions, getExpectVersion } from '@xmcl/runtime-api'
import type { LibraryIssue } from '@xmcl/core'
import { DiagnoseServiceKey, InstallServiceKey, InstanceServiceKey, LocalVersionHeader, ReadWriteLock, RuntimeVersions, getExpectVersion, parseOptifineVersion } from '@xmcl/runtime-api'
import { InjectionKey, Ref } from 'vue'
import { InstanceResolveVersion } from './instanceVersion'
import { useInstanceVersionInstall } from './instanceVersionInstall'
Expand Down Expand Up @@ -119,20 +120,59 @@ export function useInstanceVersionDiagnose(path: Ref<string>, runtime: Ref<Runti
if (abortSignal.aborted) { return }

if (librariesIssue.length > 0) {
const options = { named: { count: librariesIssue.length } }
console.log(librariesIssue)
operations.push(async () => {
await installLibraries(librariesIssue.map(v => v.library), version.id, librariesIssue.length < 15)
})
items.push(librariesIssue.some(v => v.type === 'corrupted')
? reactive({
title: computed(() => t('diagnosis.corruptedLibraries.name', options, { plural: librariesIssue.length })),
description: computed(() => t('diagnosis.corruptedLibraries.message')),
const optifinesIssues = [] as LibraryIssue[]
const forgeIssues = [] as LibraryIssue[]
const commonIssues = [] as LibraryIssue[]
for (const i of librariesIssue) {
if (i.library.groupId === 'optifine') {
optifinesIssues.push(i)
} else if (i.library.groupId === 'net.minecraftforge' && i.library.artifactId === 'forge' && i.library.classifier === 'client') {
forgeIssues.push(i)
} else {
commonIssues.push(i)
}
}
if (commonIssues.length > 0) {
const options = { named: { count: commonIssues.length } }
operations.push(async () => {
await installLibraries(commonIssues.map(v => v.library), version.id, commonIssues.length < 15)
})
: reactive({
title: computed(() => t('diagnosis.missingLibraries.name', options, { plural: librariesIssue.length })),
description: computed(() => t('diagnosis.missingLibraries.message')),
items.push(commonIssues.some(v => v.type === 'corrupted')
? reactive({
title: computed(() => t('diagnosis.corruptedLibraries.name', options, { plural: commonIssues.length })),
description: computed(() => t('diagnosis.corruptedLibraries.message')),
})
: reactive({
title: computed(() => t('diagnosis.missingLibraries.name', options, { plural: commonIssues.length })),
description: computed(() => t('diagnosis.missingLibraries.message')),
}))
}
if (optifinesIssues.length > 0) {
items.push(reactive({
title: computed(() => t('diagnosis.badInstall.name')),
description: computed(() => t('diagnosis.badInstall.message')),
}))
const { type, patch } = parseOptifineVersion(runtime.value.optifine!)
operations.push(async () => {
await installOptifine({
mcversion: runtime.value.minecraft,
type,
patch,
})
})
}
if (forgeIssues.length > 0) {
items.push(reactive({
title: computed(() => t('diagnosis.badInstall.name')),
description: computed(() => t('diagnosis.badInstall.message')),
}))
operations.push(async () => {
await installForge({
mcversion: runtime.value.minecraft,
version: runtime.value.forge!,
})
})
}
}
}

Expand Down
6 changes: 2 additions & 4 deletions xmcl-keystone-ui/src/composables/instanceVersionInstall.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { injection } from '@/util/inject'
import { InstallServiceKey, LocalVersionHeader, RuntimeVersions, VersionMetadataServiceKey, VersionServiceKey } from '@xmcl/runtime-api'
import { InstallServiceKey, LocalVersionHeader, RuntimeVersions, VersionMetadataServiceKey, VersionServiceKey, parseOptifineVersion } from '@xmcl/runtime-api'
import { useService } from './service'
import { kSWRVConfig } from './swrvConfig'
import { Ref } from 'vue'
Expand Down Expand Up @@ -83,9 +83,7 @@ export function useInstanceVersionInstall(versions: Ref<LocalVersionHeader[]>) {
await refreshVersion(localOptifine.id)
return localOptifine.id
}
const index = optifineVersion.lastIndexOf('_')
const type = optifineVersion.substring(0, index)
const patch = optifineVersion.substring(index + 1)
const { type, patch } = parseOptifineVersion(optifineVersion)
const [ver] = await installOptifine({ type, patch, mcversion: minecraft, inheritFrom: forgeVersion })
return ver
} else if (forgeVersion) {
Expand Down

0 comments on commit c22e545

Please sign in to comment.