Allow send with edited link preview

Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
This commit is contained in:
automated-signal
2024-07-18 16:50:55 -05:00
committed by GitHub
parent e2587e8e70
commit c85c53c37c
3 changed files with 31 additions and 0 deletions

View File

@@ -51,6 +51,7 @@ import type {
} from '../state/ducks/conversations';
import type { EmojiPickDataType } from './emoji/EmojiPicker';
import type { LinkPreviewType } from '../types/message/LinkPreviews';
import { isSameLinkPreview } from '../types/message/LinkPreviews';
import { MandatoryProfileSharingActions } from './conversation/MandatoryProfileSharingActions';
import { MediaQualitySelector } from './MediaQualitySelector';
@@ -366,6 +367,9 @@ export const CompositionArea = memo(function CompositionArea({
(draftEditMessage != null &&
dropNull(draftEditMessage.quote?.messageId) !==
dropNull(quotedMessageId)) ||
// Link preview of edited message changed
(draftEditMessage != null &&
!isSameLinkPreview(linkPreviewResult, draftEditMessage?.preview)) ||
// Not edit message, but has attachments
(draftEditMessage == null && draftAttachments.length !== 0);

View File

@@ -16,6 +16,7 @@ import * as Errors from '../types/errors';
import type { StickerPackType as StickerPackDBType } from '../sql/Interface';
import type { MIMEType } from '../types/MIME';
import * as Bytes from '../Bytes';
import { sha256 } from '../Crypto';
import * as LinkPreview from '../types/LinkPreview';
import * as Stickers from '../types/Stickers';
import * as VisualAttachment from '../types/VisualAttachment';
@@ -364,6 +365,7 @@ async function getPreview(
data,
size: data.byteLength,
...dimensions,
plaintextHash: Bytes.toHex(sha256(data)),
contentType: stringToMIMEType(withBlob.file.type),
blurHash,
};

View File

@@ -17,3 +17,28 @@ type GenericLinkPreviewType<Image> = {
export type LinkPreviewType = GenericLinkPreviewType<AttachmentType>;
export type LinkPreviewWithHydratedData =
GenericLinkPreviewType<AttachmentWithHydratedData>;
export function isSameLinkPreview(
prev: LinkPreviewType | undefined | null,
next: LinkPreviewType | undefined | null
): boolean {
// Both has to be absent or present
if (prev == null || next == null) {
return prev == null && next == null;
}
if (prev.url !== next.url) {
return false;
}
if (prev.title !== next.title) {
return false;
}
if (prev.description !== next.description) {
return false;
}
if (prev.image?.plaintextHash !== next.image?.plaintextHash) {
return false;
}
return true;
}