Bump to v0.3.0 — instant post/reply feedback

Published notes now appear in the feed immediately. Thread replies
show up without waiting for the relay round-trip. Includes all
v0.2.9 fixes (image paste, sent zaps, reply-to clickable, feed
refresh on login).
This commit is contained in:
Jure
2026-03-13 19:40:14 +01:00
parent 7c10423b4a
commit 3ca73a8b01
7 changed files with 13 additions and 10 deletions

View File

@@ -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. > **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 - **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) - **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 - **Reply-to @name clickable** — clicking the @name in "↩ replying to @name" now opens that person's profile

View File

@@ -1,6 +1,6 @@
# Maintainer: hoornet <hoornet@users.noreply.github.com> # Maintainer: hoornet <hoornet@users.noreply.github.com>
pkgname=wrystr pkgname=wrystr
pkgver=0.2.9 pkgver=0.3.0
pkgrel=1 pkgrel=1
pkgdesc="Cross-platform Nostr desktop client with Lightning integration" pkgdesc="Cross-platform Nostr desktop client with Lightning integration"
arch=('x86_64') arch=('x86_64')

View File

@@ -1,7 +1,7 @@
{ {
"name": "wrystr", "name": "wrystr",
"private": true, "private": true,
"version": "0.2.9", "version": "0.3.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "wrystr" name = "wrystr"
version = "0.2.9" version = "0.3.0"
description = "Cross-platform Nostr desktop client with Lightning integration" description = "Cross-platform Nostr desktop client with Lightning integration"
authors = ["hoornet"] authors = ["hoornet"]
edition = "2021" edition = "2021"

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "Wrystr", "productName": "Wrystr",
"version": "0.2.9", "version": "0.3.0",
"identifier": "com.hoornet.wrystr", "identifier": "com.hoornet.wrystr",
"build": { "build": {
"beforeDevCommand": "npm run dev", "beforeDevCommand": "npm run dev",

View File

@@ -166,12 +166,13 @@ export function ThreadView() {
if (!replyText.trim() || replying) return; if (!replyText.trim() || replying) return;
setReplying(true); setReplying(true);
try { try {
await publishReply(replyText.trim(), { id: event.id, pubkey: event.pubkey }); const replyEvent = await publishReply(replyText.trim(), { id: event.id, pubkey: event.pubkey });
setReplyText(""); setReplyText("");
setReplySent(true); setReplySent(true);
// Re-fetch replies to show the new one // Inject reply locally so it appears immediately
const updated = await fetchReplies(event.id); setReplies((prev) => [...prev, replyEvent]);
setReplies(updated); // Also try fetching from relay in background
fetchReplies(event.id).then((updated) => setReplies(updated));
setTimeout(() => setReplySent(false), 2000); setTimeout(() => setReplySent(false), 2000);
} finally { } finally {
setReplying(false); setReplying(false);

View File

@@ -191,7 +191,7 @@ export async function publishReaction(eventId: string, eventPubkey: string, reac
await event.publish(); await event.publish();
} }
export async function publishReply(content: string, replyTo: { id: string; pubkey: string }): Promise<void> { export async function publishReply(content: string, replyTo: { id: string; pubkey: string }): Promise<NDKEvent> {
const instance = getNDK(); const instance = getNDK();
if (!instance.signer) throw new Error("Not logged in"); 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], ["p", replyTo.pubkey],
]; ];
await event.publish(); await event.publish();
return event;
} }
export async function publishNote(content: string): Promise<NDKEvent> { export async function publishNote(content: string): Promise<NDKEvent> {