mixin simpleSettingsCategory(headerTrKey) div.options-container span.header {{ $t('#{headerTrKey}') }} if block block else p No Content mixin simpleSwitch(nameTrKey, model, onChange="") div.options-container-item //- I fought with getting the right syntax for a translation key, as an argument, in an interpolated block for like 20mins before I realized the answer was staring me in the face in the documentation I passed over like 5 times. Feelsbadman. //- I didn't even know what pug was before working on this; speedrunning learning pug templating. span.name {{ $t('#{nameTrKey}') }} //- I've also never worked with vue/element and have no idea what I'm doing. pog, as the kids say el-switch(v-model=model @change=onChange) mixin simpleTwoLabelSwitch(nameTrKey, model, onChange="") div.options-container-item span.name {{ $t('#{nameTrKey}') }} el-switch(v-model=model @change=onChange) mixin simpleRadioGroup(nameTrKey, model, options, onChange="") div.options-container-item span.name {{ $t('#{nameTrKey}') }} br el-radio-group(v-model=model @change=onChange size="mini") each option in options el-radio-button(label=option.label) {{ $t('#{option.translationKey}') }} mixin simpleRadioGroupWithTooltip(nameTrKey, tooltipContent, model, options, onChange="") div.options-container-item span.name {{ $t('#{nameTrKey}') }} el-tooltip(placement="top" style="margin-left:5px" :content=tooltipContent) i.el-icon-warning br el-radio-group(v-model=model @change=onChange size="mini") each option in options el-radio-button(label=option.label) {{ $t('#{option.translationKey}') }} mixin settingsTab() .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'settings'") div.options-container(style="margin-top:0;padding:5px") span.header {{ $t("view.settings.header") }} el-tabs(type="card" style="height: calc(100% - 51px") el-tab-pane(:label="$t('view.settings.category.general')") //- General | General div.options-container(style="margin-top:0") span.header {{ $t("view.settings.general.general.header") }} .x-friend-list(style="margin-top:10px") //- General | General | Version .x-friend-item(style="cursor:default") .detail span.name {{ $t("view.settings.general.general.version") }} span.extra(v-text="appVersion") //- General | General | Latest App Version .x-friend-item(@click="checkForVRCXUpdate") .detail span.name {{ $t("view.settings.general.general.latest_app_version") }} span.extra(v-if="latestAppVersion" v-text="latestAppVersion") span.extra(v-else) {{ $t("view.settings.general.general.latest_app_version_refresh") }} //- General | General | Repository URL .x-friend-item(@click="openExternalLink('https://github.com/vrcx-team/VRCX')") .detail span.name {{ $t("view.settings.general.general.repository_url") }} span.extra https://github.com/vrcx-team/VRCX //- General | General | Support .x-friend-item(@click="openExternalLink('https://vrcx.pypy.moe/discord')") .detail span.name {{ $t("view.settings.general.general.support") }} span.extra https://vrcx.pypy.moe/discord //- General | VRCX Updater +simpleSettingsCategory("view.settings.general.vrcx_updater.header") div.options-container-item el-button(size="small" icon="el-icon-document" @click="showChangeLogDialog()") {{ $t("view.settings.general.vrcx_updater.change_log") }} el-button(size="small" icon="el-icon-upload" @click="showVRCXUpdateDialog()") {{ $t("view.settings.general.vrcx_updater.change_build") }} +simpleRadioGroup("view.settings.general.vrcx_updater.auto_update", "autoUpdateVRCX", [ { label: "Off", translationKey: "view.settings.general.vrcx_updater.auto_update_off" }, { label: "Notify", translationKey: "view.settings.general.vrcx_updater.auto_update_notify" }, { label: "Auto Download", translationKey: "view.settings.general.vrcx_updater.auto_update_download" }, { label: "Auto Install", translationKey: "view.settings.general.vrcx_updater.auto_update_install" }, ], "saveAutoUpdateVRCX") //- General | Application +simpleSettingsCategory("view.settings.general.application.header") +simpleSwitch("view.settings.general.application.startup", "isStartAtWindowsStartup", "saveVRCXWindowOption") +simpleSwitch("view.settings.general.application.minimized", "isStartAsMinimizedState", "saveVRCXWindowOption") +simpleSwitch("view.settings.general.application.tray", "isCloseToTray", "saveVRCXWindowOption") //- General | Game Log +simpleSettingsCategory("view.settings.general.game_log.header") +simpleSwitch("view.settings.general.game_log.resource_load", "logResourceLoad", "saveGameLogOptions") //- General | Automation +simpleSettingsCategory("view.settings.general.automation.header") +simpleRadioGroupWithTooltip("view.settings.general.automation.auto_state_change", "$t('view.settings.general.automation.auto_state_change_tooltip')", "autoStateChange", [ { label: "Off", translationKey: "view.settings.general.automation.auto_state_change_off" }, { label: "Active or Ask Me", translationKey: "view.settings.general.automation.auto_state_change_active_or_ask_me" }, { label: "Active or Busy", translationKey: "view.settings.general.automation.auto_state_change_active_or_busy" }, { label: "Join Me or Ask Me", translationKey: "view.settings.general.automation.auto_state_change_join_me_or_ask_me" }, { label: "Join Me or Busy", translationKey: "view.settings.general.automation.auto_state_change_join_me_or_busy" }, { label: "Ask Me or Busy", translationKey: "view.settings.general.automation.auto_state_change_ask_me_or_busy" }, ], "saveAutomationOptions") //- General | Contributors div.options-container span.header {{ $t("view.settings.general.contributors.header" )}} div.options-container-item img(src="https://contrib.rocks/image?repo=vrcx-team/VRCX", alt="Contributors" @click="openExternalLink('https://github.com/vrcx-team/VRCX/graphs/contributors')" style="cursor: pointer") //- General | Legal Notice div.options-container(style="margin-top:45px;border-top:1px solid #eee;padding-top:30px") span.header {{ $t("view.settings.general.legal_notice.header" )}} div.options-container-item p © 2019-2023 #[a.x-link(@click="openExternalLink('https://github.com/pypy-vrc')") pypy] & #[a.x-link(@click="openExternalLink('https://github.com/Natsumi-sama')") Natsumi] p {{ $t("view.settings.general.legal_notice.info" )}} p {{ $t("view.settings.general.legal_notice.disclaimer1" )}} p {{ $t("view.settings.general.legal_notice.disclaimer2" )}} div.options-container-item el-button(@click="ossDialog = true" size="small") {{ $t("view.settings.general.legal_notice.open_source_software_notice" )}} //- Appearance Tab el-tab-pane(:label="$t('view.settings.category.appearance')") //- Appearance | Appearance div.options-container(style="margin-top:0") span.header {{ $t("view.settings.appearance.appearance.header") }} div.options-container-item span.name {{ $t('view.settings.appearance.appearance.language') }} el-dropdown(@click.native.stop trigger="click" size="small") el-button(size="mini") span {{ $i18n.messages[appLanguage]?.language }} #[i.el-icon-arrow-down.el-icon--right] el-dropdown-menu(#default="dropdown") el-dropdown-item(v-for="(obj, language) in $i18n.messages" v-text="obj.language" @click.native="changeAppLanguage(language)") div.options-container-item span.name {{ $t('view.settings.appearance.appearance.theme_mode') }} el-radio-group(v-model="themeMode" size="mini" @change="saveThemeMode") el-radio-button(label="system") {{ $t('view.settings.appearance.appearance.theme_mode_system') }} el-radio-button(label="light") {{ $t('view.settings.appearance.appearance.theme_mode_light') }} el-radio-button(label="dark") {{ $t('view.settings.appearance.appearance.theme_mode_dark') }} el-radio-button(label="darkvanilla") {{ $t('view.settings.appearance.appearance.theme_mode_darkvanilla') }} el-radio-button(label="pink") {{ $t('view.settings.appearance.appearance.theme_mode_pink') }} el-radio-button(label="material3") {{ $t('view.settings.appearance.appearance.theme_mode_material3') }} div.options-container-item span.name {{ $t('view.settings.appearance.appearance.vrcplus_profile_icons') }} el-switch(v-model="displayVRCPlusIconsAsAvatar" @change="saveOpenVROption") div.options-container-item span.name {{ $t('view.settings.appearance.appearance.disable_tooltips') }} el-switch(v-model="hideTooltips" @change="saveOpenVROption") div.options-container-item span.name {{ $t('view.settings.appearance.appearance.sort_favorite_by') }} el-switch(v-model="sortFavorites" :inactive-text="$t('view.settings.appearance.appearance.sort_favorite_by_name')" :active-text="$t('view.settings.appearance.appearance.sort_favorite_by_date')" @change="saveSortFavoritesOption") div.options-container-item span.name {{ $t('view.settings.appearance.appearance.sort_instance_users_by') }} el-switch(v-model="instanceUsersSortAlphabetical" :inactive-text="$t('view.settings.appearance.appearance.sort_instance_users_by_time')" :active-text="$t('view.settings.appearance.appearance.sort_instance_users_by_alphabet')" @change="saveOpenVROption") div.options-container-item el-button(size="small" icon="el-icon-notebook-1" @click="promptMaxTableSizeDialog") {{ $t('view.settings.appearance.appearance.table_max_size') }} div.options-container-item el-dropdown(@click.native.stop trigger="click" size="small") el-button(size="mini") span {{ $t('view.settings.appearance.appearance.page_size') }} {{ tablePageSize }} #[i.el-icon-arrow-down.el-icon--right] el-dropdown-menu(#default="dropdown") el-dropdown-item(v-for="(number) in [10, 15, 25, 50, 100]" v-text="number" @click.native="setTablePageSize(number)") //- Appearance | Time/Date div.options-container span.header {{ $t('view.settings.appearance.timedate.header') }} div.options-container-item span.name {{ $t('view.settings.appearance.timedate.time_format') }} el-switch(v-model="dtHour12" @change="setDatetimeFormat" :inactive-text="$t('view.settings.appearance.timedate.time_format_24')" :active-text="$t('view.settings.appearance.timedate.time_format_12')") div.options-container-item span.name {{ $t('view.settings.appearance.timedate.force_iso_date_format') }} el-switch(v-model="dtIsoFormat" @change="setDatetimeFormat") //- Appearance | Side Panel div.options-container span.header {{ $t('view.settings.appearance.side_panel.header') }} br span.sub-header {{ $t('view.settings.appearance.side_panel.sorting.header') }} div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_private_to_bottom') }} el-switch(v-model="orderFriendsGroupPrivate" @change="saveOrderFriendGroup") div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_by_status') }} el-switch(v-model="orderFriendsGroupStatus" @change="saveOrderFriendGroup") div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_gps_to_top') }} el-switch(v-model="orderFriendsGroupGPS" @change="saveOrderFriendGroup") span.name(style="margin-left:5px") {{ $t('view.settings.appearance.side_panel.sorting.sort_gps_to_top_notice') }} div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_favorite_by') }} el-switch(v-model="orderFriendsGroup0" :inactive-text="$t('view.settings.appearance.side_panel.sorting.sort_favorite_by_alphabet')" :active-text="$t('view.settings.appearance.side_panel.sorting.sort_favorite_by_online_time')" @change="saveOrderFriendGroup") div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_online_by') }} el-switch(v-model="orderFriendsGroup1" :inactive-text="$t('view.settings.appearance.side_panel.sorting.sort_online_by_alphabet')" :active-text="$t('view.settings.appearance.side_panel.sorting.sort_online_by_online_time')" @change="saveOrderFriendGroup") div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_active_by') }} el-switch(v-model="orderFriendsGroup2" :inactive-text="$t('view.settings.appearance.side_panel.sorting.sort_active_by_alphabet')" :active-text="$t('view.settings.appearance.side_panel.sorting.sort_active_by_online_time')" @change="saveOrderFriendGroup") div.options-container-item span.name {{ $t('view.settings.appearance.side_panel.sorting.sort_offline_by') }} el-switch(v-model="orderFriendsGroup3" :inactive-text="$t('view.settings.appearance.side_panel.sorting.sort_offline_by_alphabet')" :active-text="$t('view.settings.appearance.side_panel.sorting.sort_offline_by_offline_time')" @change="saveOrderFriendGroup") span.sub-header {{ $t('view.settings.appearance.side_panel.width') }} div.options-container-item el-slider(v-model="asideWidth" @input="setAsideWidth" :show-tooltip="false" :marks="{300: ''}" :min="200" :max="500" style="width:300px") //- Appearance | User Dialog div.options-container span.header {{ $t('view.settings.appearance.user_dialog.header') }} div.options-container-item span.name {{ $t('view.settings.appearance.user_dialog.hide_vrchat_notes') }} el-switch(v-model="hideUserNotes" @change="saveUserDialogOption") div.options-container-item span.name {{ $t('view.settings.appearance.user_dialog.hide_vrcx_memos') }} el-switch(v-model="hideUserMemos" @change="saveUserDialogOption") div.options-container-item span.name {{ $t('view.settings.appearance.user_dialog.export_vrcx_memos_into_vrchat_notes') }} br el-button(size="small" icon="el-icon-document-copy" @click="showNoteExportDialog") {{ $t('view.settings.appearance.user_dialog.export_notes') }} //- Appearance | User Colors div.options-container span.header {{ $t('view.settings.appearance.user_colors.header') }} div.options-container-item span.name {{ $t('view.settings.appearance.user_colors.random_colors_from_user_id') }} el-switch(v-model="randomUserColours" @change="updatetrustColor") div.options-container-item div el-color-picker(v-model="trustColor.untrusted" @change="updatetrustColor" size="mini" :predefine="['#CCCCCC']") span.color-picker(slot="trigger" class="x-tag-untrusted") Visitor div el-color-picker(v-model="trustColor.basic" @change="updatetrustColor" size="mini" :predefine="['#1778ff']") span.color-picker(slot="trigger" class="x-tag-basic") New User div el-color-picker(v-model="trustColor.known" @change="updatetrustColor" size="mini" :predefine="['#2bcf5c']") span.color-picker(slot="trigger" class="x-tag-known") User div el-color-picker(v-model="trustColor.trusted" @change="updatetrustColor" size="mini" :predefine="['#ff7b42']") span.color-picker(slot="trigger" class="x-tag-trusted") Known User div el-color-picker(v-model="trustColor.veteran" @change="updatetrustColor" size="mini" :predefine="['#b18fff', '#8143e6', '#ff69b4', '#b52626', '#ffd000', '#abcdef']") span.color-picker(slot="trigger" class="x-tag-veteran") Trusted User div el-color-picker(v-model="trustColor.vip" @change="updatetrustColor" size="mini" :predefine="['#ff2626']") span.color-picker(slot="trigger" class="x-tag-vip") VRChat Team div el-color-picker(v-model="trustColor.troll" @change="updatetrustColor" size="mini" :predefine="['#782f2f']") span.color-picker(slot="trigger" class="x-tag-troll") Nuisance //- Notifications Tab el-tab-pane(:label="$t('view.settings.category.notifications')") //- Notifications | Notifications div.options-container(style="margin-top:0") span.header {{ $t('view.settings.notifications.notifications.header') }} div.options-container-item el-button(size="small" icon="el-icon-chat-square" @click="showNotyFeedFiltersDialog") {{ $t('view.settings.notifications.notifications.notification_filter') }} //- Notifications | Notifications | SteamVR Notifications div.options-container span.sub-header {{ $t('view.settings.notifications.notifications.steamvr_notifications.header') }} div.options-container-item span.name {{ $t('view.settings.notifications.notifications.steamvr_notifications.steamvr_overlay') }} el-switch(v-model="openVR" @change="saveOpenVROption") div.options-container-item span.name {{ $t('view.settings.notifications.notifications.steamvr_notifications.overlay_notifications') }} el-switch(v-model="overlayNotifications" @change="saveOpenVROption" :disabled="!openVR") div.options-container-item el-button(size="small" icon="el-icon-rank" @click="showNotificationPositionDialog" :disabled="!overlayNotifications || !openVR") {{ $t('view.settings.notifications.notifications.steamvr_notifications.notification_position') }} div.options-container-item span.name {{ $t('view.settings.notifications.notifications.steamvr_notifications.xsoverlay_notifications') }} el-switch(v-model="xsNotifications" @change="saveOpenVROption") div.options-container-item span.name {{ $t('view.settings.notifications.notifications.steamvr_notifications.user_images') }} el-switch(v-model="imageNotifications" @change="saveOpenVROption") div.options-container-item el-button(size="small" icon="el-icon-time" @click="promptNotificationTimeout" :disabled="(!overlayNotifications || !openVR) && !xsNotifications") {{ $t('view.settings.notifications.notifications.steamvr_notifications.notification_timeout') }} //- Notifications | Notifications | Desktop Notifications div.options-container span.sub-header {{ $t('view.settings.notifications.notifications.desktop_notifications.header') }} div.options-container-item span.name {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display') }} br el-radio-group(v-model="desktopToast" @change="saveOpenVROption" size="mini") el-radio-button(label="Never") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_never') }} el-radio-button(label="Desktop Mode") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_desktop') }} el-radio-button(label="Inside VR") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_inside_vr') }} el-radio-button(label="Outside VR") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_outside_vr') }} el-radio-button(label="Game Closed") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_game_closed') }} el-radio-button(label="Game Running") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_game_running') }} el-radio-button(label="Always") {{ $t('view.settings.notifications.notifications.desktop_notifications.when_to_display_always') }} div.options-container-item span.name(style="min-width:225px") {{ $t('view.settings.notifications.notifications.desktop_notifications.desktop_notification_while_afk') }} el-switch(v-model="afkDesktopToast" @change="saveOpenVROption") //- Notifications | Notifications | Text-to-Speech Options div.options-container span.sub-header {{ $t('view.settings.notifications.notifications.text_to_speech.header') }} div.options-container-item span.name {{ $t('view.settings.notifications.notifications.text_to_speech.when_to_play') }} br el-radio-group(v-model="notificationTTS" @change="saveNotificationTTS" size="mini") el-radio-button(label="Never") {{ $t('view.settings.notifications.notifications.text_to_speech.when_to_play_never') }} el-radio-button(label="Inside VR") {{ $t('view.settings.notifications.notifications.text_to_speech.when_to_play_inside_vr') }} el-radio-button(label="Game Closed") {{ $t('view.settings.notifications.notifications.text_to_speech.when_to_play_game_closed') }} el-radio-button(label="Game Running") {{ $t('view.settings.notifications.notifications.text_to_speech.when_to_play_game_running') }} el-radio-button(label="Always") {{ $t('view.settings.notifications.notifications.text_to_speech.when_to_play_always') }} div.options-container-item span.name {{ $t('view.settings.notifications.notifications.text_to_speech.tts_voice') }} el-dropdown(@command="(voice) => changeTTSVoice(voice)" trigger="click" size="small") el-button(size="mini" :disabled="notificationTTS === 'Never'") span {{ getTTSVoiceName() }} #[i.el-icon-arrow-down.el-icon--right] el-dropdown-menu(#default="dropdown") el-dropdown-item(v-if="voice" v-for="(voice, index) in TTSvoices" :key="index" v-text="voice.name" :command="index") //- Wrist Overlay Tab el-tab-pane(:label="$t('view.settings.category.wrist_overlay')") //- Wrist Overlay | SteamVR Wrist Overlay div.options-container(style="margin-top:0") span.header {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.header') }} div.options-container-item span {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.description') }} br br span {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.grip') }} br span {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.menu') }} br div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.steamvr_overlay') }} el-switch(v-model="openVR" @change="saveOpenVROption") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.wrist_feed_overlay') }} el-switch(v-model="overlayWrist" @change="saveOpenVROption" :disabled="!openVR") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.hide_private_worlds') }} el-switch(v-model="hidePrivateFromFeed" @change="saveOpenVROption") div.options-container-item(style="min-width:118px") span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.start_overlay_with') }} el-switch(v-model="openVRAlways" @change="saveOpenVROption" inactive-text="VRChat" active-text="SteamVR" :disabled="!openVR") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.overlay_button') }} el-switch(v-model="overlaybutton" @change="saveOpenVROption" :inactive-text="$t('view.settings.wrist_overlay.steamvr_wrist_overlay.overlay_button_grip')" :active-text="$t('view.settings.wrist_overlay.steamvr_wrist_overlay.overlay_button_menu')" :disabled="!openVR || !overlayWrist") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.display_overlay_on') }} el-radio-group(v-model="overlayHand" @change="saveOpenVROption" size="mini") el-radio-button(label="1") {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.display_overlay_on_left') }} el-radio-button(label="2") {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.display_overlay_on_right') }} el-radio-button(label="0") {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.display_overlay_on_both') }} div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.background_color') }} el-switch(v-model="vrBackgroundEnabled" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.minimal_feed_icons') }} el-switch(v-model="minimalFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.hide_vr_devices') }} el-switch(v-model="hideDevicesFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.hide_cpu_usage') }} el-switch(v-model="hideCpuUsageFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.hide_game_uptime') }} el-switch(v-model="hideUptimeFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") div.options-container-item span.name {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.show_pc_uptime') }} el-switch(v-model="pcUptimeOnFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") div.options-container-item el-button(size="small" icon="el-icon-notebook-2" @click="showWristFeedFiltersDialog" :disabled="!openVR || !overlayWrist") {{ $t('view.settings.wrist_overlay.steamvr_wrist_overlay.wrist_feed_filters') }} //- Discord Presence Tab el-tab-pane(:label="$t('view.settings.category.discord_presence')") div.options-container(style="margin-top:0") span.header {{ $t('view.settings.discord_presence.discord_presence.header') }} div.options-container-item span {{ $t('view.settings.discord_presence.discord_presence.description') }} div.options-container-item span.name {{ $t('view.settings.discord_presence.discord_presence.enable') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.discord_presence.discord_presence.enable_tooltip')") i.el-icon-warning(style="cursor:pointer" @click="showVRChatConfig") el-switch(v-model="discordActive" @change="saveDiscordOption") div.options-container-item span.name {{ $t('view.settings.discord_presence.discord_presence.instance_type_player_count') }} el-switch(v-model="discordInstance" @change="saveDiscordOption" :disabled="!discordActive") div.options-container-item span.name {{ $t('view.settings.discord_presence.discord_presence.hide_details_in_private') }} el-switch(v-model="discordHideInvite" @change="saveDiscordOption" :disabled="!discordActive") div.options-container-item span.name {{ $t('view.settings.discord_presence.discord_presence.join_button') }} el-switch(v-model="discordJoinButton" @change="saveDiscordOption" :disabled="!discordActive") div.options-container-item span.name {{ $t('view.settings.discord_presence.discord_presence.hide_images') }} el-switch(v-model="discordHideImage" @change="saveDiscordOption" :disabled="!discordActive") //- "Advanced" Tab el-tab-pane(:label="$t('view.settings.category.advanced')") //- Advanced | Advanced div.options-container(style="margin-top:0") span.header {{ $t('view.settings.advanced.advanced.header') }} div.options-container-item(style="margin-top:15px") el-button-group el-button(size="small" icon="el-icon-s-operation" @click="showVRChatConfig()") VRChat config.json el-button(size="small" icon="el-icon-s-operation" @click="showLaunchOptions()") {{ $t('view.settings.advanced.advanced.launch_options') }} el-button(size="small" icon="el-icon-picture" @click="showScreenshotMetadataDialog()") {{ $t('view.settings.advanced.advanced.screenshot_metadata') }} el-button(size="small" icon="el-icon-goods" @click="showRegistryBackupDialog()") {{ $t('view.settings.advanced.advanced.vrc_registry_backup') }} //- Advanced | Common Folders div.options-container span.header {{ $t('view.settings.advanced.advanced.common_folders') }} div.options-container-item(style="margin-top:15px") el-button-group el-button(size="small" icon="el-icon-folder" @click="openVrcxAppDataFolder()") AppData (VRCX) el-button(size="small" icon="el-icon-folder" @click="openVrcAppDataFolder()") AppData el-button(size="small" icon="el-icon-folder" @click="openVrcPhotosFolder()") Photos el-button(size="small" icon="el-icon-folder" @click="openVrcScreenshotsFolder()") Screenshots el-button(size="small" icon="el-icon-folder" @click="openCrashVrcCrashDumps()") Crash Dumps //- Advanced | Primary Password div.options-container //- Advanced | Primary Password Header span.sub-header {{ $t('view.settings.advanced.advanced.primary_password.header') }} div.options-container-item span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.primary_password.description') }} el-switch(v-model="enablePrimaryPassword" @change="enablePrimaryPasswordChange" :disabled="!loginForm.savedCredentials[API.currentUser.id]") span.sub-header {{ $t('view.settings.advanced.advanced.relaunch_vrchat.header') }} //- Advanced | Relaunch VRChat After Crash div.options-container-item span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.relaunch_vrchat.description') }} el-switch(v-model="relaunchVRChatAfterCrash" @change="saveOpenVROption") //- Advanced | VRChat Quit Fix span.sub-header {{ $t('view.settings.advanced.advanced.vrchat_quit_fix.header') }} div.options-container-item span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.vrchat_quit_fix.description') }} el-switch(v-model="vrcQuitFix" @change="saveOpenVROption") //- Advanced | Auto Cache Management span.sub-header {{ $t('view.settings.advanced.advanced.auto_cache_management.header') }} div.options-container-item span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.auto_cache_management.description') }} el-switch(v-model="autoSweepVRChatCache" @change="saveOpenVROption") //- Advanced | Disable local world database span.sub-header {{ $t('view.settings.advanced.advanced.disable_local_world_persistence.header') }} div.options-container-item span.name(style="min-width:300px") {{ $t('view.settings.advanced.advanced.disable_local_world_persistence.description') }} el-switch(v-model="disableWorldDatabase" @change="saveVRCXWindowOption") //- Advanced | Remote Avatar Database div.options-container span.header {{ $t('view.settings.advanced.advanced.remote_database.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.remote_database.enable') }} el-switch(v-model="avatarRemoteDatabase" @change="saveOpenVROption") div.options-container-item el-button(size="small" icon="el-icon-user-solid" @click="showAvatarProviderDialog") {{ $t('view.settings.advanced.advanced.remote_database.avatar_database_provider') }} //- Advanced | Automatic App Launcher +simpleSettingsCategory("view.settings.advanced.advanced.app_launcher.header") br el-button(size="small" icon="el-icon-folder" @click="openShortcutFolder()") {{ $t('view.settings.advanced.advanced.app_launcher.folder') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.advanced.app_launcher.folder_tooltip')") i.el-icon-warning +simpleSwitch("view.settings.advanced.advanced.app_launcher.enable", "enableAppLauncher", "updateAppLauncherSettings") +simpleSwitch("view.settings.advanced.advanced.app_launcher.auto_close", "enableAppLauncherAutoClose", "updateAppLauncherSettings") //- Advanced | Screenshot Helper div.options-container span.header {{ $t('view.settings.advanced.advanced.screenshot_helper.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.screenshot_helper.description') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.advanced.screenshot_helper.description_tooltip')") i.el-icon-info div.options-container-item span.name {{ $t('view.settings.advanced.advanced.screenshot_helper.enable') }} el-switch(v-model="screenshotHelper" @change="saveScreenshotHelper") div.options-container-item span.name {{ $t('view.settings.advanced.advanced.screenshot_helper.modify_filename') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.advanced.screenshot_helper.modify_filename_tooltip')") i.el-icon-info el-switch(v-model="screenshotHelperModifyFilename" @change="saveScreenshotHelper" :disabled="!screenshotHelper") div.options-container-item span.name {{ $t('view.settings.advanced.advanced.screenshot_helper.copy_to_clipboard') }} el-switch(v-model="screenshotHelperCopyToClipboard" @change="saveScreenshotHelper") //- Advanced | YouTube API div.options-container span.header {{ $t('view.settings.advanced.advanced.youtube_api.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.youtube_api.enable') }} el-switch(v-model="youTubeApi" @change="changeYouTubeApi") div.options-container-item el-button(size="small" icon="el-icon-caret-right" @click="showYouTubeApiDialog") {{ $t('view.settings.advanced.advanced.youtube_api.youtube_api_key') }} //- Advanced | Video Progress Pie div.options-container span.header {{ $t('view.settings.advanced.advanced.video_progress_pie.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.video_progress_pie.enable') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.advanced.video_progress_pie.enable_tooltip')") i.el-icon-warning el-switch(v-model="progressPie" @change="changeYouTubeApi" :disabled="!openVR") div.options-container-item span.name {{ $t('view.settings.advanced.advanced.video_progress_pie.dance_world_only') }} el-switch(v-model="progressPieFilter" @change="changeYouTubeApi" :disabled="!openVR") //- Advanced | Photon Logging (This section doesn't actually exist, the template is all nonsense generated by ChatGPT to throw off the trail of the androids. Spooky. Trust me, bro.) div.options-container(v-if="photonLoggingEnabled") span.header {{ $t('view.settings.advanced.photon.header') }} div.options-container-item span.sub-header {{ $t('view.settings.advanced.photon.event_hud.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.photon.event_hud.enable') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.photon.event_hud.enable_tooltip')") i.el-icon-warning el-switch(v-model="photonEventOverlay" @change="saveEventOverlay" :disabled="!openVR") div.options-container-item span.name {{ $t('view.settings.advanced.photon.event_hud.filter') }} el-radio-group(v-model="photonEventOverlayFilter" @change="saveEventOverlay" size="mini" :disabled="!openVR || !photonEventOverlay") el-radio-button(label="VIP") {{ $t('view.settings.advanced.photon.event_hud.filter_favorites') }} el-radio-button(label="Friends") {{ $t('view.settings.advanced.photon.event_hud.filter_friends') }} el-radio-button(label="Everyone") {{ $t('view.settings.advanced.photon.event_hud.filter_everyone') }} div.options-container-item el-button(size="small" icon="el-icon-time" @click="promptPhotonOverlayMessageTimeout" :disabled="!openVR") {{ $t('view.settings.advanced.photon.event_hud.message_timeout') }} div.options-container-item el-select(v-model="photonEventTableTypeOverlayFilter" @change="photonEventTableFilterChange" multiple clearable collapse-tags style="flex:1" placeholder="Filter") el-option(v-once v-for="type in photonEventTableTypeFilterList" :key="type" :label="type" :value="type") br span.sub-header {{ $t('view.settings.advanced.photon.timeout_hud.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.photon.timeout_hud.enable') }} el-tooltip(placement="top" style="margin-left:5px" :content="$t('view.settings.advanced.photon.timeout_hud.enable_tooltip')") i.el-icon-warning el-switch(v-model="timeoutHudOverlay" @change="saveEventOverlay" :disabled="!openVR") div.options-container-item span.name {{ $t('view.settings.advanced.photon.timeout_hud.filter') }} el-radio-group(v-model="timeoutHudOverlayFilter" @change="saveEventOverlay" size="mini" :disabled="!openVR || !timeoutHudOverlay") el-radio-button(label="VIP") {{ $t('view.settings.advanced.photon.timeout_hud.filter_favorites') }} el-radio-button(label="Friends") {{ $t('view.settings.advanced.photon.timeout_hud.filter_friends') }} el-radio-button(label="Everyone") {{ $t('view.settings.advanced.photon.timeout_hud.filter_everyone') }} div.options-container-item el-button(size="small" icon="el-icon-time" @click="promptPhotonLobbyTimeoutThreshold" :disabled="!openVR") {{ $t('view.settings.advanced.photon.timeout_hud.timeout_threshold') }} //- Advanced | VRCX Instance Cache/Debug div.options-container span.header {{ $t('view.settings.advanced.advanced.cache_debug.header') }} br span.sub-header {{ $t('view.settings.advanced.advanced.pending_offline.header') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.pending_offline.description') }} el-button-group(style="display:block") el-button(size="small" icon="el-icon-s-operation" @click="promptSetPendingOffline") {{ $t('view.settings.advanced.advanced.pending_offline.set_delay') }} +simpleSwitch("view.settings.advanced.advanced.cache_debug.udon_exception_logging", "udonExceptionLogging", "saveOpenVROption") div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.disable_gamelog') }} el-switch(v-model="gameLogDisabled" @change="disableGameLogDialog") span.name(style="margin-left:15px") {{ $t('view.settings.advanced.advanced.cache_debug.disable_gamelog_notice') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.user_cache') }} #[span(v-text="API.cachedUsers.size")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.world_cache') }} #[span(v-text="API.cachedWorlds.size")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.avatar_cache') }} #[span(v-text="API.cachedAvatars.size")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.group_cache') }} #[span(v-text="API.cachedGroups.size")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.avatar_name_cache') }} #[span(v-text="API.cachedAvatarNames.size")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.cache_debug.instance_cache') }} #[span(v-text="API.cachedInstances.size")] div.options-container-item el-button(size="small" icon="el-icon-delete-solid" @click="clearVRCXCache") {{ $t('view.settings.advanced.advanced.cache_debug.clear_cache') }} el-button(size="small" icon="el-icon-time" @click="promptAutoClearVRCXCacheFrequency") {{ $t('view.settings.advanced.advanced.cache_debug.auto_clear_cache') }} div.options-container-item el-button(size="small" icon="el-icon-download" @click="showDownloadDialog") {{ $t('view.settings.advanced.advanced.cache_debug.download_history') }} el-button(size="small" icon="el-icon-tickets" @click="showConsole") {{ $t('view.settings.advanced.advanced.cache_debug.show_console') }} //- Advanced | VRCX Table Stats div.options-container span.sub-header {{ $t('view.settings.advanced.advanced.sqlite_table_size.header') }} div.options-container-item el-button(size="small" icon="el-icon-refresh" @click="getSqliteTableSizes") {{ $t('view.settings.advanced.advanced.sqlite_table_size.refresh') }} div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.gps') }} #[span(v-text="sqliteTableSizes.gps")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.status') }} #[span(v-text="sqliteTableSizes.status")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.bio') }} #[span(v-text="sqliteTableSizes.bio")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.avatar') }} #[span(v-text="sqliteTableSizes.avatar")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.online_offline') }} #[span(v-text="sqliteTableSizes.onlineOffline")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.friend_log_history') }} #[span(v-text="sqliteTableSizes.friendLogHistory")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.notification') }} #[span(v-text="sqliteTableSizes.notification")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.location') }} #[span(v-text="sqliteTableSizes.location")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.join_leave') }} #[span(v-text="sqliteTableSizes.joinLeave")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.portal_spawn') }} #[span(v-text="sqliteTableSizes.portalSpawn")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.video_play') }} #[span(v-text="sqliteTableSizes.videoPlay")] div.options-container-item span.name {{ $t('view.settings.advanced.advanced.sqlite_table_size.event') }} #[span(v-text="sqliteTableSizes.event")]