@@ -92,6 +92,7 @@ import { get_project_versions, get_version } from '@/helpers/cache.js'
9292import { profile_listener } from ' @/helpers/events.js'
9393import {
9494 add_project_from_path ,
95+ add_project_from_version ,
9596 duplicate ,
9697 edit ,
9798 get ,
@@ -351,6 +352,34 @@ async function updateProject(mod: ContentItem) {
351352 }
352353}
353354
355+ async function switchProjectVersion(mod : ContentItem , version : Labrinth .Versions .v2 .Version ) {
356+ try {
357+ await remove_project (props .instance .path , mod .file_path ! )
358+ const newPath = await add_project_from_version (props .instance .path , version .id )
359+
360+ const profile = await get (props .instance .path ).catch (handleError )
361+ if (profile ) {
362+ await installVersionDependencies (profile , version ).catch (handleError )
363+ }
364+
365+ mod .file_path = newPath
366+ if (mod .version ) {
367+ mod .version .id = version .id
368+ mod .version .version_number = version .version_number
369+ }
370+
371+ trackEvent (' InstanceProjectSwitchVersion' , {
372+ loader: props .instance .loader ,
373+ game_version: props .instance .game_version ,
374+ id: mod .project ?.id ,
375+ name: mod .project ?.title ?? mod .file_name ,
376+ project_type: mod .project_type ,
377+ })
378+ } catch (err ) {
379+ handleError (err as Error )
380+ }
381+ }
382+
354383async function handleUpdate(id : string ) {
355384 const item = projects .value .find ((p ) => p .file_name === id )
356385 if (! item ?.has_update || ! item .project ?.id || ! item .version ?.id ) return
@@ -570,9 +599,11 @@ async function handleModalUpdate(
570599 } else if (updatingProject .value ) {
571600 const mod = updatingProject .value
572601
573- mod .update_version_id = selectedVersion .id
574-
575- await updateProject (mod )
602+ if (mod .has_update && mod .update_version_id === selectedVersion .id ) {
603+ await updateProject (mod )
604+ } else {
605+ await switchProjectVersion (mod , selectedVersion )
606+ }
576607
577608 resetUpdateState ()
578609 }
0 commit comments