Commit Graph
88 Commits
Author SHA1 Message Date
jack f7ebcd6032 Add visual save indicator button for rooms
- Add bookmark icon button in room header to toggle save status
- Use bookmark.fill when room is saved, bookmark when not
- Button shows yellow when saved, default color when not
- Integrate with existing /save command functionality
- Add savedRooms published property for reactive UI updates
2025-07-05 19:35:37 +02:00
jack e6aced4cb4 Remove debug section from macOS app info screen 2025-07-05 19:35:37 +02:00
jack 41c2899008 Refactor room commands and improve UX
- Replace /list with /rooms showing all discovered rooms with join status
- Remove /discover command (merged into /rooms)
- Rename /favorite to /save for clarity
- Make room-specific commands (/transfer, /pass, /save) only appear in room context
- Remove voice notes from app info (feature doesn't exist)
- Remove Commands line from app info screen
- Show checkmark (✓) for joined rooms in /rooms output
2025-07-05 19:35:37 +02:00
jack 506c2bc7cb Implement message retention, retry mechanism, and app updates
- Add KeychainManager for secure password storage
- Implement MessageRetentionService for encrypted local storage of favorite room messages
- Add MessageRetryService for automatic retry of failed messages
- Add /favorite command to toggle room retention
- Add /discover command to find active rooms
- Fix all force unwrapped optionals in BluetoothMeshService
- Update app info screen with new features
- Integrate all services with proper cleanup on panic
2025-07-05 19:35:37 +02:00
jack 7151896102 feat: enhance password-protected rooms with key commitments and management
- Add key commitment scheme for immediate password verification
- Implement ownership transfer with /transfer command
- Add password change functionality with /pass command
- Include room metadata in initialization messages
- Remove /help command and rename /changepass to /pass
- Make room names tappable to show sidebar
- Remove spaces in person/room counter display
- Update UI to show lock icons and orange colors for protected rooms
- Fix password verification to work with empty rooms
- Add comprehensive tests for new functionality

This update significantly improves the security and usability of
password-protected rooms by allowing immediate verification without
waiting for encrypted messages.
2025-07-05 19:35:37 +02:00
jack cfded8c4df Fix room UI and membership tracking issues
- Add lock icon to room header for password management
- Change "leave" to "leave room" for clarity
- Fix bug where non-members appeared in room member list
- Only process room messages if user has joined the room
- Initialize room data structures on app launch
- Prevent auto-join when just mentioning a room
2025-07-05 19:35:37 +02:00
jack 8d553adc0c Implement password-protected rooms with encryption
- Room creators can set/remove passwords for their rooms
- Passwords are used to derive encryption keys via PBKDF2
- All messages in password-protected rooms are encrypted with AES-GCM
- Room protection status is announced to all peers
- Password and room data persists across app launches
- Visual lock indicators for password-protected rooms
- Password prompts when joining protected rooms
- Only room creators can modify password settings
- Encrypted messages show placeholder text if password is unknown
2025-07-05 19:35:37 +02:00
jack 4dec23e216 Implement proper room leave notifications and improve UI
- Send leave notifications when users exit rooms
- Update room member lists when peers leave rooms
- Change current user icon from dot to person.fill
- Handle room-specific leave messages via protocol
- Maintain backwards compatibility for general peer disconnection
2025-07-05 19:35:37 +02:00
jack cdb93543ba Remove disk logging UI from iOS app info
- Remove Debug section from iOS AppInfoView
- Keep Debug section for macOS only
- Aligns UI with logging behavior (macOS only)
2025-07-05 19:35:37 +02:00
jack a83dee34ba Update logging to only write to disk on macOS
- Add conditional compilation to LoggingService
- macOS continues to write logs to Documents/Logs
- iOS uses /dev/null to prevent disk writes
- Remove room auto-join on mention (only join when sending to room)
2025-07-05 19:35:37 +02:00
jack 22e02633b5 Add comprehensive logging system for debugging
- Create LoggingService that writes to Documents/Logs directory
- Log to both console and file with timestamps
- Replace debug print statements with bitchatLog()
- Add log file location display in AppInfoView
- Enable opening log file in Finder on macOS
- Track room member operations and view state
- Persist logs for debugging room member display issues
2025-07-05 19:35:37 +02:00
jack 4a834ac571 Fix room member list display logic
- Always include self in room member list if we're a member
- Simplify empty room detection
- Add more debug logging to diagnose member tracking
2025-07-05 19:35:37 +02:00
jack 10ee001728 Add room message indicator and simplify room header
- Add blue hashtag icon in main header when there are unread room messages
- Remove member count from room title for cleaner look
- Add debug logging to diagnose room member list issue
2025-07-05 19:35:37 +02:00
jack 36155b457b Remove debug logging 2025-07-05 19:35:37 +02:00
jack bf4a572299 Fix critical room functionality issues
- Fix room field not being copied when creating messageWithPeerID in BluetoothMeshService
- This was causing all room messages to appear in main chat
- Fix room member tracking by ensuring senderPeerID is included
- Change room color from orange to blue to differentiate from private messages
- Clean up room members when peers disconnect to fix member count
- Add debug logging to track room field through message flow
2025-07-05 19:35:37 +02:00
jack 4051cda7e4 Remove debug logging for room messages 2025-07-05 19:35:37 +02:00
jack d0a465f05f Fix room message routing and improve room UI
- Fix room field not being properly set in BluetoothMeshService sendMessage
- Make room name header tappable to open sidebar
- Show member count in parentheses next to room name
- Display room members including self with "(you)" indicator
- Show self in room member list with dot indicator
- Disable favorite/chat actions for self in member list
- Fix empty room detection logic
2025-07-05 19:35:37 +02:00
jack eee97881e9 Add debug logging for room message routing
- Log when sending messages with room context
- Log when receiving room vs main chat messages
- Helps diagnose if room field is being properly transmitted
2025-07-05 19:35:37 +02:00
jack f1fcf11dcc Improve room functionality
- Fix header to show "x people / y rooms" count
- Add proper leave room functionality that cleans up data
- Track and display room members in sidebar
- Show "IN #ROOM" header when viewing a room
- Only show peers who have sent messages to current room
- Add leave button in room header alongside main button
- Ensure senderPeerID is set for room member tracking
2025-07-05 19:35:37 +02:00
jack 3d7232222c Implement hashtag rooms feature
- Add room field to BitchatMessage structure
- Update BinaryProtocol to encode/decode room information
- Create room management in ChatViewModel (join/leave/switch rooms)
- Add BluetoothMeshService support for room messages
- Implement rooms UI in sidebar with unread counts
- Create clickable hashtags in messages to join rooms
- Add room persistence across app restarts
- Filter message display by current room selection
2025-07-05 19:35:37 +02:00
jackandGitHub bb2edd4e23 Update README.md 2025-07-05 18:14:54 +02:00
jackandGitHub fd9594bdd2 Update README.md 2025-07-05 18:09:51 +02:00
jack 0efb28b028 Remove debug logging after fixing connection issues
- Keep improved connection stability logic (3 minute timeout, 10s duplicate check)
- Remove all DEBUG print statements to clean up console output
- Connection issues are now resolved
2025-07-04 17:55:09 +02:00
jack 33be40bf4d Add debug logging and improve connection stability
- Add debug logging for connect/disconnect/duplicate detection to diagnose issues
- Increase stale peer timeout from 60s to 180s (3 minutes)
- Increase cleanup timer interval from 30s to 60s
- Add safeguard to prevent removing peers with active connections
- Improve duplicate nickname detection to check if peer was seen recently (within 10s)
- Skip cleanup for peers that still have connected peripherals

These changes should help diagnose and fix the connect/disconnect/reconnect pattern
and the issue where both clients show no peers even though chat works.
2025-07-04 17:49:04 +02:00
jack 9e8ff9cfd1 Remove all debug prints and fix API misuse warnings
- Remove [PEERS] and [ANNOUNCE] debug print statements
- Fix unused variable warnings in BluetoothMeshService
- Add peripheral.state == .connected check before writeValue in announce sending
- Remove unused peerInfo and peerNicknamesCopy variables
- Fix API MISUSE warnings about sending commands to disconnected peripherals
2025-07-04 17:40:50 +02:00
jack cbcfaed7a2 Fix compilation errors and prepare for App Store submission
- Fix NotificationService warnings by replacing unused error parameters with _
- Add public domain header to NotificationService.swift
- Fix BluetoothMeshService compilation errors:
  - Replace removeAll with filter for processedKeyExchanges cleanup
  - Remove duplicate cleanupStalePeers function declaration
  - Remove duplicate peerLastSeenTimestamps property declaration
- All code now compiles cleanly for both iOS and macOS targets
2025-07-04 17:28:36 +02:00
jack 44d97ffb7e Fix duplicate peer entries when device restarts
- Added cleanup timer to remove stale peers after 60 seconds of inactivity
- Track last seen timestamp for all peers on packet receipt
- Detect and remove stale peer IDs with duplicate nicknames in announce handler
- Clean up all associated data when removing stale peers
- Notify UI immediately when stale peers are removed

This fixes the issue where restarting the iPhone app would show duplicate
"jack" entries on macOS. Now when a device reconnects with a new peer ID
but same nickname, the old entry is automatically removed.
2025-07-04 17:17:17 +02:00
jack 2e9601b585 Remove connection_fixes.md - keep only README.md 2025-07-04 17:05:37 +02:00
jack 00e75fff72 Fix connect/disconnect/connect pattern on initial connection
- Added duplicate connection detection in key exchange handler
- When same peer connects through multiple peripherals, keep only one
- Track intentional disconnects to suppress disconnect messages
- Don't show disconnect message when dropping duplicate connections
- This prevents the confusing connect/disconnect/connect pattern

The issue was that both devices try to connect to each other simultaneously,
creating duplicate connections. One gets dropped, but now it's handled gracefully.
2025-07-04 17:05:25 +02:00
jack c5041941e3 Fix timer crash by ensuring Timer is scheduled on main thread
- Timer.scheduledTimer must be called on main thread with run loop
- Wrapped timer scheduling in DispatchQueue.main.async
- This prevents EXC_BREAKPOINT crash when called from background threads
2025-07-04 16:52:57 +02:00
jack 25de7df10e Remove unnecessary documentation files - keep only README.md 2025-07-04 16:50:35 +02:00
jack 7c95595d5b Remove temp file 2025-07-04 16:49:57 +02:00
jack ccab7d3ade Fix asset catalog JSON formatting issues 2025-07-04 16:49:44 +02:00
jack f2031f3973 Update project configuration and generate Xcode project
- Removed test targets from project.yml (causing dependency issues)
- Generated fresh Xcode project with xcodegen
- Project now includes proper Assets.xcassets configuration
- Ready for App Store build and submission
2025-07-04 16:45:42 +02:00
jack 9ad3c3e0ba Remove unnecessary markdown file from repo 2025-07-04 16:44:43 +02:00
jack 4d61cec032 Prepare for App Store submission
- Added public domain headers to all test files
- Updated Info.plist with required App Store keys:
  - ITSAppUsesNonExemptEncryption = NO
  - LSApplicationCategoryType = Social Networking
  - UIRequiresFullScreen = YES
- Created proper Assets.xcassets structure
- Configured AppIcon.appiconset with all icon references
- Removed last TODO comment
- Created comprehensive App Store submission checklist
- Updated project.yml to include Assets.xcassets

The app is now ready for App Store submission. All debug code has been removed,
icons are configured, and privacy/security compliance is documented.
2025-07-04 16:44:00 +02:00
jack da2704e0bd Make peer discovery instant and fix connection stability
- Removed 8-character filter that was blocking temp IDs during transition
- Added immediate peer list updates for initial connections (no debounce)
- Reduced debounce interval to 100ms for subsequent updates
- Fixed race condition in peripheral ID mapping by adding before removing
- Removed aggressive peer cleanup in unsubscribe handler
- Only remove real peer IDs from activePeers on disconnect, not temp IDs
- Added better debug logging for peer add/remove operations
- Fixed peripheral lookup to handle mapping transitions

Peer discovery is now instant when devices connect, and connections are more stable.
2025-07-04 16:28:21 +02:00
jack 0ab1f2ecfd Add public domain license and copyright headers
- Added LICENSE file with Unlicense (public domain dedication)
- Added public domain headers to all main source files
- Updated README to mention public domain status
- All code is free and unencumbered, released into the public domain

Anyone is free to use this code for any purpose without restriction.
2025-07-04 16:21:49 +02:00
jack 87d4455c25 Fix peer discovery stability and connection cycling issues
- Added debouncing for peer list updates (500ms) to prevent UI spam
- Fixed race conditions in activePeers management by adding proper locking
- Prevent duplicate key exchange processing with tracking set
- Only notify delegate when peer list actually changes
- Fixed thread safety issues in disconnect/unsubscribe handlers
- Clear processed key exchanges periodically with bloom filter

This resolves the rapid connect/disconnect cycles and excessive peer list updates.
2025-07-04 16:19:52 +02:00
jack 9ef9ef8056 Fix timestamp bug causing peer discovery failures
- Fixed BitchatPacket convenience initializer to use milliseconds (was using seconds)
- Fixed BitchatMessage binary encoding to use milliseconds for consistency
- Updated decoding logic to properly handle millisecond timestamps
- This resolves the issue where packets were being dropped due to timestamp validation failures

All timestamps are now consistently in milliseconds throughout the codebase.
2025-07-04 16:07:49 +02:00
jack 6023ff8af0 Fix thread safety issue causing peer count to show 0
- Add thread safety lock for activePeers Set access
- Force UI update when peer list changes with objectWillChange
- Add debug logging to track peer additions/removals
- This fixes the 'alone :/' display when peers are actually connected
2025-07-04 15:59:56 +02:00
jack be08f4c8a7 Fix peer discovery issue by enabling announce relay
- Increase announce TTL from 1 to 3 to allow relaying
- Add relay logic for announce packets (was missing\!)
- This fixes the issue where peers can chat but don't see each other
- Announces now propagate through the mesh properly
2025-07-04 15:53:35 +02:00
jack aa8fe7527a Remove backwards compatibility code
- Remove timestamp conversion for old clients (seconds vs milliseconds)
- Remove fallback for old favorite checking method
- All clients must now use millisecond timestamps
- Simplifies codebase and reduces potential bugs
2025-07-04 15:49:01 +02:00
jack 38a7ba07ee Fix connection tracking and timestamp compatibility issues
- Fix 'alone :/' bug by not requiring nicknames for peer counting
- Handle both second and millisecond timestamps for compatibility with older clients
- Fix NaN errors in autocomplete positioning with bounds checking
- Simplify getAllConnectedPeerIDs to show all valid active peers
- Add timestamp conversion logic to handle ~55 year time difference bug
2025-07-04 15:45:29 +02:00
jack 986106fea4 Fix warnings and improve autocomplete positioning, add unit tests
- Remove unused variables (beforeCount, beforeFavCount)
- Remove Tx Power Level from advertising (not allowed)
- Fix autocomplete popup to appear near cursor position
- Calculate position based on nickname width and @ location
- Add comprehensive unit tests for:
  - Binary protocol encoding/decoding
  - Message padding for privacy
  - Bloom filter duplicate detection
  - BitchatMessage serialization
- Add test target to project.yml
2025-07-04 15:40:47 +02:00
jack e3cc469bf8 Remove voice memo references and improve duplicate message prevention
- Remove NSMicrophoneUsageDescription from Info.plist and project.yml
- Add millisecond timestamps to prevent same-second message collisions
- Include payload hash in message ID for absolute uniqueness
- Add recentlySentMessages tracking to prevent any duplicate sends
- Reduce retries from 2 to 1 for broadcast messages
- Clean up sent message tracking after 10 seconds
2025-07-04 15:35:26 +02:00
jack da44be9449 Add Bluetooth optimizations for maximum range
- Add TX power level hint to advertising for better signal strength
- Add comment about BLE 5.0 2M PHY support (iOS handles automatically)
- These optimizations help achieve maximum 300m+ range
2025-07-04 15:28:57 +02:00
jack b22c6e4bc6 Improve relay mechanism for better message delivery distance
- Increase max TTL from 5 to 7 hops for long-distance delivery
- Keep TTL higher in larger networks (6 for small, 5 for medium, 4 for large)
- Increase relay probabilities (85% at 30 users, 70% at 50 users, min 40%)
- Smart relay: always relay if TTL >= 4 or few peers connected
- Boost relay probability by 15% for private messages (they're important)
- Clean up excessive logging while keeping duplicate detection warnings
- Ensure messages can travel 300m+ by maintaining higher relay rates
2025-07-04 15:22:09 +02:00
jack 7b24293666 Add duplicate message detection logging and improve connection timing
- Track exact message content and timestamps to detect duplicates
- Log when duplicate messages are received within 5 seconds
- Delay sending cached messages by 0.5s to ensure connection is established
- Log all incoming message IDs and types for debugging
- Add warning when same message is received multiple times
2025-07-04 15:15:03 +02:00
jack 975c86e6f3 Add comprehensive logging to store-and-forward system for debugging 2025-07-04 15:08:29 +02:00