From c79adf7e9e294f4dbbf9bd68daae10b956fda7a4 Mon Sep 17 00:00:00 2001 From: Kieran Date: Sat, 8 Apr 2023 22:29:38 +0100 Subject: [PATCH] bug: mentions duplication --- packages/app/src/Const.ts | 2 +- packages/app/src/Element/HyperText.tsx | 227 ++++++++--------------- packages/app/src/Element/MediaLink.tsx | 43 +++++ packages/app/src/Element/Note.tsx | 42 ++--- packages/app/src/Element/Reveal.tsx | 25 +++ packages/app/src/Element/RevealMedia.tsx | 33 ++++ packages/app/src/Element/Text.tsx | 93 ++++------ packages/app/src/Util.ts | 2 +- packages/app/src/index.css | 6 +- 9 files changed, 243 insertions(+), 230 deletions(-) create mode 100644 packages/app/src/Element/MediaLink.tsx create mode 100644 packages/app/src/Element/Reveal.tsx create mode 100644 packages/app/src/Element/RevealMedia.tsx diff --git a/packages/app/src/Const.ts b/packages/app/src/Const.ts index dd00120d..47bd2ef9 100644 --- a/packages/app/src/Const.ts +++ b/packages/app/src/Const.ts @@ -95,7 +95,7 @@ export const MnemonicRegex = /^([^\s]+\s){11}[^\s]+$/; * Extract file extensions regex */ // eslint-disable-next-line no-useless-escape -export const FileExtensionRegex = /\.([\w]+)$/i; +export const FileExtensionRegex = /\.([\w]{1,7})$/i; /** * Extract note reactions regex diff --git a/packages/app/src/Element/HyperText.tsx b/packages/app/src/Element/HyperText.tsx index 1e79201b..9c9549db 100644 --- a/packages/app/src/Element/HyperText.tsx +++ b/packages/app/src/Element/HyperText.tsx @@ -1,9 +1,5 @@ -import { useCallback, useState, Children } from "react"; -import { useSelector } from "react-redux"; import { TwitterTweetEmbed } from "react-twitter-embed"; -import { FormattedMessage } from "react-intl"; -import { HexKey } from "@snort/nostr"; import { FileExtensionRegex, YoutubeUrlRegex, @@ -17,161 +13,100 @@ import { NostrNestsRegex, WavlakeRegex, } from "Const"; -import { RootState } from "State/Store"; +import { magnetURIDecode } from "Util"; import SoundCloudEmbed from "Element/SoundCloudEmded"; import MixCloudEmbed from "Element/MixCloudEmbed"; import SpotifyEmbed from "Element/SpotifyEmbed"; import TidalEmbed from "Element/TidalEmbed"; -import { ProxyImg } from "Element/ProxyImg"; import TwitchEmbed from "Element/TwitchEmbed"; import AppleMusicEmbed from "Element/AppleMusicEmbed"; -import NostrNestsEmbed from "Element/NostrNestsEmbed"; import WavlakeEmbed from "Element/WavlakeEmbed"; import LinkPreview from "Element/LinkPreview"; import NostrLink from "Element/NostrLink"; +import RevealMedia from "Element/RevealMedia"; +import MagnetLink from "Element/MagnetLink"; -export default function HyperText({ link, creator }: { link: string; creator: HexKey }) { - const pref = useSelector((s: RootState) => s.login.preferences); - const follows = useSelector((s: RootState) => s.login.follows); - const publicKey = useSelector((s: RootState) => s.login.publicKey); - const [reveal, setReveal] = useState(false); - - const wrapReveal = useCallback( - (e: JSX.Element, a: string): JSX.Element => { - const hideNonFollows = pref.autoLoadMedia === "follows-only" && !follows.includes(creator); - const isMine = creator === publicKey; - const hideMedia = pref.autoLoadMedia === "none" || (!isMine && hideNonFollows); - const hostname = new URL(a).host; - - if (hideMedia && !reveal) { - return ( -
{ - e.stopPropagation(); - setReveal(true); - }} - className="note-invoice"> - -
- ); - } else { - return e; - } - }, - [reveal, pref, follows, publicKey] - ); - - const render = useCallback(() => { - const a = link; - try { - const url = new URL(a); - const youtubeId = YoutubeUrlRegex.test(a) && RegExp.$1; - const tweetId = TweetUrlRegex.test(a) && RegExp.$2; - const tidalId = TidalRegex.test(a) && RegExp.$1; - const soundcloundId = SoundCloudRegex.test(a) && RegExp.$1; - const mixcloudId = MixCloudRegex.test(a) && RegExp.$1; - const isSpotifyLink = SpotifyRegex.test(a); - const isTwitchLink = TwitchRegex.test(a); - const isAppleMusicLink = AppleMusicRegex.test(a); - const isNostrNestsLink = NostrNestsRegex.test(a); - const isWavlakeLink = WavlakeRegex.test(a); - const extension = FileExtensionRegex.test(url.pathname.toLowerCase()) && RegExp.$1; - if (extension && !isAppleMusicLink) { - switch (extension) { - case "gif": - case "jpg": - case "jpeg": - case "jfif": - case "png": - case "bmp": - case "webp": { - return ; - } - case "wav": - case "mp3": - case "ogg": { - return