diff --git a/html/src/app.js b/html/src/app.js index 4452ead4..a7510e6b 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -5457,12 +5457,15 @@ speechSynthesis.getVoices(); ) { playOverlayNotification = true; } + var message = ''; + if (noty.message) { + message = noty.message; + } var messageList = [ 'inviteMessage', 'requestMessage', 'responseMessage' ]; - let message = ''; for (var k = 0; k < messageList.length; k++) { if ( typeof noty.details !== 'undefined' && @@ -5522,6 +5525,8 @@ speechSynthesis.getVoices(); imageUrl = noty.thumbnailImageUrl; } else if (noty.details && noty.details.imageUrl) { imageUrl = noty.details.imageURL; + } else if (noty.imageUrl) { + imageUrl = noty.imageUrl; } else if (userId) { imageUrl = await API.getCachedUser({ userId @@ -5671,6 +5676,18 @@ speechSynthesis.getVoices(); `${noty.previousDisplayName} changed their name to ${noty.displayName}` ); break; + case 'group.announcement': + this.speak(noty.message); + break; + case 'group.informative': + this.speak(noty.message); + break; + case 'group.invite': + this.speak(noty.message); + break; + case 'group.joinRequest': + this.speak(noty.message); + break; case 'PortalSpawn': if (noty.displayName) { this.speak( @@ -5872,6 +5889,18 @@ speechSynthesis.getVoices(); image ); break; + case 'group.announcement': + AppApi.XSNotification('VRCX', noty.message, timeout, image); + break; + case 'group.informative': + AppApi.XSNotification('VRCX', noty.message, timeout, image); + break; + case 'group.invite': + AppApi.XSNotification('VRCX', noty.message, timeout, image); + break; + case 'group.joinRequest': + AppApi.XSNotification('VRCX', noty.message, timeout, image); + break; case 'PortalSpawn': if (noty.displayName) { AppApi.XSNotification( @@ -6111,6 +6140,30 @@ speechSynthesis.getVoices(); image ); break; + case 'group.announcement': + AppApi.DesktopNotification( + 'Group Announcement', + noty.message, + image + ); + break; + case 'group.informative': + AppApi.DesktopNotification( + 'Group Informative', + noty.message, + image + ); + break; + case 'group.invite': + AppApi.DesktopNotification('Group Invite', noty.message, image); + break; + case 'group.joinRequest': + AppApi.DesktopNotification( + 'Group Join Request', + noty.message, + image + ); + break; case 'PortalSpawn': if (noty.displayName) { AppApi.DesktopNotification( @@ -12835,6 +12888,10 @@ speechSynthesis.getVoices(); Unfriend: 'On', DisplayName: 'VIP', TrustLevel: 'VIP', + 'group.announcement': 'On', + 'group.informative': 'On', + 'group.invite': 'On', + 'group.joinRequest': 'Off', PortalSpawn: 'Everyone', Event: 'On', VideoPlay: 'Off', @@ -12867,6 +12924,10 @@ speechSynthesis.getVoices(); Unfriend: 'On', DisplayName: 'Friends', TrustLevel: 'Friends', + 'group.announcement': 'On', + 'group.informative': 'On', + 'group.invite': 'On', + 'group.joinRequest': 'On', PortalSpawn: 'Everyone', Event: 'On', VideoPlay: 'On', @@ -12900,6 +12961,16 @@ speechSynthesis.getVoices(); $app.data.sharedFeedFilters.wrist.Muted = 'On'; $app.data.sharedFeedFilters.wrist.Unmuted = 'On'; } + if (!$app.data.sharedFeedFilters.noty['group.announcement']) { + $app.data.sharedFeedFilters.noty['group.announcement'] = 'On'; + $app.data.sharedFeedFilters.noty['group.informative'] = 'On'; + $app.data.sharedFeedFilters.noty['group.invite'] = 'On'; + $app.data.sharedFeedFilters.noty['group.joinRequest'] = 'Off'; + $app.data.sharedFeedFilters.wrist['group.announcement'] = 'On'; + $app.data.sharedFeedFilters.wrist['group.informative'] = 'On'; + $app.data.sharedFeedFilters.wrist['group.invite'] = 'On'; + $app.data.sharedFeedFilters.wrist['group.joinRequest'] = 'On'; + } if (!configRepository.getString('VRCX_trustColor')) { configRepository.setString( diff --git a/html/src/index.pug b/html/src/index.pug index 558441ae..60923935 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -2792,10 +2792,28 @@ html el-radio-button(label="Off") el-radio-button(label="VIP") el-radio-button(label="Friends") + .toggle-item + span.toggle-name Group Announcement + el-radio-group(v-model="sharedFeedFilters.noty['group.announcement']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") + .toggle-item + span.toggle-name Group Join/Leave + el-radio-group(v-model="sharedFeedFilters.noty['group.informative']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") + .toggle-item + span.toggle-name Group Invite + el-radio-group(v-model="sharedFeedFilters.noty['group.invite']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") + .toggle-item + span.toggle-name Group Join Request + el-radio-group(v-model="sharedFeedFilters.noty['group.joinRequest']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") .toggle-item span.toggle-name Portal Spawn - el-tooltip(placement="top" style="margin-left:5px" content="Requires '--enable-sdk-log-levels' steam launch option (click for more info)") - i.el-icon-warning(style="cursor:pointer" @click="openExternalLink(recommendedSteamParams)") el-radio-group(v-model="sharedFeedFilters.noty.PortalSpawn" size="mini") el-radio-button(label="Off") el-radio-button(label="VIP") @@ -2986,10 +3004,28 @@ html el-radio-button(label="Off") el-radio-button(label="VIP") el-radio-button(label="Friends") + .toggle-item + span.toggle-name Group Announcement + el-radio-group(v-model="sharedFeedFilters.wrist['group.announcement']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") + .toggle-item + span.toggle-name Group Join/Leave + el-radio-group(v-model="sharedFeedFilters.wrist['group.informative']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") + .toggle-item + span.toggle-name Group Invite + el-radio-group(v-model="sharedFeedFilters.wrist['group.invite']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") + .toggle-item + span.toggle-name Group Join Request + el-radio-group(v-model="sharedFeedFilters.wrist['group.joinRequest']" size="mini") + el-radio-button(label="Off") + el-radio-button(label="On") .toggle-item span.toggle-name Portal Spawn - el-tooltip(placement="top" style="margin-left:5px" content="Requires '--enable-sdk-log-levels' steam launch option (click for more info)") - i.el-icon-warning(style="cursor:pointer" @click="openExternalLink(recommendedSteamParams)") el-radio-group(v-model="sharedFeedFilters.wrist.PortalSpawn" size="mini") el-radio-button(label="Off") el-radio-button(label="VIP") diff --git a/html/src/vr.js b/html/src/vr.js index 52c55540..13a3080c 100644 --- a/html/src/vr.js +++ b/html/src/vr.js @@ -464,6 +464,18 @@ Vue.component('marquee-text', MarqueeText); case 'DisplayName': text = `${noty.previousDisplayName} changed their name to ${noty.displayName}`; break; + case 'group.announcement': + text = noty.message; + break; + case 'group.informative': + text = noty.message; + break; + case 'group.invite': + text = noty.message; + break; + case 'group.joinRequest': + text = noty.message; + break; case 'PortalSpawn': if (noty.displayName) { text = `${ diff --git a/html/src/vr.pug b/html/src/vr.pug index 461114bb..9466541f 100644 --- a/html/src/vr.pug +++ b/html/src/vr.pug @@ -119,6 +119,26 @@ html span.extra span.time {{ feed.created_at | formatDate }} | 🤝 #[span.name(v-text="feed.displayName")] {{ feed.previousTrustLevel }} #[i.el-icon-right] {{ feed.trustLevel }} + div(v-else-if="feed.type === 'group.announcement'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | 🏷️ #[span.name(v-text="feed.message")] + div(v-else-if="feed.type === 'group.informative'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | 🏷️ #[span.name(v-text="feed.message")] + div(v-else-if="feed.type === 'group.invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | 🏷️ #[span.name(v-text="feed.message")] + div(v-else-if="feed.type === 'group.joinRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | 🏷️ #[span.name(v-text="feed.message")] div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .detail span.extra @@ -297,6 +317,26 @@ html span.extra span.time {{ feed.created_at | formatDate }} | #[span.name(v-text="feed.displayName")] trust level is now {{ feed.trustLevel }} + div(v-else-if="feed.type === 'group.announcement'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | #[span.name(v-text="feed.message")] + div(v-else-if="feed.type === 'group.informative'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | #[span.name(v-text="feed.message")] + div(v-else-if="feed.type === 'group.invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | #[span.name(v-text="feed.message")] + div(v-else-if="feed.type === 'group.joinRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate }} + | #[span.name(v-text="feed.message")] div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .detail span.extra