What's new on top of v1.8.0
💬 Messages tab
New tab next to Friends/Requests/Find. Shows every conversation you have, newest first, with avatar, last message preview, relative timestamp, and an unread pill. Click a thread to open the chat.
✨ Better unread styling
- Per-friend unread is now a pulsing red dot on the chat button instead of an inline red text blob beside the name.
- Requests + Messages tab counts anchor to the top-right corner of the tab button (subtle pill, not jammed into the label).
⚙️ Chat gear menu
Three-dot button in the chat header opens a menu with:
- Clear conversation — wipes every message in the thread (both sides, confirm dialog).
- Mute / Unmute notifications — per-peer, stored in localStorage, no server round-trip.
- Block user — bi-directional hard stop. Existing messages kept, new ones rejected. Confirm dialog.
✏️ Edit & delete messages
Hover your own messages to reveal a pencil + X. Edit window: 24 hours. Max length same as sending (1000 chars). Edited messages show an "(edited)" marker. Delete removes the message from both sides.
✓✓ Read receipts
A double-check appears next to the last of your messages the peer has read. Server was already tracking `readAt` — this surfaces it.
🔕 Block user
Stored in `UserAchievementProfile.Preferences.BlockedUsers`. Either side blocking rejects sends in both directions. Existing messages are kept so nothing gets retroactively deleted.
🔔 Notifications
- Web Audio chime on inbound message (no external audio file, plays through the browser's audio stack).
- Slide-in toast (bottom-right corner) with sender name + message preview, 5-second auto-dismiss, clickable.
- Browser Notification API when the tab isn't visible and the user has granted permission (asked once on drawer open).
- Per-peer mute via the gear menu (localStorage).
- Mute-during-playback toggle in settings — suppresses all message notifications while Jellyfin's video player is active.
⚙️ User preferences (in the standalone page settings panel)
- Message notifications (master on/off)
- Message sound
- Mute during playback
📈 Conversation cap raised: 500 → 2000 messages
Deferred to v1.9
- Group chats — requires a whole conversation-membership model
- Attachments — requires file upload + MIME handling + disk quota
New endpoints
- `PATCH /messages/{messageId}` — edit
- `DELETE /messages/by-id/{messageId}` — delete single
- `DELETE /messages/{otherUserId}/clear` — clear thread
- `POST /block/{otherUserId}` / `DELETE /block/{otherUserId}` / `GET /blocked`
Upgrade
Safe in-place upgrade from 1.8.0 — existing messages keep working, new fields initialize default.