Add show_media settings

This commit is contained in:
Jon Staab
2024-10-24 11:02:16 -07:00
parent 7ae0711905
commit 33c8142eda
7 changed files with 34 additions and 20 deletions

View File

@@ -147,7 +147,7 @@ export const broadcastUserData = async (relays: string[]) => {
export const addSpaceMembership = async (url: string) => { export const addSpaceMembership = async (url: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: MEMBERSHIPS})
const event = await addToListPublicly(list, ["r", url]).reconcile(nip44EncryptToSelf) const event = await addToListPublicly(list, ["r", url]).reconcile(nip44EncryptToSelf)
const relays = [...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)] const relays = uniq([...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)])
return publishThunk({event, relays}).result return publishThunk({event, relays}).result
} }
@@ -156,7 +156,7 @@ export const removeSpaceMembership = async (url: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: MEMBERSHIPS})
const pred = (t: string[]) => t[t[0] === "r" ? 1 : 2] === url const pred = (t: string[]) => t[t[0] === "r" ? 1 : 2] === url
const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf) const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf)
const relays = [...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)] const relays = uniq([...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)])
return publishThunk({event, relays}).result return publishThunk({event, relays}).result
} }
@@ -164,7 +164,7 @@ export const removeSpaceMembership = async (url: string) => {
export const addRoomMembership = async (url: string, room: string) => { export const addRoomMembership = async (url: string, room: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: MEMBERSHIPS})
const event = await addToListPublicly(list, tagRoom(room, url)).reconcile(nip44EncryptToSelf) const event = await addToListPublicly(list, tagRoom(room, url)).reconcile(nip44EncryptToSelf)
const relays = [...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)] const relays = uniq([...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)])
return publishThunk({event, relays}).result return publishThunk({event, relays}).result
} }
@@ -173,7 +173,7 @@ export const removeRoomMembership = async (url: string, room: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: MEMBERSHIPS})
const pred = (t: string[]) => equals(tagRoom(room, url), t) const pred = (t: string[]) => equals(tagRoom(room, url), t)
const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf) const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf)
const relays = [...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)] const relays = uniq([...ctx.app.router.WriteRelays().getUrls(), ...getRelayTagValues(event.tags)])
return publishThunk({event, relays}).result return publishThunk({event, relays}).result
} }

View File

@@ -29,7 +29,6 @@
getEditorOptions({submit, loading, getPubkeyHints, submitOnEnter: true, autofocus: true}), getEditorOptions({submit, loading, getPubkeyHints, submitOnEnter: true, autofocus: true}),
) )
console.log($editor, content)
$editor.commands.setContent(content) $editor.commands.setContent(content)
}) })
</script> </script>

View File

@@ -28,7 +28,7 @@
import ContentQuote from "@app/components/ContentQuote.svelte" import ContentQuote from "@app/components/ContentQuote.svelte"
import ContentTopic from "@app/components/ContentTopic.svelte" import ContentTopic from "@app/components/ContentTopic.svelte"
import ContentMention from "@app/components/ContentMention.svelte" import ContentMention from "@app/components/ContentMention.svelte"
import {entityLink, userSettings} from "@app/state" import {entityLink, userSettingValues} from "@app/state"
export let event export let event
export let minLength = 500 export let minLength = 500
@@ -70,7 +70,7 @@
} }
let warning = let warning =
$userSettings?.values.hide_sensitive && event.tags.find(nthEq(0, "content-warning"))?.[1] $userSettingValues.hide_sensitive && event.tags.find(nthEq(0, "content-warning"))?.[1]
$: shortContent = showEntire $: shortContent = showEntire
? fullContent ? fullContent
@@ -106,7 +106,7 @@
{:else if isCashu(parsed) || isInvoice(parsed)} {:else if isCashu(parsed) || isInvoice(parsed)}
<ContentToken value={parsed.value} /> <ContentToken value={parsed.value} />
{:else if isLink(parsed)} {:else if isLink(parsed)}
{#if isStartOrEnd(i) && !hideMedia} {#if isStartOrEnd(i) && !hideMedia && $userSettingValues.show_media}
<ContentLinkBlock value={parsed.value} /> <ContentLinkBlock value={parsed.value} />
{:else} {:else}
<ContentLinkInline value={parsed.value} /> <ContentLinkInline value={parsed.value} />

View File

@@ -256,11 +256,13 @@ export const SETTINGS = 38489
export type Settings = { export type Settings = {
event: TrustedEvent event: TrustedEvent
values: { values: {
show_media: boolean
hide_sensitive: boolean hide_sensitive: boolean
} }
} }
export const defaultSettings = { export const defaultSettings = {
show_media: true,
hide_sensitive: true, hide_sensitive: true,
} }
@@ -499,6 +501,8 @@ export const userSettings = withGetter(
}), }),
) )
export const userSettingValues = derived(userSettings, $s => $s?.values || defaultSettings)
export const userMembership = withGetter( export const userMembership = withGetter(
derived([pubkey, membershipByPubkey], ([$pubkey, $membershipByPubkey]) => { derived([pubkey, membershipByPubkey], ([$pubkey, $membershipByPubkey]) => {
if (!$pubkey) return undefined if (!$pubkey) return undefined

View File

@@ -1,12 +1,12 @@
<div class="grid grid-cols-3 gap-2 {$$props.class}"> <div class="grid grid-cols-2 gap-2 {$$props.class}">
<label class="flex items-center gap-2 font-bold"> <label class="flex items-center gap-2 font-bold">
<slot name="label" /> <slot name="label" />
</label> </label>
<div class="col-span-2"> <div class="flex items-center gap-2">
<slot name="input" /> <slot name="input" />
</div> </div>
{#if $$slots.info} {#if $$slots.info}
<p class="col-span-2 col-start-2 text-sm"> <p class="col-span-2 text-sm flex-end">
<slot name="info" /> <slot name="info" />
</p> </p>
{/if} {/if}

View File

@@ -7,12 +7,11 @@
import Button from "@lib/components/Button.svelte" import Button from "@lib/components/Button.svelte"
import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte" import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte"
import {pushToast} from "@app/toast" import {pushToast} from "@app/toast"
import {SETTINGS, PLATFORM_NAME, userSettings} from "@app/state" import {SETTINGS, PLATFORM_NAME, userSettingValues} from "@app/state"
const settings = {...$userSettings?.values}
const reset = () => { const reset = () => {
mutedPubkeys = getPubkeyTagValues(getListTags($userMutes)) mutedPubkeys = getPubkeyTagValues(getListTags($userMutes))
settings = {...$userSettingValues}
} }
const onSubmit = async () => { const onSubmit = async () => {
@@ -31,17 +30,12 @@
pushToast({message: "Your settings have been saved!"}) pushToast({message: "Your settings have been saved!"})
} }
let settings = {...$userSettingValues}
let mutedPubkeys = getPubkeyTagValues(getListTags($userMutes)) let mutedPubkeys = getPubkeyTagValues(getListTags($userMutes))
</script> </script>
<form class="content column gap-4" on:submit|preventDefault={onSubmit}> <form class="content column gap-4" on:submit|preventDefault={onSubmit}>
<div class="card2 bg-alt col-4 shadow-xl"> <div class="card2 bg-alt col-4 shadow-xl">
<Field>
<p slot="label">Muted Accounts</p>
<div slot="input">
<ProfileMultiSelect bind:value={mutedPubkeys} />
</div>
</Field>
<FieldInline> <FieldInline>
<p slot="label">Hide sensitive content?</p> <p slot="label">Hide sensitive content?</p>
<input <input
@@ -53,6 +47,23 @@
If content is marked by the author as sensitive, {PLATFORM_NAME} will hide it by default. If content is marked by the author as sensitive, {PLATFORM_NAME} will hide it by default.
</p> </p>
</FieldInline> </FieldInline>
<FieldInline>
<p slot="label">Show media?</p>
<input
slot="input"
type="checkbox"
class="toggle toggle-primary"
bind:checked={settings.show_media} />
<p slot="info">
Use this to disable link previews and image rendering.
</p>
</FieldInline>
<Field>
<p slot="label">Muted Accounts</p>
<div slot="input">
<ProfileMultiSelect bind:value={mutedPubkeys} />
</div>
</Field>
<div class="mt-4 flex flex-row items-center justify-between gap-4"> <div class="mt-4 flex flex-row items-center justify-between gap-4">
<Button class="btn btn-neutral" on:click={reset}>Discard Changes</Button> <Button class="btn btn-neutral" on:click={reset}>Discard Changes</Button>
<Button type="submit" class="btn btn-primary">Save Changes</Button> <Button type="submit" class="btn btn-primary">Save Changes</Button>