mirror of
https://github.com/modrinth/code.git
synced 2026-08-30 19:46:33 +00:00
* feat: base of instances v2 * feat: use old profiles with compat layer * prototype: instances v2 * fix: install_from using profile * fix: skins migration fix * fix: frontend still using profile path * fix: add update proj multiselect guard * fix: cargo fmt * fix: content missing fields * feat: break up app-lib/api/instance.rs * fix: check_content_updates mismatch * fix: updater modal cleanup w/new structure * feat: better update all handling * fix: remove preview_update_all * fix: feedback on bulk update + lint * fix: rem transitions * fix: change to jsonb * feat: app db backup after update * fix: lint * fix: sqlx prepare + use sqlx macros * fix: lint * fix: bugs * feat: defuck the installing process up * fix: bug of hell * fix: shear * fix: fmt * fix: install progress spacing + change mc/content/overrides to bytes * fix: lint * fix: prepr * fix: navtabs anim not working in app * fix: worlds.vue improvements + browse page fixes * feat: optimise queries + adapter fns * fix: lint * fix: lint * feat: shared modrinth-content-management crate (#6469) * feat: disable warnings setting * feat: add instances shortcuts (#6329) * Add modrinth://launch deep link to start a profile Support external profile launching via modrinth://launch/{profile_path} for integrations such as Stream Deck. * Change route to /launch/profile/{id} for future extensibility * fix: ensure profile path is url decoded * fix: URL-decode profile path from deep link * fix: use urlencoding crate for URL decoding * feat: implement app instance shortcuts * feat: change windows shortcut creation to use windows api instead * feat: implement creating a shortcut launching world/server * format * fmt * fix multiline inline tables * pnpm prepr * feat: move create shortcut to last item * refactor: split up shortcuts.rs for individual platforms * refactor: turn profile launch url into url type * use string literal and add safety comment * pt2 * refactor: rename anything that's profile into instance * update mac shortcut --------- Co-authored-by: DJCheesusReal <134006619+DJCheesusReal@users.noreply.github.com> --------- Co-authored-by: Truman Gao <106889354+tdgao@users.noreply.github.com> Co-authored-by: DJCheesusReal <134006619+DJCheesusReal@users.noreply.github.com>
169 lines
4.6 KiB
Vue
169 lines
4.6 KiB
Vue
<script setup>
|
|
import { BoxIcon, FolderOpenIcon, FolderSearchIcon, TrashIcon } from '@modrinth/assets'
|
|
import { ButtonStyled, injectNotificationManager, Slider, StyledInput } from '@modrinth/ui'
|
|
import { open } from '@tauri-apps/plugin-dialog'
|
|
import { ref, watch } from 'vue'
|
|
|
|
import ConfirmModalWrapper from '@/components/ui/modal/ConfirmModalWrapper.vue'
|
|
import { purge_cache_types } from '@/helpers/cache.js'
|
|
import { get, set } from '@/helpers/settings.ts'
|
|
import { showAppDbBackupsFolder } from '@/helpers/utils.js'
|
|
import { useTheming } from '@/store/state'
|
|
|
|
const { handleError } = injectNotificationManager()
|
|
const themeStore = useTheming()
|
|
const settings = ref(await get())
|
|
const purgeCacheConfirmModal = ref(null)
|
|
|
|
watch(
|
|
settings,
|
|
async () => {
|
|
const setSettings = JSON.parse(JSON.stringify(settings.value))
|
|
|
|
if (!setSettings.custom_dir) {
|
|
setSettings.custom_dir = null
|
|
}
|
|
|
|
await set(setSettings)
|
|
},
|
|
{ deep: true },
|
|
)
|
|
|
|
async function purgeCache() {
|
|
await purge_cache_types([
|
|
'project',
|
|
'project_v3',
|
|
'version',
|
|
'user',
|
|
'team',
|
|
'organization',
|
|
'file',
|
|
'loader_manifest',
|
|
'minecraft_manifest',
|
|
'categories',
|
|
'report_types',
|
|
'loaders',
|
|
'game_versions',
|
|
'donation_platforms',
|
|
'file_hash',
|
|
'file_update',
|
|
'search_results',
|
|
'search_results_v3',
|
|
]).catch(handleError)
|
|
}
|
|
|
|
function handlePurgeCacheClick() {
|
|
if (themeStore.getFeatureFlag('skip_non_essential_warnings')) {
|
|
void purgeCache()
|
|
return
|
|
}
|
|
|
|
purgeCacheConfirmModal.value?.show()
|
|
}
|
|
|
|
async function openDbBackupsFolder() {
|
|
await showAppDbBackupsFolder().catch(handleError)
|
|
}
|
|
|
|
async function findLauncherDir() {
|
|
const newDir = await open({
|
|
multiple: false,
|
|
directory: true,
|
|
title: 'Select a new app directory',
|
|
})
|
|
|
|
if (newDir) {
|
|
settings.value.custom_dir = newDir
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div class="flex flex-col gap-6">
|
|
<div class="flex flex-col gap-2.5">
|
|
<h2 class="m-0 text-lg font-semibold text-contrast">App directory</h2>
|
|
<StyledInput
|
|
id="appDir"
|
|
v-model="settings.custom_dir"
|
|
:icon="BoxIcon"
|
|
type="text"
|
|
wrapper-class="w-full"
|
|
>
|
|
<template #right>
|
|
<ButtonStyled circular>
|
|
<button class="ml-1.5" @click="findLauncherDir">
|
|
<FolderSearchIcon />
|
|
</button>
|
|
</ButtonStyled>
|
|
</template>
|
|
</StyledInput>
|
|
<p class="m-0 leading-tight text-secondary">
|
|
The directory where the launcher stores all of its files. Changes will be applied after
|
|
restarting the launcher.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="flex flex-col gap-2.5">
|
|
<ConfirmModalWrapper
|
|
ref="purgeCacheConfirmModal"
|
|
title="Are you sure you want to purge the cache?"
|
|
description="If you proceed, your entire cache will be purged. This may slow down the app temporarily."
|
|
:has-to-type="false"
|
|
proceed-label="Purge cache"
|
|
:show-ad-on-close="false"
|
|
@proceed="purgeCache"
|
|
/>
|
|
<h2 class="m-0 text-lg font-semibold text-contrast">App cache</h2>
|
|
<button id="purge-cache" class="btn min-w-max" @click="handlePurgeCacheClick">
|
|
<TrashIcon />
|
|
Purge cache
|
|
</button>
|
|
<p class="m-0 leading-tight text-secondary">
|
|
The Modrinth app stores a cache of data to speed up loading. This can be purged to force the
|
|
app to reload data. This may slow down the app temporarily.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="flex flex-col gap-2.5">
|
|
<h2 class="m-0 text-lg font-semibold text-contrast mt-4">Maximum concurrent downloads</h2>
|
|
<Slider
|
|
id="max-downloads"
|
|
v-model="settings.max_concurrent_downloads"
|
|
:min="1"
|
|
:max="10"
|
|
:step="1"
|
|
/>
|
|
<p class="m-0 leading-tight text-secondary">
|
|
The maximum amount of files the launcher can download at the same time. Set this to a lower
|
|
value if you have a poor internet connection. (app restart required to take effect)
|
|
</p>
|
|
</div>
|
|
|
|
<div class="flex flex-col gap-2.5">
|
|
<h2 class="mt-0 m-0 text-lg font-semibold text-contrast">Maximum concurrent writes</h2>
|
|
<Slider
|
|
id="max-writes"
|
|
v-model="settings.max_concurrent_writes"
|
|
:min="1"
|
|
:max="50"
|
|
:step="1"
|
|
/>
|
|
<p class="m-0 leading-tight text-secondary">
|
|
The maximum amount of files the launcher can write to the disk at once. Set this to a lower
|
|
value if you are frequently getting I/O errors. (app restart required to take effect)
|
|
</p>
|
|
</div>
|
|
|
|
<div class="flex flex-col gap-2.5">
|
|
<h2 class="mt-0 m-0 text-lg font-semibold text-contrast">App database backups</h2>
|
|
<button id="open-db-backups-folder" class="btn min-w-max" @click="openDbBackupsFolder">
|
|
<FolderOpenIcon />
|
|
Open backups folder
|
|
</button>
|
|
<p class="m-0 leading-tight text-secondary">
|
|
Backups of important app data are stored here in case you need to recover them later.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</template>
|