From 5a7750a91bc02c3e7ff4161fde43526a9f9add06 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Tue, 29 Apr 2025 11:04:39 -0700 Subject: [PATCH] Use user blossom server list for settings, add InputList --- src/app/editor/index.ts | 21 +++----- src/app/requests.ts | 2 + src/app/state.ts | 6 --- src/assets/icons/Hamburger Menu.svg | 5 ++ src/lib/components/Icon.svelte | 2 + src/lib/components/InputList.svelte | 80 +++++++++++++++++++++++++++++ src/routes/+layout.svelte | 4 +- src/routes/settings/+page.svelte | 51 +++++++++++------- 8 files changed, 133 insertions(+), 38 deletions(-) create mode 100644 src/assets/icons/Hamburger Menu.svg create mode 100644 src/lib/components/InputList.svelte diff --git a/src/app/editor/index.ts b/src/app/editor/index.ts index 18cf1bd5..b1750df9 100644 --- a/src/app/editor/index.ts +++ b/src/app/editor/index.ts @@ -2,22 +2,15 @@ import {mount} from "svelte" import type {Writable} from "svelte/store" import {get} from "svelte/store" import type {StampedEvent} from "@welshman/util" +import {getTagValue, getListTags} from "@welshman/util" import {Router} from "@welshman/router" -import {signer, profileSearch} from "@welshman/app" +import {signer, profileSearch, userBlossomServers} from "@welshman/app" import {Editor, MentionSuggestion, WelshmanExtension} from "@welshman/editor" -import {getSetting, userSettingValues} from "@app/state" import {makeMentionNodeView} from "./MentionNodeView" import ProfileSuggestion from "./ProfileSuggestion.svelte" -export const getUploadType = () => getSetting<"nip96" | "blossom">("upload_type") - -export const getUploadUrl = () => { - const {upload_type, nip96_urls, blossom_urls} = userSettingValues.get() - - return upload_type === "nip96" - ? nip96_urls[0] || "https://nostr.build" - : blossom_urls[0] || "https://cdn.satellite.earth" -} +export const getUploadUrl = () => + getTagValue("server", getListTags(userBlossomServers.get())) || "https://cdn.satellite.earth" export const signWithAssert = async (template: StampedEvent) => { const event = await signer.get().sign(template) @@ -33,6 +26,7 @@ export const makeEditor = ({ placeholder = "", url, submit, + uploadUrl = getUploadUrl(), uploading, wordCount, }: { @@ -43,6 +37,7 @@ export const makeEditor = ({ placeholder?: string url?: string submit: () => void + uploadUrl?: string uploading?: Writable wordCount?: Writable }) => @@ -54,8 +49,8 @@ export const makeEditor = ({ WelshmanExtension.configure({ submit, sign: signWithAssert, - defaultUploadType: getUploadType(), - defaultUploadUrl: getUploadUrl(), + defaultUploadType: "blossom", + defaultUploadUrl: uploadUrl, extensions: { placeholder: { config: { diff --git a/src/app/requests.ts b/src/app/requests.ts index b4202db9..aa33619c 100644 --- a/src/app/requests.ts +++ b/src/app/requests.ts @@ -41,6 +41,7 @@ import { loadMutes, loadFollows, loadProfile, + loadBlossomServers, loadRelaySelections, loadInboxRelaySelections, } from "@welshman/app" @@ -392,6 +393,7 @@ export const loadUserData = async (pubkey: string, relays: string[] = []) => { sleep(3000), Promise.all([ loadInboxRelaySelections(pubkey, relays), + loadBlossomServers(pubkey, relays), loadMembership(pubkey, relays), loadSettings(pubkey, relays), loadProfile(pubkey, relays), diff --git a/src/app/state.ts b/src/app/state.ts index 9080ba40..763bda8d 100644 --- a/src/app/state.ts +++ b/src/app/state.ts @@ -297,9 +297,6 @@ export type Settings = { report_usage: boolean report_errors: boolean send_delay: number - upload_type: "nip96" | "blossom" - nip96_urls: string[] - blossom_urls: string[] } } @@ -309,9 +306,6 @@ export const defaultSettings = { report_usage: true, report_errors: false, send_delay: 3000, - upload_type: "nip96", - nip96_urls: ["https://nostr.build"], - blossom_urls: ["https://cdn.satellite.earth"], } export const settings = deriveEventsMapped(repository, { diff --git a/src/assets/icons/Hamburger Menu.svg b/src/assets/icons/Hamburger Menu.svg new file mode 100644 index 00000000..dfd36d3b --- /dev/null +++ b/src/assets/icons/Hamburger Menu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/lib/components/Icon.svelte b/src/lib/components/Icon.svelte index 173612d4..9db70020 100644 --- a/src/lib/components/Icon.svelte +++ b/src/lib/components/Icon.svelte @@ -41,6 +41,7 @@ import GallerySend from "@assets/icons/Gallery Send.svg?dataurl" import Ghost from "@assets/icons/Ghost.svg?dataurl" import Hashtag from "@assets/icons/Hashtag.svg?dataurl" + import HamburgerMenu from "@assets/icons/Hamburger Menu.svg?dataurl" import HandPills from "@assets/icons/Hand Pills.svg?dataurl" import HomeSmile from "@assets/icons/Home Smile.svg?dataurl" import Inbox from "@assets/icons/Inbox.svg?dataurl" @@ -131,6 +132,7 @@ "gallery-send": GallerySend, ghost: Ghost, hashtag: Hashtag, + "hamburger-menu": HamburgerMenu, "hand-pills": HandPills, "home-smile": HomeSmile, inbox: Inbox, diff --git a/src/lib/components/InputList.svelte b/src/lib/components/InputList.svelte new file mode 100644 index 00000000..c25d0f55 --- /dev/null +++ b/src/lib/components/InputList.svelte @@ -0,0 +1,80 @@ + + +
+ {#each value as item, index (item)} +
handleDragStart(e, index)} + ondragover={e => handleDragOver(e, index)} + ondragend={handleDragEnd}> + + updateItem(index, e.currentTarget.value)} /> +
+ +
+
+ {/each} + +
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 326e710d..2c841483 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -19,6 +19,7 @@ FOLLOWS, PROFILE, RELAYS, + BLOSSOM_SERVERS, getRelaysFromList, } from "@welshman/util" import {Nip46Broker, makeSecret} from "@welshman/signer" @@ -137,7 +138,8 @@ limit: 10_000, repository, rankEvent: (e: TrustedEvent) => { - if ([PROFILE, FOLLOWS, MUTES, RELAYS, INBOX_RELAYS].includes(e.kind)) return 1 + if ([PROFILE, FOLLOWS, MUTES, RELAYS, BLOSSOM_SERVERS, INBOX_RELAYS].includes(e.kind)) + return 1 if ([EVENT_TIME, THREAD, MESSAGE, WRAP].includes(e.kind)) return 0.9 return 0 diff --git a/src/routes/settings/+page.svelte b/src/routes/settings/+page.svelte index 986a70bd..495d69a5 100644 --- a/src/routes/settings/+page.svelte +++ b/src/routes/settings/+page.svelte @@ -1,19 +1,35 @@
@@ -134,20 +158,11 @@

Media Server

{/snippet} {#snippet input()} -
- - -
+ + {#snippet addLabel()} + Add Server + {/snippet} + {/snippet} {#snippet info()}

Choose a media server type and url for files you upload to {PLATFORM_NAME}.