From 6e8d25e53050deab8e15331103241512429e3f8c Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Mon, 2 Aug 2021 09:49:27 +1000 Subject: [PATCH] Fixes mentions in message body and resolve them quicker Relates #1815 --- ts/components/conversation/AddMentions.tsx | 33 +++++-------- ts/session/snode_api/onions.ts | 1 - ts/util/findMember.ts | 55 ---------------------- 3 files changed, 11 insertions(+), 78 deletions(-) delete mode 100644 ts/util/findMember.ts diff --git a/ts/components/conversation/AddMentions.tsx b/ts/components/conversation/AddMentions.tsx index ca5888227..4eb470e87 100644 --- a/ts/components/conversation/AddMentions.tsx +++ b/ts/components/conversation/AddMentions.tsx @@ -1,12 +1,12 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { RenderTextCallbackType } from '../../types/Util'; import classNames from 'classnames'; -import { FindMember } from '../../util/findMember'; -import { useInterval } from '../../hooks/useInterval'; import { PubKey } from '../../session/types'; import { ConversationModel } from '../../models/conversation'; import { UserUtils } from '../../session/utils'; +import { getConversationController } from '../../session/conversations'; +import _ from 'lodash'; interface MentionProps { key: string; @@ -15,29 +15,17 @@ interface MentionProps { } const Mention = (props: MentionProps) => { - const [found, setFound] = React.useState(null); - const [us, setUs] = React.useState(false); - - const tryRenameMention = async () => { - if (!found) { - const foundMember = await FindMember.findMember(props.text.slice(1), props.convoId); - - if (foundMember) { - const itsUs = UserUtils.isUsFromCache(foundMember.id); - setUs(itsUs); - setFound(foundMember); - // FIXME stop this interval once we found it. - } - } - }; - - useInterval(() => void tryRenameMention(), 10000); + const foundConvo = getConversationController().get(props.text.slice(1)); + let us = false; + if (foundConvo) { + us = UserUtils.isUsFromCache(foundConvo.id); + } - if (found) { + if (foundConvo) { // TODO: We don't have to search the database of message just to know that the message is for us! const className = classNames('mention-profile-name', us && 'mention-profile-name-us'); - const displayedName = found.getContactProfileNameOrShortenedPubKey(); + const displayedName = foundConvo.getContactProfileNameOrShortenedPubKey(); return {displayedName}; } else { return {PubKey.shorten(props.text)}; @@ -73,6 +61,7 @@ export class AddMentions extends React.Component { if (!match) { return renderOther({ text, key: 0 }); } + while (match) { count++; const key = count; diff --git a/ts/session/snode_api/onions.ts b/ts/session/snode_api/onions.ts index ec4a1a04f..81d0bd241 100644 --- a/ts/session/snode_api/onions.ts +++ b/ts/session/snode_api/onions.ts @@ -901,7 +901,6 @@ export async function lokiOnionFetch( return retriedResult; } catch (e) { window?.log?.warn('onionFetchRetryable failed ', e.message); - // console.warn('error to show to user'); if (e?.errno === 'ENETUNREACH') { // better handle the no connection state throw new Error(ERROR_CODE_NO_CONNECT); diff --git a/ts/util/findMember.ts b/ts/util/findMember.ts deleted file mode 100644 index 931d70846..000000000 --- a/ts/util/findMember.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ConversationModel } from '../models/conversation'; -import { getConversationController } from '../session/conversations'; -import { MentionsMembersType } from '../state/ducks/conversations'; - -// tslint:disable: no-unnecessary-class -export class FindMember { - public static async findMember( - pubkey: String, - convoId: string, - clearOurInterval?: any - ): Promise { - let groupMembers; - - const groupConvos = getConversationController() - .getConversations() - .filter((d: any) => { - return !d.isPrivate(); - }); - const thisConvo = groupConvos.find((d: any) => { - return d.id === convoId; - }); - - if (!thisConvo) { - // If this gets triggered, is is likely because we deleted the conversation - if (clearOurInterval) { - clearOurInterval(); - } - - return null; - } - - if (thisConvo.isPublic()) { - const publicMembers = (await window.inboxStore?.getState() - .mentionsInput) as MentionsMembersType; - const memberConversations = (publicMembers || []) - .map(publicMember => getConversationController().get(publicMember.authorPhoneNumber)) - .filter((c: any) => !!c); - groupMembers = memberConversations; - } else { - const privateConvos = getConversationController() - .getConversations() - .filter((d: any) => d.isPrivate()); - const members = thisConvo.attributes.members; - if (!members) { - return null; - } - const memberConversations = members - .map((m: any) => privateConvos.find((c: any) => c.id === m)) - .filter((c: any) => !!c); - groupMembers = memberConversations; - } - - return groupMembers.find(({ id: pn }: any) => pn && pn === pubkey); - } -}