Skip to content

Commit

Permalink
refactor: Refactor the diagnose flow
Browse files Browse the repository at this point in the history
  • Loading branch information
ci010 committed Dec 9, 2023
1 parent 19aa450 commit c6b658e
Show file tree
Hide file tree
Showing 12 changed files with 55 additions and 78 deletions.
2 changes: 1 addition & 1 deletion xmcl-keystone-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"lint:fix": "eslint --ext .ts,.vue --fix src"
},
"dependencies": {
"@vueuse/core": "^10.5.0",
"@xmcl/core": "workspace:*",
"@xmcl/curseforge": "workspace:*",
"@xmcl/game-data": "workspace:*",
Expand Down Expand Up @@ -49,7 +50,6 @@
"vue-i18n": "^8.28.2",
"vue-i18n-bridge": "9.2.2",
"vue-router": "^3.6.5",
"vue-virtual-scroll-list": "^2.3.4",
"vuetify": "^2.6.13",
"vuex": "^3.6.2"
},
Expand Down
21 changes: 2 additions & 19 deletions xmcl-keystone-ui/src/components/MarketProjectDetailCurseforge.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import { useCurseforgeProject, useCurseforgeProjectDescription, useCurseforgePro
import { useCurseforgeChangelog } from '@/composables/curseforgeChangelog'
import { useCurseforgeDependencies, useCurseforgeTask } from '@/composables/curseforgeDependencies'
import { useCurseforgeInstallModFile } from '@/composables/curseforgeInstall'
import { useDateString } from '@/composables/date'
import { kImageDialog } from '@/composables/imageDialog'
import { kInstance } from '@/composables/instance'
import { useModDetailEnable, useModDetailUpdate } from '@/composables/modDetail'
import { getCurseforgeModLoaderTypeFromRuntime, getCurseforgeRelationType, getCursforgeFileModLoaders } from '@/util/curseforge'
import { TimeUnit, getAgoOrDate } from '@/util/date'
import { injection } from '@/util/inject'
import { useInstanceModLoaderDefault } from '@/util/instanceModLoaderDefault'
import { isNoModLoader } from '@/util/isNoModloader'
Expand Down Expand Up @@ -37,24 +37,7 @@ const emit = defineEmits<{
(event: 'disable', file: ProjectFile): void
}>()
const getDateString = (date: string) => {
const result = getAgoOrDate(new Date(date).getTime())
if (typeof result === 'string') {
return result
}
const [ago, unit] = result
switch (unit) {
case TimeUnit.Hour:
return t('ago.hour', { duration: ago }, { plural: ago })
case TimeUnit.Minute:
return t('ago.minute', { duration: ago }, { plural: ago })
case TimeUnit.Second:
return t('ago.second', { duration: ago }, { plural: ago })
case TimeUnit.Day:
return t('ago.day', { duration: ago }, { plural: ago })
}
return date
}
const { getDateString } = useDateString()
const cursforgeModId = computed(() => props.curseforgeId)
Expand Down
26 changes: 26 additions & 0 deletions xmcl-keystone-ui/src/composables/date.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { TimeUnit, getAgoOrDate } from '@/util/date'

export function useDateString() {
const { t } = useI18n()
const getDateString = (date: string) => {
const result = getAgoOrDate(new Date(date).getTime())
if (typeof result === 'string') {
return result
}
const [ago, unit] = result
switch (unit) {
case TimeUnit.Hour:
return t('ago.hour', { duration: ago }, { plural: ago })
case TimeUnit.Minute:
return t('ago.minute', { duration: ago }, { plural: ago })
case TimeUnit.Second:
return t('ago.second', { duration: ago }, { plural: ago })
case TimeUnit.Day:
return t('ago.day', { duration: ago }, { plural: ago })
}
return date
}
return {
getDateString,
}
}
4 changes: 2 additions & 2 deletions xmcl-keystone-ui/src/composables/instanceVersionDiagnose.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { InstallServiceKey, InstanceVersionServiceKey, LocalVersionHeader, RuntimeVersions, getExpectVersion } from '@xmcl/runtime-api'
import { InstallServiceKey, DiagnoseServiceKey, LocalVersionHeader, RuntimeVersions, getExpectVersion } from '@xmcl/runtime-api'
import { InjectionKey, Ref } from 'vue'
import { InstanceResolveVersion } from './instanceVersion'
import { useInstanceVersionInstall } from './instanceVersionInstall'
Expand All @@ -8,7 +8,7 @@ import { useService } from './service'
export const kInstanceVersionDiagnose: InjectionKey<ReturnType<typeof useInstanceVersionDiagnose>> = Symbol('InstanceVersionDiagnose')

export function useInstanceVersionDiagnose(runtime: Ref<RuntimeVersions>, resolvedVersion: Ref<InstanceResolveVersion | undefined>, versions: Ref<LocalVersionHeader[]>) {
const { diagnoseAssetIndex, diagnoseAssets, diagnoseJar, diagnoseLibraries, diagnoseProfile } = useService(InstanceVersionServiceKey)
const { diagnoseAssetIndex, diagnoseAssets, diagnoseJar, diagnoseLibraries, diagnoseProfile } = useService(DiagnoseServiceKey)
const issueItems = ref([] as LaunchMenuItem[])
let operation = undefined as undefined | (() => Promise<void>)
const { t } = useI18n()
Expand Down
2 changes: 2 additions & 0 deletions xmcl-keystone-ui/src/composables/serverStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ export function useInstancesServerStatus() {
}
}

export const kServerStatus: InjectionKey<ReturnType<typeof useServerStatus>> = Symbol('ServerStatus')

export function useServerStatus(serverRef: Ref<{ host: string; port?: number }>, protocol: Ref<number | undefined>) {
const pingServer = usePingServer()
const unknownStatus = useUnknown()
Expand Down
5 changes: 0 additions & 5 deletions xmcl-keystone-ui/src/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@ declare module '*.webp' {
const value: string
export default value
}
declare module 'vue-virtual-scroll-list' {

const component: import('vue').Component<any, any, any, { size: number; remain: number }>
export = component
}

declare module 'vue-grid-layout' {
export const GridLayout: import('vue').Component<any, any, any, { size: number; remain: number }>
Expand Down
8 changes: 4 additions & 4 deletions xmcl-keystone-ui/src/util/instanceModLoaderDefault.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { InstallServiceKey, InstanceServiceKey, RuntimeVersions } from '@xmcl/runtime-api'
import { VersionMetadataServiceKey, InstanceServiceKey, RuntimeVersions } from '@xmcl/runtime-api'
import { swrvGet } from './swrvGet'
import { useSWRVConfig } from '@/composables/swrvConfig'
import { useService } from '@/composables'
Expand All @@ -7,7 +7,7 @@ import { Ref } from 'vue'
export function useInstanceModLoaderDefault(path: Ref<string>, runtime: Ref<RuntimeVersions>) {
const { cache, dedupingInterval } = useSWRVConfig()
const { editInstance } = useService(InstanceServiceKey)
const { getQuiltVersionList, getFabricVersionList, getForgeVersionList, getNeoForgedVersionList } = useService(InstallServiceKey)
const { getQuiltVersionList, getFabricVersionList, getForgeVersionList, getNeoForgedVersionList } = useService(VersionMetadataServiceKey)

async function apply(loaders: Array<'forge' | 'quilt' | 'neoforge' | 'fabric' | string>) {
for (const loader of loaders.map(l => l.toLowerCase())) {
Expand All @@ -25,7 +25,7 @@ export function useInstanceModLoaderDefault(path: Ref<string>, runtime: Ref<Runt
return true
}
} else if (loader === 'quilt') {
const versions = await swrvGet(`/quilt-versions/${runtime.value.minecraft}`, () => getQuiltVersionList({ minecraftVersion: runtime.value.minecraft }), cache, dedupingInterval)
const versions = await swrvGet(`/quilt-versions/${runtime.value.minecraft}`, () => getQuiltVersionList(runtime.value.minecraft), cache, dedupingInterval)
const version = versions[0]

if (version) {
Expand All @@ -39,7 +39,7 @@ export function useInstanceModLoaderDefault(path: Ref<string>, runtime: Ref<Runt
return true
}
} else if (loader === 'forge') {
const forges = await swrvGet(`/forge-versions/${runtime.value.minecraft}`, () => getForgeVersionList({ minecraftVersion: runtime.value.minecraft }), cache, dedupingInterval)
const forges = await swrvGet(`/forge-versions/${runtime.value.minecraft}`, () => getForgeVersionList(runtime.value.minecraft), cache, dedupingInterval)
const version = forges.find(f => f.type === 'recommended') || forges[0]
if (version) {
await editInstance({
Expand Down
2 changes: 1 addition & 1 deletion xmcl-runtime-api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export * from './src/services/InstanceServerInfoService'
export * from './src/services/InstanceService'
export * from './src/services/InstanceShaderPacksService'
export * from './src/services/InstanceUpdateService'
export * from './src/services/InstanceVersionService'
export * from './src/services/DiagnoseService'
export * from './src/services/MultiMCService'
export * from './src/services/JavaService'
export * from './src/services/LaunchService'
Expand Down
14 changes: 14 additions & 0 deletions xmcl-runtime-api/src/services/DiagnoseService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* eslint-disable @typescript-eslint/no-redeclare */
import { AssetIndexIssue, AssetIssue, LibraryIssue, MinecraftJarIssue, ResolvedVersion } from '@xmcl/core'
import { InstallProfileIssueReport } from '@xmcl/installer'
import { ServiceKey } from './Service'

export interface DiagnoseService {
diagnoseLibraries(currentVersion: ResolvedVersion): Promise<LibraryIssue[]>
diagnoseAssetIndex(currentVersion: ResolvedVersion): Promise<AssetIndexIssue | undefined>
diagnoseAssets(currentVersion: ResolvedVersion, strict?: boolean): Promise<AssetIssue[]>
diagnoseJar(currentVersion: ResolvedVersion): Promise<MinecraftJarIssue | undefined>
diagnoseProfile(version: string): Promise<InstallProfileIssueReport | undefined>
}

export const DiagnoseServiceKey: ServiceKey<DiagnoseService> = 'DiagnoseService'
41 changes: 0 additions & 41 deletions xmcl-runtime-api/src/services/InstanceVersionService.ts

This file was deleted.

2 changes: 0 additions & 2 deletions xmcl-runtime-api/src/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { LocalVersions } from './entities/version'
import { InstanceModsState } from './services/InstanceModsService'
import { GameOptionsState } from './services/InstanceOptionsService'
import { InstanceState } from './services/InstanceService'
import { InstanceVersionState } from './services/InstanceVersionService'
import { JavaState } from './services/JavaService'
import { NatState } from './services/NatService'
import { PeerState } from './services/PeerService'
Expand All @@ -25,5 +24,4 @@ export const AllStates = [
LocalVersions,
NatState,
PeerState,
InstanceVersionState,
]
6 changes: 3 additions & 3 deletions xmcl-runtime/install/DiagnoseService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { AssetIndexIssue, AssetIssue, diagnoseAssetIndex, diagnoseAssets, diagnoseJar, diagnoseLibraries, LibraryIssue, MinecraftFolder, MinecraftJarIssue, ResolvedVersion } from '@xmcl/core'
import { diagnoseInstall, InstallProfile, InstallProfileIssueReport } from '@xmcl/installer'
import { InstanceVersionService as IInstanceVersionService, InstanceVersionServiceKey } from '@xmcl/runtime-api'
import { DiagnoseService as IDiagnoseService, DiagnoseServiceKey } from '@xmcl/runtime-api'
import { readFile } from 'fs/promises'
import { join } from 'path'
import { LauncherApp } from '../app/LauncherApp'
Expand All @@ -9,8 +9,8 @@ import { kResourceWorker, ResourceWorker } from '~/resource'
import { exists } from '../util/fs'
import { AbstractService, ExposeServiceKey } from '~/service'

@ExposeServiceKey(InstanceVersionServiceKey)
export class DiagnoseService extends AbstractService implements IInstanceVersionService {
@ExposeServiceKey(DiagnoseServiceKey)
export class DiagnoseService extends AbstractService implements IDiagnoseService {
constructor(@Inject(LauncherAppKey) app: LauncherApp,
@Inject(kGameDataPath) private getPath: PathResolver,
@Inject(kResourceWorker) private worker: ResourceWorker,
Expand Down

0 comments on commit c6b658e

Please sign in to comment.