Files
discord-decomp/modules/media_viewer/native/MediaSourceUtil.tsx
T
2026-11-01 12:12:55 +02:00

920 lines
30 KiB
TypeScript

// Metro module 8117 (f8118).
import { useMemo } from "react";
import { NativeModules } from "react-native";
import { MessageAttachmentFlags, WEBP_RE_IOS } from "../../../Constants";
import * as _MediaFormatTesters from "../../messages/MediaFormatTesters";
import { isImageFile, isWebPlayerVideoUrl, urlMatchesFileExtension } from "../../messages/MediaFormatTesters";
import { hasFlag } from "../../../_bundle/Module1384";
import * as _ObscuredMediaUtils from "../../explicit_media_redaction/ObscuredMediaUtils";
import { getEnabledHarmTypesForMessage, getMediaObscuredReasonFromBitmask } from "../../explicit_media_redaction/ObscuredMediaUtils";
import { ObscuredMediaTypes } from "../../explicit_media_redaction/ExplicitMediaRedactionModels";
import ImageUtils from "../../../utils/native/ImageUtils";
import getDisplayFilename from "../../messages/getDisplayFilename";
import renderMessageMarkup from "../../messages/renderMessageMarkup";
import * as _EmbedUtils from "../../../utils/EmbedUtils";
import { getEffectiveVideoProvider } from "../../../utils/EmbedUtils";
import * as _EmbedUtils2 from "../../messages/native/renderer/EmbedUtils";
import { flattenComponents } from "../../interaction_components/InteractionComponentUtils";
import { ComponentType } from "../../../flow/Server";
import { getUnfurledMediaItemType } from "../../messages/native/renderer/transformMessageComponents";
import { MediaGalleryItemType } from "../../messages/native/renderer/RowGeneratorTypes";
import { isNotNullish } from "../../../utils/GlobalUtils";
import useStateFromSharedValue from "../../reanimated/native/useStateFromSharedValue";
import { GIF_RE_IOS } from "../../../ConstantsIOS";
import AlertActionCreators from "../../../actions/native/AlertActionCreators";
import { intl, t } from "../../../intl/index.native";
import { isPortalExpired } from "../../../components_native/common/NativePortalView";
function $mk79875($env) {
return () => {
const r4 = $env[0];
const r5 = $env.$parent;
const r2 = r5[0];
const r6 = r5[2];
if (r2(r6[18]).MediaType.IMAGE === r4) {
r2(r6[19]).presentImageSaved();
} else if (r2(r6[18]).MediaType.GIF === r4) {
r2(r6[19]).presentGifSaved();
} else if (r2(r6[18]).MediaType.VIDEO === r4) {
r2(r6[19]).presentVideoSaved();
}
r2(r6[20]).MediaViewerAnalytics.trackMediaViewerDownloadButtonTapped();
};
}
let extractMediaFromAttachment, extractMediaFromEmbed, toMediaSourceFromUnfurledMedia, handleDownloadError, c5153_7, c5153_13;
let env5153 = {};
export function isValidImageAttachment(a0) {
if (a0 == null) {
return false;
}
const { filename, height, width } = a0;
return isImageFile(filename) && height != null && height > 0 && width != null && width > 0 && !(a0 != null && (a0.flags != null && hasFlag(a0.flags, MessageAttachmentFlags.IS_THUMBNAIL)));
}
extractMediaFromAttachment = function extractMediaFromAttachment(a0, a1, a2, a3, a4) {
if (a0.width != null && !(a0.width <= 0) && a0.height != null && !(a0.height <= 0)) {
const isMediaObscuredForHarmTypes = _ObscuredMediaUtils.isMediaObscuredForHarmTypes({
type: ObscuredMediaTypes.Attachment,
media: a0
}, getEnabledHarmTypesForMessage(a1));
const isVideoFile = _MediaFormatTesters.isVideoFile(a0.filename);
const videoURI = a0.proxy_url != null && a0.proxy_url !== "" ? a0.proxy_url : a0.url;
const mobileOptimizedSrc = ImageUtils.getMobileOptimizedSrc(videoURI, a0.width, a0.height, isVideoFile ? "png" : void 0);
if (isVideoFile) {
const r143 = {
uri: mobileOptimizedSrc,
messageId: a1.id,
guildId: a3,
channelId: a1.channel_id,
videoURI,
filename: getDisplayFilename(a0),
mediaIndex: a2,
width: a0.width,
height: a0.height,
sourceURI: videoURI,
contentType: a0.content_type,
description: a0.description,
accessoryType: "attachment",
spoiler: null,
flags: null,
obscure: null,
placeholder: null,
contentScanVersion: null,
mediaViewIndex: null,
attachmentId: null
};
let flags3 = a0.flags;
if (flags3 == null) {
flags3 = 0;
}
r143.spoiler = hasFlag(flags3, MessageAttachmentFlags.IS_SPOILER);
r143.flags = a0.flags;
r143.obscure = isMediaObscuredForHarmTypes;
r143.placeholder = a0.placeholder;
r143.contentScanVersion = a0.content_scan_version;
r143.mediaViewIndex = a4;
r143.attachmentId = a0.id;
return r143;
}
const r54 = {
uri: mobileOptimizedSrc,
messageId: a1.id,
guildId: a3,
channelId: a1.channel_id,
filename: getDisplayFilename(a0),
mediaIndex: a2,
width: a0.width,
height: a0.height,
sourceURI: a0.url,
contentType: a0.content_type,
description: a0.description,
accessoryType: "attachment",
spoiler: null,
flags: null,
obscure: null,
placeholder: null,
contentScanVersion: null,
mediaViewIndex: null,
attachmentId: null
};
let flags = a0.flags;
if (flags == null) {
flags = 0;
}
r54.spoiler = hasFlag(flags, MessageAttachmentFlags.IS_SPOILER);
r54.flags = a0.flags;
r54.obscure = isMediaObscuredForHarmTypes;
r54.placeholder = a0.placeholder;
r54.contentScanVersion = a0.content_scan_version;
r54.mediaViewIndex = a4;
r54.attachmentId = a0.id;
const r74 = {
...r54,
uri: videoURI
};
const r85 = getDisplayFilename(a0).toLowerCase().endsWith(".webp");
const r92 = getDisplayFilename(a0).toLowerCase().endsWith(".avif");
let flags2 = a0.flags;
if (flags2 == null) {
flags2 = 0;
}
L18: {
if (hasFlag(flags2, MessageAttachmentFlags.IS_ANIMATED)) {
if (!r85 && !r92) {
break L18;
}
const uRL2 = new URL(videoURI);
uRL2.searchParams.append("animated", "true");
if (r92) {
uRL2.searchParams.append("format", "webp");
}
return [r54, {
...r74,
uri: uRL2.toString()
}];
}
}
if (r92) {
const uRL = new URL(videoURI);
uRL.searchParams.append("format", "webp");
return [r54, {
...r74,
uri: uRL.toString()
}];
}
return videoURI !== mobileOptimizedSrc ? [r54, r74] : r74;
}
};
extractMediaFromEmbed = function extractMediaFromEmbed(a0, a1, a2, a3, a4) {
let r34, r204, contentType, contentType2, contentType3, contentType4, embedURI, type, uri;
let image = a0.image;
if (image == null) {
image = a0.video;
}
if (image == null) {
image = a0.thumbnail;
}
if (image != null) {
const r2 = a0.video != null;
let videoURI = void 0;
if (r2) {
L16: {
const video = a0.video;
const { proxyURL, url, srcIsAnimated } = video;
r34 = url;
if (proxyURL != null) {
r34 = url;
if (proxyURL !== "") {
const uRL = new URL(proxyURL);
const r43 = uRL.pathname.toLowerCase().endsWith(".avif");
const r48 = uRL.pathname.toLowerCase().endsWith(".webp");
if (srcIsAnimated) {
if (!r48) {
r34 = proxyURL;
if (!r43) {
break L16;
}
}
uRL.searchParams.append("animated", "true");
if (r43) {
uRL.searchParams.append("format", "webp");
}
r34 = uRL.toString();
} else {
r34 = proxyURL;
if (r43) {
uRL.searchParams.append("format", "webp");
r34 = uRL.toString();
}
}
}
}
}
videoURI = r34;
}
L27: {
type = a0.type;
const { proxyURL: proxyURL3, url: url2, srcIsAnimated: srcIsAnimated3 } = image;
uri = url2;
if (proxyURL3 != null) {
uri = url2;
if (proxyURL3 !== "") {
const uRL2 = new URL(proxyURL3);
const r82 = uRL2.pathname.toLowerCase().endsWith(".avif");
const r88 = uRL2.pathname.toLowerCase().endsWith(".webp");
if (srcIsAnimated3) {
if (!r88) {
uri = proxyURL3;
if (!r82) {
break L27;
}
}
uRL2.searchParams.append("animated", "true");
if (r82) {
uRL2.searchParams.append("format", "webp");
}
uri = uRL2.toString();
} else {
uri = proxyURL3;
if (r82) {
uRL2.searchParams.append("format", "webp");
uri = uRL2.toString();
}
}
}
}
}
const contentScanVersion = a0.contentScanVersion != null ? a0.contentScanVersion : a0.content_scan_version != null ? a0.content_scan_version : void 0;
const mobileOptimizedSrc = ImageUtils.getMobileOptimizedSrc(uri, image.width, image.height);
const hasSpoilerEmbeds2 = renderMessageMarkup(a1, {
contentMessage: a2
}).hasSpoilerEmbeds;
const isMediaObscuredForHarmTypes = _ObscuredMediaUtils.isMediaObscuredForHarmTypes({
type: ObscuredMediaTypes.Embed,
media: a0
}, getEnabledHarmTypesForMessage(a1));
const isEmbedInline = _EmbedUtils.isEmbedInline({
...a0,
rawTitle: "title" in a0 ? a0.title : "rawTitle" in a0 ? a0.rawTitle : void 0
});
const effectiveVideoProvider = getEffectiveVideoProvider(a0.provider?.name, a0.video?.url);
const shouldPlayVideoInline = _EmbedUtils2.shouldPlayVideoInline(effectiveVideoProvider);
let r160 = shouldPlayVideoInline && a0.video != null;
if (videoURI != null && !shouldPlayVideoInline) {
const name = a0.provider?.name;
if ("contentType" in image) {
contentType = image.contentType;
} else {
const r181 = "content_type" in image;
contentType = void 0;
if (r181) {
let content_type = image.content_type;
if (content_type == null) {
content_type = void 0;
}
contentType = content_type;
}
}
return {
uri: mobileOptimizedSrc,
messageId: a1.id,
guildId: a4,
channelId: a1.channel_id,
mediaIndex: a3,
videoURI,
embedURI: a0.url,
width: image.width,
height: image.height,
isGIFV: type === "gifv",
sourceURI: image.url,
embedProviderName: name,
accessoryType: "embed",
noCarousel: !isEmbedInline,
spoiler: hasSpoilerEmbeds2,
flags: a0.flags,
contentScanVersion,
contentType,
obscure: isMediaObscuredForHarmTypes,
thumbnail: a0.thumbnail != null ? {
width: a0.thumbnail.width,
height: a0.thumbnail.height,
uri: a0.thumbnail.url
} : void 0
};
}
L60: {
if (a0.type !== "video") {
if (!(a0.type !== "rich" && a0.type !== "article") && r160) {
break L60;
}
if ("contentType" in image) {
contentType4 = image.contentType;
} else {
const r349 = "content_type" in image;
contentType4 = void 0;
if (r349) {
let content_type4 = image.content_type;
if (content_type4 == null) {
content_type4 = void 0;
}
contentType4 = content_type4;
}
}
const r341 = {
uri: mobileOptimizedSrc,
messageId: a1.id,
guildId: a4,
channelId: a1.channel_id,
mediaIndex: a3,
width: image.width,
height: image.height,
sourceURI: image.url,
accessoryType: "embed",
noCarousel: !isEmbedInline,
spoiler: hasSpoilerEmbeds2,
flags: a0.flags,
obscure: isMediaObscuredForHarmTypes,
contentScanVersion,
contentType: contentType4
};
const r352 = {
...r341,
uri
};
return uri !== mobileOptimizedSrc ? [r341, r352] : r352;
}
}
const r200 = [];
if (a0.thumbnail != null) {
L71: {
const thumbnail = a0.thumbnail;
const { proxyURL: proxyURL2, url: url3, srcIsAnimated: srcIsAnimated2 } = thumbnail;
r204 = url3;
if (proxyURL2 != null) {
r204 = url3;
if (proxyURL2 !== "") {
const uRL3 = new URL(proxyURL2);
const r216 = uRL3.pathname.toLowerCase().endsWith(".avif");
const r221 = uRL3.pathname.toLowerCase().endsWith(".webp");
if (srcIsAnimated2) {
if (!r221) {
r204 = proxyURL2;
if (!r216) {
break L71;
}
}
uRL3.searchParams.append("animated", "true");
if (r216) {
uRL3.searchParams.append("format", "webp");
}
r204 = uRL3.toString();
} else {
r204 = proxyURL2;
if (r216) {
uRL3.searchParams.append("format", "webp");
r204 = uRL3.toString();
}
}
}
}
}
const r247 = {
uri: ImageUtils.getMobileOptimizedSrc(r204, a0.thumbnail.width, a0.thumbnail.height),
guildId: a4,
spoiler: hasSpoilerEmbeds2,
flags: a0.flags,
obscure: isMediaObscuredForHarmTypes,
contentScanVersion,
contentType: null,
messageId: null,
noCarousel: null,
mediaIndex: null,
accessoryType: "embed",
channelId: null,
sourceURI: null,
width: null,
height: null
};
const thumbnail2 = a0.thumbnail;
if ("contentType" in thumbnail2) {
contentType2 = thumbnail2.contentType;
} else {
const r253 = "content_type" in thumbnail2;
contentType2 = void 0;
if (r253) {
let content_type2 = thumbnail2.content_type;
if (content_type2 == null) {
content_type2 = void 0;
}
contentType2 = content_type2;
}
}
r247.contentType = contentType2;
r247.messageId = a1.id;
r247.noCarousel = !isEmbedInline;
r247.mediaIndex = a3;
r247.channelId = a1.channel_id;
r247.sourceURI = a0.thumbnail.url;
r247.width = a0.thumbnail.width;
r247.height = a0.thumbnail.height;
r200.push(r247);
}
if (r160) {
r160 = a0.video != null;
}
if (r160) {
const r269 = {
uri: mobileOptimizedSrc,
guildId: a4,
spoiler: hasSpoilerEmbeds2,
flags: a0.flags,
obscure: isMediaObscuredForHarmTypes,
contentScanVersion,
contentType: null,
sourceURI: null,
messageId: null,
noCarousel: null,
mediaIndex: null,
accessoryType: "embed",
width: null,
height: null,
channelId: null,
embedURI: null,
embedProviderName: null,
disableDownload: true
};
const video2 = a0.video;
if ("contentType" in video2) {
contentType3 = video2.contentType;
} else {
const r274 = "content_type" in video2;
contentType3 = void 0;
if (r274) {
let content_type3 = video2.content_type;
if (content_type3 == null) {
content_type3 = void 0;
}
contentType3 = content_type3;
}
}
L99: {
r269.contentType = contentType3;
r269.sourceURI = a0.url;
r269.messageId = a1.id;
r269.noCarousel = !isEmbedInline;
r269.mediaIndex = a3;
r269.width = a0.video.width;
r269.height = a0.video.height;
r269.channelId = a1.channel_id;
const video3 = a0.video;
const { proxyURL: proxyURL4, url: url4, srcIsAnimated: srcIsAnimated4 } = video3;
embedURI = url4;
if (proxyURL4 != null) {
embedURI = url4;
if (proxyURL4 !== "") {
const uRL4 = new URL(proxyURL4);
const r303 = uRL4.pathname.toLowerCase().endsWith(".avif");
const r309 = uRL4.pathname.toLowerCase().endsWith(".webp");
if (srcIsAnimated4) {
if (!r309) {
embedURI = proxyURL4;
if (!r303) {
break L99;
}
}
uRL4.searchParams.append("animated", "true");
if (r303) {
uRL4.searchParams.append("format", "webp");
}
embedURI = uRL4.toString();
} else {
embedURI = proxyURL4;
if (r303) {
uRL4.searchParams.append("format", "webp");
embedURI = uRL4.toString();
}
}
}
}
}
r269.embedURI = embedURI;
r269.embedProviderName = effectiveVideoProvider;
r200.push(r269);
}
if (r200.length !== 0) {
return r200.length === 1 ? r200[0] : r200.length === 2 ? [r200[0], r200[1]] : void 0;
}
}
};
toMediaSourceFromUnfurledMedia = function toMediaSourceFromUnfurledMedia(a0, a1, a2, a3, a4) {
const unfurledMediaItemType = getUnfurledMediaItemType(a2);
if (unfurledMediaItemType === MediaGalleryItemType.VISUAL_PLACEHOLDER) {
return null;
}
const VIDEO = MediaGalleryItemType.VIDEO;
const proxyUrl = a2.proxyUrl;
let width = a2.width;
if (width == null) {
width = 0;
}
let height = a2.height;
if (height == null) {
height = 0;
}
const r3 = unfurledMediaItemType === VIDEO;
const mobileOptimizedSrc = ImageUtils.getMobileOptimizedSrc(proxyUrl, width, height, r3 ? "png" : void 0);
const version = a2.contentScanMetadata?.version;
const isMediaObscuredForHarmTypes = _ObscuredMediaUtils.isMediaObscuredForHarmTypes({
type: ObscuredMediaTypes.GenericMedia,
media: a2
}, getEnabledHarmTypesForMessage(a0));
let width2 = a2.width;
if (width2 == null) {
width2 = 0;
}
let height2 = a2.height;
if (height2 == null) {
height2 = 0;
}
const r54 = {
messageId: a0.id,
guildId: a1,
channelId: a0.channel_id,
uri: mobileOptimizedSrc,
sourceURI: a2.url,
width: width2,
height: height2,
contentType: a2.contentType,
description: a3,
spoiler: a4,
obscure: isMediaObscuredForHarmTypes,
contentScanVersion: version,
accessoryType: "component",
mediaIndex: 0
};
const r61 = {
...r54
};
const proxyUrl2 = a2.proxyUrl;
if (r3) {
r61.videoURI = proxyUrl2;
return r61;
}
r61.uri = proxyUrl2;
return a2.proxyUrl !== mobileOptimizedSrc ? [{
...r54
}, r61] : r61;
};
handleDownloadError = function handleDownloadError() {
AlertActionCreators.show({
title: intl.string(t.cV3alD),
body: intl.string(t.r4Zjzv),
isDismissable: true
});
};
c5153_7 = /\.avif$/i;
c5153_13 = {
PORTAL: 0,
0: "PORTAL",
TIKTOK_IFRAME: 1,
1: "TIKTOK_IFRAME",
WEB_FILE_IFRAME: 2,
2: "WEB_FILE_IFRAME",
DEFAULT: 3,
3: "DEFAULT"
};
export function flattenSource(a0, a1) {
return Array.isArray(a0) ? a1 ? a0[a0.length - 1] : a0[0] : a0;
}
export function isValidVideoAttachment(a0) {
return a0 != null && (a0 != null && _MediaFormatTesters.isVideoFile(a0.filename) && a0.proxy_url != null);
}
export function isValidImageEmbed(a0) {
return a0.image != null || a0.thumbnail != null;
}
export function isValidVideoEmbed(a0) {
return a0.video != null;
}
export function isThumbnailAttachment(a0) {
return a0 != null && (a0.flags != null && hasFlag(a0.flags, MessageAttachmentFlags.IS_THUMBNAIL));
}
export function getAttachmentUrl(a0) {
return a0.proxy_url != null && a0.proxy_url !== "" ? a0.proxy_url : a0.url;
}
export { extractMediaFromAttachment };
export function getEmbedUrl({ proxyURL, url, srcIsAnimated }) {
if (proxyURL != null && proxyURL !== "") {
L8: {
const uRL = new URL(proxyURL);
const r21 = uRL.pathname.toLowerCase().endsWith(".avif");
const r26 = uRL.pathname.toLowerCase().endsWith(".webp");
if (srcIsAnimated) {
if (!r26 && !r21) {
break L8;
}
uRL.searchParams.append("animated", "true");
if (r21) {
uRL.searchParams.append("format", "webp");
}
return uRL.toString();
}
if (r21) {
uRL.searchParams.append("format", "webp");
return uRL.toString();
}
}
return proxyURL;
}
return url;
}
export function getEmbedMedia(a0) {
let image = a0.image;
if (image == null) {
image = a0.video;
}
if (image == null) {
image = a0.thumbnail;
}
return image;
}
export { extractMediaFromEmbed };
export function extractMediaFromMessageComponents(a0, a1, a2) {
if (a1.components.length === 0) {
return [];
}
const r38 = [];
const r45 = [...flattenComponents(a1.components).values()];
for (const item of r45) {
const type = item.type;
if (ComponentType.MEDIA_GALLERY === type) {
for (const item2 of item.items) {
const sources2 = toMediaSourceFromUnfurledMedia(a0, a2, item2.media, item2.description, item2.spoiler);
if (sources2 != null) {
r38.push({
sources: sources2,
unfurledMediaItem: item2.media
});
}
}
continue;
}
if (require(dependencyMap[13]).ComponentType.THUMBNAIL === type) {
const sources = toMediaSourceFromUnfurledMedia(a0, a2, item.media, item.description, item.spoiler);
if (sources != null) {
r38.push({
sources,
unfurledMediaItem: item.media
});
}
}
}
return r38;
}
export function extractMediaSourcesFromEmbed(a0, a1, a2, mediaIndex, guildId) {
const media = a2;
const hasSpoilerEmbeds = renderMessageMarkup(a0, {
contentMessage: a1
}).hasSpoilerEmbeds;
let images = a2.images;
if (images == null) {
images = [a2.image];
}
return images.map((image) => {
let r9;
L10: {
const { proxyURL, url, srcIsAnimated } = image;
r9 = url;
if (proxyURL != null) {
r9 = url;
if (proxyURL !== "") {
const uRL = new URL(proxyURL);
const r28 = uRL.pathname.toLowerCase().endsWith(".avif");
const r33 = uRL.pathname.toLowerCase().endsWith(".webp");
if (srcIsAnimated) {
if (!r33) {
r9 = proxyURL;
if (!r28) {
break L10;
}
}
uRL.searchParams.append("animated", "true");
if (r28) {
uRL.searchParams.append("format", "webp");
}
r9 = uRL.toString();
} else {
r9 = proxyURL;
if (r28) {
uRL.searchParams.append("format", "webp");
r9 = uRL.toString();
}
}
}
}
}
const mobileOptimizedSrc = ImageUtils.getMobileOptimizedSrc(r9, image.width, image.height);
const contentScanVersion = media.contentScanVersion;
const uri = r9;
const contentScanVersion2 = contentScanVersion != null ? media.contentScanVersion : media.content_scan_version != null ? media.content_scan_version : void 0;
const obscure = getMediaObscuredReasonFromBitmask({
type: ObscuredMediaTypes.Embed,
media
}, getEnabledHarmTypesForMessage(a0)).length > 0;
return [{
uri: mobileOptimizedSrc,
messageId: a0.id,
guildId,
channelId: a0.channel_id,
mediaIndex,
width: image.width,
height: image.height,
sourceURI: image.url,
accessoryType: "embed",
noCarousel: false,
spoiler: hasSpoilerEmbeds,
flags: media.flags,
obscure,
contentScanVersion: contentScanVersion2,
contentType: image.contentType
}, {
uri,
messageId: a0.id,
guildId,
channelId: a0.channel_id,
mediaIndex,
width: image.width,
height: image.height,
sourceURI: image.url,
accessoryType: "embed",
noCarousel: false,
spoiler: hasSpoilerEmbeds,
contentType: image.contentType,
flags: media.flags,
obscure,
contentScanVersion: contentScanVersion2
}];
});
}
export function extractMediaSourcesFromComponent(a0, a1, a2, a3, a4) {
let initialIndex;
const r24 = flattenComponents(a1).get(a3);
if (r24 == null) {
return null;
}
const type = r24.type;
if (ComponentType.MEDIA_GALLERY === type) {
initialIndex = a4 != null ? a4 <= r24.items.length ? a4 : 0 : 0;
return {
initialIndex,
sources: r24.items.map((item, index) => {
let r16 = toMediaSourceFromUnfurledMedia(a0, a2, item.media, item.description, item.spoiler);
if (r16 == null) {
const r2 = index < initialIndex;
r16 = null;
if (r2) {
initialIndex = initialIndex - 1;
r16 = null;
}
}
return r16;
}).filter(isNotNullish)
};
}
if (ComponentType.THUMBNAIL === type) {
const r34 = toMediaSourceFromUnfurledMedia(a0, a2, r24.media, r24.description, r24.spoiler);
return r34 == null ? null : {
initialIndex: 0,
sources: [r34]
};
}
return null;
}
export function extractMediaSourcesFromMessage(a0, a1, a2, a3) {
let length;
const r11 = [];
const r7 = 0 < a1.attachments.length;
let r2 = 0;
let r0 = 0;
if (r7) {
do {
const r19 = a1.attachments[r2];
const isValidImageAttachment2 = isValidImageAttachment(r19);
const r6 = r2;
const r4 = r0;
if (!(!isValidImageAttachment2 && !(r19 != null && (r19 != null && _MediaFormatTesters.isVideoFile(r19.filename) && r19.proxy_url != null)))) {
const r39 = extractMediaFromAttachment(r19, a0, r6, a2, r4);
if (r39 != null) {
r11.push(r39);
}
}
const r3 = r19 != null && (r19.flags != null && hasFlag(r19.flags, MessageAttachmentFlags.IS_THUMBNAIL)) ? r4 : r4 + 1;
r2 = r6 + 1;
length = a1.attachments.length;
r0 = r3;
} while (r2 < length);
}
const r57 = 0 < a1.embeds.length;
let r58 = 0;
if (r57) {
do {
const r60 = a1.embeds[r58];
const r61 = r58;
if (!(a3 != null && !a3.has(r60.type)) && !(!(r60.image != null || r60.thumbnail != null) && r60.video == null)) {
const r76 = extractMediaFromEmbed(r60, a0, a1, r61, a2);
if (r76 != null) {
r11.push(r76);
}
}
r58 = r61 + 1;
} while (r58 < a1.embeds.length);
}
return r11;
}
export function setMediaSourcePortal(a0, a1) {
const r6 = Array.isArray(a0) ? a0[0] : a0;
if (!(r6 == null || r6.obscure)) {
if (Array.isArray(a0)) {
a0[0].portal = a1;
} else {
a0.portal = a1;
}
}
}
export function getSelectedMediaSource(a0) {
const r6 = a0.index.get();
if (!(r6 < 0) && !(r6 >= a0.sources.length)) {
const r10 = a0.sources[r6];
return r10 != null ? Array.isArray(r10) ? r10[r10.length - 1] : r10 : null;
}
return null;
}
export function useSelectedMediaSource(a0) {
const stateFromSharedValue = useStateFromSharedValue(a0.index);
let c16262_1 = stateFromSharedValue;
return [stateFromSharedValue, useMemo(() => {
if (!(c16262_1 < 0)) {
if (!(c16262_1 >= a0.sources.length)) {
const r9 = a0.sources[c16262_1];
return r9 != null ? Array.isArray(r9) ? r9[r9.length - 1] : r9 : null;
}
}
return null;
}, [a0.sources, stateFromSharedValue])];
}
export function downloadMediaAsset(a0, a1) {
let env16263;
const r0 = env16263 = {
$parent: env5153
};
env16263[0] = a1;
return NativeModules.MediaManager.downloadMediaAsset(a0, a1).then($mk79875(r0), handleDownloadError);
}
export function downloadMediaAssetWithContentType(a0, a1, a2) {
let env16259;
const r1 = env16259 = {
$parent: env5153
};
env16259[0] = a1;
return (a2 != null ? NativeModules.MediaManager.downloadMediaAssetWithContentType(a0, a1, a2) : NativeModules.MediaManager.downloadMediaAsset(a0, a1)).then($mk79875(r1), handleDownloadError);
}
export function getYoutubeClipVideoIdFromURI(a0) {
const r8 = a0.match(/^https:\/\/www\.youtube\.com\/embed\/([A-Za-z0-9_-]*)(\?clip=([A-Za-z0-9_-]+)(&clipt=([A-Za-z0-9_-]+)))?$/);
if (r8 != null && r8.length === 6) {
const videoId = r8[1];
const clip = r8[3];
const clipt = r8[5];
return videoId == null ? null : clip == null ? null : clipt == null ? null : {
videoId,
clip,
clipt
};
}
return null;
}
export function getYoutubeVideoIdFromURI(a0) {
const r6 = a0.match(/^https:\/\/www\.youtube\.com\/embed\/([A-Za-z0-9_-]*)(\?start=([0-9]+))?$/);
return r6 == null ? null : r6[1] == null ? null : r6[1].length === 11 ? r6.length === 4 && r6[3] != null ? {
videoId: r6[1],
start: Number(r6[3])
} : {
videoId: r6[1]
} : null;
}
export { c5153_13 as VideoSourceType };
export function getVideoSourceType(a0) {
return a0.videoURI != null && isWebPlayerVideoUrl(a0.videoURI) ? c5153_13.WEB_FILE_IFRAME : a0.portal != null && !isPortalExpired(a0.portal) ? c5153_13.PORTAL : a0.embedURI != null && a0.embedProviderName === "TikTok" ? c5153_13.TIKTOK_IFRAME : c5153_13.DEFAULT;
}
export function supportOverlayVideoControls(a0) {
return a0.videoURI != null && a0.isGIFV !== true || a0.embedURI != null && a0.embedProviderName === "TikTok";
}
export function isAnimatedWebpSource(a0) {
return a0.sourceURI != null && a0.uri != null && urlMatchesFileExtension(a0.sourceURI, WEBP_RE_IOS) && new URL(a0.uri).searchParams.get("animated") === "true";
}
export function isAnimatedAvifSource(a0) {
return a0.sourceURI != null && a0.uri != null && urlMatchesFileExtension(a0.sourceURI, c5153_7) && new URL(a0.uri).searchParams.get("animated") === "true";
}
export function isGIFSource(a0) {
return urlMatchesFileExtension(a0.sourceURI, GIF_RE_IOS);
}
export function isAnimatedImageSource(a0) {
return urlMatchesFileExtension(a0.sourceURI, GIF_RE_IOS) || a0.sourceURI != null && a0.uri != null && urlMatchesFileExtension(a0.sourceURI, WEBP_RE_IOS) && new URL(a0.uri).searchParams.get("animated") === "true" || a0.sourceURI != null && a0.uri != null && urlMatchesFileExtension(a0.sourceURI, c5153_7) && new URL(a0.uri).searchParams.get("animated") === "true";
}