Message: Do not detect language while animating Message List
This commit is contained in:
parent
f900ae285c
commit
3b17344a1a
@ -600,9 +600,12 @@ const Message: FC<OwnProps & StateProps> = ({
|
|||||||
text, photo, video, audio, voice, document, sticker, contact, poll, webPage, invoice, location, action, game,
|
text, photo, video, audio, voice, document, sticker, contact, poll, webPage, invoice, location, action, game,
|
||||||
} = getMessageContent(message);
|
} = getMessageContent(message);
|
||||||
|
|
||||||
useDetectChatLanguage(message, !shouldDetectChatLanguage);
|
const detectedLanguage = useTextLanguage(
|
||||||
|
text?.text,
|
||||||
const detectedLanguage = useTextLanguage(areTranslationsEnabled ? text?.text : undefined);
|
!(areTranslationsEnabled || shouldDetectChatLanguage),
|
||||||
|
getIsMessageListReady,
|
||||||
|
);
|
||||||
|
useDetectChatLanguage(message, detectedLanguage, !shouldDetectChatLanguage, getIsMessageListReady);
|
||||||
|
|
||||||
const shouldTranslate = isMessageTranslatable(message, !requestedChatTranslationLanguage);
|
const shouldTranslate = isMessageTranslatable(message, !requestedChatTranslationLanguage);
|
||||||
const { isPending: isTranslationPending, translatedText } = useMessageTranslation(
|
const { isPending: isTranslationPending, translatedText } = useMessageTranslation(
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
import type { ApiMessage } from '../../../../api/types';
|
import type { ApiMessage } from '../../../../api/types';
|
||||||
import { SERVICE_NOTIFICATIONS_USER_ID } from '../../../../config';
|
import type { Signal } from '../../../../util/signals';
|
||||||
|
|
||||||
import { getActions } from '../../../../global';
|
import { getActions } from '../../../../global';
|
||||||
import useTextLanguage from '../../../../hooks/useTextLanguage';
|
|
||||||
import LimitedMap from '../../../../util/primitives/LimitedMap';
|
import LimitedMap from '../../../../util/primitives/LimitedMap';
|
||||||
import { throttle } from '../../../../util/schedulers';
|
import { throttle } from '../../../../util/schedulers';
|
||||||
|
import { useEffect } from '../../../../lib/teact/teact';
|
||||||
|
|
||||||
// https://github.com/DrKLO/Telegram/blob/dfd74f809e97d1ecad9672fc7388cb0223a95dfc/TMessagesProj/src/main/java/org/telegram/messenger/TranslateController.java#L35
|
// https://github.com/DrKLO/Telegram/blob/dfd74f809e97d1ecad9672fc7388cb0223a95dfc/TMessagesProj/src/main/java/org/telegram/messenger/TranslateController.java#L35
|
||||||
const MIN_MESSAGES_CHECKED = 8;
|
const MIN_MESSAGES_CHECKED = 8;
|
||||||
@ -21,15 +22,15 @@ type MessageMetadata = {
|
|||||||
|
|
||||||
const CHAT_STATS = new Map<string, LimitedMap<number, MessageMetadata>>();
|
const CHAT_STATS = new Map<string, LimitedMap<number, MessageMetadata>>();
|
||||||
|
|
||||||
export default function useDetectChatLanguage(message: ApiMessage, isDisabled?: boolean) {
|
export default function useDetectChatLanguage(
|
||||||
const canProcess = !isDisabled && message.chatId !== SERVICE_NOTIFICATIONS_USER_ID;
|
message: ApiMessage, detectedLanguage?: string, isDisabled?: boolean, getIsReady?: Signal<boolean>,
|
||||||
|
) {
|
||||||
|
useEffect(() => {
|
||||||
|
if (isDisabled || (getIsReady && !getIsReady())) return;
|
||||||
|
|
||||||
const isTranslatable = Boolean(message.content.text?.text.length);
|
const isTranslatable = Boolean(message.content.text?.text.length);
|
||||||
const detectedLanguage = useTextLanguage(message.content.text?.text, !canProcess);
|
processMessageMetadata(message.chatId, message.id, isTranslatable, detectedLanguage);
|
||||||
|
}, [message, detectedLanguage, isDisabled, getIsReady]);
|
||||||
if (!canProcess) return;
|
|
||||||
|
|
||||||
processMessageMetadata(message.chatId, message.id, isTranslatable, detectedLanguage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const throttledMakeChatDecision = throttle(makeChatDecision, THROTTLE_DELAY);
|
const throttledMakeChatDecision = throttle(makeChatDecision, THROTTLE_DELAY);
|
||||||
|
|||||||
@ -1,19 +1,21 @@
|
|||||||
import { useState } from '../lib/teact/teact';
|
import { useEffect, useState } from '../lib/teact/teact';
|
||||||
|
|
||||||
|
import type { Signal } from '../util/signals';
|
||||||
|
|
||||||
import { detectLanguage } from '../util/languageDetection';
|
import { detectLanguage } from '../util/languageDetection';
|
||||||
|
|
||||||
import useSyncEffect from './useSyncEffect';
|
export default function useTextLanguage(text?: string, isDisabled?: boolean, getIsReady?: Signal<boolean>) {
|
||||||
|
|
||||||
export default function useTextLanguage(text?: string, isDisabled?: boolean) {
|
|
||||||
const [language, setLanguage] = useState<string | undefined>();
|
const [language, setLanguage] = useState<string | undefined>();
|
||||||
|
|
||||||
useSyncEffect(() => {
|
useEffect(() => {
|
||||||
if (text && !isDisabled) {
|
if (isDisabled || (getIsReady && !getIsReady())) return;
|
||||||
|
|
||||||
|
if (text) {
|
||||||
detectLanguage(text).then(setLanguage);
|
detectLanguage(text).then(setLanguage);
|
||||||
} else {
|
} else {
|
||||||
setLanguage(undefined);
|
setLanguage(undefined);
|
||||||
}
|
}
|
||||||
}, [isDisabled, text]);
|
}, [isDisabled, text, getIsReady]);
|
||||||
|
|
||||||
return language;
|
return language;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user