* fixes

* prettier

* more bugs

* changes

* more fixes

* prettier, fmt, clippy

* fix regressed error

* println, console.log

* fix imports

---------

Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
Co-authored-by: Jai A <jaiagr+gpg@pm.me>
This commit is contained in:
Wyatt Verchere
2023-08-04 20:33:50 -07:00
committed by GitHub
parent 6a76811bed
commit a35dd67b77
27 changed files with 357 additions and 100 deletions

View File

@@ -12,7 +12,7 @@
<UploadIcon />
Select icon
</Button>
<Button @click="reset_icon">
<Button :disabled="!display_icon" @click="reset_icon">
<XIcon />
Remove icon
</Button>
@@ -73,7 +73,7 @@
<CodeIcon />
{{ showAdvanced ? 'Hide advanced' : 'Show advanced' }}
</Button>
<Button @click="$refs.modal.hide()">
<Button @click="hide()">
<XIcon />
Cancel
</Button>
@@ -202,7 +202,7 @@ import {
FolderSearchIcon,
UpdatedIcon,
} from 'omorphia'
import { computed, ref, shallowRef } from 'vue'
import { computed, onUnmounted, ref, shallowRef } from 'vue'
import { get_loaders } from '@/helpers/tags'
import { create } from '@/helpers/profile'
import { open } from '@tauri-apps/api/dialog'
@@ -219,7 +219,11 @@ import { mixpanel_track } from '@/helpers/mixpanel'
import { useTheming } from '@/store/state.js'
import { listen } from '@tauri-apps/api/event'
import { install_from_file } from '@/helpers/pack.js'
import { get_importable_instances, import_instance } from '@/helpers/import.js'
import {
get_default_launcher_path,
get_importable_instances,
import_instance,
} from '@/helpers/import.js'
const themeStore = useTheming()
@@ -234,9 +238,10 @@ const showAdvanced = ref(false)
const creating = ref(false)
const showSnapshots = ref(false)
const creationType = ref('from file')
const isShowing = ref(false)
defineExpose({
show: () => {
show: async () => {
game_version.value = ''
specified_loader_version.value = ''
profile_name.value = ''
@@ -247,12 +252,42 @@ defineExpose({
loader_version.value = 'stable'
icon.value = null
display_icon.value = null
isShowing.value = true
modal.value.show()
unlistener.value = await listen('tauri://file-drop', async (event) => {
// Only if modal is showing
if (!isShowing.value) return
if (creationType.value !== 'from file') return
hide()
if (event.payload && event.payload.length > 0 && event.payload[0].endsWith('.mrpack')) {
await install_from_file(event.payload[0]).catch(handleError)
mixpanel_track('InstanceCreate', {
source: 'CreationModalFileDrop',
})
}
})
mixpanel_track('InstanceCreateStart', { source: 'CreationModal' })
},
})
const unlistener = ref(null)
const hide = () => {
isShowing.value = false
modal.value.hide()
if (unlistener.value) {
unlistener.value()
unlistener.value = null
}
}
onUnmounted(() => {
if (unlistener.value) {
unlistener.value()
unlistener.value = null
}
})
const [fabric_versions, forge_versions, quilt_versions, all_game_versions, loaders] =
await Promise.all([
get_fabric_versions().then(shallowRef).catch(handleError),
@@ -303,7 +338,7 @@ const create_instance = async () => {
loader_version.value === 'other' ? specified_loader_version.value : loader_version.value
const loaderVersion = loader.value === 'vanilla' ? null : loader_version_value ?? 'stable'
modal.value.hide()
hide()
creating.value = false
await create(
@@ -366,8 +401,7 @@ const toggle_advanced = () => {
const openFile = async () => {
const newProject = await open({ multiple: false })
if (!newProject) return
modal.value.hide()
hide()
await install_from_file(newProject).catch(handleError)
mixpanel_track('InstanceCreate', {
@@ -375,16 +409,6 @@ const openFile = async () => {
})
}
listen('tauri://file-drop', async (event) => {
modal.value.hide()
if (event.payload && event.payload.length > 0 && event.payload[0].endsWith('.mrpack')) {
await install_from_file(event.payload[0]).catch(handleError)
mixpanel_track('InstanceCreate', {
source: 'CreationModalFileDrop',
})
}
})
const profiles = ref(
new Map([
['MultiMC', []],
@@ -406,6 +430,27 @@ const profileOptions = ref([
{ name: 'PrismLauncher', path: '' },
])
// Attempt to get import profiles on default paths
const promises = profileOptions.value.map(async (option) => {
const path = await get_default_launcher_path(option.name).catch(handleError)
if (!path || path === '') return
// Try catch to allow failure and simply ignore default path attempt
try {
const instances = await get_importable_instances(option.name, path)
if (!instances) return
profileOptions.value.find((profile) => profile.name === option.name).path = path
profiles.value.set(
option.name,
instances.map((name) => ({ name, selected: false }))
)
} catch (error) {
// Allow failure silently
}
})
await Promise.all(promises)
const selectLauncherPath = async () => {
selectedProfileType.value.path = await open({ multiple: false, directory: true })
@@ -419,10 +464,14 @@ const reload = async () => {
selectedProfileType.value.name,
selectedProfileType.value.path
).catch(handleError)
profiles.value.set(
selectedProfileType.value.name,
instances.map((name) => ({ name, selected: false }))
)
if (instances) {
profiles.value.set(
selectedProfileType.value.name,
instances.map((name) => ({ name, selected: false }))
)
} else {
profiles.value.set(selectedProfileType.value.name, [])
}
}
const setPath = () => {

View File

@@ -99,6 +99,8 @@ function setJavaInstall(javaInstall) {
align-items: center;
justify-content: center;
}
padding: 0.5rem;
}
}

View File

@@ -65,7 +65,6 @@ const profiles = ref([])
async function install(instance) {
instance.installing = true
console.log(versions.value)
const version = versions.value.find((v) => {
return (
v.game_versions.includes(instance.metadata.game_version) &&
@@ -264,7 +263,7 @@ const check_valid = computed(() => {
<UploadIcon />
<span class="no-wrap"> Select icon </span>
</Button>
<Button @click="reset_icon()">
<Button :disabled="!display_icon" @click="reset_icon()">
<XIcon />
<span class="no-wrap"> Remove icon </span>
</Button>

View File

@@ -10,7 +10,11 @@ import {
UpdatedIcon,
} from 'omorphia'
import { ref } from 'vue'
import { get_importable_instances, import_instance } from '@/helpers/import.js'
import {
get_default_launcher_path,
get_importable_instances,
import_instance,
} from '@/helpers/import.js'
import { open } from '@tauri-apps/api/dialog'
import { handleError } from '@/store/state.js'
@@ -46,6 +50,27 @@ const profileOptions = ref([
{ name: 'PrismLauncher', path: '' },
])
// Attempt to get import profiles on default paths
const promises = profileOptions.value.map(async (option) => {
const path = await get_default_launcher_path(option.name).catch(handleError)
if (!path || path === '') return
// Try catch to allow failure and simply ignore default path attempt
try {
const instances = await get_importable_instances(option.name, path)
if (!instances) return
profileOptions.value.find((profile) => profile.name === option.name).path = path
profiles.value.set(
option.name,
instances.map((name) => ({ name, selected: false }))
)
} catch (error) {
// Allow failure silently
}
})
Promise.all(promises)
const selectLauncherPath = async () => {
selectedProfileType.value.path = await open({ multiple: false, directory: true })