diff --git a/html/src/app.js b/html/src/app.js index 88fa5f0e..6a73c86c 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -4801,7 +4801,9 @@ speechSynthesis.getVoices(); switch (gameLog.type) { case 'location': - this.lastLocation = gameLog.location; + if (this.isGameRunning) { + this.lastLocation = gameLog.location; + } tableData = { created_at: gameLog.dt, type: 'Location', @@ -5968,6 +5970,8 @@ speechSynthesis.getVoices(); sharedFeedFilters.noty.Status = 'Off'; sharedFeedFilters.noty.invite = 'Friends'; sharedFeedFilters.noty.requestInvite = 'Friends'; + sharedFeedFilters.noty.inviteResponse = 'Friends'; + sharedFeedFilters.noty.requestInviteResponse = 'Friends'; sharedFeedFilters.noty.friendRequest = 'On'; sharedFeedFilters.noty.Friend = 'On'; sharedFeedFilters.noty.Unfriend = 'On'; @@ -5988,6 +5992,8 @@ speechSynthesis.getVoices(); sharedFeedFilters.wrist.Status = 'Friends'; sharedFeedFilters.wrist.invite = 'Friends'; sharedFeedFilters.wrist.requestInvite = 'Friends'; + sharedFeedFilters.wrist.inviteResponse = 'Friends'; + sharedFeedFilters.wrist.requestInviteResponse = 'Friends'; sharedFeedFilters.wrist.friendRequest = 'On'; sharedFeedFilters.wrist.Friend = 'On'; sharedFeedFilters.wrist.Unfriend = 'On'; diff --git a/html/src/app.scss b/html/src/app.scss index 16cb2184..9232ee52 100644 --- a/html/src/app.scss +++ b/html/src/app.scss @@ -516,7 +516,7 @@ i.x-user-status.busy { .toggle-list .toggle-name { display: inline-block; - min-width: 100px; + min-width: 140px; padding: 2px 5px 2px 0; vertical-align: top; text-align: right; diff --git a/html/src/index.pug b/html/src/index.pug index 380c38bb..201b26bc 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -1343,7 +1343,7 @@ html el-button(type="primary" size="small" style="margin-left:auto" @click="notificationPositionDialog.visible = false") OK //- dialog: Noty feed filters - el-dialog.x-dialog(ref="notyFeedFiltersDialog" :visible.sync="notyFeedFiltersDialog.visible" title="Notification Filters" width="400px") + el-dialog.x-dialog(ref="notyFeedFiltersDialog" :visible.sync="notyFeedFiltersDialog.visible" title="Notification Filters" width="450px") div.toggle-list div span.toggle-name OnPlayerJoining @@ -1372,6 +1372,12 @@ html div span.toggle-name Request Invite toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGrouprequestInvite" v-model="sharedFeedFilters.noty.requestInvite" class="toggle-switch") + div + span.toggle-name Invite Response + toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupinviteResponse" v-model="sharedFeedFilters.noty.inviteResponse" class="toggle-switch") + div + span.toggle-name Request Invite Response + toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGrouprequestInviteResponse" v-model="sharedFeedFilters.noty.requestInviteResponse" class="toggle-switch") div span.toggle-name Friend Request toggle-switch(:options="toggleSwitchOptionsOn" group="switchNotyGrouprequestfriendRequest" v-model="sharedFeedFilters.noty.friendRequest" class="toggle-switch") @@ -1407,7 +1413,7 @@ html el-button(type="primary" size="small" style="margin-left:10px" @click="saveSharedFeedFilters") Save //- dialog: wrist feed filters - el-dialog.x-dialog(ref="wristFeedFiltersDialog" :visible.sync="wristFeedFiltersDialog.visible" title="Wrist Feed Filters" width="400px") + el-dialog.x-dialog(ref="wristFeedFiltersDialog" :visible.sync="wristFeedFiltersDialog.visible" title="Wrist Feed Filters" width="450px") div.toggle-list div span.toggle-name Self Location @@ -1439,6 +1445,12 @@ html div span.toggle-name Request Invite toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGrouprequestInvite" v-model="sharedFeedFilters.wrist.requestInvite" class="toggle-switch") + div + span.toggle-name Invite Response + toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupinviteResponse" v-model="sharedFeedFilters.wrist.inviteResponse" class="toggle-switch") + div + span.toggle-name Request Invite Response + toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGrouprequestInviteResponse" v-model="sharedFeedFilters.wrist.requestInviteResponse" class="toggle-switch") div span.toggle-name Friend Request toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGrouprequestfriendRequest" v-model="sharedFeedFilters.wrist.friendRequest" class="toggle-switch") diff --git a/html/src/vr.js b/html/src/vr.js index 8f9a7476..5314877b 100644 --- a/html/src/vr.js +++ b/html/src/vr.js @@ -827,7 +827,7 @@ speechSynthesis.getVoices(); } this.lastFeedEntry = feeds[0]; - if (isGameRunning) { + if (this.isGameRunning) { // OnPlayerJoining var bias = new Date(Date.now() - 120000).toJSON(); for (var i = 0; i < feeds.length; i++) { @@ -862,22 +862,22 @@ speechSynthesis.getVoices(); } } } + } - // on Location change remove OnPlayerJoined - if (this.config.hideOnPlayerJoined) { - for (i = 0; i < feeds.length; i++) { - var ctx = feeds[i]; - if (ctx.type === 'Location') { - var bias = new Date(Date.parse(ctx.created_at) + 10000).toJSON(); - for (var k = i - 1; k > 0; k--) { - var feedItem = feeds[k]; - if (feedItem.type === 'OnPlayerJoined') { - feeds.splice(k, 1); - i--; - } - if ((feedItem.created_at > bias) || (feedItem.type === 'Location')) { - break; - } + // on Location change remove OnPlayerJoined + if (this.config.hideOnPlayerJoined) { + for (i = 0; i < feeds.length; i++) { + var ctx = feeds[i]; + if (ctx.type === 'Location') { + var bias = new Date(Date.parse(ctx.created_at) + 10000).toJSON(); + for (var k = i - 1; k > 0; k--) { + var feedItem = feeds[k]; + if (feedItem.type === 'OnPlayerJoined') { + feeds.splice(k, 1); + i--; + } + if ((feedItem.created_at > bias) || (feedItem.type === 'Location')) { + break; } } } @@ -962,11 +962,18 @@ speechSynthesis.getVoices(); } var bias = new Date(Date.now() - 60000).toJSON(); var noty = {}; + var messageList = [ 'inviteMessage', 'requestMessage', 'responseMessage' ]; for (var i = 0; i < notyToPlay.length; i++) { noty = notyToPlay[i]; if (noty.created_at < bias) { continue; } + var message = ''; + for (i = 0; i < messageList.length; i++) { + if (typeof noty.details[messageList[i]] !== 'undefined') { + message = noty.details[messageList[i]]; + } + } if ((this.config.overlayNotifications) && (!this.isGameNoVR) && (this.isGameRunning)) { var text = ''; switch (noty.type) { @@ -992,10 +999,16 @@ speechSynthesis.getVoices(); text = `${noty.displayName} status is now ${noty.status[0].status} ${noty.status[0].statusDescription}`; break; case 'invite': - text = `${noty.senderUsername} has invited you to ${noty.details.worldName}`; + text = `${noty.senderUsername} has invited you to ${noty.details.worldName} ${message}`; break; case 'requestInvite': - text = `${noty.senderUsername} has requested an invite`; + text = `${noty.senderUsername} has requested an invite ${message}`; + break; + case 'inviteResponse': + text = `${noty.senderUsername} has responded to your invite ${message}`; + break; + case 'requestInviteResponse': + text = `${noty.senderUsername} has responded to your invite request ${message}`; break; case 'friendRequest': text = `${noty.senderUsername} has sent you a friend request`; @@ -1064,10 +1077,16 @@ speechSynthesis.getVoices(); this.speak(`${noty.displayName} status is now ${noty.status[0].status} ${noty.status[0].statusDescription}`); break; case 'invite': - this.speak(`${noty.senderUsername} has invited you to ${noty.details.worldName}`); + this.speak(`${noty.senderUsername} has invited you to ${noty.details.worldName} ${message}`); break; case 'requestInvite': - this.speak(`${noty.senderUsername} has requested an invite`); + this.speak(`${noty.senderUsername} has requested an invite ${message}`); + break; + case 'inviteResponse': + this.speak(`${noty.senderUsername} has responded to your invite ${message}`); + break; + case 'requestInviteResponse': + this.speak(`${noty.senderUsername} has responded to your invite request ${message}`); break; case 'friendRequest': this.speak(`${noty.senderUsername} has sent you a friend request`); @@ -1142,10 +1161,16 @@ speechSynthesis.getVoices(); AppApi.DesktopNotification(noty.displayName, `status is now ${noty.status[0].status} ${noty.status[0].statusDescription}`, imageURL); break; case 'invite': - AppApi.DesktopNotification(noty.senderUsername, `has invited you to ${noty.details.worldName}`, imageURL); + AppApi.DesktopNotification(noty.senderUsername, `has invited you to ${noty.details.worldName} ${message}`, imageURL); break; case 'requestInvite': - AppApi.DesktopNotification(noty.senderUsername, 'has requested an invite', imageURL); + AppApi.DesktopNotification(noty.senderUsername, `has requested an invite ${message}`, imageURL); + break; + case 'inviteResponse': + AppApi.DesktopNotification(noty.senderUsername, `has responded to your invite ${message}`, imageURL); + break; + case 'requestInviteResponse': + AppApi.DesktopNotification(noty.senderUsername, `has responded to your invite request ${message}`, imageURL); break; case 'friendRequest': AppApi.DesktopNotification(noty.senderUsername, 'has sent you a friend request', imageURL); diff --git a/html/src/vr.pug b/html/src/vr.pug index 0c1ca683..d3933861 100644 --- a/html/src/vr.pug +++ b/html/src/vr.pug @@ -62,12 +62,22 @@ html .detail span.extra span.time {{ feed.created_at | formatDate('HH:MI') }} - | 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId")] + | 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId")] #[span(v-text="feed.details.inviteMessage")] div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .detail span.extra span.time {{ feed.created_at | formatDate('HH:MI') }} - | 📩 #[span.name(v-text="feed.senderUsername")] + | 📩 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.requestMessage")] + div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")] + div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")] div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .detail span.extra @@ -164,12 +174,22 @@ html .detail span.extra span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId")] + | #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId")] #[span(v-text="feed.details.inviteMessage")] div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .detail span.extra span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has requested an invite + | #[span.name(v-text="feed.senderUsername")] has requested an invite #[span(v-text="feed.details.requestMessage")] + div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has responded to your invite #[span(v-text="feed.details.responseMessage")] + div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has responded to your invite request #[span(v-text="feed.details.responseMessage")] div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") .detail span.extra