diff --git a/src/app/components/ChannelMessage.svelte b/src/app/components/ChannelMessage.svelte index 39b5a52..c8086c2 100644 --- a/src/app/components/ChannelMessage.svelte +++ b/src/app/components/ChannelMessage.svelte @@ -81,7 +81,7 @@ {/if}
- + {#if thunk} {/if} diff --git a/src/app/components/Content.svelte b/src/app/components/Content.svelte index 9ef56c0..f5f0fa7 100644 --- a/src/app/components/Content.svelte +++ b/src/app/components/Content.svelte @@ -134,7 +134,7 @@ {#if isBlock(i)}
- +
{:else} diff --git a/src/app/components/ContentQuote.svelte b/src/app/components/ContentQuote.svelte index 3ec7fd4..56ad3fc 100644 --- a/src/app/components/ContentQuote.svelte +++ b/src/app/components/ContentQuote.svelte @@ -13,14 +13,19 @@ export let value export let event export let depth = 0 + export let relays: string[] = [] export let minimal = false const {id, identifier, kind, pubkey, relays: relayHints = []} = value - const addr = new Address(kind, pubkey, identifier) - const idOrAddress = id || addr.toString() - const relays = ctx.app.router.Quote(event, idOrAddress, relayHints).getUrls() - const quote = deriveEvent(idOrAddress, relays) - const entity = id ? nip19.neventEncode({id, relays}) : addr.toNaddr() + const idOrAddress = id || new Address(kind, pubkey, identifier).toString() + const mergedRelays = [ + ...relays, + ...ctx.app.router.Quote(event, idOrAddress, relayHints).getUrls(), + ] + const quote = deriveEvent(idOrAddress, mergedRelays) + const entity = id + ? nip19.neventEncode({id, relays: mergedRelays}) + : new Address(kind, pubkey, identifier, mergedRelays).toNaddr() const scrollToEvent = (id: string) => { const element = document.querySelector(`[data-event="${id}"]`) as any diff --git a/src/app/components/ThreadItem.svelte b/src/app/components/ThreadItem.svelte index fde015a..03cb29c 100644 --- a/src/app/components/ThreadItem.svelte +++ b/src/app/components/ThreadItem.svelte @@ -28,7 +28,7 @@ {formatTimestamp(event.created_at)}

{/if} - +
Posted by diff --git a/src/app/components/ThreadReply.svelte b/src/app/components/ThreadReply.svelte index 0bd5da9..44d2644 100644 --- a/src/app/components/ThreadReply.svelte +++ b/src/app/components/ThreadReply.svelte @@ -21,7 +21,7 @@ if ($loading) return const content = $editor.getText({blockSeparator: "\n"}) - const tags = [...getEditorTags($editor), tagRoom(GENERAL, url), [PROTECTED]] + const tags = [...getEditorTags($editor), tagRoom(GENERAL, url), PROTECTED] if (!content.trim()) { return pushToast({ diff --git a/src/app/notifications.ts b/src/app/notifications.ts index 40b4c35..3fac502 100644 --- a/src/app/notifications.ts +++ b/src/app/notifications.ts @@ -9,6 +9,7 @@ import {makeSpacePath} from "@app/routes" import { MESSAGE, THREAD, + LEGACY_THREAD, COMMENT, deriveEventsForUrl, getMembershipUrls, @@ -33,8 +34,8 @@ export const SPACE_FILTERS: Filter[] = [{kinds: [THREAD, MESSAGE, COMMENT]}] export const ROOM_FILTERS: Filter[] = [{kinds: [MESSAGE]}] export const THREAD_FILTERS: Filter[] = [ - {kinds: [THREAD]}, - {kinds: [COMMENT], "#K": [String(THREAD)]}, + {kinds: [THREAD, LEGACY_THREAD]}, + {kinds: [COMMENT], "#K": [String(THREAD), String(LEGACY_THREAD)]}, ] export const getNotificationFilters = (since: number): Filter[] => diff --git a/src/app/state.ts b/src/app/state.ts index 8289bba..701b4d1 100644 --- a/src/app/state.ts +++ b/src/app/state.ts @@ -73,8 +73,12 @@ export const PROTECTED = ["-"] export const MESSAGE = 9 +export const LEGACY_MESSAGE = 209 + export const THREAD = 11 +export const LEGACY_THREAD = 309 + export const COMMENT = 1111 export const MEMBERSHIPS = 10009 @@ -454,7 +458,24 @@ export const chatSearch = derived(chats, $chats => // Messages -export const messages = deriveEvents(repository, {filters: [{kinds: [MESSAGE]}]}) +// TODO: remove support for legacy messages +export const messages = derived( + deriveEvents(repository, {filters: [{kinds: [MESSAGE, LEGACY_MESSAGE]}]}), + $events => + $events.map(e => { + if (e.kind === LEGACY_MESSAGE) { + let room = e.tags.find(nthEq(0, "~"))?.[1] || GENERAL + + if (room === "general") { + room = GENERAL + } + + return {...e, kind: MESSAGE, tags: [...e.tags, tagRoom(room, "")]} + } + + return e + }), +) // Group Meta diff --git a/src/routes/spaces/[relay]/[room]/+page.svelte b/src/routes/spaces/[relay]/[room]/+page.svelte index 6fcf082..5f21ece 100644 --- a/src/routes/spaces/[relay]/[room]/+page.svelte +++ b/src/routes/spaces/[relay]/[room]/+page.svelte @@ -10,7 +10,7 @@ import {throttled} from "@welshman/store" import {createEvent, DELETE} from "@welshman/util" import {PublishStatus} from "@welshman/net" - import {formatTimestampAsDate, publishThunk, deriveRelay} from "@welshman/app" + import {formatTimestampAsDate, load, publishThunk, deriveRelay} from "@welshman/app" import {slide} from "@lib/transition" import {createScroller, type Scroller} from "@lib/html" import Icon from "@lib/components/Icon.svelte" @@ -31,6 +31,7 @@ GENERAL, tagRoom, MESSAGE, + LEGACY_MESSAGE, getMembershipRoomsByUrl, } from "@app/state" import {setChecked} from "@app/notifications" @@ -124,6 +125,14 @@ // Sveltekiiit await sleep(100) + if (!nip29.isSupported($relay)) { + load({ + delay: 0, + relays: [url], + filters: [{kinds: [LEGACY_MESSAGE], "#~": [room]}], + }) + } + pullConservatively({ relays: [url], filters: [{kinds: [MESSAGE, DELETE], "#h": [room]}], diff --git a/src/routes/spaces/[relay]/threads/+page.svelte b/src/routes/spaces/[relay]/threads/+page.svelte index 66a762c..e3e236c 100644 --- a/src/routes/spaces/[relay]/threads/+page.svelte +++ b/src/routes/spaces/[relay]/threads/+page.svelte @@ -16,13 +16,15 @@ import MenuSpaceButton from "@app/components/MenuSpaceButton.svelte" import ThreadItem from "@app/components/ThreadItem.svelte" import ThreadCreate from "@app/components/ThreadCreate.svelte" - import {THREAD, COMMENT, decodeRelay, deriveEventsForUrl} from "@app/state" + import {THREAD, LEGACY_THREAD, COMMENT, decodeRelay, deriveEventsForUrl} from "@app/state" import {THREAD_FILTERS, setChecked} from "@app/notifications" import {pushModal} from "@app/modal" const url = decodeRelay($page.params.relay) - const threads = deriveEventsForUrl(url, [{kinds: [THREAD]}]) - const comments = deriveEventsForUrl(url, [{kinds: [COMMENT], "#K": [String(THREAD)]}]) + const threads = deriveEventsForUrl(url, [{kinds: [THREAD, LEGACY_THREAD]}]) + const comments = deriveEventsForUrl(url, [ + {kinds: [COMMENT], "#K": [String(THREAD), String(LEGACY_THREAD)]}, + ]) const mutedPubkeys = getPubkeyTagValues(getListTags($userMutes)) const events = throttled( diff --git a/src/routes/spaces/[relay]/threads/[id]/+page.svelte b/src/routes/spaces/[relay]/threads/[id]/+page.svelte index 5fd772e..6f0e699 100644 --- a/src/routes/spaces/[relay]/threads/[id]/+page.svelte +++ b/src/routes/spaces/[relay]/threads/[id]/+page.svelte @@ -81,7 +81,7 @@ {/if}
- +