mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: #8154, respect stop
This commit is contained in:
@@ -145,18 +145,35 @@ Groups.getOwners = async function (groupName) {
|
|||||||
|
|
||||||
Groups.getOwnersAndMembers = async function (groupName, uid, start, stop) {
|
Groups.getOwnersAndMembers = async function (groupName, uid, start, stop) {
|
||||||
const ownerUids = await db.getSetMembers('group:' + groupName + ':owners');
|
const ownerUids = await db.getSetMembers('group:' + groupName + ':owners');
|
||||||
const [owners, members] = await Promise.all([
|
const countToReturn = stop - start + 1;
|
||||||
user.getUsers(ownerUids, uid),
|
const ownerUidsOnPage = ownerUids.slice(start, stop !== -1 ? stop + 1 : undefined);
|
||||||
user.getUsersFromSet('group:' + groupName + ':members', uid, start, stop),
|
const owners = await user.getUsers(ownerUidsOnPage, uid);
|
||||||
]);
|
|
||||||
owners.forEach(function (user) {
|
owners.forEach(function (user) {
|
||||||
if (user) {
|
if (user) {
|
||||||
user.isOwner = true;
|
user.isOwner = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const nonOwners = members.filter(user => user && user.uid && !ownerUids.includes(user.uid.toString()));
|
let returnUsers = owners;
|
||||||
return owners.concat(nonOwners);
|
const memberStart = Math.max(0, start - ownerUids.length + 1);
|
||||||
|
const memberStop = memberStart + countToReturn;
|
||||||
|
|
||||||
|
async function addMembers(start, stop) {
|
||||||
|
let batch = await user.getUsersFromSet('group:' + groupName + ':members', uid, start, stop);
|
||||||
|
batch = batch.filter(user => user && user.uid && !ownerUids.includes(user.uid.toString()));
|
||||||
|
returnUsers = returnUsers.concat(batch);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stop === -1) {
|
||||||
|
await addMembers(memberStart, -1);
|
||||||
|
} else {
|
||||||
|
while (returnUsers.length < countToReturn) {
|
||||||
|
/* eslint-disable no-await-in-loop */
|
||||||
|
await addMembers(memberStart, memberStop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return countToReturn > 0 ? returnUsers.slice(0, countToReturn) : returnUsers;
|
||||||
};
|
};
|
||||||
|
|
||||||
Groups.getByGroupslug = async function (slug, options) {
|
Groups.getByGroupslug = async function (slug, options) {
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ SocketGroups.loadMoreMembers = async (socket, data) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.after = parseInt(data.after, 10);
|
data.after = parseInt(data.after, 10);
|
||||||
const users = await user.getUsersFromSet('group:' + data.groupName + ':members', socket.uid, data.after, data.after + 9);
|
const users = await groups.getOwnersAndMembers(data.groupName, socket.uid, data.after, data.after + 9);
|
||||||
return {
|
return {
|
||||||
users: users,
|
users: users,
|
||||||
nextStart: data.after + 10,
|
nextStart: data.after + 10,
|
||||||
|
|||||||
Reference in New Issue
Block a user