From 0e5bbf539302c6cb70d68c5a481b89dbb3f42af2 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Tue, 10 Feb 2026 21:44:01 +0100 Subject: [PATCH] bug-fixes clone events --- src/lib/components/EventMenu.svelte | 104 ++++++++++++++---- src/lib/components/content/EmojiPicker.svelte | 6 + src/lib/components/content/GifPicker.svelte | 7 ++ src/lib/components/content/PollCard.svelte | 7 ++ .../components/modals/EventJsonModal.svelte | 7 -- .../modals/RelatedEventsModal.svelte | 8 -- src/lib/components/profile/ProfileMenu.svelte | 21 ++++ .../discussions/DiscussionVoteButtons.svelte | 26 +++-- .../reactions/FeedReactionButtons.svelte | 20 +++- src/lib/services/nostr/config.ts | 6 + src/lib/services/user-actions.ts | 43 ++++---- src/routes/write/+page.svelte | 37 +++++-- 12 files changed, 212 insertions(+), 80 deletions(-) diff --git a/src/lib/components/EventMenu.svelte b/src/lib/components/EventMenu.svelte index 96a41a9..983804f 100644 --- a/src/lib/components/EventMenu.svelte +++ b/src/lib/components/EventMenu.svelte @@ -20,6 +20,7 @@ import { KIND } from '../types/kind-lookup.js'; import { goto } from '$app/navigation'; import Icon from './ui/Icon.svelte'; + import { getEventLink } from '../services/event-links.js'; interface Props { event: NostrEvent; @@ -243,16 +244,47 @@ closeMenu(); } + function viewEvent() { + closeMenu(); + goto(getEventLink(event)); + } + + function cloneEvent() { + // Store event data in sessionStorage for the write page to pick up + const cloneData = { + kind: event.kind, + content: event.content, + tags: event.tags, + isClone: true + }; + sessionStorage.setItem('aitherboard_cloneEvent', JSON.stringify(cloneData)); + closeMenu(); + goto('/write'); + } + async function broadcastEvent() { broadcasting = true; closeMenu(); try { - // Get all available relays for broadcasting - const relays = relayManager.getPublishRelays( - [...relayManager.getThreadReadRelays(), ...relayManager.getFeedReadRelays()], - true - ); + // Get ALL available relays for maximum broadcasting + // Start with all available relays (includes default, profile, and user inbox relays) + let allRelays = relayManager.getAllAvailableRelays(); + + // Add thread publish relays (includes thread-specific relays) + allRelays = [...allRelays, ...relayManager.getThreadPublishRelays()]; + + // Add file metadata publish relays (includes GIF relays) + allRelays = [...allRelays, ...relayManager.getFileMetadataPublishRelays()]; + + // Add feed response relays + allRelays = [...allRelays, ...relayManager.getFeedResponseReadRelays()]; + + // Use getPublishRelays to ensure user outbox and local write relays are included + // This will also normalize, deduplicate, filter read-only relays, and filter blocked relays + const relays = relayManager.getPublishRelays(allRelays, true); + + console.log(`[Broadcast] Broadcasting to ${relays.length} relays:`, relays); const results = await nostrClient.publish(event, { relays }); publicationResults = results; @@ -284,14 +316,18 @@ } async function pinNote() { - await togglePin(event.id); + const results = await togglePin(event.id); + publicationResults = results; + publicationModalOpen = true; // Force state update stateUpdateTrigger++; closeMenu(); } async function bookmarkNote() { - await toggleBookmark(event.id); + const results = await toggleBookmark(event.id); + publicationResults = results; + publicationModalOpen = true; // Force state update by re-checking bookmark status const newBookmarked = await isBookmarked(event.id); bookmarkedState = newBookmarked; @@ -390,6 +426,19 @@ class="menu-dropdown" style="top: {menuPosition.top}px; right: {menuPosition.right}px;" > + + + + + + + - - {#if isLoggedIn} - - {/if} - + + + + + + {#if isLoggedIn} + + + + + {/if} + + {#if isLoggedIn && onReply} {/if} {#if isLoggedIn && showContentActions} - + {#if !onReply} + + {/if} {/if} + {#if isLoggedIn && isOwnEvent}