diff --git a/src/components/middle/message/helpers/copyOptions.ts b/src/components/middle/message/helpers/copyOptions.ts index 79d922737..0d919c57f 100644 --- a/src/components/middle/message/helpers/copyOptions.ts +++ b/src/components/middle/message/helpers/copyOptions.ts @@ -1,7 +1,14 @@ import { ApiMediaFormat, ApiMessage } from '../../../../api/types'; import * as mediaLoader from '../../../../util/mediaLoader'; -import { getMessageMediaHash, getMessagePhoto, getMessageText } from '../../../../modules/helpers'; +import { + getMessageMediaHash, + getMessagePhoto, + getMessageText, + getMessageWebPagePhoto, + getMessageWebPageVideo, + hasMessageLocalBlobUrl, +} from '../../../../modules/helpers'; import { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard'; type ICopyOptions = { @@ -14,16 +21,18 @@ export function getMessageCopyOptions( ): ICopyOptions { const options: ICopyOptions = []; const text = getMessageText(message); - const photo = getMessagePhoto(message); - const mediaHash = getMessageMediaHash(message, 'inline')!; - const canImageBeCopied = photo && mediaHash && CLIPBOARD_ITEM_SUPPORTED; + const photo = getMessagePhoto(message) + || (!getMessageWebPageVideo(message) ? getMessageWebPagePhoto(message) : undefined); + const mediaHash = getMessageMediaHash(message, 'inline'); + const canImageBeCopied = photo && (mediaHash || hasMessageLocalBlobUrl(message)) && CLIPBOARD_ITEM_SUPPORTED; const selection = window.getSelection(); if (canImageBeCopied) { options.push({ label: 'lng_context_copy_image', handler: () => { - mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl).then(copyImageToClipboard); + Promise.resolve(mediaHash ? mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl) : photo!.blobUrl) + .then(copyImageToClipboard); if (afterEffect) { afterEffect(); diff --git a/src/modules/helpers/messageMedia.ts b/src/modules/helpers/messageMedia.ts index a026fdb1d..d719aaafd 100644 --- a/src/modules/helpers/messageMedia.ts +++ b/src/modules/helpers/messageMedia.ts @@ -171,11 +171,7 @@ export function getMessageMediaHash( case 'pictogram': return `${base}?size=m`; case 'inline': - if (hasMessageLocalBlobUrl(message)) { - return undefined; - } - - return `${base}?size=x`; + return !hasMessageLocalBlobUrl(message) ? `${base}?size=x` : undefined; case 'viewerPreview': return `${base}?size=x`; case 'viewerFull': diff --git a/src/util/clipboard.ts b/src/util/clipboard.ts index 80196514e..366676ffe 100644 --- a/src/util/clipboard.ts +++ b/src/util/clipboard.ts @@ -27,7 +27,8 @@ export const copyTextToClipboard = (str: string): void => { document.body.removeChild(textCopyEl); }; -export const copyImageToClipboard = (imageUrl: string) => { +export const copyImageToClipboard = (imageUrl?: string) => { + if (!imageUrl) return; const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); const imageEl = new Image(); diff --git a/src/util/fastSmoothScroll.ts b/src/util/fastSmoothScroll.ts index cdef41e24..9338d3665 100644 --- a/src/util/fastSmoothScroll.ts +++ b/src/util/fastSmoothScroll.ts @@ -113,6 +113,8 @@ function scrollWithJs( if (forceDuration === 0) { container.scrollTop = target; + isAnimating = false; + return; }