From 0ae02f2537ebcc087e8426c8efe2ccd9200aa746 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Wed, 11 Sep 2024 11:21:16 -0700 Subject: [PATCH] Get chat back to working ish --- src/app/components/ChatCompose.svelte | 9 +++++---- src/app/routes.ts | 4 ++-- src/app/state.ts | 19 ++++++++----------- src/routes/+layout.svelte | 3 +-- src/routes/spaces/[nrelay]/+layout.svelte | 4 ++-- .../spaces/[nrelay]/[[topic]]/+page.svelte | 7 ++++--- 6 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/app/components/ChatCompose.svelte b/src/app/components/ChatCompose.svelte index 30f66b9db..a78879c93 100644 --- a/src/app/components/ChatCompose.svelte +++ b/src/app/components/ChatCompose.svelte @@ -4,13 +4,14 @@ import {writable} from "svelte/store" import {createEditor, type Editor, EditorContent} from "svelte-tiptap" import {NProfileExtension, ImageExtension} from "nostr-editor" - import {createEvent, CHAT_MESSAGE} from "@welshman/util" + import {createEvent} from "@welshman/util" import {publishThunk, makeThunk} from "@welshman/app" import {findNodes} from "@lib/tiptap" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import {makeMention, makeIMeta} from "@app/commands" import {getChatEditorOptions, addFile} from "@app/editor" + import {MESSAGE} from "@app/state" export let url export let topic = "" @@ -21,7 +22,7 @@ const sendMessage = () => { const json = $editor.getJSON() - const topicTag = topic ? ["t", topic] : [] + const topicTags = topic ? [["t", topic]] : [] const mentionTags = findNodes(NProfileExtension.name, json).map(m => makeMention(m.attrs!.pubkey, m.attrs!.relays), ) @@ -29,9 +30,9 @@ makeIMeta(src, {x, ox: x}), ) - const event = createEvent(CHAT_MESSAGE, { + const event = createEvent(MESSAGE, { content: $editor.getText(), - tags: [topicTag, ...mentionTags, ...imetaTags], + tags: [["-"], ["relay", url], ...topicTags, ...mentionTags, ...imetaTags], }) publishThunk(makeThunk({event, relays: [url]})) diff --git a/src/app/routes.ts b/src/app/routes.ts index f161fd940..bc956329a 100644 --- a/src/app/routes.ts +++ b/src/app/routes.ts @@ -1,6 +1,6 @@ import {nip19} from "nostr-tools" import type {Page} from "@sveltejs/kit" -import {userMembership, decodeNEvent} from "@app/state" +import {userMembership, decodeNRelay} from "@app/state" export const makeSpacePath = (url: string, extra = "") => { let path = `/spaces/${nip19.nrelayEncode(url)}` @@ -21,7 +21,7 @@ export const getPrimaryNavItemIndex = ($page: Page) => { case "discover": return urls.length + 2 case "spaces": { - const routeUrl = decodeNEvent($page.params.nrelay) + const routeUrl = decodeNRelay($page.params.nrelay) return urls.findIndex(url => url === routeUrl) + 1 } diff --git a/src/app/state.ts b/src/app/state.ts index 457725fcb..e5470becc 100644 --- a/src/app/state.ts +++ b/src/app/state.ts @@ -69,10 +69,6 @@ export const deriveEvent = (idOrAddress: string, hints: string[] = []) => { ) } -// Persist relay/event mappings - -export const relaysByMessage = withGetter(writable(new Map())) - // Topics export const topicsByUrl = withGetter(writable(new Map())) @@ -133,18 +129,19 @@ export type Message = { } export const readMessage = (event: TrustedEvent): Maybe => { + const urls = getRelayTagValues(event.tags) const topics = getTopicTagValues(event.tags) - if (topics.length !== 1) return undefined + if (topics.length > 1 || urls.length !== 1) return undefined - const topic = topics[0] - const urls = relaysByMessage.get().get(event.id) || [] + const topic = topics[0] || "" + const url = urls[0] - return urls.map(url => ({url, topic, chat: getChatId(url, topic), event})) + return urls.map(url => ({url, topic, chat: makeChatId(url, topic), event})) } export const messages = deriveEventsMapped(repository, { - filters: [{}], + filters: [{kinds: [MESSAGE, REPLY]}], eventToItem: readMessage, itemToEvent: item => item.event, }) @@ -158,7 +155,7 @@ export type Chat = { messages: Message[] } -export const getChatId = (url: string, topic: string) => `${url}'${topic}` +export const makeChatId = (url: string, topic: string) => `${url}'${topic}` export const splitChatId = (id: string) => id.split("'") @@ -210,7 +207,7 @@ export const userMembership = withGetter( // Other utils -export const decodeNEvent = (nevent: string) => nip19.decode(nevent).data as string +export const decodeNRelay = (nevent: string) => nip19.decode(nevent).data as string export const displayReaction = (content: string) => { if (content === "+") return "❤️" diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index d39c4c537..5e361c6d2 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -28,7 +28,7 @@ import PrimaryNav from "@app/components/PrimaryNav.svelte" import {modals, clearModal} from "@app/modal" import {theme} from "@app/theme" - import {INDEXER_RELAYS, topicsByUrl, relaysByMessage} from "@app/state" + import {INDEXER_RELAYS, topicsByUrl} from "@app/state" import {loadUserData} from "@app/commands" import * as state from "@app/state" @@ -77,7 +77,6 @@ store: handles, }, topicsByUrl: storageAdapters.fromMapStore(topicsByUrl), - relaysByMessage: storageAdapters.fromMapStore(relaysByMessage), publishStatus: storageAdapters.fromObjectStore(publishStatusData), freshness: storageAdapters.fromObjectStore(freshness), plaintext: storageAdapters.fromObjectStore(plaintext), diff --git a/src/routes/spaces/[nrelay]/+layout.svelte b/src/routes/spaces/[nrelay]/+layout.svelte index bf2ff8945..741ed8cf3 100644 --- a/src/routes/spaces/[nrelay]/+layout.svelte +++ b/src/routes/spaces/[nrelay]/+layout.svelte @@ -14,7 +14,7 @@ import SpaceExit from "@app/components/SpaceExit.svelte" import SpaceJoin from "@app/components/SpaceJoin.svelte" import RoomCreate from "@app/components/RoomCreate.svelte" - import {userMembership, decodeNEvent} from "@app/state" + import {userMembership, decodeNRelay} from "@app/state" import {pushModal} from "@app/modal" import {makeSpacePath} from "@app/routes" @@ -34,7 +34,7 @@ let showMenu = false - $: url = decodeNEvent($page.params.nrelay) + $: url = decodeNRelay($page.params.nrelay) $: rooms = sort($userMembership?.topicsByUrl?.get(url) || []) diff --git a/src/routes/spaces/[nrelay]/[[topic]]/+page.svelte b/src/routes/spaces/[nrelay]/[[topic]]/+page.svelte index 856c39601..667c4d16f 100644 --- a/src/routes/spaces/[nrelay]/[[topic]]/+page.svelte +++ b/src/routes/spaces/[nrelay]/[[topic]]/+page.svelte @@ -17,10 +17,11 @@ import Spinner from "@lib/components/Spinner.svelte" import ChatMessage from "@app/components/ChatMessage.svelte" import ChatCompose from "@app/components/ChatCompose.svelte" - import {deriveChat, MESSAGE, REPLY} from "@app/state" + import {decodeNRelay, makeChatId, deriveChat, MESSAGE, REPLY} from "@app/state" - const {url, topic} = $page.params - const chat = deriveChat(url) + const {nrelay, topic = ""} = $page.params + const url = decodeNRelay(nrelay) + const chat = deriveChat(makeChatId(url, topic)) const assertEvent = (e: any) => e as TrustedEvent