From 5266a24d88611df49c87a2bbd48ed21f01a05d1f Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Tue, 16 Aug 2022 13:48:48 +1000 Subject: [PATCH] fix: track hidden mods and admins if we get them --- ts/models/conversation.ts | 63 +++++++++++++------ .../opengroupV2/OpenGroupServerPoller.ts | 1 - .../apis/open_group_api/sogsv3/sogsApiV3.ts | 17 ++++- 3 files changed, 59 insertions(+), 22 deletions(-) diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 34a5c4cd0..da5e1361d 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -1446,6 +1446,8 @@ export class ConversationModel extends Backbone.Model { admins?: Array; image_id?: number; moderators?: Array; + hidden_admins?: Array; + hidden_moderators?: Array; }; }) { if (!infos || isEmpty(infos)) { @@ -1477,26 +1479,21 @@ export class ConversationModel extends Backbone.Model { this.set('uploadCapability', Boolean(upload)); } - if (details.admins && isArray(details.admins)) { - const replacedWithOurRealSessionId = await this.replaceWithOurRealSessionId(details.admins); - const adminChanged = await this.updateGroupAdmins(replacedWithOurRealSessionId, false); - if (adminChanged) { - hasChange = adminChanged; - } - } + const adminChanged = await this.handleModsOrAdminsChanges({ + modsOrAdmins: details.admins, + hiddenModsOrAdmins: details.hidden_admins, + type: 'admins', + }); - if (details.moderators && isArray(details.moderators)) { - const replacedWithOurRealSessionId = await this.replaceWithOurRealSessionId( - details.moderators - ); - const moderatorsChanged = await this.updateGroupModerators( - replacedWithOurRealSessionId, - false - ); - if (moderatorsChanged) { - hasChange = moderatorsChanged; - } - } + hasChange = hasChange || adminChanged; + + const modsChanged = await this.handleModsOrAdminsChanges({ + modsOrAdmins: details.moderators, + hiddenModsOrAdmins: details.hidden_moderators, + type: 'mods', + }); + + hasChange = hasChange || modsChanged; if (this.isOpenGroupV2() && details.image_id && isNumber(details.image_id)) { const roomInfos = OpenGroupData.getV2OpenGroupRoom(this.id); @@ -1926,6 +1923,34 @@ export class ConversationModel extends Backbone.Model { ); return replacedWithOurRealSessionId; } + + private async handleModsOrAdminsChanges({ + modsOrAdmins, + hiddenModsOrAdmins, + type, + }: { + modsOrAdmins?: Array; + hiddenModsOrAdmins?: Array; + type: 'mods' | 'admins'; + }) { + if (modsOrAdmins && isArray(modsOrAdmins)) { + const localModsOrAdmins = [...modsOrAdmins]; + if (hiddenModsOrAdmins && isArray(hiddenModsOrAdmins)) { + localModsOrAdmins.push(...hiddenModsOrAdmins); + } + + const replacedWithOurRealSessionId = await this.replaceWithOurRealSessionId( + uniq(localModsOrAdmins) + ); + + const moderatorsOrAdminsChanged = + type === 'admins' + ? await this.updateGroupAdmins(replacedWithOurRealSessionId, false) + : await this.updateGroupModerators(replacedWithOurRealSessionId, false); + return moderatorsOrAdminsChanged; + } + return false; + } } const throttledAllConversationsDispatch = debounce( diff --git a/ts/session/apis/open_group_api/opengroupV2/OpenGroupServerPoller.ts b/ts/session/apis/open_group_api/opengroupV2/OpenGroupServerPoller.ts index a40fcf3b7..be4c0fb65 100644 --- a/ts/session/apis/open_group_api/opengroupV2/OpenGroupServerPoller.ts +++ b/ts/session/apis/open_group_api/opengroupV2/OpenGroupServerPoller.ts @@ -208,7 +208,6 @@ export class OpenGroupServerPoller { pollInfo: { roomId, infoUpdated: 0, - // infoUpdated: -1, }, }); diff --git a/ts/session/apis/open_group_api/sogsv3/sogsApiV3.ts b/ts/session/apis/open_group_api/sogsv3/sogsApiV3.ts index 2c5bf5c5a..844610e5a 100644 --- a/ts/session/apis/open_group_api/sogsv3/sogsApiV3.ts +++ b/ts/session/apis/open_group_api/sogsv3/sogsApiV3.ts @@ -73,7 +73,13 @@ async function handlePollInfoResponse( token: string; upload: boolean; write: boolean; - details: { admins?: Array; image_id: number; moderators?: Array }; + details: { + admins?: Array; + image_id: number; + moderators?: Array; + hidden_admins?: Array; + hidden_moderators?: Array; + }; }, serverUrl: string, roomIdsStillPolled: Set @@ -109,7 +115,14 @@ async function handlePollInfoResponse( write, upload, subscriberCount: active_users, - details: pick(details, 'admins', 'image_id', 'moderators'), + details: pick( + details, + 'admins', + 'image_id', + 'moderators', + 'hidden_admins', + 'hidden_moderators' + ), }); }