mirror of
https://github.com/modrinth/code.git
synced 2026-08-25 09:04:55 +00:00
feat: use v1 version manifest for Quilt (#6650)
* wip: app-side logic * lints * fmt * fmt * Split Daedalus changes out of frontend branch * Remove Daedalus changes from frontend branch
This commit is contained in:
+22
-7
@@ -370,11 +370,13 @@ const gameVersionOptions = computed<ComboboxOption<string>[]>(() => {
|
||||
const manifest = ctx.loaderVersionsCache.value[apiLoader]
|
||||
if (!manifest) return []
|
||||
|
||||
const hasPlaceholder = manifest.some((x) => x.id === '${modrinth.gameVersion}')
|
||||
const hasPlaceholder = manifest.gameVersions.some((x) => x.id === '${modrinth.gameVersion}')
|
||||
const supportedVersions = new Set(
|
||||
manifest
|
||||
manifest.gameVersions
|
||||
.filter(
|
||||
(x) => x.id !== '${modrinth.gameVersion}' && (hasPlaceholder || x.loaders.length > 0),
|
||||
(x) =>
|
||||
x.id !== '${modrinth.gameVersion}' &&
|
||||
(hasPlaceholder || x.loaders.length > 0 || !!x.versionGroup),
|
||||
)
|
||||
.map((x) => x.id),
|
||||
)
|
||||
@@ -466,14 +468,14 @@ function getLoaderVersionsForGameVersion(
|
||||
apiLoader,
|
||||
gameVersion,
|
||||
hasManifest: !!manifest,
|
||||
manifestLength: manifest?.length,
|
||||
manifestLength: manifest?.gameVersions.length,
|
||||
})
|
||||
if (!manifest) return []
|
||||
|
||||
// Some loaders (e.g. Fabric) list all versions under a placeholder entry
|
||||
const placeholder = manifest.find((x) => x.id === '${modrinth.gameVersion}')
|
||||
const placeholder = manifest.gameVersions.find((x) => x.id === '${modrinth.gameVersion}')
|
||||
if (placeholder) {
|
||||
if (!manifest.some((x) => x.id === gameVersion)) return []
|
||||
if (!manifest.gameVersions.some((x) => x.id === gameVersion)) return []
|
||||
debug(
|
||||
'getLoaderVersionsForGameVersion: using placeholder, loaders:',
|
||||
placeholder.loaders.length,
|
||||
@@ -481,7 +483,20 @@ function getLoaderVersionsForGameVersion(
|
||||
return placeholder.loaders
|
||||
}
|
||||
|
||||
const entry = manifest.find((x) => x.id === gameVersion)
|
||||
const entry = manifest.gameVersions.find((x) => x.id === gameVersion)
|
||||
if (entry?.versionGroup) {
|
||||
const loaders =
|
||||
manifest.versionGroups?.find((group) => group.id === entry.versionGroup)?.loaders ?? []
|
||||
debug(
|
||||
'getLoaderVersionsForGameVersion: version group for',
|
||||
gameVersion,
|
||||
':',
|
||||
entry.versionGroup,
|
||||
loaders.length + ' loaders',
|
||||
)
|
||||
return loaders
|
||||
}
|
||||
|
||||
debug(
|
||||
'getLoaderVersionsForGameVersion: entry for',
|
||||
gameVersion,
|
||||
|
||||
@@ -24,7 +24,8 @@ export type Gamemode = 'survival' | 'creative' | 'hardcore'
|
||||
export type Difficulty = 'peaceful' | 'easy' | 'normal' | 'hard'
|
||||
export type LoaderVersionType = 'stable' | 'latest' | 'other'
|
||||
export type GeneratorSettingsMode = 'default' | 'flat' | 'custom'
|
||||
export type LoaderManifestResolver = (loader: string) => Promise<LauncherMeta.Manifest.v0.Manifest>
|
||||
export type LoaderManifest = LauncherMeta.Manifest.v0.Manifest
|
||||
export type LoaderManifestResolver = (loader: string) => Promise<LoaderManifest>
|
||||
export interface LoaderVersionEntry {
|
||||
id: string
|
||||
stable: boolean
|
||||
@@ -160,7 +161,7 @@ export interface CreationFlowContextValue {
|
||||
hideLoaderChips: ComputedRef<boolean>
|
||||
hideLoaderVersion: ComputedRef<boolean>
|
||||
showSnapshots: Ref<boolean>
|
||||
loaderVersionsCache: Ref<Record<string, { id: string; loaders: LoaderVersionEntry[] }[]>>
|
||||
loaderVersionsCache: Ref<Record<string, LoaderManifest>>
|
||||
paperSupportedVersions: Ref<Set<string> | null>
|
||||
purpurSupportedVersions: Ref<Set<string> | null>
|
||||
|
||||
@@ -295,9 +296,7 @@ export function createCreationFlowContext(
|
||||
const loaderVersionType = ref<LoaderVersionType>('stable')
|
||||
const selectedLoaderVersion = ref<string | null>(null)
|
||||
const showSnapshots = ref(false)
|
||||
const loaderVersionsCache = ref<Record<string, { id: string; loaders: LoaderVersionEntry[] }[]>>(
|
||||
{},
|
||||
)
|
||||
const loaderVersionsCache = ref<Record<string, LoaderManifest>>({})
|
||||
const paperSupportedVersions = ref<Set<string> | null>(null)
|
||||
const purpurSupportedVersions = ref<Set<string> | null>(null)
|
||||
|
||||
@@ -364,11 +363,11 @@ export function createCreationFlowContext(
|
||||
(await client.launchermeta.manifest_v0.getManifest(apiLoader)),
|
||||
staleTime: Infinity,
|
||||
})
|
||||
loaderVersionsCache.value[apiLoader] = data.gameVersions
|
||||
loaderVersionsCache.value[apiLoader] = data
|
||||
debug('fetchLoaderManifest: loaded', apiLoader, 'gameVersions:', data.gameVersions.length)
|
||||
} catch (error) {
|
||||
debug('fetchLoaderManifest: failed', apiLoader, error)
|
||||
loaderVersionsCache.value[apiLoader] = []
|
||||
loaderVersionsCache.value[apiLoader] = { gameVersions: [] }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -376,12 +376,17 @@ function getLoaderVersionsForGameVersion(
|
||||
}
|
||||
|
||||
const manifest = manifestQuery.data.value?.gameVersions
|
||||
const versionGroups = manifestQuery.data.value?.versionGroups
|
||||
if (!manifest) return []
|
||||
|
||||
const placeholder = manifest.find((x) => x.id === '${modrinth.gameVersion}')
|
||||
if (placeholder) return placeholder.loaders
|
||||
|
||||
const entry = manifest.find((x) => x.id === gameVersion)
|
||||
if (entry?.versionGroup) {
|
||||
return versionGroups?.find((group) => group.id === entry.versionGroup)?.loaders ?? []
|
||||
}
|
||||
|
||||
return entry?.loaders ?? []
|
||||
}
|
||||
|
||||
@@ -505,7 +510,7 @@ provideInstallationSettings({
|
||||
const hasPlaceholder = manifest.some((x) => x.id === '${modrinth.gameVersion}')
|
||||
if (!hasPlaceholder) {
|
||||
const supportedVersions = new Set(
|
||||
manifest.filter((x) => x.loaders.length > 0).map((x) => x.id),
|
||||
manifest.filter((x) => x.loaders.length > 0 || !!x.versionGroup).map((x) => x.id),
|
||||
)
|
||||
return versions
|
||||
.filter((v) => supportedVersions.has(v.version))
|
||||
@@ -547,7 +552,9 @@ provideInstallationSettings({
|
||||
if (hasPlaceholder) {
|
||||
return tags.gameVersions.value.some((v) => v.version_type !== 'release')
|
||||
}
|
||||
const supportedVersions = new Set(manifest.filter((x) => x.loaders.length > 0).map((x) => x.id))
|
||||
const supportedVersions = new Set(
|
||||
manifest.filter((x) => x.loaders.length > 0 || !!x.versionGroup).map((x) => x.id),
|
||||
)
|
||||
const supported = tags.gameVersions.value.filter((v) => supportedVersions.has(v.version))
|
||||
return supported.some((v) => v.version_type !== 'release')
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user