From e053e5dc0c6ecf435b4f0ba672f891a57d678495 Mon Sep 17 00:00:00 2001 From: hzrd149 Date: Mon, 4 Mar 2024 11:14:17 +0000 Subject: [PATCH] add option to automatically decrypt DMs --- .changeset/shiny-ghosts-hear.md | 5 +++ src/services/settings/migrations.ts | 39 +++---------------- src/views/dms/chat.tsx | 10 +++-- .../dms/components/decrypt-placeholder.tsx | 16 +++++++- src/views/settings/index.tsx | 3 +- src/views/settings/performance-settings.tsx | 21 +++++----- 6 files changed, 43 insertions(+), 51 deletions(-) create mode 100644 .changeset/shiny-ghosts-hear.md diff --git a/.changeset/shiny-ghosts-hear.md b/.changeset/shiny-ghosts-hear.md new file mode 100644 index 000000000..b1ed9b62a --- /dev/null +++ b/.changeset/shiny-ghosts-hear.md @@ -0,0 +1,5 @@ +--- +"nostrudel": minor +--- + +Add option to automatically decrypt DMs diff --git a/src/services/settings/migrations.ts b/src/services/settings/migrations.ts index 4082faea9..46e3bc612 100644 --- a/src/services/settings/migrations.ts +++ b/src/services/settings/migrations.ts @@ -33,34 +33,12 @@ export type AppSettingsV3 = Omit & { version: 3; quick export type AppSettingsV4 = Omit & { version: 4; loadOpenGraphData: boolean }; export type AppSettingsV5 = Omit & { version: 5; hideUsernames: boolean }; export type AppSettingsV6 = Omit & { version: 6; noteDifficulty: number | null }; -export type AppSettingsV7 = Omit & { version: 7; defaultRelays: string[] }; +export type AppSettingsV7 = Omit & { version: 7; autoDecryptDMs: boolean }; -export function isV0(settings: { version: number }): settings is AppSettingsV0 { - return settings.version === undefined || settings.version === 0; -} -export function isV1(settings: { version: number }): settings is AppSettingsV1 { - return settings.version === 1; -} -export function isV2(settings: { version: number }): settings is AppSettingsV2 { - return settings.version === 2; -} -export function isV3(settings: { version: number }): settings is AppSettingsV3 { - return settings.version === 3; -} -export function isV4(settings: { version: number }): settings is AppSettingsV4 { - return settings.version === 4; -} -export function isV5(settings: { version: number }): settings is AppSettingsV5 { - return settings.version === 5; -} -export function isV6(settings: { version: number }): settings is AppSettingsV6 { - return settings.version === 6; -} - -export type AppSettings = AppSettingsV6; +export type AppSettings = AppSettingsV7; export const defaultSettings: AppSettings = { - version: 6, + version: 7, theme: "default", colorMode: "system", defaultRelays: ["wss://relay.damus.io", "wss://nostr.wine", "wss://nos.lol", "wss://welcome.nostr.wine"], @@ -74,6 +52,8 @@ export const defaultSettings: AppSettings = { showSignatureVerification: false, noteDifficulty: null, + autoDecryptDMs: false, + quickReactions: ["🤙", "❤️", "🤣", "😍", "🔥"], autoPayWithWebLN: true, @@ -89,14 +69,7 @@ export const defaultSettings: AppSettings = { }; export function upgradeSettings(settings: { version: number }): AppSettings | null { - if (isV0(settings)) return { ...defaultSettings, ...settings, version: 6 }; - if (isV1(settings)) return { ...defaultSettings, ...settings, version: 6 }; - if (isV2(settings)) return { ...defaultSettings, ...settings, version: 6 }; - if (isV3(settings)) return { ...defaultSettings, ...settings, version: 6 }; - if (isV4(settings)) return { ...defaultSettings, ...settings, version: 6 }; - if (isV5(settings)) return { ...defaultSettings, ...settings, version: 6 }; - if (isV6(settings)) return settings; - return null; + return { ...defaultSettings, ...settings, version: 7 }; } export function parseAppSettings(event: NostrEvent): AppSettings { diff --git a/src/views/dms/chat.tsx b/src/views/dms/chat.tsx index e1d56e2f8..2494b5dc8 100644 --- a/src/views/dms/chat.tsx +++ b/src/views/dms/chat.tsx @@ -25,6 +25,7 @@ import DirectMessageBlock from "./components/direct-message-block"; import useParamsProfilePointer from "../../hooks/use-params-pubkey-pointer"; import useUserMailboxes from "../../hooks/use-user-mailboxes"; import RelaySet from "../../classes/relay-set"; +import useAppSettings from "../../hooks/use-app-settings"; /** This is broken out from DirectMessageChatPage for performance reasons. Don't use outside of file */ const ChatLog = memo(({ timeline }: { timeline: TimelineLoader }) => { @@ -46,6 +47,7 @@ const ChatLog = memo(({ timeline }: { timeline: TimelineLoader }) => { function DirectMessageChatPage({ pubkey }: { pubkey: string }) { const account = useCurrentAccount()!; + const { autoDecryptDMs } = useAppSettings(); const navigate = useNavigate(); const location = useLocation(); const { getOrCreateContainer, addToQueue, startQueue } = useDecryptionContext(); @@ -124,9 +126,11 @@ function DirectMessageChatPage({ pubkey }: { pubkey: string }) { - + {!autoDecryptDMs && ( + + )} ): JSX.Element { const account = useCurrentAccount(); + const { autoDecryptDMs } = useAppSettings(); const isOwn = account?.pubkey === message.pubkey; const [loading, setLoading] = useState(false); const { requestDecrypt, plaintext, error } = useDecryptionContainer( @@ -32,6 +34,18 @@ export default function DecryptPlaceholder({ setLoading(false); }; + // auto decrypt + useEffect(() => { + if (autoDecryptDMs && !plaintext && !error) { + setLoading(true); + requestDecrypt() + .catch(() => {}) + .finally(() => { + setLoading(false); + }); + } + }, [autoDecryptDMs, error, plaintext]); + if (plaintext) { return children(plaintext); } diff --git a/src/views/settings/index.tsx b/src/views/settings/index.tsx index 803d2e0a6..833ff4c29 100644 --- a/src/views/settings/index.tsx +++ b/src/views/settings/index.tsx @@ -1,6 +1,5 @@ import { Button, Flex, Accordion, Link, useToast } from "@chakra-ui/react"; -import { Link as RouterLink } from "react-router-dom"; -import { GithubIcon, ToolsIcon } from "../../components/icons"; +import { GithubIcon } from "../../components/icons"; import LightningSettings from "./lightning-settings"; import DatabaseSettings from "./database-settings"; import DisplaySettings from "./display-settings"; diff --git a/src/views/settings/performance-settings.tsx b/src/views/settings/performance-settings.tsx index 4b190210a..a7c6214ba 100644 --- a/src/views/settings/performance-settings.tsx +++ b/src/views/settings/performance-settings.tsx @@ -13,17 +13,6 @@ import { Input, Link, FormErrorMessage, - Code, - Button, - Modal, - ModalOverlay, - ModalContent, - ModalHeader, - ModalCloseButton, - ModalBody, - useDisclosure, - Text, - Heading, } from "@chakra-ui/react"; import { safeUrl } from "../../helpers/parse"; import { AppSettings } from "../../services/settings/migrations"; @@ -31,7 +20,6 @@ import { PerformanceIcon } from "../../components/icons"; export default function PerformanceSettings() { const { register, formState } = useFormContext(); - const cacheDetails = useDisclosure(); return ( @@ -107,6 +95,15 @@ export default function PerformanceSettings() { Enabled: show signature verification on notes + + + + Automatically decrypt DMs + + + + Enabled: automatically decrypt direct messages +