mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-22 08:13:52 +02:00
refactor: reorganize settings tabs
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.vrcx_settings.header')">
|
||||
<SettingsGroup :title="t('view.settings.advanced_groups.security.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.primary_password.header')"
|
||||
:description="t('view.settings.advanced.advanced.primary_password.description')">
|
||||
<Switch
|
||||
@@ -30,13 +30,6 @@
|
||||
:disabled="!enablePrimaryPassword"
|
||||
@update:modelValue="enablePrimaryPasswordChange" />
|
||||
</SettingsItem>
|
||||
|
||||
<template v-if="branch === 'Nightly'">
|
||||
<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>
|
||||
</template>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.general.logging.header')">
|
||||
@@ -64,36 +57,6 @@
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.profile.game_info.header')">
|
||||
<div class="px-1 py-1">
|
||||
<div class="flex-1 cursor-pointer" @click="getVisits">
|
||||
<span class="block truncate font-medium text-sm leading-[18px]">{{
|
||||
t('view.profile.game_info.online_users')
|
||||
}}</span>
|
||||
<span v-if="visits" class="block truncate text-xs text-muted-foreground">{{
|
||||
t('view.profile.game_info.user_online', { count: visits })
|
||||
}}</span>
|
||||
<span v-else class="block truncate text-xs text-muted-foreground">{{
|
||||
t('view.profile.game_info.refresh')
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.remote_database.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.remote_database.enable')">
|
||||
<Switch
|
||||
:model-value="avatarRemoteDatabase"
|
||||
@update:modelValue="setAvatarRemoteDatabase(!avatarRemoteDatabase)" />
|
||||
</SettingsItem>
|
||||
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.remote_database.avatar_database_provider')">
|
||||
<Button size="sm" variant="outline" @click="showAvatarProviderDialog">{{
|
||||
t('view.settings.advanced.advanced.remote_database.avatar_database_provider')
|
||||
}}</Button>
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<template v-if="!isLinux">
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.app_launcher.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.app_launcher.folder')">
|
||||
@@ -121,50 +84,6 @@
|
||||
</SettingsGroup>
|
||||
</template>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.youtube_api.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.youtube_api.enable')"
|
||||
:description="t('view.settings.advanced.advanced.youtube_api.enable_tooltip')">
|
||||
<Switch :model-value="youTubeApi" @update:modelValue="changeYouTubeApi('VRCX_youtubeAPI')" />
|
||||
</SettingsItem>
|
||||
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.youtube_api.youtube_api_key')">
|
||||
<Button size="sm" variant="outline" @click="showYouTubeApiDialog">{{
|
||||
t('view.settings.advanced.advanced.youtube_api.youtube_api_key')
|
||||
}}</Button>
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.translation_api.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.translation_api.enable')"
|
||||
:description="t('view.settings.advanced.advanced.translation_api.enable_tooltip')">
|
||||
<Switch :model-value="translationApi" @update:modelValue="changeTranslationAPI('VRCX_translationAPI')" />
|
||||
</SettingsItem>
|
||||
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.translation_api.translation_api_key')">
|
||||
<Button size="sm" variant="outline" @click="showTranslationApiDialog">
|
||||
<Languages class="h-4 w-4 mr-1.5" />
|
||||
{{ t('view.settings.advanced.advanced.translation_api.translation_api_key') }}
|
||||
</Button>
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.video_progress_pie.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.video_progress_pie.enable')"
|
||||
:description="t('view.settings.advanced.advanced.video_progress_pie.enable_tooltip')">
|
||||
<Switch
|
||||
:model-value="progressPie"
|
||||
:disabled="!openVR"
|
||||
@update:modelValue="changeYouTubeApi('VRCX_progressPie')" />
|
||||
</SettingsItem>
|
||||
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.video_progress_pie.dance_world_only')">
|
||||
<Switch
|
||||
:model-value="progressPieFilter"
|
||||
:disabled="!openVR"
|
||||
@update:modelValue="changeYouTubeApi('VRCX_progressPieFilter')" />
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<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')"
|
||||
@@ -224,7 +143,7 @@
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.sqlite_table_size.header')">
|
||||
<SettingsGroup :title="t('view.settings.advanced_groups.database.header')">
|
||||
<SettingsItem :label="t('view.settings.advanced.advanced.sqlite_table_size.refresh')">
|
||||
<Button size="sm" variant="outline" @click="getSqliteTableSizes">{{
|
||||
t('view.settings.advanced.advanced.sqlite_table_size.refresh')
|
||||
@@ -245,9 +164,7 @@
|
||||
<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>
|
||||
</SettingsGroup>
|
||||
|
||||
<SettingsGroup :title="t('view.settings.advanced.advanced.database_cleanup.header')">
|
||||
<SettingsItem
|
||||
:label="t('view.settings.advanced.advanced.database_cleanup.auto_cleanup')"
|
||||
:description="t('view.settings.advanced.advanced.database_cleanup.auto_cleanup_description')">
|
||||
@@ -320,41 +237,64 @@
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
|
||||
<SettingsGroup :title="t('view.profile.config_json')">
|
||||
<SettingsGroup :title="t('view.settings.advanced_groups.diagnostics.header')">
|
||||
<SettingsGroup :title="t('view.profile.game_info.header')">
|
||||
<div class="px-1 py-1">
|
||||
<div class="flex-1 cursor-pointer" @click="getVisits">
|
||||
<span class="block truncate font-medium text-sm leading-[18px]">{{
|
||||
t('view.profile.game_info.online_users')
|
||||
}}</span>
|
||||
<span v-if="visits" class="block truncate text-xs text-muted-foreground">{{
|
||||
t('view.profile.game_info.user_online', { count: visits })
|
||||
}}</span>
|
||||
<span v-else class="block truncate text-xs text-muted-foreground">{{
|
||||
t('view.profile.game_info.refresh')
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</SettingsGroup>
|
||||
|
||||
<div class="flex items-center gap-2">
|
||||
<TooltipWrapper side="top" :content="t('view.profile.refresh_tooltip')">
|
||||
<Button class="rounded-full" size="icon-sm" variant="outline" @click="refreshConfigTreeData()">
|
||||
<RefreshCcw />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper side="top" :content="t('view.profile.clear_results_tooltip')">
|
||||
<Button class="rounded-full" size="icon-sm" variant="outline" @click="configTreeData = {}">
|
||||
<Trash2 />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
<vue-json-pretty
|
||||
v-if="Object.keys(configTreeData).length > 0"
|
||||
:data="configTreeData"
|
||||
:deep="2"
|
||||
:theme="isDarkMode ? 'dark' : 'light'"
|
||||
:height="800"
|
||||
:dynamic-height="false"
|
||||
virtual
|
||||
show-icon />
|
||||
<SettingsGroup :title="t('view.profile.config_json')">
|
||||
<div class="flex items-center gap-2">
|
||||
<TooltipWrapper side="top" :content="t('view.profile.refresh_tooltip')">
|
||||
<Button class="rounded-full" size="icon-sm" variant="outline" @click="refreshConfigTreeData()">
|
||||
<RefreshCcw />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper side="top" :content="t('view.profile.clear_results_tooltip')">
|
||||
<Button class="rounded-full" size="icon-sm" variant="outline" @click="configTreeData = {}">
|
||||
<Trash2 />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
<vue-json-pretty
|
||||
v-if="Object.keys(configTreeData).length > 0"
|
||||
:data="configTreeData"
|
||||
:deep="2"
|
||||
:theme="isDarkMode ? 'dark' : 'light'"
|
||||
:height="800"
|
||||
:dynamic-height="false"
|
||||
virtual
|
||||
show-icon />
|
||||
</SettingsGroup>
|
||||
</SettingsGroup>
|
||||
|
||||
<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')"
|
||||
:description="t('view.settings.advanced.advanced.anonymous_error_reporting.description')">
|
||||
<Switch :model-value="sentryErrorReporting" @update:modelValue="setSentryErrorReporting()" />
|
||||
</SettingsItem>
|
||||
</SettingsGroup>
|
||||
</template>
|
||||
|
||||
<RegistryBackupDialog />
|
||||
<YouTubeApiDialog v-model:isYouTubeApiDialogVisible="isYouTubeApiDialogVisible" />
|
||||
<TranslationApiDialog v-model:isTranslationApiDialogVisible="isTranslationApiDialogVisible" />
|
||||
<AvatarProviderDialog v-model:isAvatarProviderDialogVisible="isAvatarProviderDialogVisible" />
|
||||
<PhotonSettings v-if="photonLoggingEnabled" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Languages, 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';
|
||||
@@ -370,17 +310,14 @@
|
||||
useAdvancedSettingsStore,
|
||||
useAppearanceSettingsStore,
|
||||
useAuthStore,
|
||||
useAvatarProviderStore,
|
||||
useAvatarStore,
|
||||
useGeneralSettingsStore,
|
||||
useGroupStore,
|
||||
useInstanceStore,
|
||||
useNotificationsSettingsStore,
|
||||
usePhotonStore,
|
||||
useUiStore,
|
||||
useUserStore,
|
||||
useVRCXUpdaterStore,
|
||||
useVrStore,
|
||||
useWorldStore
|
||||
} from '@/stores';
|
||||
import { authRequest, queryRequest } from '@/api';
|
||||
@@ -388,19 +325,15 @@
|
||||
import { clearVRCXCache } from '@/coordinators/vrcxCoordinator';
|
||||
import { openExternalLink } from '@/shared/utils';
|
||||
|
||||
import AvatarProviderDialog from '../../dialogs/AvatarProviderDialog.vue';
|
||||
import PhotonSettings from '../PhotonSettings.vue';
|
||||
import RegistryBackupDialog from '../../../Tools/dialogs/RegistryBackupDialog.vue';
|
||||
import TranslationApiDialog from '../../dialogs/TranslationApiDialog.vue';
|
||||
import YouTubeApiDialog from '../../dialogs/YouTubeApiDialog.vue';
|
||||
import SettingsGroup from '../SettingsGroup.vue';
|
||||
import SettingsItem from '../SettingsItem.vue';
|
||||
import { TooltipWrapper } from '@/components/ui/tooltip';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const advancedSettingsStore = useAdvancedSettingsStore();
|
||||
const notificationsSettingsStore = useNotificationsSettingsStore();
|
||||
const { updateVRLastLocation, updateOpenVR } = useVrStore();
|
||||
const { enablePrimaryPasswordChange } = useAuthStore();
|
||||
const { cachedConfig } = storeToRefs(useAuthStore());
|
||||
const { showConsole } = useUiStore();
|
||||
@@ -424,7 +357,6 @@
|
||||
|
||||
const { photonLoggingEnabled } = storeToRefs(usePhotonStore());
|
||||
const { branch } = storeToRefs(useVRCXUpdaterStore());
|
||||
const { openVR } = storeToRefs(notificationsSettingsStore);
|
||||
|
||||
const { isDarkMode } = storeToRefs(useAppearanceSettingsStore());
|
||||
|
||||
@@ -434,14 +366,9 @@
|
||||
vrcQuitFix,
|
||||
autoSweepVRChatCache,
|
||||
selfInviteOverride,
|
||||
avatarRemoteDatabase,
|
||||
enableAppLauncher,
|
||||
enableAppLauncherAutoClose,
|
||||
enableAppLauncherRunProcessOnce,
|
||||
youTubeApi,
|
||||
translationApi,
|
||||
progressPie,
|
||||
progressPieFilter,
|
||||
showConfirmationOnSwitchAvatar,
|
||||
gameLogDisabled,
|
||||
sqliteTableSizes,
|
||||
@@ -455,7 +382,6 @@
|
||||
setVrcQuitFix,
|
||||
setAutoSweepVRChatCache,
|
||||
setSelfInviteOverride,
|
||||
setAvatarRemoteDatabase,
|
||||
setEnableAppLauncher,
|
||||
setEnableAppLauncherAutoClose,
|
||||
setEnableAppLauncherRunProcessOnce,
|
||||
@@ -463,16 +389,10 @@
|
||||
getSqliteTableSizes,
|
||||
setAvatarAutoCleanup,
|
||||
purgeAvatarFeedData,
|
||||
showVRChatConfig,
|
||||
promptAutoClearVRCXCacheFrequency,
|
||||
setSentryErrorReporting
|
||||
} = advancedSettingsStore;
|
||||
|
||||
const { isAvatarProviderDialogVisible } = storeToRefs(useAvatarProviderStore());
|
||||
const { showAvatarProviderDialog } = useAvatarProviderStore();
|
||||
|
||||
const isYouTubeApiDialogVisible = ref(false);
|
||||
const isTranslationApiDialogVisible = ref(false);
|
||||
const configTreeData = ref({});
|
||||
const visits = ref(0);
|
||||
const selectedPurgePeriod = ref('180');
|
||||
@@ -505,20 +425,6 @@
|
||||
AppApi.OpenShortcutFolder();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function showYouTubeApiDialog() {
|
||||
isYouTubeApiDialogVisible.value = true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function showTranslationApiDialog() {
|
||||
isTranslationApiDialogVisible.value = true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -531,32 +437,6 @@
|
||||
cacheSize.cachedInstances = cachedInstances.size;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param configKey
|
||||
*/
|
||||
async function changeYouTubeApi(configKey = '') {
|
||||
if (configKey === 'VRCX_youtubeAPI') {
|
||||
advancedSettingsStore.setYouTubeApi();
|
||||
} else if (configKey === 'VRCX_progressPie') {
|
||||
advancedSettingsStore.setProgressPie();
|
||||
} else if (configKey === 'VRCX_progressPieFilter') {
|
||||
advancedSettingsStore.setProgressPieFilter();
|
||||
}
|
||||
updateVRLastLocation();
|
||||
updateOpenVR();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param configKey
|
||||
*/
|
||||
async function changeTranslationAPI(configKey = '') {
|
||||
if (configKey === 'VRCX_translationAPI') {
|
||||
advancedSettingsStore.setTranslationApi();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user