From 8647d948dbf0743ebf0127c97e77567503639813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Espino=20Garc=C3=ADa?= Date: Fri, 2 Jun 2023 15:30:36 +0200 Subject: [PATCH] Fix bad use of updatelocaluser on fetchChannelMember (#7381) --- app/actions/remote/channel.ts | 17 +++++++++++++---- app/client/rest/channels.ts | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/actions/remote/channel.ts b/app/actions/remote/channel.ts index df4d6d34d..212e19c83 100644 --- a/app/actions/remote/channel.ts +++ b/app/actions/remote/channel.ts @@ -7,7 +7,7 @@ import {DeviceEventEmitter} from 'react-native'; import {addChannelToDefaultCategory, storeCategories} from '@actions/local/category'; import {markChannelAsViewed, removeCurrentUserFromChannel, setChannelDeleteAt, storeMyChannelsForTeam, switchToChannel} from '@actions/local/channel'; import {switchToGlobalThreads} from '@actions/local/thread'; -import {updateLocalUser} from '@actions/local/user'; +import {getIsCRTEnabled} from '@app/queries/servers/thread'; import {loadCallForChannel} from '@calls/actions/calls'; import {DeepLink, Events, General, Preferences, Screens} from '@constants'; import DatabaseManager from '@database/manager'; @@ -104,7 +104,7 @@ export async function updateChannelMemberSchemeRoles(serverUrl: string, channelI await client.updateChannelMemberSchemeRoles(channelId, userId, isSchemeUser, isSchemeAdmin); if (!fetchOnly) { - return getMemberInChannel(serverUrl, channelId, userId); + return fetchMemberInChannel(serverUrl, channelId, userId); } return {}; @@ -115,13 +115,22 @@ export async function updateChannelMemberSchemeRoles(serverUrl: string, channelI } } -export async function getMemberInChannel(serverUrl: string, channelId: string, userId: string, fetchOnly = false) { +export async function fetchMemberInChannel(serverUrl: string, channelId: string, userId: string, fetchOnly = false) { try { const client = NetworkManager.getClient(serverUrl); const member = await client.getMemberInChannel(channelId, userId); if (!fetchOnly) { - updateLocalUser(serverUrl, member, userId); + const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); + const currentUserId = await getCurrentUserId(database); + if (userId === currentUserId) { + const isCRTEnabled = await getIsCRTEnabled(database); + const channel = await client.getChannel(channelId); + await fetchRolesIfNeeded(serverUrl, member.roles.split(' '), false, false); + await operator.handleMyChannel({channels: [channel], myChannels: [member], isCRTEnabled, prepareRecordsOnly: false}); + } else { + await operator.handleChannelMembership({channelMemberships: [member], prepareRecordsOnly: false}); + } } return {member}; } catch (error) { diff --git a/app/client/rest/channels.ts b/app/client/rest/channels.ts index ce9799eb8..0e2a90cd0 100644 --- a/app/client/rest/channels.ts +++ b/app/client/rest/channels.ts @@ -43,7 +43,7 @@ export interface ClientChannelsMix { searchArchivedChannels: (teamId: string, term: string) => Promise; searchAllChannels: (term: string, teamIds: string[], archivedOnly?: boolean) => Promise; updateChannelMemberSchemeRoles: (channelId: string, userId: string, isSchemeUser: boolean, isSchemeAdmin: boolean) => Promise; - getMemberInChannel: (channelId: string, userId: string) => Promise; + getMemberInChannel: (channelId: string, userId: string) => Promise; } const ClientChannels = >(superclass: TBase) => class extends superclass {