import { Embed } from "revolt.js/dist/api/objects"; import styles from "./Embed.module.scss"; import { useIntermediate } from "../../../../context/intermediate/Intermediate"; interface Props { embed: Embed; width?: number; height: number; } export default function EmbedMedia({ embed, width, height }: Props) { // ! FIXME: temp code // ! add proxy function to client function proxyImage(url: string) { return "https://jan.revolt.chat/proxy?url=" + encodeURIComponent(url); } if (embed.type !== "Website") return null; const { openScreen } = useIntermediate(); switch (embed.special?.type) { case "YouTube": return ( <iframe src={`https://www.youtube-nocookie.com/embed/${embed.special.id}?modestbranding=1`} allowFullScreen style={{ height }} /> ); case "Twitch": return ( <iframe src={`https://player.twitch.tv/?${embed.special.content_type.toLowerCase()}=${ embed.special.id }&parent=${window.location.hostname}&autoplay=false`} frameBorder="0" allowFullScreen scrolling="no" style={{ height }} /> ); case "Spotify": return ( <iframe src={`https://open.spotify.com/embed/${embed.special.content_type}/${embed.special.id}`} frameBorder="0" allowFullScreen allowTransparency style={{ height }} /> ); case "Soundcloud": return ( <iframe src={`https://w.soundcloud.com/player/?url=${encodeURIComponent( embed.url!, )}&color=%23FF7F50&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true`} frameBorder="0" scrolling="no" style={{ height }} /> ); case "Bandcamp": { return ( <iframe src={`https://bandcamp.com/EmbeddedPlayer/${embed.special.content_type.toLowerCase()}=${ embed.special.id }/size=large/bgcol=181a1b/linkcol=056cc4/tracklist=false/transparent=true/`} seamless style={{ height }} /> ); } default: { if (embed.image) { let url = embed.image.url; return ( <img className={styles.image} src={proxyImage(url)} style={{ width, height }} onClick={() => openScreen({ id: "image_viewer", embed: embed.image, }) } onMouseDown={(ev) => ev.button === 1 && window.open(url, "_blank") } /> ); } } } return null; }