diff --git a/html/src/index.pug b/html/src/index.pug index dc4352d9..bc276aa1 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -532,20 +532,20 @@ html div(style="display:inline-block;width:300px;margin-right:15px" v-for="favorite in favoriteWorlds" v-if="favorite.groupKey === group.key" :key="favorite.id" @click="showWorldDialog(favorite.id)") .x-friend-item template(v-if="favorite.ref") - .avatar - img(v-lazy="favorite.ref.thumbnailImageUrl") - .detail - span.name(v-text="favorite.ref.name") - span.extra(v-if="favorite.ref.occupants") {{ favorite.ref.authorName }} ({{ favorite.ref.occupants }}) - span.extra(v-else v-text="favorite.ref.authorName") - el-tooltip(placement="left" content="Move" :disabled="hideTooltips") - el-dropdown(trigger="click" @click.native.stop size="mini" style="margin-left:5px") - el-button(type="default" icon="el-icon-back" size="mini" circle) - el-dropdown-menu(#default="dropdown") - template(v-if="groupAPI.name !== group.name" v-for="groupAPI in API.favoriteWorldGroups" :key="groupAPI.name") - el-dropdown-item(style="display:block;margin:10px 0" @click.native="moveFavorite(favorite.ref, groupAPI, 'world')" :disabled="groupAPI.count >= groupAPI.capacity") {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }}) - el-tooltip(placement="right" content="Unfavorite" :disabled="hideTooltips") - el-button(@click.stop="deleteFavorite(favorite.id)" size="mini" icon="el-icon-delete" circle style="margin-left:5px") + .avatar + img(v-lazy="favorite.ref.thumbnailImageUrl") + .detail + span.name(v-text="favorite.ref.name") + span.extra(v-if="favorite.ref.occupants") {{ favorite.ref.authorName }} ({{ favorite.ref.occupants }}) + span.extra(v-else v-text="favorite.ref.authorName") + el-tooltip(placement="left" content="Move" :disabled="hideTooltips") + el-dropdown(trigger="click" @click.native.stop size="mini" style="margin-left:5px") + el-button(type="default" icon="el-icon-back" size="mini" circle) + el-dropdown-menu(#default="dropdown") + template(v-if="groupAPI.name !== group.name" v-for="groupAPI in API.favoriteWorldGroups" :key="groupAPI.name") + el-dropdown-item(style="display:block;margin:10px 0" @click.native="moveFavorite(favorite.ref, groupAPI, 'world')" :disabled="groupAPI.count >= groupAPI.capacity") {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }}) + el-tooltip(placement="right" content="Unfavorite" :disabled="hideTooltips") + el-button(@click.stop="deleteFavorite(favorite.id)" size="mini" icon="el-icon-delete" circle style="margin-left:5px") template(v-else) span(v-text="favorite.name || favorite.id") el-button(type="text" icon="el-icon-close" size="mini" @click.stop="deleteFavorite(favorite.id)" style="margin-left:5px") @@ -905,364 +905,371 @@ html .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'settings'") div.options-container(style="margin-top:0") span.header Settings - .x-friend-list(style="margin-top:10px") - .x-friend-item(style="cursor:default") - .detail - span.name Version - span.extra(v-text="appVersion") - .x-friend-item(@click="checkForVRCXUpdate") - .detail - span.name Latest Version - span.extra(v-if="latestAppVersion" v-text="latestAppVersion") - span.extra(v-else) Click to refresh - .x-friend-item(@click="openExternalLink('https://github.com/pypy-vrc/VRCX')") - .detail - span.name Repository URL - span.extra https://github.com/pypy-vrc/VRCX - .x-friend-item(@click="openExternalLink('https://vrcx.pypy.moe/discord')") - .detail - span.name Support - span.extra https://vrcx.pypy.moe/discord - div.options-container - span.header VRCX Updater - div.options-container-item - el-button(size="small" icon="el-icon-upload" @click="showVRCXUpdateDialog()") Check for update - div.options-container-item - span.name Auto update: - br - el-radio-group(v-model="autoUpdateVRCX" @change="saveAutoUpdateVRCX" size="mini") - el-radio-button(label="Off") - el-radio-button(label="Notify") - el-radio-button(label="Auto Download") - el-radio-button(label="Auto Install") - div.options-container - span.header Appearance - div.options-container-item - span.name Theme mode - el-radio-group(v-model="themeMode" size="mini") - el-radio-button(label="system") System - el-radio-button(label="light") Light - el-radio-button(label="dark") Dark - div.options-container-item - span.name VRCPlus Profile Icons - el-switch(v-model="displayVRCPlusIconsAsAvatar" @change="saveOpenVROption") - div.options-container-item - span.name Disable Tooltips - el-switch(v-model="hideTooltips" @change="saveOpenVROption") - div.options-container-item - span.name Sort Favorites By - el-switch(v-model="sortFavorites" inactive-text="name" active-text="date" @change="saveOpenVROption") - div.options-container-item - el-button(size="small" icon="el-icon-notebook-1" @click="promptMaxTableSizeDialog") Table Max Size - div.options-container-item - el-dropdown(@click.native.stop trigger="click" size="small") - el-button(size="mini") - span 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)") - div.options-container - span.header Side Panel - br - span.sub-header Sorting - div.options-container-item - span.name Sort Private to bottom - el-switch(v-model="orderFriendsGroupPrivate" @change="saveOrderFriendGroup") - div.options-container-item - span.name Sort by status - el-switch(v-model="orderFriendsGroupStatus" @change="saveOrderFriendGroup") - div.options-container-item - span.name Sort GPS to top - el-switch(v-model="orderFriendsGroupGPS" @change="saveOrderFriendGroup") - span.name(style="margin-left:5px") (online for only) - div.options-container-item - span.name VIP - el-switch(v-model="orderFriendsGroup0" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") - div.options-container-item - span.name Online - el-switch(v-model="orderFriendsGroup1" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") - div.options-container-item - span.name Active - el-switch(v-model="orderFriendsGroup2" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") - div.options-container-item - span.name Offline - el-switch(v-model="orderFriendsGroup3" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") - br - span.sub-header Width - div.options-container-item - el-slider(v-model="asideWidth" @input="setAsideWidth" :show-tooltip="false" :marks="{236: ''}" :min="141" :max="500" style="width:300px") - div.options-container - span.header User Colors - 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']") - span.color-picker(slot="trigger" class="x-tag-veteran") Trusted User - div - el-color-picker(v-model="trustColor.legend" @change="updatetrustColor" size="mini" :predefine="['#ffd000', '#abcdef']") - span.color-picker(slot="trigger" class="x-tag-legend") Veteran 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 - div - el-color-picker(v-model="trustColor.legendary" @change="updatetrustColor" size="mini" :predefine="['#ff69b4', '#b52626']") - span.color-picker(slot="trigger" class="x-tag-legendary") Legend - el-switch(v-model="legendColorOverride" style="padding-bottom:21px;padding-left:6px" @change="saveLegendColorOverride") - div.options-container - span.header Discord Presence - div.options-container-item - span * Only works when VRChat is running. - div.options-container-item - span.name Enable - el-tooltip(placement="top" style="margin-left:5px" content="Recommended to disable Rich Presence in VRChat config.json below to stop it from conflicting") - i.el-icon-warning(style="cursor:pointer" @click="showVRChatConfig") - el-switch(v-model="discordActive" @change="saveDiscordOption") - div.options-container-item - span.name Instance type/player count - el-switch(v-model="discordInstance" @change="saveDiscordOption" :disabled="!discordActive") - div.options-container-item - span.name Join button (public only) - el-switch(v-model="discordJoinButton" @change="saveDiscordOption" :disabled="!discordActive") - div.options-container-item - span.name Hide world details in private - el-switch(v-model="discordHideInvite" @change="saveDiscordOption" :disabled="!discordActive") - div.options-container - span.header SteamVR Overlay - div.options-container-item - span * It runs automatically when VRChat is running. - br - br - span Grip: Vive or Other Controllers Grab, Oculus X/A Buttons - br - span Menu: Vive Menu, Index B, Oculus Y/B Buttons - br - div.options-container-item - span.name Enable - el-switch(v-model="openVR" @change="saveOpenVROption") - div.options-container-item(style="min-width:118px") - span.name Start overlay with - el-switch(v-model="openVRAlways" @change="saveOpenVROption" inactive-text="VRChat" active-text="SteamVR" :disabled="!openVR") - div.options-container-item - span.name Hide Private Worlds - el-switch(v-model="hidePrivateFromFeed" @change="saveOpenVROption") - br - span.sub-header Wrist Feed - div.options-container-item - span.name Wrist Feed Overlay - el-switch(v-model="overlayWrist" @change="saveOpenVROption" :disabled="!openVR") - div.options-container-item - span.name(style="min-width:137px") Overlay Button - el-switch(v-model="overlaybutton" @change="saveOpenVROption" inactive-text="Grip" active-text="Menu" :disabled="!openVR || !overlayWrist") - div.options-container-item - span.name Background Color - el-switch(v-model="vrBackgroundEnabled" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") - div.options-container-item - span.name Minimal Feed Icons - el-switch(v-model="minimalFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") - div.options-container-item - span.name Hide VR Devices - el-switch(v-model="hideDevicesFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") - div.options-container-item - span.name Hide CPU Usage - el-switch(v-model="hideCpuUsageFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") - div.options-container-item - span.name Hide Uptime - el-switch(v-model="hideUptimeFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") - div.options-container-item - span.name 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") Wrist Feed Filters - br - span.sub-header Notifications - div.options-container-item - span.name 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") Notification Position - div.options-container-item - span.name XSOverlay Notifications - el-switch(v-model="xsNotifications" @change="saveOpenVROption") - div.options-container-item - span.name User images (slower) - 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") Notification Timeout - div.options-container-item - span.name Desktop Notifications, When to display: - br - el-radio-group(v-model="desktopToast" @change="saveOpenVROption" size="mini") - el-radio-button(label="Never") - el-radio-button(label="Desktop Mode") - el-radio-button(label="Inside VR") - el-radio-button(label="Outside VR") - el-radio-button(label="Game Closed") - el-radio-button(label="Game Running") - el-radio-button(label="Always") - div.options-container-item - el-button(size="small" icon="el-icon-chat-square" @click="showNotyFeedFiltersDialog") Notification Filters - br - span.sub-header Text-To-Speech Options - div.options-container-item - span.name Notification TTS, When to play: - br - el-radio-group(v-model="notificationTTS" @change="saveNotificationTTS" size="mini") - el-radio-button(label="Never") - el-radio-button(label="Inside VR") - el-radio-button(label="Game Closed") - el-radio-button(label="Game Running") - el-radio-button(label="Always") - div.options-container-item - span.name 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") - div.options-container - span.header VRChat Cache Management - span.sub-header Automatically Manage Cache When Closing VRChat - div.options-container-item - span.name(style="min-width:300px") Auto delete old versions from cache - el-switch(v-model="autoSweepVRChatCache" @change="saveOpenVROption") - div.options-container - span.header Application - div.options-container-item - span.name(style="min-width:236px") Encrypt password (disables auto login) - el-switch(v-model="enablePrimaryPassword" @change="enablePrimaryPasswordChange" :disabled="!loginForm.savedCredentials[API.currentUser.username]") - div.options-container-item - span.name Start at Windows startup - el-switch(v-model="isStartAtWindowsStartup") - div.options-container-item - span.name Start as minimized state - el-switch(v-model="isStartAsMinimizedState") - div.options-container-item - span.name Close to tray - el-switch(v-model="isCloseToTray") - div.options-container-item - span.name Time Format - el-switch(v-model="dtHour12" @change="setDatetimeFormat" inactive-text="24 Hour" active-text="12 Hour") - div.options-container-item - el-button-group - el-button(size="small" icon="el-icon-s-operation" @click="showLaunchOptions()") Launch Options - el-button(size="small" icon="el-icon-s-operation" @click="showVRChatConfig()") VRChat config.json - div.options-container - span.header Remote Avatar Database - div.options-container-item - span.name Enable - el-switch(v-model="avatarRemoteDatabase" @change="saveOpenVROption") - div.options-container-item - el-button(size="small" icon="el-icon-user-solid" @click="promptSetAvatarRemoteDatabase" :disabled="!avatarRemoteDatabase") Avatar Database Provider - div.options-container - span.header YouTube API - div.options-container-item - span.name Enabled - el-switch(v-model="youTubeApi" @change="changeYouTubeApi") - div.options-container-item - el-button(size="small" icon="el-icon-caret-right" @click="showYouTubeApiDialog") YouTube API Key - span.header Progress pie overlay for videos - div.options-container-item - span.name Enable - el-switch(v-model="progressPie" @change="changeYouTubeApi" :disabled="!openVR") - div.options-container-item - span.name Dance worlds only - el-switch(v-model="progressPieFilter" @change="changeYouTubeApi" :disabled="!openVR") - div.options-container(v-if="photonLoggingEnabled") - span.header Photon Logging Overlay - div.options-container-item - span.sub-header Photon Event HUD - div.options-container-item - span.name Enable - el-switch(v-model="photonEventOverlay" @change="saveEventOverlay" :disabled="!openVR") - div.options-container-item - span.name Show Join/Leave - el-switch(v-model="photonEventOverlayJoinLeave" @change="saveEventOverlay" :disabled="!openVR") - div.options-container-item - span.name Filter - el-radio-group(v-model="photonEventOverlayFilter" @change="saveEventOverlay" size="mini" :disabled="!openVR || !photonEventOverlay") - el-radio-button(label="VIP") - el-radio-button(label="Friends") - el-radio-button(label="Everyone") - span.sub-header User timeout HUD - div.options-container-item - span.name Enable - el-switch(v-model="timeoutHudOverlay" @change="saveEventOverlay" :disabled="!openVR") - div.options-container-item - span.name Filter - el-radio-group(v-model="timeoutHudOverlayFilter" @change="saveEventOverlay" size="mini" :disabled="!openVR || !timeoutHudOverlay") - el-radio-button(label="VIP") - el-radio-button(label="Friends") - el-radio-button(label="Everyone") - div.options-container-item - el-button(size="small" icon="el-icon-time" @click="promptPhotonLobbyTimeoutThreshold" :disabled="!openVR") Timeout Threshold - div.options-container - span.header VRCX Instance Cache/Debug - div.options-container-item - span.name User cache: #[span(v-text="API.cachedUsers.size")] - div.options-container-item - span.name World cache: #[span(v-text="API.cachedWorlds.size")] - div.options-container-item - span.name Avatar cache: #[span(v-text="API.cachedAvatars.size")] - div.options-container-item - span.name Avatar Name cache: #[span(v-text="API.cachedAvatarNames.size")] - div.options-container-item - span.name Disable GameLog - el-switch(v-model="gameLogDisabled" @change="disableGameLogDialog") - span.name(style="margin-left:15px") (will likely break things) - div.options-container-item - el-button(size="small" icon="el-icon-delete-solid" @click="clearVRCXCache") Clear Cache - el-button(size="small" icon="el-icon-time" @click="promptAutoClearVRCXCacheFrequency") Auto Clear Cache - div.options-container-item - el-button(size="small" icon="el-icon-download" @click="showDownloadDialog") Download History - el-button(size="small" icon="el-icon-tickets" @click="showConsole") Show Console - div.options-container - span.sub-header SQLite Table Size - div.options-container-item - el-button(size="small" icon="el-icon-refresh" @click="getSqliteTableSizes") Refresh - div.options-container-item - span.name GPS: #[span(v-text="sqliteTableSizes.gps")] - div.options-container-item - span.name Status: #[span(v-text="sqliteTableSizes.status")] - div.options-container-item - span.name Avatar: #[span(v-text="sqliteTableSizes.avatar")] - div.options-container-item - span.name Online/Offline: #[span(v-text="sqliteTableSizes.onlineOffline")] - div.options-container-item - span.name Friend Log History: #[span(v-text="sqliteTableSizes.friendLogHistory")] - div.options-container-item - span.name Notifications: #[span(v-text="sqliteTableSizes.notification")] - div.options-container-item - span.name Location: #[span(v-text="sqliteTableSizes.location")] - div.options-container-item - span.name Join/Leave: #[span(v-text="sqliteTableSizes.joinLeave")] - div.options-container-item - span.name Portal Spawn: #[span(v-text="sqliteTableSizes.portalSpawn")] - div.options-container-item - span.name Video Play: #[span(v-text="sqliteTableSizes.videoPlay")] - div.options-container-item - span.name Event: #[span(v-text="sqliteTableSizes.event")] - div.options-container(style="margin-top:45px;border-top:1px solid #eee;padding-top:30px") - span.header Legal Notice - div.options-container-item - p © 2019-2021 #[a(href="https://github.com/pypy-vrc" target="_blank") pypy] (mina#5656) - p VRCX is an assistant application for provide information about manage friendship. this application uses unofficial VRChat API (VRCSDK). - p VRCX isn't endorsed by VRChat and doesn't reflect the views or opinions of VRChat or anyone officially involved in producing or managing VRChat. VRChat is trademark of VRChat Inc. VRChat © VRChat Inc. - p pypy is not responsible for any problems caused by VRCX. Use at your own risk! - div.options-container-item - el-button(@click="ossDialog = true" size="small") Open Source Software Notice + el-tabs(type="card" style="margin-top:10px") + el-tab-pane(label="General") + div.options-container(style="margin-top:0") + span.header General + .x-friend-list(style="margin-top:10px") + .x-friend-item(style="cursor:default") + .detail + span.name Version + span.extra(v-text="appVersion") + .x-friend-item(@click="checkForVRCXUpdate") + .detail + span.name Latest Version + span.extra(v-if="latestAppVersion" v-text="latestAppVersion") + span.extra(v-else) Click to refresh + .x-friend-item(@click="openExternalLink('https://github.com/pypy-vrc/VRCX')") + .detail + span.name Repository URL + span.extra https://github.com/pypy-vrc/VRCX + .x-friend-item(@click="openExternalLink('https://vrcx.pypy.moe/discord')") + .detail + span.name Support + span.extra https://vrcx.pypy.moe/discord + div.options-container + span.header VRCX Updater + div.options-container-item + el-button(size="small" icon="el-icon-upload" @click="showVRCXUpdateDialog()") Check for update + div.options-container-item + span.name Auto update: + br + el-radio-group(v-model="autoUpdateVRCX" @change="saveAutoUpdateVRCX" size="mini") + el-radio-button(label="Off") + el-radio-button(label="Notify") + el-radio-button(label="Auto Download") + el-radio-button(label="Auto Install") + div.options-container(style="margin-top:45px;border-top:1px solid #eee;padding-top:30px") + span.header Legal Notice + div.options-container-item + p © 2019-2022 #[a(href="https://github.com/pypy-vrc" target="_blank") pypy] (mina#5656) + p VRCX is an assistant application for provide information about manage friendship. this application uses unofficial VRChat API (VRCSDK). + p VRCX isn't endorsed by VRChat and doesn't reflect the views or opinions of VRChat or anyone officially involved in producing or managing VRChat. VRChat is trademark of VRChat Inc. VRChat © VRChat Inc. + p pypy is not responsible for any problems caused by VRCX. Use at your own risk! + div.options-container-item + el-button(@click="ossDialog = true" size="small") Open Source Software Notice + el-tab-pane(label="Appearance") + div.options-container(style="margin-top:0") + span.header Appearance + div.options-container-item + span.name Theme mode + el-radio-group(v-model="themeMode" size="mini") + el-radio-button(label="system") System + el-radio-button(label="light") Light + el-radio-button(label="dark") Dark + div.options-container-item + span.name VRCPlus Profile Icons + el-switch(v-model="displayVRCPlusIconsAsAvatar" @change="saveOpenVROption") + div.options-container-item + span.name Disable Tooltips + el-switch(v-model="hideTooltips" @change="saveOpenVROption") + div.options-container-item + span.name Sort Favorites By + el-switch(v-model="sortFavorites" inactive-text="name" active-text="date" @change="saveOpenVROption") + div.options-container-item + el-button(size="small" icon="el-icon-notebook-1" @click="promptMaxTableSizeDialog") Table Max Size + div.options-container-item + el-dropdown(@click.native.stop trigger="click" size="small") + el-button(size="mini") + span 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)") + div.options-container + span.header Side Panel + br + span.sub-header Sorting + div.options-container-item + span.name Sort Private to bottom + el-switch(v-model="orderFriendsGroupPrivate" @change="saveOrderFriendGroup") + div.options-container-item + span.name Sort by status + el-switch(v-model="orderFriendsGroupStatus" @change="saveOrderFriendGroup") + div.options-container-item + span.name Sort GPS to top + el-switch(v-model="orderFriendsGroupGPS" @change="saveOrderFriendGroup") + span.name(style="margin-left:5px") (online for only) + div.options-container-item + span.name VIP + el-switch(v-model="orderFriendsGroup0" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") + div.options-container-item + span.name Online + el-switch(v-model="orderFriendsGroup1" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") + div.options-container-item + span.name Active + el-switch(v-model="orderFriendsGroup2" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") + div.options-container-item + span.name Offline + el-switch(v-model="orderFriendsGroup3" inactive-text="alphabetical" active-text="online for" @change="saveOrderFriendGroup") + br + span.sub-header Width + div.options-container-item + el-slider(v-model="asideWidth" @input="setAsideWidth" :show-tooltip="false" :marks="{236: ''}" :min="141" :max="500" style="width:300px") + div.options-container + span.header User Colors + 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 + el-tab-pane(label="Notifications") + div.options-container(style="margin-top:0") + span.header Notifications + div.options-container-item + span.name SteamVR Overlay + el-switch(v-model="openVR" @change="saveOpenVROption") + div.options-container-item + span.name 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") Notification Position + div.options-container-item + span.name XSOverlay Notifications + el-switch(v-model="xsNotifications" @change="saveOpenVROption") + div.options-container-item + span.name User images (slower) + 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") Notification Timeout + span.sub-header Desktop Notifications + div.options-container-item + span.name When to display: + br + el-radio-group(v-model="desktopToast" @change="saveOpenVROption" size="mini") + el-radio-button(label="Never") + el-radio-button(label="Desktop Mode") + el-radio-button(label="Inside VR") + el-radio-button(label="Outside VR") + el-radio-button(label="Game Closed") + el-radio-button(label="Game Running") + el-radio-button(label="Always") + div.options-container-item + el-button(size="small" icon="el-icon-chat-square" @click="showNotyFeedFiltersDialog") Notification Filters + br + span.sub-header Text-To-Speech Options + div.options-container-item + span.name Notification TTS, When to play: + br + el-radio-group(v-model="notificationTTS" @change="saveNotificationTTS" size="mini") + el-radio-button(label="Never") + el-radio-button(label="Inside VR") + el-radio-button(label="Game Closed") + el-radio-button(label="Game Running") + el-radio-button(label="Always") + div.options-container-item + span.name 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") + el-tab-pane(label="Wrist Overlay") + div.options-container(style="margin-top:0") + span.header SteamVR Wrist Overlay + div.options-container-item + span * It runs automatically when VRChat is running. + br + br + span Grip: Vive or Other Controllers Grab, Oculus X/A Buttons + br + span Menu: Vive Menu, Index B, Oculus Y/B Buttons + br + div.options-container-item + span.name Enable + el-switch(v-model="openVR" @change="saveOpenVROption") + div.options-container-item(style="min-width:118px") + span.name Start overlay with + el-switch(v-model="openVRAlways" @change="saveOpenVROption" inactive-text="VRChat" active-text="SteamVR" :disabled="!openVR") + div.options-container-item + span.name Hide Private Worlds + el-switch(v-model="hidePrivateFromFeed" @change="saveOpenVROption") + br + span.sub-header Wrist Feed + div.options-container-item + span.name Wrist Feed Overlay + el-switch(v-model="overlayWrist" @change="saveOpenVROption" :disabled="!openVR") + div.options-container-item + span.name(style="min-width:137px") Overlay Button + el-switch(v-model="overlaybutton" @change="saveOpenVROption" inactive-text="Grip" active-text="Menu" :disabled="!openVR || !overlayWrist") + div.options-container-item + span.name Background Color + el-switch(v-model="vrBackgroundEnabled" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") + div.options-container-item + span.name Minimal Feed Icons + el-switch(v-model="minimalFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") + div.options-container-item + span.name Hide VR Devices + el-switch(v-model="hideDevicesFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") + div.options-container-item + span.name Hide CPU Usage + el-switch(v-model="hideCpuUsageFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") + div.options-container-item + span.name Hide Game Uptime + el-switch(v-model="hideUptimeFromFeed" @change="saveOpenVROption" :disabled="!openVR || !overlayWrist") + div.options-container-item + span.name 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") Wrist Feed Filters + el-tab-pane(label="Discord Presence") + div.options-container(style="margin-top:0") + span.header Discord Presence + div.options-container-item + span * Only works when VRChat is running. + div.options-container-item + span.name Enable + el-tooltip(placement="top" style="margin-left:5px" content="Recommended to disable Rich Presence in VRChat config.json below to stop it from conflicting") + i.el-icon-warning(style="cursor:pointer" @click="showVRChatConfig") + el-switch(v-model="discordActive" @change="saveDiscordOption") + div.options-container-item + span.name Instance type/player count + el-switch(v-model="discordInstance" @change="saveDiscordOption" :disabled="!discordActive") + div.options-container-item + span.name Join button (public only) + el-switch(v-model="discordJoinButton" @change="saveDiscordOption" :disabled="!discordActive") + div.options-container-item + span.name Hide world details in private + el-switch(v-model="discordHideInvite" @change="saveDiscordOption" :disabled="!discordActive") + el-tab-pane(label="Advanced") + div.options-container(style="margin-top:0") + span.header Advanced + div.options-container-item + 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()") Launch Options + div.options-container + span.header Application + div.options-container-item + span.name(style="min-width:236px") Encrypt password (disables auto login) + el-switch(v-model="enablePrimaryPassword" @change="enablePrimaryPasswordChange" :disabled="!loginForm.savedCredentials[API.currentUser.username]") + div.options-container-item + span.name Start at Windows startup + el-switch(v-model="isStartAtWindowsStartup") + div.options-container-item + span.name Start as minimized state + el-switch(v-model="isStartAsMinimizedState") + div.options-container-item + span.name Close to tray + el-switch(v-model="isCloseToTray") + div.options-container-item + span.name Time Format + el-switch(v-model="dtHour12" @change="setDatetimeFormat" inactive-text="24 Hour" active-text="12 Hour") + div.options-container + span.sub-header Automatically Manage Cache When Closing VRChat + div.options-container-item + span.name(style="min-width:300px") Auto delete old versions from cache + el-switch(v-model="autoSweepVRChatCache" @change="saveOpenVROption") + div.options-container + span.header Remote Avatar Database + div.options-container-item + span.name Enable + el-switch(v-model="avatarRemoteDatabase" @change="saveOpenVROption") + div.options-container-item + el-button(size="small" icon="el-icon-user-solid" @click="promptSetAvatarRemoteDatabase" :disabled="!avatarRemoteDatabase") Avatar Database Provider + div.options-container + span.header YouTube API + div.options-container-item + span.name Enabled + el-switch(v-model="youTubeApi" @change="changeYouTubeApi") + div.options-container-item + el-button(size="small" icon="el-icon-caret-right" @click="showYouTubeApiDialog") YouTube API Key + span.header Progress pie overlay for videos + div.options-container-item + span.name Enable + el-switch(v-model="progressPie" @change="changeYouTubeApi" :disabled="!openVR") + div.options-container-item + span.name Dance worlds only + el-switch(v-model="progressPieFilter" @change="changeYouTubeApi" :disabled="!openVR") + div.options-container(v-if="photonLoggingEnabled") + span.header Photon Logging Overlay + div.options-container-item + span.sub-header Photon Event HUD + div.options-container-item + span.name Enable + el-switch(v-model="photonEventOverlay" @change="saveEventOverlay" :disabled="!openVR") + div.options-container-item + span.name Show Join/Leave + el-switch(v-model="photonEventOverlayJoinLeave" @change="saveEventOverlay" :disabled="!openVR") + div.options-container-item + span.name Filter + el-radio-group(v-model="photonEventOverlayFilter" @change="saveEventOverlay" size="mini" :disabled="!openVR || !photonEventOverlay") + el-radio-button(label="VIP") + el-radio-button(label="Friends") + el-radio-button(label="Everyone") + span.sub-header User timeout HUD + div.options-container-item + span.name Enable + el-switch(v-model="timeoutHudOverlay" @change="saveEventOverlay" :disabled="!openVR") + div.options-container-item + span.name Filter + el-radio-group(v-model="timeoutHudOverlayFilter" @change="saveEventOverlay" size="mini" :disabled="!openVR || !timeoutHudOverlay") + el-radio-button(label="VIP") + el-radio-button(label="Friends") + el-radio-button(label="Everyone") + div.options-container-item + el-button(size="small" icon="el-icon-time" @click="promptPhotonLobbyTimeoutThreshold" :disabled="!openVR") Timeout Threshold + div.options-container + span.header VRCX Instance Cache/Debug + div.options-container-item + span.name Disable GameLog + el-switch(v-model="gameLogDisabled" @change="disableGameLogDialog") + span.name(style="margin-left:15px") (will likely break things) + div.options-container-item + span.name User cache: #[span(v-text="API.cachedUsers.size")] + div.options-container-item + span.name World cache: #[span(v-text="API.cachedWorlds.size")] + div.options-container-item + span.name Avatar cache: #[span(v-text="API.cachedAvatars.size")] + div.options-container-item + span.name Avatar Name cache: #[span(v-text="API.cachedAvatarNames.size")] + div.options-container-item + el-button(size="small" icon="el-icon-delete-solid" @click="clearVRCXCache") Clear Cache + el-button(size="small" icon="el-icon-time" @click="promptAutoClearVRCXCacheFrequency") Auto Clear Cache + div.options-container-item + el-button(size="small" icon="el-icon-download" @click="showDownloadDialog") Download History + el-button(size="small" icon="el-icon-tickets" @click="showConsole") Show Console + div.options-container + span.sub-header SQLite Table Size + div.options-container-item + el-button(size="small" icon="el-icon-refresh" @click="getSqliteTableSizes") Refresh + div.options-container-item + span.name GPS: #[span(v-text="sqliteTableSizes.gps")] + div.options-container-item + span.name Status: #[span(v-text="sqliteTableSizes.status")] + div.options-container-item + span.name Avatar: #[span(v-text="sqliteTableSizes.avatar")] + div.options-container-item + span.name Online/Offline: #[span(v-text="sqliteTableSizes.onlineOffline")] + div.options-container-item + span.name Friend Log History: #[span(v-text="sqliteTableSizes.friendLogHistory")] + div.options-container-item + span.name Notifications: #[span(v-text="sqliteTableSizes.notification")] + div.options-container-item + span.name Location: #[span(v-text="sqliteTableSizes.location")] + div.options-container-item + span.name Join/Leave: #[span(v-text="sqliteTableSizes.joinLeave")] + div.options-container-item + span.name Portal Spawn: #[span(v-text="sqliteTableSizes.portalSpawn")] + div.options-container-item + span.name Video Play: #[span(v-text="sqliteTableSizes.videoPlay")] + div.options-container-item + span.name Event: #[span(v-text="sqliteTableSizes.event")] //- friends .x-aside-container(v-show="$refs.menu && $refs.menu.activeIndex !== 'friendsList'" id="aside") @@ -1569,16 +1576,18 @@ html el-button(type="default" :loading="userDialog.isFavoriteWorldsLoading" @click="getUserFavoriteWorlds(userDialog.id)" size="mini" icon="el-icon-refresh" circle) div(v-loading="userDialog.isFavoriteWorldsLoading" style="min-height:60px") template(v-for="(list, index) in userFavoriteWorlds" v-if="list") - span(style="font-weight:bold;font-size:16px") {{ list[0] }} - i.x-user-status(style="margin-left:5px" :class="userFavoriteWorldsStatus(list[1])") - span(style="color:#909399;font-size:12px;margin-left:5px") {{ list[2].length }}/64 - .x-friend-list(style="margin-top:10px;margin-bottom:15px;min-height:60px") - .x-friend-item(v-for="world in list[2]" :key="world.id" @click="showWorldDialog(world.id)" class="x-friend-item-border") - .avatar - img(v-lazy="world.thumbnailImageUrl") - .detail - span.name(v-text="world.name") - span.extra(v-if="world.occupants") ({{ world.occupants }}) + el-tab-pane + span(slot="label") + span(v-text="list[0]" style="font-weight:bold;font-size:16px") + i.x-user-status(style="margin-left:5px" :class="userFavoriteWorldsStatus(list[1])") + span(style="color:#909399;font-size:12px;margin-left:5px") {{ list[2].length }}/64 + .x-friend-list(style="margin-top:10px;margin-bottom:15px;min-height:60px") + .x-friend-item(v-for="world in list[2]" :key="world.id" @click="showWorldDialog(world.id)" class="x-friend-item-border") + .avatar + img(v-lazy="world.thumbnailImageUrl") + .detail + span.name(v-text="world.name") + span.extra(v-if="world.occupants") ({{ world.occupants }}) el-tab-pane(label="Avatars") template(v-if="userDialog.ref.id === API.currentUser.id") el-button(type="default" :loading="userDialog.isAvatarsLoading" @click="refreshUserDialogAvatars()" size="mini" icon="el-icon-refresh" circle)