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.
### 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

View File

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

View File

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

View File

@@ -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"

View File

@@ -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",

View File

@@ -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);

View File

@@ -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<void> {
export async function publishReply(content: string, replyTo: { id: string; pubkey: string }): Promise<NDKEvent> {
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<NDKEvent> {