Skip to content

Commit

Permalink
Fix options page
Browse files Browse the repository at this point in the history
  • Loading branch information
Geometrically committed Jul 20, 2024
1 parent f4f10ba commit fb7609d
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 69 deletions.
4 changes: 4 additions & 0 deletions apps/app-frontend/src/components/ui/JavaSelector.vue
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,10 @@ async function reinstallJava() {
align-items: center;
gap: 0.5rem;
margin: 0;
.btn {
width: max-content;
}
}
.test-success {
Expand Down
4 changes: 2 additions & 2 deletions apps/app-frontend/src/helpers/jre.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ export async function get_java_versions() {
return await invoke('plugin:jre|get_java_versions')
}

export async function set_java_version(version) {
return await invoke('plugin:jre|set_java_version', { version })
export async function set_java_version(javaVersion) {
return await invoke('plugin:jre|set_java_version', { javaVersion })
}

// Finds all the installation of Java 7, if it exists
Expand Down
38 changes: 25 additions & 13 deletions apps/app-frontend/src/pages/Settings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { LogOutIcon, LogInIcon, BoxIcon, FolderSearchIcon, UpdatedIcon } from '@
import { Card, Slider, DropdownSelect, Toggle, Modal, Button } from '@modrinth/ui'
import { handleError, useTheming } from '@/store/state'
import { is_dir_writeable, change_config_dir, get, set } from '@/helpers/settings'
import { get_max_memory } from '@/helpers/jre'
import { get_java_versions, get_max_memory, set_java_version } from '@/helpers/jre'
import { get as getCreds, logout } from '@/helpers/mr_auth.js'
import JavaSelector from '@/components/ui/JavaSelector.vue'
import ModrinthLoginScreen from '@/components/ui/tutorial/ModrinthLoginScreen.vue'
Expand Down Expand Up @@ -84,6 +84,19 @@ watch(
{ deep: true },
)
const javaVersions = ref(await get_java_versions().catch(handleError))
async function updateJavaVersion(version) {
if (version?.path === '') {
version.path = undefined
}
if (version?.path) {
version.path = version.path.replace('java.exe', 'javaw.exe')
}
await set_java_version(version).catch(handleError)
}
const credentials = ref(await getCreds().catch(handleError))
const loginScreenModal = ref()
Expand Down Expand Up @@ -368,18 +381,17 @@ async function signInAfter() {
<span class="label__title size-card-header">Java settings</span>
</h3>
</div>
<!-- <label for="java-21">-->
<!-- <span class="label__title">Java 21 location</span>-->
<!-- </label>-->
<!-- <JavaSelector id="java-17" v-model="settings.java_globals.JAVA_21" :version="21" />-->
<!-- <label for="java-17">-->
<!-- <span class="label__title">Java 17 location</span>-->
<!-- </label>-->
<!-- <JavaSelector id="java-17" v-model="settings.java_globals.JAVA_17" :version="17" />-->
<!-- <label for="java-8">-->
<!-- <span class="label__title">Java 8 location</span>-->
<!-- </label>-->
<!-- <JavaSelector id="java-8" v-model="settings.java_globals.JAVA_8" :version="8" />-->
<template v-for="version in [21, 17, 8]">
<label :for="'java-' + version">
<span class="label__title">Java {{ version }} location</span>
</label>
<JavaSelector
:id="'java-selector-' + version"
v-model="javaVersions[version]"
:version="version"
@update:model-value="updateJavaVersion"
/>
</template>
<hr class="card-divider" />
<label for="java-args">
<span class="label__title">Java arguments</span>
Expand Down
9 changes: 6 additions & 3 deletions apps/app-frontend/src/pages/instance/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ import { mixpanel_track } from '@/helpers/mixpanel'
import { convertFileSrc } from '@tauri-apps/api/tauri'
import { useFetch } from '@/helpers/fetch'
import { handleSevereError } from '@/store/error.js'
import { get_project, get_version_many } from '@/helpers/cache.js'
import dayjs from 'dayjs'
const route = useRoute()
Expand Down Expand Up @@ -204,9 +206,10 @@ const checkProcess = async () => {
// Get information on associated modrinth versions, if any
const modrinthVersions = ref([])
if (!offline.value && instance.value.linked_data && instance.value.linked_data.project_id) {
modrinthVersions.value = await useFetch(
`https://api.modrinth.com/v2/project/${instance.value.linked_data.project_id}/version`,
'project',
const project = await get_project(instance.value.linked_data.project_id).catch(handleError)
modrinthVersions.value = (await get_version_many(project.versions).catch(handleError)).sort(
(a, b) => dayjs(b.date_published) - dayjs(a.date_published),
)
}
Expand Down
88 changes: 39 additions & 49 deletions apps/app-frontend/src/pages/instance/Options.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<XIcon />
Cancel
</button>
<button class="btn btn-danger" :disabled="action_disabled" @click="unlockProfile">
<button class="btn btn-danger" @click="unlockProfile">
<LockIcon />
Unlock
</button>
Expand All @@ -50,7 +50,7 @@
<XIcon />
Cancel
</button>
<button class="btn btn-danger" :disabled="action_disabled" @click="unpairProfile">
<button class="btn btn-danger" @click="unpairProfile">
<XIcon />
Unpair
</button>
Expand Down Expand Up @@ -117,21 +117,13 @@
<span class="label__title">Icon</span>
</label>
<div class="input-group">
<Avatar
:src="!icon || (icon && icon.startsWith('http')) ? icon : convertFileSrc(icon)"
size="md"
class="project__icon"
/>
<Avatar :src="icon ? convertFileSrc(icon) : icon" size="md" class="project__icon" />
<div class="input-stack">
<button id="instance-icon" class="btn" @click="setIcon">
<UploadIcon />
Select icon
</button>
<button
:disabled="!(!icon || (icon && icon.startsWith('http')) ? icon : convertFileSrc(icon))"
class="btn"
@click="resetIcon"
>
<button :disabled="!icon" class="btn" @click="resetIcon">
<TrashIcon />
Remove icon
</button>
Expand Down Expand Up @@ -412,7 +404,7 @@
</Button>
</div>
<div v-if="props.instance.linked_data.project_id" class="adjacent-input">
<div v-if="instance.linked_data.project_id" class="adjacent-input">
<label for="change-modpack-version">
<span class="label__title">Change modpack version</span>
<span class="label__description">
Expand Down Expand Up @@ -586,7 +578,7 @@ const groups = ref(props.instance.groups)
const modpackVersionModal = ref(null)
const instancesList = Object.values(await list(true))
const instancesList = Object.values(await list())
const availableGroups = ref([
...new Set(
instancesList.reduce((acc, obj) => {
Expand Down Expand Up @@ -625,18 +617,18 @@ const globalSettings = await get().catch(handleError)
const modalConfirmUnlock = ref(null)
const modalConfirmUnpair = ref(null)
const javaSettings = props.instance.java ?? {}
const overrideJavaInstall = ref(!!javaSettings.override_version)
const overrideJavaInstall = ref(!!props.instance.java_path)
const optimalJava = readonly(await get_optimal_jre_key(props.instance.path).catch(handleError))
const javaInstall = ref(optimalJava ?? javaSettings.override_version ?? { path: '', version: '' })
const javaInstall = ref({ path: optimalJava.path ?? props.instance.java_path })
const overrideJavaArgs = ref(!!javaSettings.extra_arguments)
const javaArgs = ref((javaSettings.extra_arguments ?? globalSettings.custom_java_args).join(' '))
const overrideJavaArgs = ref(!!props.instance.extra_launch_args)
const javaArgs = ref(
(props.instance.extra_launch_args ?? globalSettings.extra_launch_args).join(' '),
)
const overrideEnvVars = ref(!!javaSettings.custom_env_args)
const overrideEnvVars = ref(!!props.instance.custom_env_vars)
const envVars = ref(
(javaSettings.custom_env_args ?? globalSettings.custom_env_args)
(props.instance.custom_env_vars ?? globalSettings.custom_env_vars)
.map((x) => x.join('='))
.join(' '),
)
Expand All @@ -645,12 +637,16 @@ const overrideMemorySettings = ref(!!props.instance.memory)
const memory = ref(props.instance.memory ?? globalSettings.memory)
const maxMemory = Math.floor((await get_max_memory().catch(handleError)) / 1024)
const overrideWindowSettings = ref(!!props.instance.resolution || !!props.instance.fullscreen)
const resolution = ref(props.instance.resolution ?? globalSettings.game_resolution)
const overrideHooks = ref(!!props.instance.hooks)
const overrideWindowSettings = ref(
!!props.instance.game_resolution || !!props.instance.force_fullscreen,
)
const resolution = ref(props.instance.game_resolution ?? globalSettings.game_resolution)
const overrideHooks = ref(
props.instance.hooks.pre_launch || props.instance.hooks.wrapper || props.instance.hooks.post_exit,
)
const hooks = ref(props.instance.hooks ?? globalSettings.hooks)
const fullscreenSetting = ref(!!props.instance.fullscreen)
const fullscreenSetting = ref(!!props.instance.force_fullscreen)
const unlinkModpack = ref(false)
Expand Down Expand Up @@ -699,34 +695,29 @@ const getLocalVersion = (path) => {
const editProfileObject = computed(() => {
const editProfile = {
metadata: {
name: title.value.trim().substring(0, 32) ?? 'Instance',
groups: groups.value.map((x) => x.trim().substring(0, 32)).filter((x) => x.length > 0),
loader_version: props.instance.loader_version,
linked_data: props.instance.linked_data,
},
name: title.value.trim().substring(0, 32) ?? 'Instance',
groups: groups.value.map((x) => x.trim().substring(0, 32)).filter((x) => x.length > 0),
loader_version: props.instance.loader_version,
linked_data: props.instance.linked_data,
java: {},
hooks: {},
}
if (overrideJavaInstall.value) {
if (javaInstall.value.path !== '') {
editProfile.java.override_version = javaInstall.value
editProfile.java.override_version.path = editProfile.java.override_version.path.replace(
'java.exe',
'javaw.exe',
)
editProfile.java_path = javaInstall.value.path.replace('java.exe', 'javaw.exe')
}
}
if (overrideJavaArgs.value) {
if (javaArgs.value !== '') {
editProfile.java.extra_arguments = javaArgs.value.trim().split(/\s+/).filter(Boolean)
editProfile.extra_launch_args = javaArgs.value.trim().split(/\s+/).filter(Boolean)
}
}
if (overrideEnvVars.value) {
if (envVars.value !== '') {
editProfile.java.custom_env_args = envVars.value
editProfile.custom_env_vars = envVars.value
.trim()
.split(/\s+/)
.filter(Boolean)
Expand All @@ -739,10 +730,10 @@ const editProfileObject = computed(() => {
}
if (overrideWindowSettings.value) {
editProfile.fullscreen = fullscreenSetting.value
editProfile.force_fullscreen = fullscreenSetting.value
if (!fullscreenSetting.value) {
editProfile.resolution = resolution.value
editProfile.game_resolution = resolution.value
}
}
Expand Down Expand Up @@ -889,7 +880,7 @@ const selectableLoaderVersions = computed(() => {
return []
})
const loaderVersionIndex = ref(
selectableLoaderVersions.value.findIndex((x) => x.id === props.instance.loader_version?.id),
selectableLoaderVersions.value.findIndex((x) => x.id === props.instance.loader_version),
)
const isValid = computed(() => {
Expand All @@ -901,10 +892,9 @@ const isValid = computed(() => {
const isChanged = computed(() => {
return (
loader.value != props.instance.metadata.loader ||
gameVersion.value != props.instance.metadata.game_version ||
JSON.stringify(selectableLoaderVersions.value[loaderVersionIndex.value]) !==
JSON.stringify(props.instance.metadata.loader_version)
loader.value !== props.instance.loader ||
gameVersion.value !== props.instance.game_version ||
selectableLoaderVersions.value[loaderVersionIndex.value].id !== props.instance.loader_version
)
})
Expand All @@ -915,11 +905,11 @@ async function saveGvLoaderEdits() {
editing.value = true
let editProfile = editProfileObject.value
editProfile.metadata.loader = loader.value
editProfile.metadata.game_version = gameVersion.value
editProfile.loader = loader.value
editProfile.game_version = gameVersion.value
if (loader.value !== 'vanilla') {
editProfile.metadata.loader_version = selectableLoaderVersions.value[loaderVersionIndex.value]
editProfile.loader_version = selectableLoaderVersions.value[loaderVersionIndex.value].id
}
await edit(props.instance.path, editProfile).catch(handleError)
await repairProfile(false)
Expand Down
3 changes: 3 additions & 0 deletions apps/app/src/api/profile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,9 @@ pub async fn profile_edit(path: &str, edit_profile: EditProfile) -> Result<()> {

prof.modified = chrono::Utc::now();

prof.custom_env_vars.clone_from(&edit_profile.custom_env_vars);
prof.extra_launch_args.clone_from(&edit_profile.extra_launch_args);

async { Ok(()) }
})
.await?;
Expand Down
2 changes: 0 additions & 2 deletions packages/app-lib/src/state/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,6 @@ mod mr_auth;
pub use self::mr_auth::*;

// TODO: Cache home page queries?
// TODO: UI: Profile Options
// TODO: UI: Settings Java Versions
// TODO: pass credentials to modrinth cdn

// Global state
Expand Down

0 comments on commit fb7609d

Please sign in to comment.