From a1da0a720f5d9dc149f5d615f86428dc94d482b2 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Sat, 1 Feb 2025 01:09:46 +0800 Subject: [PATCH] fix: remove from channel (#8539) --- app/actions/remote/channel.ts | 41 +++++++++++++++++++++-------------- package-lock.json | 2 +- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/app/actions/remote/channel.ts b/app/actions/remote/channel.ts index fc98c16da..4786d7e7e 100644 --- a/app/actions/remote/channel.ts +++ b/app/actions/remote/channel.ts @@ -411,14 +411,32 @@ export async function fetchAllMyChannelsForAllTeams(serverUrl: string, since: nu } const client = NetworkManager.getClient(serverUrl); const {operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + + async function fetchAllMemberships() { + const results: ChannelMembership[] = []; + async function fetchNextMembershipsPage(page: number) { + try { + const memberships = await client.getAllMyChannelMembersFromAllTeams(page, General.CHANNEL_MEMBERS_CHUNK_SIZE, groupLabel); + results.push(...memberships); + if (memberships.length < General.CHANNEL_MEMBERS_CHUNK_SIZE) { + return; + } + + await fetchNextMembershipsPage(page + 1); + } catch (e) { + logError(`fetchAllMyChannelsForAllTeams error: Failed to fetch memberships for page ${page} `, e); + } + } + + await fetchNextMembershipsPage(0); + return results; + } + const promises: [Promise, Promise] = [ client.getAllChannelsFromAllTeams(since, since > 0, groupLabel), - client.getAllMyChannelMembersFromAllTeams(0, General.CHANNEL_MEMBERS_CHUNK_SIZE, groupLabel), + fetchAllMemberships(), ]; - const [channels, memberships] = await Promise.all(promises); - const remaining = Math.floor(channels.length / General.CHANNEL_MEMBERS_CHUNK_SIZE); - const remainingMembershipsPromises = []; const categoriesPromises = []; const teamIdsSet = channels.reduce>((set, c) => { @@ -427,24 +445,15 @@ export async function fetchAllMyChannelsForAllTeams(serverUrl: string, since: nu } return set; }, new Set()); + for (const teamId of teamIdsSet) { categoriesPromises.push(client.getCategories('me', teamId, groupLabel)); } - if (remaining > 0) { - for (let i = 1; i <= remaining; i++) { - remainingMembershipsPromises.push(client.getAllMyChannelMembersFromAllTeams(i, General.CHANNEL_MEMBERS_CHUNK_SIZE, groupLabel)); - } - } - - const results = await Promise.all([...remainingMembershipsPromises, ...categoriesPromises]); const categories: CategoryWithChannels[] = []; + const results = await Promise.all(categoriesPromises); for (const result of results) { - if (Array.isArray(result)) { - memberships.push(...result); - } else if ('categories' in result) { - categories.push(...result.categories); - } + categories.push(...result.categories); } if (!fetchOnly) { diff --git a/package-lock.json b/package-lock.json index d39f94d59..a93119f26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "mattermost-mobile", - "version": "2.24.0", + "version": "2.25.0", "hasInstallScript": true, "license": "Apache 2.0", "dependencies": {