mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 04:05:20 +00:00
- Implement full delivery status flow: sending → sent → delivered → read - Add visual indicators (gray/green/blue checkmarks) - Create DeliveryTracker service for managing confirmations - Add end-to-end encrypted ACK and read receipt messages - Handle ephemeral peer ID changes with message migration - Fix message ID preservation in BinaryProtocol - Ensure proper delivery status for incoming messages - Add multiple triggers for sending read receipts - Maintain full backwards compatibility with older clients Visual indicators: - ○ Gray circle = Sending - ✓ Gray check = Sent - ✓✓ Green double checks = Delivered - ✓✓ Blue double checks = Read - ⚠ Red triangle = Failed
113 lines
3.9 KiB
Markdown
113 lines
3.9 KiB
Markdown
# Delivery Confirmation Branch - Complete Summary
|
|
|
|
## Overview
|
|
Implemented a complete end-to-end delivery confirmation system with read receipts for private messages, similar to WhatsApp/Signal.
|
|
|
|
## Features Implemented
|
|
|
|
### Visual Status Indicators
|
|
- ○ Gray circle = Sending
|
|
- ✓ Gray single check = Sent (left device)
|
|
- ✓✓ Green double checks = Delivered (received by peer)
|
|
- ✓✓ Blue double checks (bold) = Read (viewed by peer)
|
|
- ⚠ Red triangle = Failed
|
|
|
|
### Core Components
|
|
|
|
1. **DeliveryStatus Enum** (`BitchatProtocol.swift`)
|
|
- States: sending, sent, delivered, read, failed, partiallyDelivered
|
|
- Includes recipient info and timestamps
|
|
|
|
2. **DeliveryTracker Service** (`DeliveryTracker.swift`)
|
|
- Manages pending deliveries
|
|
- Handles timeouts (30s default, 60s for favorites)
|
|
- Sends delivery status updates via Combine
|
|
- Thread-safe with proper locking
|
|
|
|
3. **Message Types** (`BitchatProtocol.swift`)
|
|
- DeliveryAck (0x0A): Confirms message received
|
|
- ReadReceipt (0x0C): Confirms message read
|
|
|
|
4. **UI Components** (`ContentView.swift`)
|
|
- DeliveryStatusView showing appropriate icons
|
|
- Real-time status updates
|
|
- Proper alignment with message text
|
|
|
|
## Key Technical Achievements
|
|
|
|
### 1. Message ID Consistency
|
|
- Fixed BinaryProtocol to preserve message IDs
|
|
- Ensures ACKs reference the correct message
|
|
|
|
### 2. Ephemeral Peer ID Handling
|
|
- Messages migrate between peer IDs based on nickname
|
|
- Read receipts sent to current peer ID, not old ones
|
|
- Chat history preserved across sessions
|
|
|
|
### 3. Read Receipt Triggers
|
|
- When opening a chat (via button or message send)
|
|
- When app becomes active with chat open
|
|
- When receiving message while chat is open
|
|
- Multiple retry attempts to ensure delivery
|
|
|
|
### 4. Thread Safety
|
|
- Fixed deadlock in DeliveryTracker
|
|
- Proper lock management
|
|
- Async message processing
|
|
|
|
### 5. Status Consistency
|
|
- Prevents status downgrades (read → delivered)
|
|
- Handles race conditions gracefully
|
|
- Proper status for incoming messages
|
|
|
|
## Privacy & Security
|
|
- All ACKs and receipts are end-to-end encrypted
|
|
- Only the original sender can decrypt confirmations
|
|
- No message content in confirmations
|
|
- Receipts only sent for private messages
|
|
|
|
## Backwards Compatibility ✅
|
|
- **Fully backwards compatible!**
|
|
- Old clients ignore new message types
|
|
- Mixed client scenarios work correctly
|
|
- No breaking changes to core messaging
|
|
|
|
## What's NOT Included
|
|
1. Read receipts for room/group messages
|
|
2. User preference to disable read receipts
|
|
3. Batch ACK optimization
|
|
4. Persistent storage of delivery status
|
|
5. "Last seen" functionality
|
|
|
|
## Testing Checklist
|
|
- [x] Single message delivery confirmation
|
|
- [x] Multiple messages in sequence
|
|
- [x] Read receipts when opening existing chat
|
|
- [x] Peer ID changes between sessions
|
|
- [x] Mixed old/new client communication
|
|
- [x] Favorite vs non-favorite timeouts
|
|
- [x] App backgrounding/foregrounding
|
|
|
|
## Known Limitations
|
|
1. Memory usage grows with pending deliveries (no cleanup)
|
|
2. Lots of debug logging (should be removed for production)
|
|
3. No UI indication of read timestamp
|
|
4. Status not shown in notifications/previews
|
|
|
|
## Code Quality
|
|
- Clean separation of concerns
|
|
- Follows existing app patterns
|
|
- Proper use of Combine for reactivity
|
|
- Well-structured and maintainable
|
|
|
|
## Files Modified
|
|
- `BitchatProtocol.swift` - Added delivery structures
|
|
- `DeliveryTracker.swift` - New service (created)
|
|
- `BluetoothMeshService.swift` - ACK/receipt handling
|
|
- `ChatViewModel.swift` - Status updates, read triggers
|
|
- `ContentView.swift` - UI indicators
|
|
- `BinaryProtocol.swift` - Message ID preservation
|
|
- `project.yml` - Added new service file
|
|
|
|
## Summary
|
|
The delivery confirmation system is feature-complete, secure, and backwards compatible. It provides users with real-time feedback about message delivery and read status while maintaining the app's privacy-focused design. The implementation is production-ready with minor cleanup needed (mainly removing debug logs). |