diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7dcd4d6..bd2ebe1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,7 +66,8 @@ jobs: > **Windows note:** The installer is not yet code-signed. Windows SmartScreen will show an "Unknown publisher" warning — click "More info → Run anyway" to install. - ### New in v0.2.9 + ### New in v0.3.0 + - **Instant feedback** — posted notes appear in feed immediately; thread replies show up without waiting for relay - **Image paste fix** — uploads now use Tauri HTTP plugin, fixing "Failed to fetch" on Windows - **Sent zaps visible** — zap history now correctly shows sent zaps (queries kind 9735 receipts instead of ephemeral kind 9734) - **Reply-to @name clickable** — clicking the @name in "↩ replying to @name" now opens that person's profile diff --git a/PKGBUILD b/PKGBUILD index b32c9b0..e84b2e4 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,6 +1,6 @@ # Maintainer: hoornet pkgname=wrystr -pkgver=0.2.9 +pkgver=0.3.0 pkgrel=1 pkgdesc="Cross-platform Nostr desktop client with Lightning integration" arch=('x86_64') diff --git a/package.json b/package.json index e6485d4..d0b295e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "wrystr", "private": true, - "version": "0.2.9", + "version": "0.3.0", "type": "module", "scripts": { "dev": "vite", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 10018d5..0d1052e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wrystr" -version = "0.2.9" +version = "0.3.0" description = "Cross-platform Nostr desktop client with Lightning integration" authors = ["hoornet"] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 694e1b0..9a8baa3 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Wrystr", - "version": "0.2.9", + "version": "0.3.0", "identifier": "com.hoornet.wrystr", "build": { "beforeDevCommand": "npm run dev", diff --git a/src/components/thread/ThreadView.tsx b/src/components/thread/ThreadView.tsx index 0df39ee..a7ce24c 100644 --- a/src/components/thread/ThreadView.tsx +++ b/src/components/thread/ThreadView.tsx @@ -166,12 +166,13 @@ export function ThreadView() { if (!replyText.trim() || replying) return; setReplying(true); try { - await publishReply(replyText.trim(), { id: event.id, pubkey: event.pubkey }); + const replyEvent = await publishReply(replyText.trim(), { id: event.id, pubkey: event.pubkey }); setReplyText(""); setReplySent(true); - // Re-fetch replies to show the new one - const updated = await fetchReplies(event.id); - setReplies(updated); + // Inject reply locally so it appears immediately + setReplies((prev) => [...prev, replyEvent]); + // Also try fetching from relay in background + fetchReplies(event.id).then((updated) => setReplies(updated)); setTimeout(() => setReplySent(false), 2000); } finally { setReplying(false); diff --git a/src/lib/nostr/client.ts b/src/lib/nostr/client.ts index 0fc1e78..345656a 100644 --- a/src/lib/nostr/client.ts +++ b/src/lib/nostr/client.ts @@ -191,7 +191,7 @@ export async function publishReaction(eventId: string, eventPubkey: string, reac await event.publish(); } -export async function publishReply(content: string, replyTo: { id: string; pubkey: string }): Promise { +export async function publishReply(content: string, replyTo: { id: string; pubkey: string }): Promise { const instance = getNDK(); if (!instance.signer) throw new Error("Not logged in"); @@ -203,6 +203,7 @@ export async function publishReply(content: string, replyTo: { id: string; pubke ["p", replyTo.pubkey], ]; await event.publish(); + return event; } export async function publishNote(content: string): Promise {