mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-11 08:47:33 +00:00
Phase 0 (small fix): sendNutzap was async-launched with no success callback, so after tapping the teal cashu chip in the zap picker the popup vanished and the user saw no feedback for the 1-2 seconds it took the swap + publish to complete. Add a "Cashu zap sent — Sent N sat(s) via cashu" toast on success, matching the lightning zap's progress feedback in spirit. Phase 1 (foundation): NIP-61 nutzaps attach to their target note the same way LN zaps and onchain zaps do, contributing to the reaction-row total and the "you-already-zapped" icon highlight without any UI-layer change. Pieces: - NutzapEvent.claimedSatsTotal() in quartz parses the sender- claimed sat sum from the proof tags once, leniently (a single malformed proof contributes 0 rather than throwing). The recipient wallet still verifies proofs against the mint at redeem time; this is the trusted-claim total for display. - Note.nutzaps: Map<HexKey, NutzapEntry> on the canonical commons Note, parallel to onchainZaps. NutzapEntry carries the source kind:9321 note (sender = source.author) and the pre-parsed claimedSats. Volatile because writes happen on applicationIOScope and reads happen on the Compose main thread. - updateZapTotal() now sums nutzap claimedSats into zapsAmount, so the existing ObserveZapAmountText composable in ReactionsRow picks up cashu without code change. - hasZapped() and the suspend isZappedBy() extended to detect nutzaps from a given user. ReactionsRow's calculateIfNoteWasZap- pedByAccount path therefore highlights the bolt orange for cashu zaps the same way it does for lightning. - LocalCache previously routed NutzapEvent through consumeRegularEvent, which would add it as a *reply* to the e-tagged note via computeReplyTo. computeReplyTo gains a NutzapEvent case returning the linked event ids, and a dedicated consume(NutzapEvent) function attaches via addNutzap instead of addReply. The "list" merge across LN + cashu + onchain that the user floated is deferred — three separate collections with different shapes (zap pair, onchain entry, nutzap entry) are kept; only the aggregates and queries are unified. That's enough for the reaction-row UX and avoids touching every iteration site at the call layer. Coming next: notifications (NotificationFeedFilter + a cashu-icon variant of ZapUserSetCard) and the dedicated cashu row in ReactionDetailGallery modeled on OnchainZapGallery.