diff --git a/html/src/app.js b/html/src/app.js index e374e93b..f780e292 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -7274,8 +7274,8 @@ speechSynthesis.getVoices(); treeData: [], memo: '', $avatarInfo: { - id: '', - name: '', + ownerId: '', + avatarName: '', } }; @@ -7877,18 +7877,23 @@ speechSynthesis.getVoices(); }); } else if (command === 'Show Avatar Details') { var { currentAvatarImageUrl } = D.ref; - var id = extractFileId(currentAvatarImageUrl); - if (id) { - API.call(`file/${id}`).then(({ ownerId }) => { - for (var ref of API.cachedAvatars.values()) { - if (ref.imageUrl === currentAvatarImageUrl) { - this.showAvatarDialog(ref.id); - return; - } - } - D.loading = true; - var params = { - n: 50, + for (var ref of API.cachedAvatars.values()) { + if (ref.imageUrl === currentAvatarImageUrl) { + this.showAvatarDialog(ref.id); + return; + } + } + var fileId = extractFileId(currentAvatarImageUrl); + if (fileId) { + if (API.cachedAvatarNames.has(fileId)) { + var { ownerId } = API.cachedAvatarNames.get(fileId); + } else { + var args = API.getAvatarImages({fileId: fileId}); + var ownerId = args.json.ownerId; + } + D.loading = true; + var params = { + n: 50, offset: 0, sort: 'updated', order: 'descending', @@ -7919,9 +7924,8 @@ speechSynthesis.getVoices(); }); return; } - this.showUserDialog(ownerId); - } - }); + this.showUserDialog(ownerId); + } }); } else { this.$message({ @@ -10339,8 +10343,8 @@ speechSynthesis.getVoices(); }); }; - API.getAvatarImages = function (params) { - return this.call(`file/${params.fileId}`, { + API.getAvatarImages = async function (params) { + return await this.call(`file/${params.fileId}`, { method: 'GET', params }).then((json) => { @@ -10348,10 +10352,32 @@ speechSynthesis.getVoices(); json, params }; + this.$emit('AVATARIMAGE:GET', args); return args; }); }; + API.$on('AVATARIMAGE:GET', function (args) { + $app.storeAvatarImage(args); + }); + + $app.methods.storeAvatarImage = function (args) { + var fileId = args.params.fileId; + var avatarName = ''; + var imageName = args.json.name; + var avatarNameRegex = /Avatar - (.*) - Image -/g.exec(imageName); + if (avatarNameRegex) { + avatarName = avatarNameRegex[1]; + } + var ownerId = args.json.ownerId; + var avatarInfo = { + ownerId, + avatarName + }; + API.cachedAvatarNames.set(fileId, avatarInfo); + return avatarInfo; + }; + $app.methods.setAvatarImage = function (image) { this.changeAvatarImageDialogLoading = true; var parmas = { @@ -10388,19 +10414,17 @@ speechSynthesis.getVoices(); $app.methods.getAvatarName = function (args) { var D = this.userDialog; D.$avatarInfo = { - id: '', - name: '-' + ownerId: '', + avatarName: '-' }; if (!D.visible) { return; } var imageUrl = D.ref.currentAvatarImageUrl; - if (imageUrl.substring(0, 41) !== 'https://api.vrchat.cloud/api/1/file/file_') { + var fileId = extractFileId(imageUrl); + if (!fileId) { return; } - var url = new URL(imageUrl); - var pathArray = url.pathname.split('/'); - var fileId = pathArray[4]; if (API.cachedAvatarNames.has(fileId)) { D.$avatarInfo = API.cachedAvatarNames.get(fileId); return; @@ -10409,19 +10433,8 @@ speechSynthesis.getVoices(); fileId }; API.getAvatarImages(params).then((args) => { - var name = ''; - var imageName = args.json.name; - var avatarNameRegex = /Avatar - (.*) - Image -/g.exec(imageName); - if (avatarNameRegex) { - name = avatarNameRegex[1]; - } - var id = args.json.ownerId; - var avatarInfo = { - id, - name - }; - API.cachedAvatarNames.set(fileId, avatarInfo); - D.$avatarInfo = avatarInfo; + var avatarInfo = this.storeAvatarImage(args); + this.userDialog.$avatarInfo = avatarInfo; }); }; diff --git a/html/src/index.pug b/html/src/index.pug index fb38ad54..ab6c77d7 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -1018,9 +1018,9 @@ html .detail span.name Avatar Name .extra(@click="userDialogCommand('Show Avatar Details')" style="cursor:pointer;width:fit-content") - span(v-text="userDialog.$avatarInfo.name" style="display:inline-block;margin-right:5px") - span(v-if="userDialog.$avatarInfo.id === userDialog.id" style="display:inline-block;color:#E6A23C" ) (own) - span(v-else-if="userDialog.$avatarInfo.name && userDialog.$avatarInfo.id" style="display:inline-block;color:#67C23A") ‎(public) + span(v-text="userDialog.$avatarInfo.avatarName" style="display:inline-block;margin-right:5px") + span(v-if="userDialog.$avatarInfo.ownerId === userDialog.id" style="display:inline-block;color:#E6A23C" ) (own) + span(v-else-if="userDialog.$avatarInfo.avatarName && userDialog.$avatarInfo.ownerId" style="display:inline-block;color:#67C23A") ‎(public) .x-friend-item(style="width:100%;cursor:default") .detail span.name Bio