From c5f43a83cf6e34f148fde13d04e5a7ecda1e8101 Mon Sep 17 00:00:00 2001 From: Wyvest Date: Wed, 1 Apr 2026 03:10:05 -0400 Subject: [PATCH] Remove all automatic dependency downloading --- apps/oneclient/frontend/src/bindings.gen.ts | 34 ++++---- .../src/routes/onboarding/downloading.tsx | 84 +++---------------- 2 files changed, 29 insertions(+), 89 deletions(-) diff --git a/apps/oneclient/frontend/src/bindings.gen.ts b/apps/oneclient/frontend/src/bindings.gen.ts index b3c44215..adcbe936 100644 --- a/apps/oneclient/frontend/src/bindings.gen.ts +++ b/apps/oneclient/frontend/src/bindings.gen.ts @@ -325,10 +325,8 @@ export type VersionType = */ "old_beta" -const ARGS_MAP = { 'oneclient':'{"updateBundlePackages":["cluster_id"],"getBundlesFor":["cluster_id"],"isBundleSyncing":[],"cacheArt":["path"],"installUpdate":[],"getVersions":[],"downloadPackageFromBundle":["package","cluster_id","bundle_name","skip_compatibility"],"getClustersGroupedByMajor":[],"extractBundleOverrides":["bundle_path","cluster_id"],"copyClusterContent":["source_id","target_id"],"refreshArt":["path"],"checkForUpdate":[]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'debug':'{"getFamily":[],"getFullDebugInfoParsed":[],"getBuildTimestamp":[],"getFullDebugInfoParsedString":[],"getPackageVersion":[],"getOsVersion":[],"getPlatform":[],"getOsDistro":[],"getFullDebugInfo":[],"getGitCommitHash":[],"getLocale":[],"getType":[],"openDevTools":[],"hasDevSettings":[],"isInDev":[],"getArch":[]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'core':'{"searchPackages":["provider","query"],"getRunningProcesses":[],"getLoadersForVersion":["mc_version"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"openMsaLogin":[],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"createSettingsProfile":["name"],"getScreenshots":["id"],"getMultiplePackages":["provider","slugs"],"removeCluster":["id"],"getDefaultUser":["fallback"],"writeSettings":["setting"],"setDiscordRPCMessage":["message"],"createCluster":["options"],"getClusters":[],"getWorlds":["id"],"killProcess":["pid"],"fetchMinecraftProfile":["uuid"],"getLogs":["id"],"getLogByName":["id","name"],"convertUsernameUUID":["username_uuid"],"removePackage":["cluster_id","package_hash"],"isClusterRunning":["cluster_id"],"installModpack":["modpack","cluster_id"],"getGameVersions":[],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getRunningProcessesByClusterId":["cluster_id"],"refreshAccounts":[],"updateClusterById":["id","request"],"getUsers":[],"getClusterById":["id"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"togglePackage":["cluster_id","package_hash"],"getPackage":["provider","slug"],"setDefaultUser":["uuid"],"changeSkin":["access_token","skin_url","skin_variant"],"changeCape":["access_token","cape_uuid"],"getUser":["uuid"],"getPackageBody":["provider","body"],"removeCape":["access_token"],"getProfileOrDefault":["name"],"removeUser":["uuid"],"updateClusterProfile":["name","profile"],"refreshAccount":["uuid"],"fetchLoggedInProfile":["access_token"],"getUsersFromAuthor":["provider","author"],"open":["input"],"syncCluster":["cluster_id"],"readSettings":[],"getGlobalProfile":[],"getProcessLogTail":["id","max_lines"],"launchCluster":["id","uuid","search_for_java"],"setClusterStage":["id","stage"],"getLinkedPackages":["cluster_id"]}' } -export type Router = { 'folders': { fromCluster: (folderName: string) => Promise, -openCluster: (folderName: string) => Promise }, -'debug': { openDevTools: () => Promise, +const ARGS_MAP = { 'oneclient':'{"extractBundleOverrides":["bundle_path","cluster_id"],"isBundleSyncing":[],"downloadPackageFromBundle":["package","cluster_id","bundle_name","skip_compatibility"],"installUpdate":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"],"updateBundlePackages":["cluster_id"],"checkForUpdate":[],"cacheArt":["path"],"copyClusterContent":["source_id","target_id"],"refreshArt":["path"],"getVersions":[]}', 'events':'{"ingress":["event"],"process":["event"],"message":["event"]}', 'debug':'{"getOsVersion":[],"getBuildTimestamp":[],"getArch":[],"hasDevSettings":[],"isInDev":[],"getPackageVersion":[],"getType":[],"getLocale":[],"getFullDebugInfo":[],"getPlatform":[],"getFullDebugInfoParsedString":[],"getFamily":[],"getFullDebugInfoParsed":[],"getOsDistro":[],"openDevTools":[],"getGitCommitHash":[]}', 'core':'{"isClusterRunning":["cluster_id"],"getGameVersions":[],"searchPackages":["provider","query"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"openMsaLogin":[],"removePackage":["cluster_id","package_hash"],"setDefaultUser":["uuid"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"killProcess":["pid"],"getPackage":["provider","slug"],"convertUsernameUUID":["username_uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusters":[],"fetchMinecraftProfile":["uuid"],"getLogs":["id"],"getProfileOrDefault":["name"],"getRunningProcessesByClusterId":["cluster_id"],"getLinkedPackages":["cluster_id"],"getGlobalProfile":[],"refreshAccounts":[],"getPackageBody":["provider","body"],"togglePackage":["cluster_id","package_hash"],"createSettingsProfile":["name"],"getClusterById":["id"],"getWorlds":["id"],"createCluster":["options"],"installModpack":["modpack","cluster_id"],"open":["input"],"getLoadersForVersion":["mc_version"],"refreshAccount":["uuid"],"getScreenshots":["id"],"launchCluster":["id","uuid","search_for_java"],"setClusterStage":["id","stage"],"getLogByName":["id","name"],"getProcessLogTail":["id","max_lines"],"getUser":["uuid"],"writeSettings":["setting"],"fetchLoggedInProfile":["access_token"],"updateClusterProfile":["name","profile"],"removeCape":["access_token"],"readSettings":[],"updateClusterById":["id","request"],"getDefaultUser":["fallback"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getRunningProcesses":[],"getMultiplePackages":["provider","slugs"],"changeSkin":["access_token","skin_url","skin_variant"],"getUsers":[],"syncCluster":["cluster_id"],"getUsersFromAuthor":["provider","author"],"changeCape":["access_token","cape_uuid"],"removeUser":["uuid"],"setDiscordRPCMessage":["message"],"removeCluster":["id"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}' } +export type Router = { 'debug': { openDevTools: () => Promise, isInDev: () => Promise, getArch: () => Promise, getFamily: () => Promise, @@ -344,9 +342,23 @@ getFullDebugInfo: () => Promise, getFullDebugInfoParsed: () => Promise, getFullDebugInfoParsedString: () => Promise, hasDevSettings: () => Promise }, +'oneclient': { getClustersGroupedByMajor: () => Promise>, +getBundlesFor: (clusterId: number) => Promise, +getVersions: () => Promise, +extractBundleOverrides: (bundlePath: string, clusterId: number) => Promise, +checkForUpdate: () => Promise, +installUpdate: () => Promise, +downloadPackageFromBundle: (package: ModpackFileKind, clusterId: number, bundleName: string, skipCompatibility: boolean | null) => Promise, +updateBundlePackages: (clusterId: number) => Promise, +isBundleSyncing: () => Promise, +cacheArt: (path: string) => Promise, +refreshArt: (path: string) => Promise, +copyClusterContent: (sourceId: number, targetId: number) => Promise }, 'events': { ingress: (event: IngressPayload) => Promise, message: (event: MessagePayload) => Promise, process: (event: ProcessPayload) => Promise }, +'folders': { fromCluster: (folderName: string) => Promise, +openCluster: (folderName: string) => Promise }, 'core': { getClusters: () => Promise, getClusterById: (id: number) => Promise, removeCluster: (id: number) => Promise, @@ -400,19 +412,7 @@ changeCape: (accessToken: string, capeUuid: string) => Promise Promise, convertUsernameUUID: (usernameUuid: string) => Promise, setDiscordRPCMessage: (message: string) => Promise, -open: (input: string) => Promise }, -'oneclient': { getClustersGroupedByMajor: () => Promise>, -getBundlesFor: (clusterId: number) => Promise, -getVersions: () => Promise, -extractBundleOverrides: (bundlePath: string, clusterId: number) => Promise, -checkForUpdate: () => Promise, -installUpdate: () => Promise, -downloadPackageFromBundle: (package: ModpackFileKind, clusterId: number, bundleName: string, skipCompatibility: boolean | null) => Promise, -updateBundlePackages: (clusterId: number) => Promise, -isBundleSyncing: () => Promise, -cacheArt: (path: string) => Promise, -refreshArt: (path: string) => Promise, -copyClusterContent: (sourceId: number, targetId: number) => Promise } }; +open: (input: string) => Promise } }; export type { InferCommandOutput } diff --git a/apps/oneclient/frontend/src/routes/onboarding/downloading.tsx b/apps/oneclient/frontend/src/routes/onboarding/downloading.tsx index 4a426106..392c2d4e 100644 --- a/apps/oneclient/frontend/src/routes/onboarding/downloading.tsx +++ b/apps/oneclient/frontend/src/routes/onboarding/downloading.tsx @@ -100,20 +100,6 @@ function RouteComponent() { const versions = new Set(clusters.map(cluster => cluster.mc_version)); return [...versions].sort(); }, [clusters]); - const bundledManagedIdsByCluster = useMemo(() => { - const map: Map> = new Map(); - - for (const mod of mods) { - if (!isManagedMod(mod) || !mod.bundleName) - continue; - - const knownManagedIds: Set = map.get(mod.clusterId) ?? new Set(); - knownManagedIds.add(mod.id); - map.set(mod.clusterId, knownManagedIds); - } - - return map; - }, [mods]); const [processedMods, setProcessedMods] = useState(0); const [successfulMods, setSuccessfulMods] = useState(0); @@ -128,10 +114,6 @@ function RouteComponent() { const finishTimerRef = useRef(null); const percentage = currentBatchTotal > 0 ? Math.round((processedMods / currentBatchTotal) * 100) : 0; - const hasBundledDependency = useCallback((clusterId: number, dependencyProjectId: string): boolean => { - return bundledManagedIdsByCluster.get(clusterId)?.has(dependencyProjectId) ?? false; - }, [bundledManagedIdsByCluster]); - const finishOnboarding = useCallback(() => { if (isLeaving) return; @@ -185,62 +167,20 @@ function RouteComponent() { }, []); const downloadMod = async (mod: ModData): Promise => { + if (isManagedMod(mod) && mod.bundleName) { + await bindings.oneclient.downloadPackageFromBundle(mod.fileKind, mod.clusterId, mod.bundleName, true); + return; + } + if (isManagedMod(mod)) { - if (mod.dependencies.length > 0) - for (const dependency of mod.dependencies) { - const cluster = await bindings.core.getClusterById(mod.clusterId); - if (!cluster) - throw new Error(`Cluster ${mod.clusterId} not found while downloading dependency for '${mod.name}'`); - - if (dependency.dependency_type === 'required') { - const dependencyProjectId = dependency.project_id ?? ''; - if (!dependencyProjectId) - throw new Error(`Required dependency for '${mod.name}' is missing a project id`); - - const dependencySatisfiedByBundle - = mod.bundleName !== null && hasBundledDependency(cluster.id, dependencyProjectId); - - const versions = await bindings.core.getPackageVersions( - mod.provider, - dependencyProjectId, - cluster.mc_version, - cluster.mc_loader, - 0, - 1, - ); - - if (versions.items.length === 0) { - if (dependencySatisfiedByBundle) { - console.warn( - `[onboarding/downloading] Skipping dependency '${dependencyProjectId}' compatibility lookup for '${mod.name}' in cluster ${cluster.id} (MC ${cluster.mc_version}) because it is present in the selected bundle.`, - ); - continue; - } - - throw new Error(`No compatible dependency versions found for '${dependencyProjectId}' in cluster ${cluster.id}`); - } - - await bindings.core.downloadPackage( - mod.provider, - dependencyProjectId, - versions.items[0].version_id, - cluster.id, - null, - ); - } - } - - if (mod.bundleName) - await bindings.oneclient.downloadPackageFromBundle(mod.fileKind, mod.clusterId, mod.bundleName, true); - else - await bindings.core.downloadPackage(mod.provider, mod.id, mod.versionId, mod.clusterId, true); - } - else { - if (mod.bundleName) - await bindings.oneclient.downloadPackageFromBundle(mod.fileKind, mod.clusterId, mod.bundleName, true); - else - await bindings.core.downloadExternalPackage(mod.package, mod.clusterId, null, null); + await bindings.core.downloadPackage(mod.provider, mod.id, mod.versionId, mod.clusterId, true); + return; } + + if (mod.bundleName) + await bindings.oneclient.downloadPackageFromBundle(mod.fileKind, mod.clusterId, mod.bundleName, true); + else + await bindings.core.downloadExternalPackage(mod.package, mod.clusterId, null, null); }; const startDownloadBatch = async (batchMods: Array) => {