Properly style call buttons across app, when already in a call

This commit is contained in:
Scott Nonnenberg 2024-08-27 06:48:41 +10:00 committed by GitHub
parent 3c25092f50
commit c251867699
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 610 additions and 189 deletions

View file

@ -30,8 +30,9 @@ import { imageToBlurHash } from '../util/imageToBlurHash';
import { maybeParseUrl } from '../util/url';
import { sniffImageMimeType } from '../util/sniffImageMimeType';
import { drop } from '../util/drop';
import { linkCallRoute } from '../util/signalRoutes';
import { calling } from './calling';
import { getKeyFromCallLink } from '../util/callLinks';
import { getRoomIdFromCallLink } from '../util/callLinksRingrtc';
const LINK_PREVIEW_TIMEOUT = 60 * SECOND;
@ -266,29 +267,27 @@ export function getLinkPreviewForSend(
export function sanitizeLinkPreview(
item: LinkPreviewResult | LinkPreviewWithHydratedData
): LinkPreviewWithHydratedData {
if (item.image) {
// We eliminate the ObjectURL here, unneeded for send or save
return {
...item,
image: omit(item.image, 'url'),
title: dropNull(item.title),
description: dropNull(item.description),
date: dropNull(item.date),
domain: LinkPreview.getDomain(item.url),
isStickerPack: LinkPreview.isStickerPack(item.url),
isCallLink: LinkPreview.isCallLink(item.url),
};
}
return {
const isCallLink = LinkPreview.isCallLink(item.url);
const base: LinkPreviewWithHydratedData = {
...item,
title: dropNull(item.title),
description: dropNull(item.description),
date: dropNull(item.date),
domain: LinkPreview.getDomain(item.url),
isStickerPack: LinkPreview.isStickerPack(item.url),
isCallLink: LinkPreview.isCallLink(item.url),
isCallLink,
callLinkRoomId: isCallLink ? getRoomIdFromCallLink(item.url) : undefined,
};
if (item.image) {
// We eliminate the ObjectURL here, unneeded for send or save
return {
...base,
image: omit(item.image, 'url'),
};
}
return base;
}
async function getPreview(
@ -577,12 +576,8 @@ async function getCallLinkPreview(
url: string,
_abortSignal: Readonly<AbortSignal>
): Promise<null | LinkPreviewResult> {
const parsedUrl = linkCallRoute.fromUrl(url);
if (parsedUrl == null) {
throw new Error('Failed to parse call link URL');
}
const callLinkRootKey = CallLinkRootKey.parse(parsedUrl.args.key);
const keyString = getKeyFromCallLink(url);
const callLinkRootKey = CallLinkRootKey.parse(keyString);
const callLinkState = await calling.readCallLink(callLinkRootKey);
if (callLinkState == null || callLinkState.revoked) {
return null;