From 8c6f17fc334c67b82b436d1ae32025889cdc7bd7 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Fri, 7 Jul 2023 15:40:03 +0200 Subject: [PATCH] fix: single sha512 of pubkey per pubkey for avatars --- .../AvatarPlaceHolder/AvatarPlaceHolder.tsx | 18 +++++--- .../AvatarPlaceHolder/ClosedGroupAvatar.tsx | 45 +++++++++---------- ts/hooks/useParamSelector.ts | 2 +- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/ts/components/avatar/AvatarPlaceHolder/AvatarPlaceHolder.tsx b/ts/components/avatar/AvatarPlaceHolder/AvatarPlaceHolder.tsx index 826bbe962..42319aa57 100644 --- a/ts/components/avatar/AvatarPlaceHolder/AvatarPlaceHolder.tsx +++ b/ts/components/avatar/AvatarPlaceHolder/AvatarPlaceHolder.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react'; import { COLORS } from '../../../themes/constants/colors'; import { getInitials } from '../../../util/getInitials'; +import { allowOnlyOneAtATime } from '../../../session/utils/Promise'; type Props = { diameter: number; @@ -8,13 +9,15 @@ type Props = { pubkey: string; }; -const sha512FromPubkey = async (pubkey: string): Promise => { - const buf = await crypto.subtle.digest('SHA-512', new TextEncoder().encode(pubkey)); +const sha512FromPubkeyOneAtAtime = async (pubkey: string) => { + return allowOnlyOneAtATime(`sha512FromPubkey-${pubkey}`, async () => { + const buf = await crypto.subtle.digest('SHA-512', new TextEncoder().encode(pubkey)); - // tslint:disable: prefer-template restrict-plus-operands - return Array.prototype.map - .call(new Uint8Array(buf), (x: any) => ('00' + x.toString(16)).slice(-2)) - .join(''); + // tslint:disable: prefer-template restrict-plus-operands + return Array.prototype.map + .call(new Uint8Array(buf), (x: any) => ('00' + x.toString(16)).slice(-2)) + .join(''); + }); }; // do not do this on every avatar, just cache the values so we can reuse them across the app @@ -46,7 +49,8 @@ function useHashBasedOnPubkey(pubkey: string) { } return; } - void sha512FromPubkey(pubkey).then(sha => { + + void sha512FromPubkeyOneAtAtime(pubkey).then(sha => { if (isInProgress) { setIsLoading(false); // Generate the seed simulate the .hashCode as Java diff --git a/ts/components/avatar/AvatarPlaceHolder/ClosedGroupAvatar.tsx b/ts/components/avatar/AvatarPlaceHolder/ClosedGroupAvatar.tsx index 2a11366e9..0979b9528 100644 --- a/ts/components/avatar/AvatarPlaceHolder/ClosedGroupAvatar.tsx +++ b/ts/components/avatar/AvatarPlaceHolder/ClosedGroupAvatar.tsx @@ -45,7 +45,8 @@ function moveUsAtTheEnd(members: Array, us: string) { function sortAndSlice(sortedMembers: Array, us: string) { const usAtTheEndIfNeeded = moveUsAtTheEnd(sortedMembers, us); // make sure we are not one of the first 2 members if there is enough members - return usAtTheEndIfNeeded.slice(0, 2); // we render at most 2 avatars for closed groups + // we render at most 2 avatars for closed groups + return { firstMember: usAtTheEndIfNeeded?.[0], secondMember: usAtTheEndIfNeeded?.[1] }; } function useGroupMembersAvatars(convoId: string | undefined) { @@ -60,26 +61,24 @@ function useGroupMembersAvatars(convoId: string | undefined) { return sortAndSlice(sortedMembers, us); } -export const ClosedGroupAvatar = React.memo( - ({ - convoId, - size, - onAvatarClick, - }: { - size: number; - convoId: string; - onAvatarClick?: () => void; - }) => { - const memberAvatars = useGroupMembersAvatars(convoId); - const avatarsDiameter = getClosedGroupAvatarsSize(size); - const firstMemberId = memberAvatars?.[0] || ''; - const secondMemberID = memberAvatars?.[1] || ''; +export const ClosedGroupAvatar = ({ + convoId, + size, + onAvatarClick, +}: { + size: number; + convoId: string; + onAvatarClick?: () => void; +}) => { + const memberAvatars = useGroupMembersAvatars(convoId); + const avatarsDiameter = getClosedGroupAvatarsSize(size); + const firstMemberId = memberAvatars?.firstMember || ''; + const secondMemberID = memberAvatars?.secondMember || ''; - return ( -
- - -
- ); - } -); + return ( +
+ + +
+ ); +}; diff --git a/ts/hooks/useParamSelector.ts b/ts/hooks/useParamSelector.ts index 60c3629e2..74ef78556 100644 --- a/ts/hooks/useParamSelector.ts +++ b/ts/hooks/useParamSelector.ts @@ -288,6 +288,6 @@ export function useSortedGroupMembers(convoId: string | undefined): Array