Three next-batch UX-audit fixes:
- Chat delivery: the sending/sent glyph has higher contrast and a tooltip
("Sent to the network — arrives after it confirms", so a check isn't mistaken
for "delivered"); a failed send now carries the real reason (ChatMessage::
fail_reason, set from onChatBroadcastResult via friendlyRpcError, in-memory
only) in the "not sent" hover tooltip.
- Explorer: a block height beyond the tip says so ("Block N is beyond the chain
tip (M)") instead of silently snapping to the top; the empty block list shows
Not connected / Syncing (N behind) / Loading instead of an endless "Loading".
- Settings: the misleading "Reset to Defaults" button (which only reloads the
last-saved values) is relabeled "Discard unsaved changes" with accurate copy.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 lines
1.7 KiB
C++
35 lines
1.7 KiB
C++
#pragma once
|
|
|
|
// DragonX Wallet - HushChat decrypted message model. Held in memory by ChatStore and persisted at
|
|
// rest (encrypted under a seed-derived key) by ChatDatabase.
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
namespace dragonx::chat {
|
|
|
|
enum class ChatDirection { Incoming, Outgoing };
|
|
enum class ChatMessageKind { Message, ContactRequest };
|
|
// Outgoing delivery status. Sending = broadcast in flight (async op not yet resolved); Sent = the
|
|
// daemon accepted + broadcast the tx; Failed = it didn't (not connected, no funded address, rejected).
|
|
// Always Sent for incoming. NB: the values are persisted (chat DB serializes the int), so Sent MUST
|
|
// stay 0 and new states are APPENDED — never reordered.
|
|
enum class ChatDelivery { Sent, Failed, Sending };
|
|
|
|
struct ChatMessage {
|
|
ChatDirection direction = ChatDirection::Incoming;
|
|
ChatMessageKind kind = ChatMessageKind::Message;
|
|
std::string txid;
|
|
std::string conversation_id; // cid — the conversation thread key
|
|
std::string peer_zaddr; // header "z": peer's reply z-address
|
|
std::string peer_public_key_hex; // header "p": peer's crypto_kx public key
|
|
std::string body; // decrypted plaintext (Message) or request text (ContactRequest)
|
|
std::int64_t timestamp = 0; // tx time in seconds; set by the ingesting caller
|
|
std::size_t payload_position = 0; // together with txid, the dedup key
|
|
ChatDelivery delivery = ChatDelivery::Sent; // outgoing only. Sent = broadcast to the network (not
|
|
// necessarily confirmed/delivered yet).
|
|
std::string fail_reason; // outgoing Failed only; in-memory, NOT persisted
|
|
};
|
|
|
|
} // namespace dragonx::chat
|