diff --git a/html/src/app.js b/html/src/app.js index b904e86a..6b23bf3f 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -12802,6 +12802,9 @@ speechSynthesis.getVoices(); ); $app.data.branch = configRepository.getString('VRCX_branch'); $app.data.maxTableSize = configRepository.getInt('VRCX_maxTableSize'); + if ($app.data.maxTableSize > 10000) { + $app.data.maxTableSize = 1000; + } database.setmaxTableSize($app.data.maxTableSize); $app.data.photonLobbyTimeoutThreshold = configRepository.getString( 'VRCX_photonLobbyTimeoutThreshold' @@ -14165,6 +14168,9 @@ speechSynthesis.getVoices(); inputErrorMessage: $t('prompt.change_table_size.input_error'), callback: (action, instance) => { if (action === 'confirm' && instance.inputValue) { + if (instance.inputValue > 10000) { + instance.inputValue = 10000; + } this.maxTableSize = instance.inputValue; configRepository.setString( 'VRCX_maxTableSize', @@ -23776,7 +23782,8 @@ speechSynthesis.getVoices(); announcement: {}, members: [], instances: [], - memberRoles: [] + memberRoles: [], + galleries: {} }; $app.methods.showGroupDialog = function (groupId) { @@ -23795,6 +23802,7 @@ speechSynthesis.getVoices(); D.announcement = {}; D.instances = []; D.memberRoles = []; + D.galleries = {}; if (this.groupDialogLastMembers !== groupId) { D.members = []; } @@ -23890,6 +23898,12 @@ speechSynthesis.getVoices(); this.groupDialogLastMembers = groupId; this.getGroupDialogGroupMembers(); } + } else if (this.$refs.groupDialogTabs.currentName === '2') { + this.groupDialogLastActiveTab = 'Gallery'; + if (this.groupDialogLastGallery !== groupId) { + this.groupDialogLastGallery = groupId; + this.getGroupGalleries(); + } } } return args1; @@ -23931,6 +23945,7 @@ speechSynthesis.getVoices(); $app.data.groupDialogLastActiveTab = ''; $app.data.groupDialogLastMembers = ''; + $app.data.groupDialogLastGallery = ''; $app.methods.groupDialogTabClick = function (obj) { var groupId = this.groupDialog.id; @@ -23942,6 +23957,11 @@ speechSynthesis.getVoices(); this.groupDialogLastMembers = groupId; this.getGroupDialogGroupMembers(); } + } else if (obj.label === 'Gallery') { + if (this.groupDialogLastGallery !== groupId) { + this.groupDialogLastGallery = groupId; + this.getGroupGalleries(); + } } else if (obj.label === 'JSON') { this.refreshGroupDialogTreeData(); } @@ -23954,7 +23974,8 @@ speechSynthesis.getVoices(); group: D.ref, announcement: D.announcement, instances: D.instances, - members: D.members + members: D.members, + galleries: D.galleries }); }; @@ -24130,6 +24151,92 @@ speechSynthesis.getVoices(); }); }; + // group gallery + + $app.data.isGroupGalleryLoading = false; + + /* + params: { + groupId: string, + galleryId: string, + n: number, + offset: number + } + */ + API.getGroupGallery = function (params) { + return this.call( + `groups/${params.groupId}/galleries/${params.galleryId}`, + { + method: 'GET', + params: { + n: params.n, + offset: params.offset + } + } + ).then((json) => { + var args = { + json, + params + }; + this.$emit('GROUP:GALLERY', args); + return args; + }); + }; + + API.$on('GROUP:GALLERY', function (args) { + for (var json of args.json) { + if ($app.groupDialog.id === json.groupId) { + if (!$app.groupDialog.galleries[json.galleryId]) { + $app.groupDialog.galleries[json.galleryId] = []; + } + $app.groupDialog.galleries[json.galleryId].push(json); + } + } + }); + + $app.methods.getGroupGalleries = async function () { + this.groupDialog.galleries = {}; + this.isGroupGalleryLoading = true; + for (var i = 0; i < this.groupDialog.ref.galleries.length; i++) { + var gallery = this.groupDialog.ref.galleries[i]; + await this.getGroupGallery(this.groupDialog.id, gallery.id); + } + this.isGroupGalleryLoading = false; + }; + + $app.methods.getGroupGallery = async function (groupId, galleryId) { + try { + var params = { + groupId, + galleryId, + n: 100, + offset: 0 + }; + var count = 50; // 5000 max + for (var i = 0; i < count; i++) { + var args = await API.getGroupGallery(params); + params.offset += 100; + if (args.json.length < 100) { + break; + } + } + } catch (err) { + console.error(err); + } + }; + + $app.methods.groupGalleryStatus = function (gallery) { + var style = {}; + if (!gallery.membersOnly) { + style.joinme = true; + } else if (!gallery.roleIdsToView) { + style.online = true; + } else { + style.busy = true; + } + return style; + }; + // group invite users $app.data.inviteGroupDialog = { diff --git a/html/src/index.pug b/html/src/index.pug index 0e6eacec..33584f03 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -2395,6 +2395,20 @@ html .x-friend-item(v-if="!isGroupMembersDone" v-loading="isGroupMembersLoading" style="width:100%;height:45px;text-align:center" @click="loadMoreGroupMembers") .detail(v-if="!isGroupMembersLoading") span.name {{ $t('dialog.group.members.load_more') }} + el-tab-pane(:label="$t('dialog.group.gallery.header')") + el-button(type="default" size="mini" icon="el-icon-refresh" @click="getGroupGalleries" circle) + el-tabs(type="card" v-loading="isGroupGalleryLoading") + template(v-for="(gallery, index) in groupDialog.ref.galleries") + el-tab-pane + span(slot="label") + span(v-text="gallery.name" style="font-weight:bold;font-size:16px") + i.x-user-status(style="margin-left:5px" :class="groupGalleryStatus(gallery)") + span(style="color:#909399;font-size:12px;margin-left:5px") {{ groupDialog.galleries[gallery.id] ? groupDialog.galleries[gallery.id].length : 0 }} + el-carousel(:interval="0" height="600px") + el-carousel-item(v-for="image in groupDialog.galleries[gallery.id]" :key="image.id") + el-popover(placement="top" width="700px" trigger="click") + img.x-link(slot="reference" v-lazy="image.imageUrl" style="width:100%;height:100%;object-fit:contain") + img.x-link(v-lazy="image.imageUrl" style="height:700px" @click="downloadAndSaveImage(image.imageUrl)") el-tab-pane(:label="$t('dialog.group.json.header')") el-button(type="default" @click="refreshGroupDialogTreeData()" size="mini" icon="el-icon-refresh" circle) el-tree(:data="groupDialog.treeData" style="margin-top:5px;font-size:12px")