mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-09-27 20:17:05 +02:00
add option to automatically decrypt DMs
This commit is contained in:
5
.changeset/shiny-ghosts-hear.md
Normal file
5
.changeset/shiny-ghosts-hear.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"nostrudel": minor
|
||||
---
|
||||
|
||||
Add option to automatically decrypt DMs
|
@@ -33,34 +33,12 @@ export type AppSettingsV3 = Omit<AppSettingsV2, "version"> & { version: 3; quick
|
||||
export type AppSettingsV4 = Omit<AppSettingsV3, "version"> & { version: 4; loadOpenGraphData: boolean };
|
||||
export type AppSettingsV5 = Omit<AppSettingsV4, "version"> & { version: 5; hideUsernames: boolean };
|
||||
export type AppSettingsV6 = Omit<AppSettingsV5, "version"> & { version: 6; noteDifficulty: number | null };
|
||||
export type AppSettingsV7 = Omit<AppSettingsV6, "version"> & { version: 7; defaultRelays: string[] };
|
||||
export type AppSettingsV7 = Omit<AppSettingsV6, "version"> & { 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 {
|
||||
|
@@ -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 }) {
|
||||
<UserDnsIdentityIcon pubkey={pubkey} onlyIcon />
|
||||
</Flex>
|
||||
<ButtonGroup ml="auto">
|
||||
<Button onClick={decryptAll} isLoading={loading}>
|
||||
Decrypt All
|
||||
</Button>
|
||||
{!autoDecryptDMs && (
|
||||
<Button onClick={decryptAll} isLoading={loading}>
|
||||
Decrypt All
|
||||
</Button>
|
||||
)}
|
||||
<IconButton
|
||||
aria-label="Threads"
|
||||
title="Threads"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { useState } from "react";
|
||||
import { useEffect, useState } from "react";
|
||||
import { Alert, AlertDescription, AlertIcon, Button, ButtonProps } from "@chakra-ui/react";
|
||||
|
||||
import { UnlockIcon } from "../../../components/icons";
|
||||
@@ -7,6 +7,7 @@ import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import { getDMRecipient, getDMSender } from "../../../helpers/nostr/dms";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import DebugEventButton from "../../../components/debug-modal/debug-event-button";
|
||||
import useAppSettings from "../../../hooks/use-app-settings";
|
||||
|
||||
export default function DecryptPlaceholder({
|
||||
children,
|
||||
@@ -17,6 +18,7 @@ export default function DecryptPlaceholder({
|
||||
message: NostrEvent;
|
||||
} & Omit<ButtonProps, "children">): 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);
|
||||
}
|
||||
|
@@ -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";
|
||||
|
@@ -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<AppSettings>();
|
||||
const cacheDetails = useDisclosure();
|
||||
|
||||
return (
|
||||
<AccordionItem>
|
||||
@@ -107,6 +95,15 @@ export default function PerformanceSettings() {
|
||||
</Flex>
|
||||
<FormHelperText>Enabled: show signature verification on notes</FormHelperText>
|
||||
</FormControl>
|
||||
<FormControl>
|
||||
<Flex alignItems="center">
|
||||
<FormLabel htmlFor="autoDecryptDMs" mb="0">
|
||||
Automatically decrypt DMs
|
||||
</FormLabel>
|
||||
<Switch id="autoDecryptDMs" {...register("autoDecryptDMs")} />
|
||||
</Flex>
|
||||
<FormHelperText>Enabled: automatically decrypt direct messages</FormHelperText>
|
||||
</FormControl>
|
||||
</Flex>
|
||||
</AccordionPanel>
|
||||
</AccordionItem>
|
||||
|
Reference in New Issue
Block a user