diff --git a/html/src/app.js b/html/src/app.js index fe0cfe0c..bbc7d383 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -429,7 +429,7 @@ speechSynthesis.getVoices(); var req = webApiService .execute(init) .catch((err) => { - this.$throw(0, err); + this.$throw(0, err, endpoint); }) .then((response) => { try { @@ -440,7 +440,7 @@ speechSynthesis.getVoices(); return response; } catch (e) {} if (response.status === 200) { - this.$throw(0, 'Invalid JSON response'); + this.$throw(0, 'Invalid JSON response', endpoint); } if ( response.status === 429 && @@ -540,7 +540,7 @@ speechSynthesis.getVoices(); endpoint ); } - this.$throw(status, data); + this.$throw(status, data, endpoint); return data; }); if (init.method === 'GET') { @@ -628,7 +628,7 @@ speechSynthesis.getVoices(); }; // FIXME : extra를 없애줘 - API.$throw = function (code, error, extra) { + API.$throw = function (code, error, endpoint) { var text = []; if (code > 0) { var status = this.statusCodes[code]; @@ -641,8 +641,8 @@ speechSynthesis.getVoices(); if (typeof error !== 'undefined') { text.push(JSON.stringify(error)); } - if (typeof extra !== 'undefined') { - text.push(JSON.stringify(extra)); + if (typeof endpoint !== 'undefined') { + text.push(JSON.stringify(endpoint)); } text = text.map((s) => escapeTag(s)).join('
'); if (text.length) { @@ -1782,6 +1782,7 @@ speechSynthesis.getVoices(); hideContentFilterSettings: false, homeLocation: '', id: '', + isBoopingEnabled: false, isFriend: false, last_activity: '', last_login: '', @@ -3567,7 +3568,10 @@ speechSynthesis.getVoices(); // JANK: create image url from fileId json.imageUrl = `https://api.vrchat.cloud/api/1/file/${json.details.emojiId}/${json.details.emojiVersion}`; } - if (!json.details?.emojiId?.startsWith('file_')) { + + if (!json.details?.emojiId) { + json.message = `${json.senderUsername} Booped you! with nothing`; + } else if (!json.details.emojiId.startsWith('file_')) { // JANK: get emoji name from emojiId json.message = `${json.senderUsername} Booped you! with ${$app.getEmojiName(json.details.emojiId)}`; } else { @@ -22807,7 +22811,7 @@ speechSynthesis.getVoices(); if (json.status !== 200) { $app.avatarDialog.loading = false; $app.changeAvatarImageDialogLoading = false; - this.$throw('Avatar image upload failed', json); + this.$throw('Avatar image upload failed', json, params.url); } var args = { json, @@ -22904,7 +22908,7 @@ speechSynthesis.getVoices(); if (json.status !== 200) { $app.avatarDialog.loading = false; $app.changeAvatarImageDialogLoading = false; - this.$throw('Avatar image upload failed', json); + this.$throw('Avatar image upload failed', json, params.url); } var args = { json, @@ -23142,7 +23146,7 @@ speechSynthesis.getVoices(); if (json.status !== 200) { $app.worldDialog.loading = false; $app.changeWorldImageDialogLoading = false; - this.$throw('World image upload failed', json); + this.$throw('World image upload failed', json, params.url); } var args = { json, @@ -23239,7 +23243,7 @@ speechSynthesis.getVoices(); if (json.status !== 200) { $app.worldDialog.loading = false; $app.changeWorldImageDialogLoading = false; - this.$throw('World image upload failed', json); + this.$throw('World image upload failed', json, params.url); } var args = { json, @@ -23313,7 +23317,7 @@ speechSynthesis.getVoices(); }); $app.displayPreviousImages('Avatar', 'Change'); } else { - this.$throw(0, 'Avatar image change failed'); + this.$throw(0, 'Avatar image change failed', args.params.imageUrl); } }); @@ -23342,7 +23346,7 @@ speechSynthesis.getVoices(); }); $app.displayPreviousImages('World', 'Change'); } else { - this.$throw(0, 'World image change failed'); + this.$throw(0, 'World image change failed', args.params.imageUrl); } }); @@ -26106,6 +26110,14 @@ speechSynthesis.getVoices(); }); }; + $app.methods.toggleAllowBooping = function () { + API.saveCurrentUser({ + isBoopingEnabled: !API.currentUser.isBoopingEnabled + }).then((args) => { + return args; + }); + }; + // #endregion // #region | App: Previous Instances User Dialog @@ -32716,11 +32728,17 @@ speechSynthesis.getVoices(); }; $app.methods.getEmojiValue = function (emojiName) { + if (!emojiName) { + return ''; + } return `vrchat_${emojiName.replace(/ /g, '_').toLowerCase()}`; }; $app.methods.getEmojiName = function (emojiValue) { // uppercase first letter of each word + if (!emojiValue) { + return ''; + } return emojiValue .replace('vrchat_', '') .replace(/_/g, ' ') diff --git a/html/src/index.pug b/html/src/index.pug index 9fd8f441..45d0b3e4 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -468,7 +468,12 @@ html .x-friend-item(@click="toggleAvatarCopying") .detail span.name {{ $t('dialog.user.info.avatar_cloning') }} - span.extra(v-if="userDialog.ref.allowAvatarCopying" style="color:#67C23A") {{ $t('dialog.user.info.avatar_cloning_allow') }} + span.extra(v-if="API.currentUser.allowAvatarCopying" style="color:#67C23A") {{ $t('dialog.user.info.avatar_cloning_allow') }} + span.extra(v-else style="color:#F56C6C") {{ $t('dialog.user.info.avatar_cloning_deny') }} + .x-friend-item(@click="toggleAllowBooping") + .detail + span.name {{ $t('dialog.user.info.booping') }} + span.extra(v-if="API.currentUser.isBoopingEnabled" style="color:#67C23A") {{ $t('dialog.user.info.avatar_cloning_allow') }} span.extra(v-else style="color:#F56C6C") {{ $t('dialog.user.info.avatar_cloning_deny') }} template(v-else) .x-friend-item(style="cursor:default") @@ -3332,7 +3337,7 @@ html span(v-text="emojiName") template(#footer) el-button(size="small" @click="sendBoopDialog.visible = false") {{ $t('dialog.boop_dialog.cancel') }} - el-button(size="small" @click="sendBoop" :disabled="!sendBoopDialog.userId || !sendBoopDialog.fileId") {{ $t('dialog.boop_dialog.send') }} + el-button(size="small" @click="sendBoop" :disabled="!sendBoopDialog.userId") {{ $t('dialog.boop_dialog.send') }} //- el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="templateDialog" :visible.sync="templateDialog.visible" :title="$t('dialog.template_dialog.header')" width="450px") diff --git a/html/src/localization/en/en.json b/html/src/localization/en/en.json index 1a8f4e68..858c8b73 100644 --- a/html/src/localization/en/en.json +++ b/html/src/localization/en/en.json @@ -616,6 +616,7 @@ "friended": "Friended", "unfriended": "Unfriended", "avatar_cloning": "Avatar Cloning", + "booping": "Booping", "avatar_cloning_allow": "Allowed", "avatar_cloning_deny": "Deny", "home_location": "Home World",