mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-19 06:43:51 +02:00
Group dialog updates
This commit is contained in:
122
html/src/app.js
122
html/src/app.js
@@ -2607,7 +2607,7 @@ speechSynthesis.getVoices();
|
|||||||
var {unityPackages} = ref;
|
var {unityPackages} = ref;
|
||||||
Object.assign(ref, json);
|
Object.assign(ref, json);
|
||||||
if (
|
if (
|
||||||
json.unityPackages.length > 0 &&
|
json.unityPackages?.length > 0 &&
|
||||||
unityPackages.length > 0 &&
|
unityPackages.length > 0 &&
|
||||||
!json.unityPackages.assetUrl
|
!json.unityPackages.assetUrl
|
||||||
) {
|
) {
|
||||||
@@ -16798,7 +16798,8 @@ speechSynthesis.getVoices();
|
|||||||
fileSize: '',
|
fileSize: '',
|
||||||
inCache: false,
|
inCache: false,
|
||||||
cacheSize: 0,
|
cacheSize: 0,
|
||||||
cacheLocked: false
|
cacheLocked: false,
|
||||||
|
fileAnalysis: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
API.$on('LOGOUT', function () {
|
API.$on('LOGOUT', function () {
|
||||||
@@ -16828,6 +16829,7 @@ speechSynthesis.getVoices();
|
|||||||
D.visible = true;
|
D.visible = true;
|
||||||
D.loading = true;
|
D.loading = true;
|
||||||
D.id = avatarId;
|
D.id = avatarId;
|
||||||
|
D.fileAnalysis = {};
|
||||||
D.treeData = [];
|
D.treeData = [];
|
||||||
D.fileSize = '';
|
D.fileSize = '';
|
||||||
D.inCache = false;
|
D.inCache = false;
|
||||||
@@ -24917,27 +24919,22 @@ speechSynthesis.getVoices();
|
|||||||
D.members = [];
|
D.members = [];
|
||||||
this.isGroupMembersDone = false;
|
this.isGroupMembersDone = false;
|
||||||
this.loadMoreGroupMembersParams = {
|
this.loadMoreGroupMembersParams = {
|
||||||
n: 25,
|
n: 100,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
groupId: D.id
|
groupId: D.id
|
||||||
};
|
};
|
||||||
if (this.hasGroupPermission(D.ref, 'group-members-viewall')) {
|
if (D.inGroup) {
|
||||||
// friend only group view perms only allow max n=25
|
await API.getGroupMember({
|
||||||
this.loadMoreGroupMembersParams.n = 100;
|
groupId: D.id,
|
||||||
|
userId: API.currentUser.id
|
||||||
|
}).then((args) => {
|
||||||
|
if (args.json) {
|
||||||
|
args.json.user = API.currentUser;
|
||||||
|
D.members.push(args.json);
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (!D.inGroup) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await API.getGroupMember({
|
|
||||||
groupId: D.id,
|
|
||||||
userId: API.currentUser.id
|
|
||||||
}).then((args) => {
|
|
||||||
if (args.json) {
|
|
||||||
args.json.user = API.currentUser;
|
|
||||||
D.members.push(args.json);
|
|
||||||
}
|
|
||||||
return args;
|
|
||||||
});
|
|
||||||
await this.loadMoreGroupMembers();
|
await this.loadMoreGroupMembers();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -24949,7 +24946,6 @@ speechSynthesis.getVoices();
|
|||||||
this.isGroupMembersLoading = true;
|
this.isGroupMembersLoading = true;
|
||||||
await API.getGroupMembers(params)
|
await API.getGroupMembers(params)
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
params.offset += params.n;
|
|
||||||
this.isGroupMembersLoading = false;
|
this.isGroupMembersLoading = false;
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
@@ -24969,10 +24965,25 @@ speechSynthesis.getVoices();
|
|||||||
...this.groupDialog.members,
|
...this.groupDialog.members,
|
||||||
...args.json
|
...args.json
|
||||||
];
|
];
|
||||||
|
params.offset += params.n;
|
||||||
return args;
|
return args;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
this.isGroupMembersDone = true;
|
||||||
|
throw err;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$app.methods.loadAllGroupMembers = async function () {
|
||||||
|
if (this.isGroupMembersLoading) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.getGroupDialogGroupMembers();
|
||||||
|
while (this.groupDialog.visible && !this.isGroupMembersDone) {
|
||||||
|
await this.loadMoreGroupMembers();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$app.methods.hasGroupPermission = function (ref, permission) {
|
$app.methods.hasGroupPermission = function (ref, permission) {
|
||||||
if (
|
if (
|
||||||
ref &&
|
ref &&
|
||||||
@@ -25289,6 +25300,30 @@ speechSynthesis.getVoices();
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$app.methods.downloadAndSaveJson = function (fileName, data) {
|
||||||
|
if (!fileName || !data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
var link = document.createElement('a');
|
||||||
|
link.setAttribute(
|
||||||
|
'href',
|
||||||
|
`data:application/json;charset=utf-8,${encodeURIComponent(
|
||||||
|
JSON.stringify(data, null, 2)
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
link.setAttribute('download', `${fileName}.json`);
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
document.body.removeChild(link);
|
||||||
|
} catch {
|
||||||
|
new Noty({
|
||||||
|
type: 'error',
|
||||||
|
text: escapeTag('Failed to download JSON.')
|
||||||
|
}).show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$app.methods.setPlayerModeration = function (userId, type) {
|
$app.methods.setPlayerModeration = function (userId, type) {
|
||||||
var D = this.userDialog;
|
var D = this.userDialog;
|
||||||
AppApi.SetVRChatUserModeration(API.currentUser.id, userId, type).then(
|
AppApi.SetVRChatUserModeration(API.currentUser.id, userId, type).then(
|
||||||
@@ -25452,6 +25487,53 @@ speechSynthesis.getVoices();
|
|||||||
return text.replace(/([^!])\[[^\]]+\]\([^)]+\)/g, '$1');
|
return text.replace(/([^!])\[[^\]]+\]\([^)]+\)/g, '$1');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
params: {
|
||||||
|
fileId: string,
|
||||||
|
version: number
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
API.getFileAnalysis = function (params) {
|
||||||
|
return this.call(`analysis/${params.fileId}/${params.version}`, {
|
||||||
|
method: 'GET'
|
||||||
|
}).then((json) => {
|
||||||
|
var args = {
|
||||||
|
json,
|
||||||
|
params
|
||||||
|
};
|
||||||
|
this.$emit('FILE:ANALYSIS', args);
|
||||||
|
return args;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
API.$on('FILE:ANALYSIS', function (args) {
|
||||||
|
if (!$app.avatarDialog.visible) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$app.avatarDialog.fileAnalysis = buildTreeData(args.json);
|
||||||
|
});
|
||||||
|
|
||||||
|
$app.methods.getAvatarFileAnalysis = function () {
|
||||||
|
var D = this.avatarDialog;
|
||||||
|
var assetUrl = '';
|
||||||
|
for (let i = D.ref.unityPackages.length - 1; i > -1; i--) {
|
||||||
|
var unityPackage = D.ref.unityPackages[i];
|
||||||
|
if (
|
||||||
|
unityPackage.platform === 'standalonewindows' &&
|
||||||
|
this.compareUnityVersion(unityPackage.unityVersion)
|
||||||
|
) {
|
||||||
|
assetUrl = unityPackage.assetUrl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var fileId = extractFileId(assetUrl);
|
||||||
|
var version = parseInt(extractFileVersion(assetUrl), 10);
|
||||||
|
if (!fileId || !version) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
API.getFileAnalysis({fileId, version});
|
||||||
|
};
|
||||||
|
|
||||||
$app = new Vue($app);
|
$app = new Vue($app);
|
||||||
window.$app = $app;
|
window.$app = $app;
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -1998,6 +1998,7 @@ html
|
|||||||
span.extra(v-text="avatar.releaseStatus" v-else)
|
span.extra(v-text="avatar.releaseStatus" v-else)
|
||||||
el-tab-pane(:label="$t('dialog.user.json.header')")
|
el-tab-pane(:label="$t('dialog.user.json.header')")
|
||||||
el-button(type="default" @click="refreshUserDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
el-button(type="default" @click="refreshUserDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
||||||
|
el-button(type="default" @click="downloadAndSaveJson(userDialog.id, userDialog.ref)" size="mini" icon="el-icon-download" circle style="margin-left:5px")
|
||||||
el-tree(:data="userDialog.treeData" style="margin-top:5px;font-size:12px")
|
el-tree(:data="userDialog.treeData" style="margin-top:5px;font-size:12px")
|
||||||
template(#default="scope")
|
template(#default="scope")
|
||||||
span
|
span
|
||||||
@@ -2172,6 +2173,7 @@ html
|
|||||||
span.extra(v-else) {{ worldDialog.timeSpent | timeToText }}
|
span.extra(v-else) {{ worldDialog.timeSpent | timeToText }}
|
||||||
el-tab-pane(:label="$t('dialog.world.json.header')")
|
el-tab-pane(:label="$t('dialog.world.json.header')")
|
||||||
el-button(type="default" @click="refreshWorldDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
el-button(type="default" @click="refreshWorldDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
||||||
|
el-button(type="default" @click="downloadAndSaveJson(worldDialog.id, worldDialog.ref)" size="mini" icon="el-icon-download" circle style="margin-left:5px")
|
||||||
el-tree(:data="worldDialog.treeData" style="margin-top:5px;font-size:12px")
|
el-tree(:data="worldDialog.treeData" style="margin-top:5px;font-size:12px")
|
||||||
template(#default="scope")
|
template(#default="scope")
|
||||||
span
|
span
|
||||||
@@ -2258,6 +2260,13 @@ html
|
|||||||
span.extra(v-else) -
|
span.extra(v-else) -
|
||||||
el-tab-pane(:label="$t('dialog.avatar.json.header')")
|
el-tab-pane(:label="$t('dialog.avatar.json.header')")
|
||||||
el-button(type="default" @click="refreshAvatarDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
el-button(type="default" @click="refreshAvatarDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
||||||
|
el-button(type="default" @click="getAvatarFileAnalysis" size="mini" icon="el-icon-question" circle style="margin-left:5px")
|
||||||
|
el-button(type="default" @click="downloadAndSaveJson(avatarDialog.id, avatarDialog.ref)" size="mini" icon="el-icon-download" circle style="margin-left:5px")
|
||||||
|
el-tree(v-if="Object.keys(avatarDialog.fileAnalysis).length > 0" :data="avatarDialog.fileAnalysis" style="margin-top:5px;font-size:12px")
|
||||||
|
template(#default="scope")
|
||||||
|
span
|
||||||
|
span(v-text="scope.data.key" style="font-weight:bold;margin-right:5px")
|
||||||
|
span(v-if="!scope.data.children" v-text="scope.data.value")
|
||||||
el-tree(:data="avatarDialog.treeData" style="margin-top:5px;font-size:12px")
|
el-tree(:data="avatarDialog.treeData" style="margin-top:5px;font-size:12px")
|
||||||
template(#default="scope")
|
template(#default="scope")
|
||||||
span
|
span
|
||||||
@@ -2449,11 +2458,12 @@ html
|
|||||||
br
|
br
|
||||||
span {{ role.name }}{{ rIndex < groupDialog.memberRoles.length - 1 ? ', ' : '' }}
|
span {{ role.name }}{{ rIndex < groupDialog.memberRoles.length - 1 ? ', ' : '' }}
|
||||||
el-tab-pane(:label="$t('dialog.group.members.header')")
|
el-tab-pane(:label="$t('dialog.group.members.header')")
|
||||||
template(v-if="groupDialog.visible && groupDialog.ref.membershipStatus === 'member'")
|
template(v-if="groupDialog.visible")
|
||||||
span(v-if="hasGroupPermission(groupDialog.ref, 'group-members-viewall')" style="font-weight:bold;font-size:16px") {{ $t('dialog.group.members.all_members') }}
|
span(v-if="hasGroupPermission(groupDialog.ref, 'group-members-viewall')" style="font-weight:bold;font-size:16px") {{ $t('dialog.group.members.all_members') }}
|
||||||
span(v-else style="font-weight:bold;font-size:16px") {{ $t('dialog.group.members.friends_only') }}
|
span(v-else style="font-weight:bold;font-size:16px") {{ $t('dialog.group.members.friends_only') }}
|
||||||
br
|
br
|
||||||
el-button(type="default" @click="getGroupDialogGroupMembers()" size="mini" icon="el-icon-refresh" circle)
|
el-button(type="default" @click="loadAllGroupMembers" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle)
|
||||||
|
el-button(type="default" @click="downloadAndSaveJson(`${groupDialog.id}_members`, groupDialog.members)" size="mini" icon="el-icon-download" circle style="margin-left:5px")
|
||||||
span(style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupDialog.members.length }}/{{ groupDialog.ref.memberCount }}
|
span(style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupDialog.members.length }}/{{ groupDialog.ref.memberCount }}
|
||||||
ul.infinite-list.x-friend-list(v-if="groupDialog.members.length > 0" v-infinite-scroll="loadMoreGroupMembers" style="margin-top:10px;overflow:auto;max-height:250px")
|
ul.infinite-list.x-friend-list(v-if="groupDialog.members.length > 0" v-infinite-scroll="loadMoreGroupMembers" style="margin-top:10px;overflow:auto;max-height:250px")
|
||||||
li.infinite-list-item.x-friend-item(v-for="user in groupDialog.members" :key="user.id" @click="showUserDialog(user.userId)" class="x-friend-item-border")
|
li.infinite-list-item.x-friend-item(v-for="user in groupDialog.members" :key="user.id" @click="showUserDialog(user.userId)" class="x-friend-item-border")
|
||||||
@@ -2466,7 +2476,7 @@ html
|
|||||||
.detail(v-if="!isGroupMembersLoading")
|
.detail(v-if="!isGroupMembersLoading")
|
||||||
span.name {{ $t('dialog.group.members.load_more') }}
|
span.name {{ $t('dialog.group.members.load_more') }}
|
||||||
el-tab-pane(:label="$t('dialog.group.gallery.header')")
|
el-tab-pane(:label="$t('dialog.group.gallery.header')")
|
||||||
el-button(type="default" size="mini" icon="el-icon-refresh" @click="getGroupGalleries" circle)
|
el-button(type="default" size="mini" icon="el-icon-refresh" @click="getGroupGalleries" :loading="isGroupGalleryLoading" circle)
|
||||||
el-tabs(type="card" v-loading="isGroupGalleryLoading" ref="groupDialogGallery")
|
el-tabs(type="card" v-loading="isGroupGalleryLoading" ref="groupDialogGallery")
|
||||||
template(v-for="(gallery, index) in groupDialog.ref.galleries")
|
template(v-for="(gallery, index) in groupDialog.ref.galleries")
|
||||||
el-tab-pane
|
el-tab-pane
|
||||||
@@ -2482,6 +2492,7 @@ html
|
|||||||
img.x-link(v-lazy="image.imageUrl" style="height:700px" @click="downloadAndSaveImage(image.imageUrl)")
|
img.x-link(v-lazy="image.imageUrl" style="height:700px" @click="downloadAndSaveImage(image.imageUrl)")
|
||||||
el-tab-pane(:label="$t('dialog.group.json.header')")
|
el-tab-pane(:label="$t('dialog.group.json.header')")
|
||||||
el-button(type="default" @click="refreshGroupDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
el-button(type="default" @click="refreshGroupDialogTreeData()" size="mini" icon="el-icon-refresh" circle)
|
||||||
|
el-button(type="default" @click="downloadAndSaveJson(groupDialog.id, groupDialog.ref)" size="mini" icon="el-icon-download" circle style="margin-left:5px")
|
||||||
el-tree(:data="groupDialog.treeData" style="margin-top:5px;font-size:12px")
|
el-tree(:data="groupDialog.treeData" style="margin-top:5px;font-size:12px")
|
||||||
template(#default="scope")
|
template(#default="scope")
|
||||||
span
|
span
|
||||||
@@ -3459,16 +3470,13 @@ html
|
|||||||
el-button(type="default" @click="deleteVRCPlusIcon(image.id)" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
|
el-button(type="default" @click="deleteVRCPlusIcon(image.id)" size="mini" icon="el-icon-delete" circle style="margin-left:5px")
|
||||||
|
|
||||||
//- dialog Table: Previous Instances User
|
//- dialog Table: Previous Instances User
|
||||||
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstancesUserDialog" :visible.sync="previousInstancesUserDialog.visible" :title="$t('dialog.previous_instances.header')" width="800px")
|
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstancesUserDialog" :visible.sync="previousInstancesUserDialog.visible" :title="$t('dialog.previous_instances.header')" width="1000px")
|
||||||
span(v-text="previousInstancesUserDialog.userRef.displayName" style="font-size:14px")
|
span(v-text="previousInstancesUserDialog.userRef.displayName" style="font-size:14px")
|
||||||
el-input(v-model="previousInstancesUserDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px")
|
el-input(v-model="previousInstancesUserDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px")
|
||||||
data-tables(v-if="previousInstancesUserDialog.visible" v-bind="previousInstancesUserDialogTable" v-loading="previousInstancesUserDialog.loading" style="margin-top:10px")
|
data-tables(v-if="previousInstancesUserDialog.visible" v-bind="previousInstancesUserDialogTable" v-loading="previousInstancesUserDialog.loading" style="margin-top:10px")
|
||||||
el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="120")
|
el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="170")
|
||||||
template(v-once #default="scope")
|
template(v-once #default="scope")
|
||||||
el-tooltip(placement="left")
|
span {{ scope.row.created_at | formatDate('long') }}
|
||||||
template(#content)
|
|
||||||
span {{ scope.row.created_at | formatDate('long') }}
|
|
||||||
span {{ scope.row.created_at | formatDate('short') }}
|
|
||||||
el-table-column(:label="$t('table.previous_instances.world')" prop="name" sortable)
|
el-table-column(:label="$t('table.previous_instances.world')" prop="name" sortable)
|
||||||
template(v-once #default="scope")
|
template(v-once #default="scope")
|
||||||
location(:location="scope.row.location" :hint="scope.row.worldName" :grouphint="scope.row.groupName")
|
location(:location="scope.row.location" :hint="scope.row.worldName" :grouphint="scope.row.groupName")
|
||||||
@@ -3485,16 +3493,13 @@ html
|
|||||||
el-button(type="text" icon="el-icon-close" size="mini" @click="confirmDeleteGameLogUserInstance(scope.row)")
|
el-button(type="text" icon="el-icon-close" size="mini" @click="confirmDeleteGameLogUserInstance(scope.row)")
|
||||||
|
|
||||||
//- dialog Table: Previous Instances World
|
//- dialog Table: Previous Instances World
|
||||||
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstancesWorldDialog" :visible.sync="previousInstancesWorldDialog.visible" :title="$t('dialog.previous_instances.header')" width="800px")
|
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstancesWorldDialog" :visible.sync="previousInstancesWorldDialog.visible" :title="$t('dialog.previous_instances.header')" width="1000px")
|
||||||
span(v-text="previousInstancesWorldDialog.worldRef.name" style="font-size:14px")
|
span(v-text="previousInstancesWorldDialog.worldRef.name" style="font-size:14px")
|
||||||
el-input(v-model="previousInstancesWorldDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px")
|
el-input(v-model="previousInstancesWorldDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px")
|
||||||
data-tables(v-if="previousInstancesWorldDialog.visible" v-bind="previousInstancesWorldDialogTable" v-loading="previousInstancesWorldDialog.loading" style="margin-top:10px")
|
data-tables(v-if="previousInstancesWorldDialog.visible" v-bind="previousInstancesWorldDialogTable" v-loading="previousInstancesWorldDialog.loading" style="margin-top:10px")
|
||||||
el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="120")
|
el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="170")
|
||||||
template(v-once #default="scope")
|
template(v-once #default="scope")
|
||||||
el-tooltip(placement="left")
|
span {{ scope.row.created_at | formatDate('long') }}
|
||||||
template(#content)
|
|
||||||
span {{ scope.row.created_at | formatDate('long') }}
|
|
||||||
span {{ scope.row.created_at | formatDate('short') }}
|
|
||||||
el-table-column(:label="$t('table.previous_instances.instance_name')" prop="name")
|
el-table-column(:label="$t('table.previous_instances.instance_name')" prop="name")
|
||||||
template(v-once #default="scope")
|
template(v-once #default="scope")
|
||||||
location-world(:locationobject="scope.row.$location" :grouphint="scope.row.groupName" :currentuserid="API.currentUser.id")
|
location-world(:locationobject="scope.row.$location" :grouphint="scope.row.groupName" :currentuserid="API.currentUser.id")
|
||||||
|
|||||||
Reference in New Issue
Block a user