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