This commit is contained in:
pa
2026-03-19 16:58:59 +09:00
parent cb7d6b78b3
commit 4eb781eaff
4 changed files with 172 additions and 100 deletions

View File

@@ -1,29 +1,34 @@
<template>
<div class="flex flex-col gap-10 py-2">
<SettingsGroup :title="t('view.settings.advanced.advanced.vrchat_settings.header')">
<SettingsItem :label="t('view.settings.advanced.advanced.relaunch_vrchat.header')"
<SettingsItem
:label="t('view.settings.advanced.advanced.relaunch_vrchat.header')"
:description="t('view.settings.advanced.advanced.relaunch_vrchat.description')">
<Switch :model-value="relaunchVRChatAfterCrash" @update:modelValue="setRelaunchVRChatAfterCrash" />
</SettingsItem>
<SettingsItem :label="t('view.settings.advanced.advanced.vrchat_quit_fix.header')"
<SettingsItem
:label="t('view.settings.advanced.advanced.vrchat_quit_fix.header')"
:description="t('view.settings.advanced.advanced.vrchat_quit_fix.description')">
<Switch :model-value="vrcQuitFix" @update:modelValue="setVrcQuitFix" />
</SettingsItem>
<SettingsItem :label="t('view.settings.advanced.advanced.auto_cache_management.header')"
<SettingsItem
:label="t('view.settings.advanced.advanced.auto_cache_management.header')"
:description="t('view.settings.advanced.advanced.auto_cache_management.description')">
<Switch :model-value="autoSweepVRChatCache" @update:modelValue="setAutoSweepVRChatCache" />
</SettingsItem>
<SettingsItem :label="t('view.settings.advanced.advanced.self_invite.header')"
<SettingsItem
:label="t('view.settings.advanced.advanced.self_invite.header')"
:description="t('view.settings.advanced.advanced.self_invite.description')">
<Switch :model-value="selfInviteOverride" @update:modelValue="setSelfInviteOverride" />
</SettingsItem>
</SettingsGroup>
<SettingsGroup :title="t('view.settings.advanced_groups.security.header')">
<SettingsItem :label="t('view.settings.advanced.advanced.primary_password.header')"
<SettingsItem
:label="t('view.settings.advanced.advanced.primary_password.header')"
:description="t('view.settings.advanced.advanced.primary_password.description')">
<Switch
:model-value="enablePrimaryPassword"
@@ -49,7 +54,8 @@
<Switch :model-value="autoLoginDelayEnabled" @update:modelValue="setAutoLoginDelayEnabled" />
</SettingsItem>
<SettingsItem v-if="autoLoginDelayEnabled"
<SettingsItem
v-if="autoLoginDelayEnabled"
:label="t('view.settings.general.logging.auto_login_delay_button')">
<Button size="sm" variant="outline" @click="promptAutoLoginDelaySeconds">
{{ t('view.settings.general.logging.auto_login_delay_button') }}
@@ -65,7 +71,8 @@
}}</Button>
</SettingsItem>
<SettingsItem :label="t('view.settings.advanced.advanced.remote_database.enable')"
<SettingsItem
:label="t('view.settings.advanced.advanced.remote_database.enable')"
:description="t('view.settings.advanced.advanced.app_launcher.folder_tooltip')">
<Switch :model-value="enableAppLauncher" @update:modelValue="setEnableAppLauncher" />
</SettingsItem>
@@ -87,7 +94,9 @@
<SettingsGroup :title="t('view.settings.advanced.advanced.launch_commands.header')">
<SettingsItem
:label="t('view.settings.advanced.advanced.launch_commands.show_confirmation_on_switch_avatar_enable')"
:description="t('view.settings.advanced.advanced.launch_commands.show_confirmation_on_switch_avatar_tooltip')">
:description="
t('view.settings.advanced.advanced.launch_commands.show_confirmation_on_switch_avatar_tooltip')
">
<Switch
:model-value="showConfirmationOnSwitchAvatar"
@update:modelValue="setShowConfirmationOnSwitchAvatar" />
@@ -128,12 +137,30 @@
</SettingsItem>
<div class="flex flex-col gap-1 text-sm">
<span>{{ t('view.settings.advanced.advanced.cache_debug.user_cache') }} <span v-text="cacheSize.cachedUsers"></span></span>
<span>{{ t('view.settings.advanced.advanced.cache_debug.world_cache') }} <span v-text="cacheSize.cachedWorlds"></span></span>
<span>{{ t('view.settings.advanced.advanced.cache_debug.avatar_cache') }} <span v-text="cacheSize.cachedAvatars"></span></span>
<span>{{ t('view.settings.advanced.advanced.cache_debug.group_cache') }} <span v-text="cacheSize.cachedGroups"></span></span>
<span>{{ t('view.settings.advanced.advanced.cache_debug.avatar_name_cache') }} <span v-text="cacheSize.cachedAvatarNames"></span></span>
<span>{{ t('view.settings.advanced.advanced.cache_debug.instance_cache') }} <span v-text="cacheSize.cachedInstances"></span></span>
<span
>{{ t('view.settings.advanced.advanced.cache_debug.user_cache') }}
<span v-text="cacheSize.cachedUsers"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.cache_debug.world_cache') }}
<span v-text="cacheSize.cachedWorlds"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.cache_debug.avatar_cache') }}
<span v-text="cacheSize.cachedAvatars"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.cache_debug.group_cache') }}
<span v-text="cacheSize.cachedGroups"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.cache_debug.avatar_name_cache') }}
<span v-text="cacheSize.cachedAvatarNames"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.cache_debug.instance_cache') }}
<span v-text="cacheSize.cachedInstances"></span
></span>
</div>
<SettingsItem :label="t('view.settings.advanced.advanced.cache_debug.show_console')">
@@ -151,18 +178,54 @@
</SettingsItem>
<div class="flex flex-col gap-1 text-sm">
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.gps') }} <span v-text="sqliteTableSizes.gps"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.status') }} <span v-text="sqliteTableSizes.status"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.bio') }} <span v-text="sqliteTableSizes.bio"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.avatar') }} <span v-text="sqliteTableSizes.avatar"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.online_offline') }} <span v-text="sqliteTableSizes.onlineOffline"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.friend_log_history') }} <span v-text="sqliteTableSizes.friendLogHistory"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.notification') }} <span v-text="sqliteTableSizes.notification"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.location') }} <span v-text="sqliteTableSizes.location"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.join_leave') }} <span v-text="sqliteTableSizes.joinLeave"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.portal_spawn') }} <span v-text="sqliteTableSizes.portalSpawn"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.video_play') }} <span v-text="sqliteTableSizes.videoPlay"></span></span>
<span>{{ t('view.settings.advanced.advanced.sqlite_table_size.event') }} <span v-text="sqliteTableSizes.event"></span></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.gps') }}
<span v-text="sqliteTableSizes.gps"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.status') }}
<span v-text="sqliteTableSizes.status"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.bio') }}
<span v-text="sqliteTableSizes.bio"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.avatar') }}
<span v-text="sqliteTableSizes.avatar"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.online_offline') }}
<span v-text="sqliteTableSizes.onlineOffline"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.friend_log_history') }}
<span v-text="sqliteTableSizes.friendLogHistory"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.notification') }}
<span v-text="sqliteTableSizes.notification"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.location') }}
<span v-text="sqliteTableSizes.location"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.join_leave') }}
<span v-text="sqliteTableSizes.joinLeave"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.portal_spawn') }}
<span v-text="sqliteTableSizes.portalSpawn"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.video_play') }}
<span v-text="sqliteTableSizes.videoPlay"></span
></span>
<span
>{{ t('view.settings.advanced.advanced.sqlite_table_size.event') }}
<span v-text="sqliteTableSizes.event"></span
></span>
</div>
<SettingsItem
@@ -174,11 +237,21 @@
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectItem value="Off">{{ t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_off') }}</SelectItem>
<SelectItem value="30">{{ t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_30') }}</SelectItem>
<SelectItem value="90">{{ t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_90') }}</SelectItem>
<SelectItem value="180">{{ t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_180') }}</SelectItem>
<SelectItem value="365">{{ t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_365') }}</SelectItem>
<SelectItem value="Off">{{
t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_off')
}}</SelectItem>
<SelectItem value="30">{{
t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_30')
}}</SelectItem>
<SelectItem value="90">{{
t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_90')
}}</SelectItem>
<SelectItem value="180">{{
t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_180')
}}</SelectItem>
<SelectItem value="365">{{
t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_365')
}}</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
@@ -190,22 +263,35 @@
{{ t('view.settings.advanced.advanced.database_cleanup.purge') }}
</Button>
</SettingsItem>
</SettingsGroup>
<Dialog :open="isPurgeDialogVisible" @update:open="(open) => { if (!open) isPurgeDialogVisible = false; }">
<Dialog
:open="isPurgeDialogVisible"
@update:open="
(open) => {
if (!open) isPurgeDialogVisible = false;
}
">
<DialogContent class="x-dialog sm:max-w-md">
<DialogHeader>
<DialogTitle>{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_title') }}</DialogTitle>
<DialogTitle>{{
t('view.settings.advanced.advanced.database_cleanup.purge_confirm_title')
}}</DialogTitle>
</DialogHeader>
<Alert variant="warning" class="mb-3">
<TriangleAlert />
<AlertDescription>
{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_description') }}
{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_alert') }}
</AlertDescription>
</Alert>
<div class="flex flex-col gap-1 text-sm text-muted-foreground mb-3">
<p>{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_description_1') }}</p>
<p>{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_description_2') }}</p>
<p>{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_description_3') }}</p>
</div>
<SettingsItem :label="t('view.settings.advanced.advanced.database_cleanup.purge_older_than')">
<Select v-model="selectedPurgePeriod">
<SelectTrigger class="w-36">
@@ -213,10 +299,18 @@
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectItem value="180">{{ t('view.settings.advanced.advanced.database_cleanup.purge_option_180') }}</SelectItem>
<SelectItem value="365">{{ t('view.settings.advanced.advanced.database_cleanup.purge_option_365') }}</SelectItem>
<SelectItem value="730">{{ t('view.settings.advanced.advanced.database_cleanup.purge_option_730') }}</SelectItem>
<SelectItem value="all">{{ t('view.settings.advanced.advanced.database_cleanup.purge_option_all') }}</SelectItem>
<SelectItem value="180">{{
t('view.settings.advanced.advanced.database_cleanup.purge_option_180')
}}</SelectItem>
<SelectItem value="365">{{
t('view.settings.advanced.advanced.database_cleanup.purge_option_365')
}}</SelectItem>
<SelectItem value="730">{{
t('view.settings.advanced.advanced.database_cleanup.purge_option_730')
}}</SelectItem>
<SelectItem value="all">{{
t('view.settings.advanced.advanced.database_cleanup.purge_option_all')
}}</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
@@ -226,18 +320,13 @@
<Button variant="outline" size="sm" @click="isPurgeDialogVisible = false">
{{ t('confirm.cancel_button') }}
</Button>
<Button
size="sm"
variant="destructive"
:disabled="purgeInProgress"
@click="handlePurge">
<Button size="sm" variant="destructive" :disabled="purgeInProgress" @click="handlePurge">
<Trash2 class="h-4 w-4 mr-1" />
{{ t('view.settings.advanced.advanced.database_cleanup.purge_confirm_button') }}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
<SettingsGroup :title="t('view.settings.advanced_groups.diagnostics.header')">
<SettingsGroup :title="t('view.profile.game_info.header')">
@@ -283,7 +372,8 @@
<template v-if="branch === 'Nightly'">
<SettingsGroup :title="t('view.settings.advanced_groups.nightly.header')">
<SettingsItem :label="t('view.settings.advanced.advanced.anonymous_error_reporting.header')"
<SettingsItem
:label="t('view.settings.advanced.advanced.anonymous_error_reporting.header')"
:description="t('view.settings.advanced.advanced.anonymous_error_reporting.description')">
<Switch :model-value="sentryErrorReporting" @update:modelValue="setSentryErrorReporting()" />
</SettingsItem>
@@ -296,7 +386,7 @@
</template>
<script setup>
import { RefreshCcw, Trash2,TriangleAlert } from 'lucide-vue-next';
import { RefreshCcw, Trash2, TriangleAlert } from 'lucide-vue-next';
import { computed, reactive, ref } from 'vue';
import { Button } from '@/components/ui/button';
import { Switch } from '@/components/ui/switch';
@@ -412,10 +502,7 @@
const isLinux = computed(() => LINUX);
function handlePurge() {
const days =
selectedPurgePeriod.value === 'all'
? null
: parseInt(selectedPurgePeriod.value, 10);
const days = selectedPurgePeriod.value === 'all' ? null : parseInt(selectedPurgePeriod.value, 10);
isPurgeDialogVisible.value = false;
purgeAvatarFeedData(days);
}