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

148 lines
5.4 KiB
TypeScript

// Metro module 7980 (f7981).
import _slicedToArray from "../../../_bundle/_slicedToArray";
import { useState, useEffect, memo } from "react";
import { Image as Image2, NativeModules, View } from "react-native";
import { EMPTY_STRING_SNOWFLAKE_ID, NOOP } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module12 from "../../../_bundle/Module12";
import useGetIsMounted from "../../../hooks/useGetIsMounted";
import VideoBackgroundManager from "./VideoBackgroundManager";
import { hexToRgb } from "../../../utils/ColorUtils";
import Module712 from "../../../_bundle/Module712";
import MobileVisualRefreshExperiment from "../../themes/experiments/MobileVisualRefreshExperiment";
import useDisplayProfile from "../../user_profile/hooks/useDisplayProfile";
import { useVideoTileGradientColors } from "./useVideoTileGradientColors";
import maybeFetchUserProfile from "../../user_profile/maybeFetchUserProfile";
import * as _native from "../../../design/void/native";
import { Avatar } from "../../../design/void/native";
import Module4611 from "../../../_bundle/Module4611";
let useStyles, c5046_13;
const useDominantRGBFromImage = function useDominantRGBFromImage(url, source) {
let c16141_1 = source;
const isArray = Array.isArray(source);
let r11 = source;
if (isArray) {
const r18 = source[0];
c16141_1 = r18;
r11 = r18;
}
const getIsMounted = useGetIsMounted();
let c16141_2 = getIsMounted;
let r23 = url != null ? VideoBackgroundManager.cachedDominantColors[url] : void 0;
if (r23 == null) {
r23 = hexToRgb(Module712.unsafe_rawColors.PRIMARY_800);
}
const [state, setState] = useState(r23);
useEffect(() => {
if (c16141_1 != null && url != null) {
if (VideoBackgroundManager.cachedDominantColors[url] == null) {
(typeof c16141_1 === "number" ? NativeModules.ImageManager.getDominantColorsLocalAsset(Image2.resolveAssetSource(c16141_1)) : NativeModules.ImageManager.getDominantColors(Image2.resolveAssetSource(c16141_1))).then((result) => {
if (c16141_2()) {
const r10 = _slicedToArray(result[0], 3);
const r11 = {
r: r10[0],
g: r10[1],
b: r10[2]
};
setState(r11);
VideoBackgroundManager.cachedDominantColors[url] = r11;
}
}).catch(NOOP);
} else {
setState(VideoBackgroundManager.cachedDominantColors[url]);
}
}
}, [r11, url, getIsMounted]);
return state;
};
const VideoBackground = function VideoBackground(props) {
const { style, url, isStageCall = false, avatarStyle, user, guildId, renderVideoDetails, ...props2 } = props;
const styles = useStyles();
const source = c5046_13(url);
const dominantRGBFromImage = useDominantRGBFromImage(url, source);
const backgroundColor = `rgb(${dominantRGBFromImage.r}, ${dominantRGBFromImage.g}, ${dominantRGBFromImage.b})`;
const r23 = MobileVisualRefreshExperiment("VideoBackground-native");
let c16142_1 = r23;
let r46 = user?.id;
if (r46 == null) {
r46 = EMPTY_STRING_SNOWFLAKE_ID;
}
const EMPTY_STRING_SNOWFLAKE_ID2 = r46;
const displayProfile = useDisplayProfile(EMPTY_STRING_SNOWFLAKE_ID2, guildId);
const r50 = displayProfile == null;
let r51 = void 0;
if (!r50) {
const themeColors = displayProfile.themeColors;
r51 = themeColors == null ? void 0 : themeColors[0];
}
if (r51 == null) {
r51 = null;
}
const r54 = displayProfile == null;
let r24 = void 0;
if (!r54) {
const themeColors2 = displayProfile.themeColors;
r24 = themeColors2 == null ? void 0 : themeColors2[1];
}
if (r24 == null) {
r24 = null;
}
const r57 = r23 && r51 != null && r24 != null;
const videoTileGradientColors = useVideoTileGradientColors(r57 ? r51 : null, r57 ? r24 : null);
useEffect(() => {
if (EMPTY_STRING_SNOWFLAKE_ID2 !== EMPTY_STRING_SNOWFLAKE_ID && c16142_1) {
maybeFetchUserProfile(EMPTY_STRING_SNOWFLAKE_ID2, void 0, {
guildId,
dispatchWait: true
});
}
}, [r23, EMPTY_STRING_SNOWFLAKE_ID2, guildId]);
if (source == null) {
return null;
}
let r68 = renderVideoDetails == null ? void 0 : renderVideoDetails();
if (r68 == null) {
r68 = null;
}
const style2 = [style, styles.videoBackground, r57 ? null : {
backgroundColor
}, r68 != null ? styles.videoDetailsSpacer : null];
const r86 = <Avatar source={source} {...props2} avatarStyle={[avatarStyle, isStageCall ? r57 ? null : {
backgroundColor
} : null]} isStageCall={isStageCall} />;
return videoTileGradientColors != null ? <Module4611 colors={videoTileGradientColors} start={{
x: 0,
y: 0
}} end={{
x: 0,
y: 1
}} style={style2}>
{r86}
{r68}
</Module4611> : <View style={style2}>
{r86}
{r68}
</View>;
};
useStyles = createStyles({
videoBackground: {
alignItems: "center"
},
videoDetailsSpacer: {
paddingTop: 12
}
});
c5046_13 = Module12.memoize((a0) => a0 == null ? null : a0 !== "" ? typeof a0 !== "number" ? {
uri: a0
} : a0 : null);
VideoBackground.AvatarSizes = _native.AvatarSizes;
const r48 = memo(VideoBackground);
export default r48;
export const AvatarSizes = _native.AvatarSizes;
export { c5046_13 as memoizedImageSource };
export { useDominantRGBFromImage };
export function useDominantColorFromImage(a0, a1) {
const dominantRGBFromImage = useDominantRGBFromImage(a0, a1);
return `rgb(${dominantRGBFromImage.r}, ${dominantRGBFromImage.g}, ${dominantRGBFromImage.b})`;
}