diff --git a/LogWatcher.cs b/LogWatcher.cs
index d916c472..aaa679a2 100644
--- a/LogWatcher.cs
+++ b/LogWatcher.cs
@@ -338,7 +338,7 @@ namespace VRCX
return true;
}
- if (line.Contains("] Joining wrld_"))
+ if (line.Contains("] Joining "))
{
var lineOffset = line.LastIndexOf("] Joining ");
if (lineOffset < 0)
diff --git a/html/src/app.js b/html/src/app.js
index a2ce229c..d32bb6d4 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -893,7 +893,7 @@ speechSynthesis.getVoices();
Vue.component('avatar-info', {
template:
- '
{{ avatarName }}{{ avatarType }}
',
+ '{{ avatarName }}{{ avatarType }}
',
props: {
imageurl: String,
userid: String,
@@ -1196,7 +1196,7 @@ speechSynthesis.getVoices();
ref.$trustColor = 'x-tag-troll';
ref.$trustSortNum += 0.1;
}
- if (ref.$isLegend) {
+ if ($app.legendColorOverride && ref.$isLegend) {
ref.$trustColor = 'x-tag-legendary';
ref.$trustSortNum += 0.2;
}
@@ -6236,7 +6236,7 @@ speechSynthesis.getVoices();
$app.data.orderFriendsGroupGPS = configRepository.getBool(
'orderFriendGroupGPS'
);
- var saveOrderFriendGroup = function () {
+ $app.methods.saveOrderFriendGroup = function () {
configRepository.setBool('orderFriendGroup0', this.orderFriendsGroup0);
configRepository.setBool('orderFriendGroup1', this.orderFriendsGroup1);
configRepository.setBool('orderFriendGroup2', this.orderFriendsGroup2);
@@ -6256,13 +6256,6 @@ speechSynthesis.getVoices();
this.sortFriendsGroup0 = true;
this.sortFriendsGroup1 = true;
};
- $app.watch.orderFriendsGroup0 = saveOrderFriendGroup;
- $app.watch.orderFriendsGroup1 = saveOrderFriendGroup;
- $app.watch.orderFriendsGroup2 = saveOrderFriendGroup;
- $app.watch.orderFriendsGroup3 = saveOrderFriendGroup;
- $app.watch.orderFriendsGroupPrivate = saveOrderFriendGroup;
- $app.watch.orderFriendsGroupStatus = saveOrderFriendGroup;
- $app.watch.orderFriendsGroupGPS = saveOrderFriendGroup;
$app.methods.fetchActiveFriend = function (userId) {
this.pendingActiveFriends.add(userId);
@@ -8039,6 +8032,8 @@ speechSynthesis.getVoices();
}
};
+ $app.data.recommendedSteamParams =
+ '--enable-sdk-log-levels --log-debug-levels=API;NetworkData';
$app.data.lastPortalId = '';
$app.data.lastPortalList = new Map();
$app.data.portalQueue = '';
@@ -8775,14 +8770,15 @@ speechSynthesis.getVoices();
type = 'Muted';
}
if (row.userId) {
- if (block === row.block && mute === row.mute) {
- return;
- }
if (!block && row.block) {
type = 'Unblocked';
} else if (!mute && row.mute) {
type = 'Unmuted';
}
+ if (block === row.block && mute === row.mute) {
+ // no change
+ type = '';
+ }
}
if (type) {
var noty = {
@@ -10577,6 +10573,9 @@ speechSynthesis.getVoices();
$app.data.vrBackgroundEnabled = configRepository.getBool(
'VRCX_vrBackgroundEnabled'
);
+ $app.data.legendColorOverride = configRepository.getBool(
+ 'VRCX_legendColorOverride'
+ );
$app.data.asideWidth = configRepository.getInt('VRCX_asidewidth');
$app.data.autoUpdateVRCX = configRepository.getString(
'VRCX_autoUpdateVRCX'
@@ -10644,6 +10643,15 @@ speechSynthesis.getVoices();
this.updateVRConfigVars();
AppApi.ExecuteVrOverlayFunction('notyClear', '');
};
+ $app.methods.saveLegendColorOverride = function () {
+ configRepository.setBool(
+ 'VRCX_legendColorOverride',
+ this.legendColorOverride
+ );
+ API.cachedUsers.forEach((ref, id) => {
+ API.applyUserTrustLevel(ref);
+ });
+ };
$app.data.TTSvoices = speechSynthesis.getVoices();
$app.methods.saveNotificationTTS = function () {
speechSynthesis.cancel();
@@ -10797,6 +10805,13 @@ speechSynthesis.getVoices();
$app.data.vrBackgroundEnabled
);
}
+ if (!configRepository.getBool('VRCX_legendColorOverride')) {
+ $app.data.legendColorOverride = false;
+ configRepository.setBool(
+ 'VRCX_legendColorOverride',
+ $app.data.legendColorOverride
+ );
+ }
if (!configRepository.getInt('VRCX_asidewidth')) {
$app.data.asideWidth = 236;
configRepository.setInt('VRCX_asidewidth', $app.data.asideWidth);
@@ -11681,7 +11696,7 @@ speechSynthesis.getVoices();
$app.methods.promptPhotonLobbyTimeoutThreshold = function () {
this.$prompt(
'Enter amount of seconds (default: 3)',
- 'Photon Lobby Timeout Threshold',
+ 'User Timeout Threshold',
{
distinguishCancelAndClose: true,
confirmButtonText: 'OK',
@@ -14200,6 +14215,14 @@ speechSynthesis.getVoices();
this.copyToClipboard(url);
};
+ $app.methods.copyText = function (text) {
+ this.$message({
+ message: 'Text copied to clipboard',
+ type: 'success'
+ });
+ this.copyToClipboard(text);
+ };
+
// App: VRCPlus Icons
API.$on('LOGIN', function () {
@@ -17704,29 +17727,29 @@ speechSynthesis.getVoices();
};
$app.methods.clearVRCXCache = function () {
- API.cachedUsers.forEach((value, key) => {
+ API.cachedUsers.forEach((ref, id) => {
if (
- !this.friends.has(key) &&
- !this.lastLocation.playerList.has(value.displayName) &&
- key !== API.currentUser.id
+ !this.friends.has(id) &&
+ !this.lastLocation.playerList.has(ref.displayName) &&
+ id !== API.currentUser.id
) {
- API.cachedUsers.delete(key);
+ API.cachedUsers.delete(id);
}
});
- API.cachedWorlds.forEach((value, key) => {
+ API.cachedWorlds.forEach((ref, id) => {
if (
- !API.cachedFavoritesByObjectId.has(key) &&
- value.authorId !== API.currentUser.id
+ !API.cachedFavoritesByObjectId.has(id) &&
+ ref.authorId !== API.currentUser.id
) {
- API.cachedWorlds.delete(key);
+ API.cachedWorlds.delete(id);
}
});
- API.cachedAvatars.forEach((value, key) => {
+ API.cachedAvatars.forEach((ref, id) => {
if (
- !API.cachedFavoritesByObjectId.has(key) &&
- value.authorId !== API.currentUser.id
+ !API.cachedFavoritesByObjectId.has(id) &&
+ ref.authorId !== API.currentUser.id
) {
- API.cachedAvatars.delete(key);
+ API.cachedAvatars.delete(id);
}
});
diff --git a/html/src/app.scss b/html/src/app.scss
index af9930f9..df40883b 100644
--- a/html/src/app.scss
+++ b/html/src/app.scss
@@ -90,6 +90,17 @@
padding: 5px 0;
}
+.el-table .cell {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 1;
+}
+
+.el-table__row:hover .el-table__cell .cell {
+ -webkit-box-orient: unset;
+ -webkit-line-clamp: unset;
+}
+
.el-dialog__body {
padding: 20px;
}
@@ -597,7 +608,6 @@ i.x-user-status.busy {
.avatar-info {
cursor: pointer;
width: fit-content;
- display: inline-block;
vertical-align: top;
}
diff --git a/html/src/index.pug b/html/src/index.pug
index cc90e47b..6937e123 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -852,35 +852,35 @@ html
span.sub-header Sorting
div.options-container-item
span.name Sort Private to bottom
- el-switch(v-model="orderFriendsGroupPrivate")
+ el-switch(v-model="orderFriendsGroupPrivate" @change="saveOrderFriendGroup")
div.options-container-item
span.name Sort by status
- el-switch(v-model="orderFriendsGroupStatus")
+ el-switch(v-model="orderFriendsGroupStatus" @change="saveOrderFriendGroup")
div.options-container-item
span.name Sort GPS to top
- el-switch(v-model="orderFriendsGroupGPS")
+ 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")
+ 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")
+ 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")
+ 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")
+ 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 Trust Rank Colors
+ span.header User Colors
div.options-container-item
- div
- v-swatches(v-model="trustColor.untrusted" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-untrusted")
+ div
+ v-swatches(v-model="trustColor.untrusted" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-untrusted")
span.color-picker(slot="trigger") #[i.el-icon-s-open] Visitor
div
v-swatches(v-model="trustColor.basic" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-basic")
@@ -895,17 +895,18 @@ html
v-swatches(v-model="trustColor.veteran" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-veteran")
span.color-picker(slot="trigger") #[i.el-icon-s-open] Trusted User
div
- v-swatches(v-model="trustColor.legend" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-legend")
- span.color-picker(slot="trigger") #[i.el-icon-s-open] Veteran User
- div
- v-swatches(v-model="trustColor.legendary" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-legendary")
- span.color-picker(slot="trigger") #[i.el-icon-s-open] Legend
- div
- v-swatches(v-model="trustColor.vip" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-vip")
- span.color-picker(slot="trigger") #[i.el-icon-s-open] VRChat Team
- div
- v-swatches(v-model="trustColor.troll" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-troll")
- span.color-picker(slot="trigger") #[i.el-icon-s-open] Nuisance
+ v-swatches(v-model="trustColor.legend" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-legend")
+ span.color-picker(slot="trigger") #[i.el-icon-s-open] Veteran User
+ div
+ v-swatches(v-model="trustColor.vip" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-vip")
+ span.color-picker(slot="trigger") #[i.el-icon-s-open] VRChat Team
+ div
+ v-swatches(v-model="trustColor.troll" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-troll")
+ span.color-picker(slot="trigger") #[i.el-icon-s-open] Nuisance
+ div
+ v-swatches(v-model="trustColor.legendary" show-fallback fallback-input-type="color" popover-x="right" :swatches="trustColorSwatches" class="x-tag-legendary")
+ span.color-picker(slot="trigger") #[i.el-icon-s-open] Legend
+ el-switch(v-model="legendColorOverride" style="padding-bottom:5px;padding-left:3px" @change="saveLegendColorOverride")
div.options-container
span.header Discord Presence
div.options-container-item
@@ -913,7 +914,7 @@ html
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
+ 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
@@ -1072,8 +1073,8 @@ html
el-switch(v-model="progressPieFilter" @change="changeYouTubeApi" :disabled="!openVR")
div.options-container
span.header Photon Logging Overlay
- el-tooltip(placement="top" style="margin-left:5px" content="Requires '--log-debug-levels=API;NetworkData' steam launch option")
- i.el-icon-warning
+ el-tooltip(placement="top" style="margin-left:5px" content="Requires '--log-debug-levels=API;NetworkData' steam launch option (click to copy)")
+ i.el-icon-warning(style="cursor:pointer" @click="copyText(recommendedSteamParams)")
div.options-container-item
span.sub-header Photon Event HUD
div.options-container-item
@@ -2162,7 +2163,7 @@ html
.toggle-item
span.toggle-name Portal Spawn
el-tooltip(placement="top" style="margin-left:5px" content="Requires '--enable-sdk-log-levels' steam launch option")
- i.el-icon-warning
+ i.el-icon-warning(style="cursor:pointer" @click="copyText(recommendedSteamParams)")
el-radio-group(v-model="sharedFeedFilters.noty.PortalSpawn" size="mini")
el-radio-button(label="Off")
el-radio-button(label="VIP")
@@ -2211,8 +2212,8 @@ html
br
.toggle-item
span.toggle-name Photon Event Logging
- el-tooltip(placement="top" style="margin-left:5px" content="Requires '--log-debug-levels=API;NetworkData' steam launch option")
- i.el-icon-warning
+ el-tooltip(placement="top" style="margin-left:5px" content="Requires '--log-debug-levels=API;NetworkData' steam launch option (click to copy)")
+ i.el-icon-warning(style="cursor:pointer" @click="copyText(recommendedSteamParams)")
.toggle-item
span.toggle-name Lobby Avatar Change
el-radio-group(v-model="sharedFeedFilters.noty.AvatarChange" size="mini")
@@ -2350,7 +2351,7 @@ html
.toggle-item
span.toggle-name Portal Spawn
el-tooltip(placement="top" style="margin-left:5px" content="Requires '--enable-sdk-log-levels' steam launch option")
- i.el-icon-warning
+ i.el-icon-warning(style="cursor:pointer" @click="copyText(recommendedSteamParams)")
el-radio-group(v-model="sharedFeedFilters.wrist.PortalSpawn" size="mini")
el-radio-button(label="Off")
el-radio-button(label="VIP")
@@ -2399,8 +2400,8 @@ html
br
.toggle-item
span.toggle-name Photon Event Logging
- el-tooltip(placement="top" style="margin-left:5px" content="Requires '--log-debug-levels=API;NetworkData' steam launch option")
- i.el-icon-warning
+ el-tooltip(placement="top" style="margin-left:5px" content="Requires '--log-debug-levels=API;NetworkData' steam launch option (click to copy)")
+ i.el-icon-warning(style="cursor:pointer" @click="copyText(recommendedSteamParams)")
.toggle-item
span.toggle-name Lobby Avatar Change
el-radio-group(v-model="sharedFeedFilters.wrist.AvatarChange" size="mini")
diff --git a/html/src/vr.scss b/html/src/vr.scss
index 1a1d4375..21d0627e 100644
--- a/html/src/vr.scss
+++ b/html/src/vr.scss
@@ -198,6 +198,7 @@ button {
.background {
background: #1f1f1f;
+ text-shadow: none;
}
.x-container {