← Back to list | Download | viewer_ILUIWU_viewer_2025-12-09_10-49-57.log (25,005 bytes)
=== Eye Viewer Log Cleared at 2025-12-09 10:49:27 +0000 ===
[13:49:27] [FONT] Roboto fonts loaded successfully: Roboto-Regular
[13:49:27] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto
[13:49:27] [GIPHY] SDK not available - using REST API fallback
[13:49:27] [BACKGROUND] Background fetch enabled
[13:49:27] [SECURITY] Initial launch - timeout exceeded (249.0333433151245s > 0.0s)
[13:49:27] [AUTH] Starting PIN authentication
[13:49:27] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU
[13:49:27] [CLIENT_SIG] Connecting to session ILUIWU as Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)
[13:49:27] [LIFECYCLE] ViewController deallocated
[13:49:27] [PUSH] APNs token: ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f
[13:49:27] [CLIENT_SIG] WebSocket opened
[13:49:27] [CLIENT_SIG] HELLO sent as client for session ILUIWU
[13:49:27] [PRELOAD] ⚡ Starting message pre-load during authentication...
[13:49:27] [CLIENT_SIG] Connected! clientId=JhOuMItwVCi8mmgV
[13:49:27] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false
[13:49:27] [SECURITY] âš ī¸ Skipping timeout check - conditions not met
[13:49:27] [PUSH_DEBUG] đŸŸĸ App became ACTIVE - resetting badges and triggering pollEventsNow
[13:49:27] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU')
[13:49:27] [CLIENT_SIG]   - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)
[13:49:27] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"ea74d1b23419aba9c7f42f122ceaac51082c3477711ef6cb1bbd1988f213ab7f","role":"viewer","muted":0,"removed_from_other_channels":0}
[13:49:29] [PRELOAD] Fetched 3348 messages
[13:49:29] [PRELOAD] ⚡ Cached 3348 messages for instant display
[13:49:30] [PIN_AUTH] Correct PIN
[13:49:30] [SECURITY] Restored real session: ILUIWU
[13:49:30] [SECURITY] Restored real session: ILUIWU
[13:49:30] [SECURITY] Saved real session: ILUIWU
[13:49:30] [SCENE] Launched directly to chat view with sessionId: ILUIWU
[13:49:30] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone)
[13:49:30] Documents Directory: /var/mobile/Containers/Data/Application/C3A50990-2112-48CD-BF93-649822BB26ED/Documents
[13:49:30] [UPLOAD_QUEUE] Found 0 pending uploads to resume
[13:49:30] [THEME] Applying current theme
[13:49:30] [CHAT] Applied day theme (mode: day)
[13:49:30] [SECURITY] Saved real session: ILUIWU
[13:49:30] [CLIENT_SIG] Setting up client signaling for session: ILUIWU
[13:49:30] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[13:49:30] [NETWORK] Network monitor started
[13:49:30] [NETWORK] Status changed: connected
[13:49:30] [SUMMARY] Already triggered summary today (2025-12-09)
[13:49:30] Did transition
[13:49:30] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU
[13:49:30] [VIEWER] Screen lock enabled - normal idle behavior
[13:49:30] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU
[13:49:30] [DATA AUDIO] ========== setupWebRTC() START ==========
[13:49:30] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device
[13:49:30] [DATA AUDIO] Creating encoder/decoder factories...
[13:49:30] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1
[13:49:30] [CODEC] Viewer selected encoder: AV1 (best quality)
[13:49:30] [DATA AUDIO] Creating RTCPeerConnectionFactory...
[13:49:30] [DATA AUDIO] ✅ Factory created
[13:49:30] [DATA AUDIO] RTCAudioSession locked
[13:49:30] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false
[13:49:30] [DATA AUDIO] RTCAudioSession unlocked
[13:49:30] [DATA AUDIO] Setting AVAudioSession to .playback for data channel with mixWithOthers...
[13:49:30] [DATA AUDIO] ✅ AVAudioSession set to .playback with .mixWithOthers
[13:49:30] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU
[13:49:30] [WS] Opening session at ws://crivello.dyndns.org:8081/
[13:49:30] [QUERY] ✅ tempQueryConnection created for iosILUIWU
[13:49:30] [VIEWER_INIT] Already have 50 messages - just filtering for tab
[13:49:30] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings
[13:49:30] [EVENT_POLL] Event polling disabled - using WebSocket events instead
[13:49:30] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0
[13:49:30] [SUMMARY] Already triggered summary today (2025-12-09)
[13:49:30] Did transition
[13:49:30] [USER] Registering user: EDAD55A1-003F-415D-AA60-672B34B504FE, name: Esra
[13:49:30] [CHUNK] Merged 396 reactions synchronously
[13:49:30] [GALLERY_DB] Loading ALL media messages for session: ILUIWU
[13:49:30] [MIGRATION] No messages need sender_name backfill
[13:49:30] [GALLERY_DB] Raw datesent for msg 4453: '2025-12-09 10:30:58'
[13:49:30] [GALLERY_DB] Raw datesent for msg 4410: '2025-12-09 08:45:50'
[13:49:30] [GALLERY_DB] Raw datesent for msg 4380: '2025-12-09 07:02:05'
[13:49:30] [GALLERY_DB] ✅ Loaded 214 media messages
[13:49:30] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 4461
[13:49:30] [GALLERY] Filtered 214 -> 196 (only with local thumbnails)
[13:49:30] [GALLERY] First 5 after sort (newest first):
[13:49:30] [GALLERY]   0: id=4410, date=2025-12-09 08:45:50, file=bde3e0234a3bef24.png
[13:49:30] [GALLERY]   1: id=4380, date=2025-12-09 07:02:05, file=ff9fcc8b0813673d.jpg
[13:49:30] [GALLERY]   2: id=4372, date=2025-12-09 06:57:18, file=aea059955a8438ab.jpg
[13:49:30] [GALLERY]   3: id=4363, date=2025-12-09 06:51:54, file=007ff2e34cb86b32.heic
[13:49:30] [GALLERY]   4: id=4362, date=2025-12-09 06:51:36, file=44da4cd82feaea76.jpg
[13:49:30] [GIF] configure msgId=4453 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif msgChanged=true owner=false animating=false completed=false
[13:49:30] [GIF] msgId=4453 START fresh animation
[13:49:30] [CELL_UPLOAD] configure: msgId=4453, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=false, hasFilename=true, uploadStatus=0
[13:49:30] [CELL_UPLOAD] → not my message, setting complete
[13:49:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif, overlayExists=true
[13:49:30] [SERVER] Starting reconnect polling (5s interval)
[13:49:30] [ICONS] Screen width: 440.0, Tab spacing: 75.5
[13:49:30] [ICONS] Offset applied: -14.6
[13:49:30] [ICONS] New left margin: 11.2, New right margin: 11.3
[13:49:30] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU
[13:49:30] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[13:49:30] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[13:49:30] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU
[13:49:30] [INCREMENTAL_SYNC] ✅ No new messages
[13:49:30] [PURGE] âš ī¸ Media cache purge DISABLED for debugging
[13:49:30] [UPLOAD_RECOVERY] Checking for missing uploads...
[13:49:30] [UPLOAD_RECOVERY] Checking 20 media files on server...
[13:49:30] [ICONS] Chat center: (31.2, 87.0)
[13:49:30] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5
[13:49:30] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5
[13:49:30] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5
[13:49:30] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5
[13:49:30] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5
[13:49:30] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2
[13:49:30] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3
[13:49:30] [ICONS] Screen width: 440.0
[13:49:30] [USER] ✅ User registered successfully
[13:49:30] [USER] User registration successful
[13:49:30] new_session POST ok: token len=157
[13:49:30] HELLO → sent (fetched token, role=query)
[13:49:30] [SIG] hello_ok received for query connection - ready to query agents
[13:49:30] [SIG] get_agents request sent for sessionId=ILUIWU
[13:49:30] [SIG] get_agents request sent for sessionId=iosILUIWU
[13:49:30] [SERVER] Stopped reconnect polling
[13:49:30] [SIG] agents_list received: []
[13:49:30] [SIG] agents_list received: []
[13:49:31] [COMBINED_FETCH] Loaded 3348 read receipts, 395 messages with reactions
[13:49:31] [READBY_ENRICH] Enriched 50 messages with readBy data
[13:49:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif, overlayExists=true
[13:49:31] [GIF] configure msgId=4453 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif msgChanged=false owner=true animating=false completed=false
[13:49:31] [GIF] msgId=4453 CONTINUE animation (elapsed=0.8097349405288696s)
[13:49:31] [CELL_UPLOAD] configure: msgId=4453, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=EDAD55A1-003F-415D-AA60-672B34B504FE, isMyMessage=false, hasFilename=true, uploadStatus=0
[13:49:31] [CELL_UPLOAD] → not my message, setting complete
[13:49:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif, overlayExists=true
[13:49:31] [UPLOAD_RECOVERY] ❌ Missing on server, local exists: c8f0aac386a60643.jpg
[13:49:31] [UPLOAD_RECOVERY] ❌ Missing on server, local exists: 65b3c13d384997a5.mov
[13:49:31] [UPLOAD_RECOVERY] ❌ Missing on server, local exists: fb94b5fb89c4a48d.mov
[13:49:31] [UPLOAD_RECOVERY] 🔄 Re-uploading 3 missing files...
[13:49:31] [UPLOAD_QUEUE] âš ī¸ Duplicate prevented: c8f0aac386a60643.jpg already in queue (id=537, status=uploading)
[13:49:31] [UPLOAD_RECOVERY] ✅ Re-uploaded: c8f0aac386a60643.jpg
[13:49:31] [UPLOAD_RECOVERY] â­ī¸ Skipping large file (915.4 MB): 65b3c13d384997a5.mov
[13:49:31] [UPLOAD_RECOVERY] â­ī¸ Skipping large file (1209.2 MB): fb94b5fb89c4a48d.mov
[13:49:31] [MENU] 🔍 dismissAnyExistingMenu called
[13:49:31] [MENU] â„šī¸ No menu with tag 9999 found
[13:49:31] [MENU] ✅ dismissAnyExistingMenu completed
[13:49:31] [SEARCH] scrollViewWillBeginDragging - isSearchBarVisible=false, tab=0
[13:49:31] [UPLOAD_RECOVERY] â­ī¸ Thumbnail already on server: t_c8f0aac386a60643.jpg
[13:49:31] [UPLOAD_RECOVERY] â­ī¸ Thumbnail already on server: t_65b3c13d384997a5.jpg
[13:49:32] [SEARCH] handleTopRefresh called - tab=0, wasSearchBarVisibleOnDragStart=false
[13:49:32] [SEARCH] 🔍 First pull on Tab 0 - showing search bar instead of refresh
[13:49:32] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false
[13:49:32] [SEARCH] ✅ Setting isSearchBarVisible = true
[13:49:32] [SEARCH] chatSearchBar is nil? false
[13:49:32] [SEARCH] Applied theme: day
[13:49:32] [SEARCH] Adjusting table contentInset.top by +56.0
[13:49:32] [SEARCH] Table contentInset.top: 0.0 -> 56.0
[13:49:32] [UPLOAD_RECOVERY] â­ī¸ Thumbnail already on server: t_fb94b5fb89c4a48d.jpg
[13:49:32] [SEARCH] Focusing search field
[13:49:32] [SEARCH] handleTopRefresh called - tab=0, wasSearchBarVisibleOnDragStart=false
[13:49:32] [SEARCH] 🔍 First pull on Tab 0 - showing search bar instead of refresh
[13:49:32] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=true
[13:49:32] [SEARCH] âš ī¸ Search bar already visible, returning early
[13:49:32] [PUSH] Silent push received
[13:49:32] [PUSH_EMBED] No embedded message_data in notification
[13:49:32] [PUSH] No embedded data, pre-loading messages from server
[13:49:32] [PUSH_PRELOAD] Fetching messages for instant display cache
[13:49:32] [PUSH] Silent push received
[13:49:32] [PUSH_EMBED] No embedded message_data in notification
[13:49:32] [PUSH] No embedded data, pre-loading messages from server
[13:49:32] [PUSH_PRELOAD] Fetching messages for instant display cache
[13:49:32] [SEARCH] scrollViewDidEndDragging - scrollView=messagesTable, tab=0
[13:49:32] [SEARCH] contentOffset.y=-121.66666666666667, topInset=56.0, pullDistance=65.66666666666667
[13:49:32] [SEARCH] threshold=80.0, wasSearchBarVisibleOnDragStart=false
[13:49:32] [SEARCH] topRefresh.isRefreshing=false
[13:49:32] [SEARCH] ❌ Pull distance 65.66666666666667 < threshold 80.0
[13:49:32] [PUSH] Silent push received
[13:49:32] [PUSH_EMBED] No embedded message_data in notification
[13:49:32] [PUSH] No embedded data, pre-loading messages from server
[13:49:32] [PUSH_PRELOAD] Fetching messages for instant display cache
[13:49:32] [PUSH] Silent push received
[13:49:32] [PUSH_EMBED] No embedded message_data in notification
[13:49:32] [PUSH] No embedded data, pre-loading messages from server
[13:49:32] [PUSH_PRELOAD] Fetching messages for instant display cache
[13:49:32] [CLIENT_SIG] Event received: type=3 messageId=4461
[13:49:32] [WS_EVENT] Received event: type=3, messageId=4461
[13:49:32] [WS_EVENT] Read receipt for message 4461 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)
[13:49:32] [CLIENT_SIG] Event received: type=3 messageId=4457
[13:49:32] [WS_EVENT] Received event: type=3, messageId=4457
[13:49:32] [WS_EVENT] Read receipt for message 4457 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)
[13:49:32] [CLIENT_SIG] Event received: type=3 messageId=4456
[13:49:32] [WS_EVENT] Received event: type=3, messageId=4456
[13:49:32] [WS_EVENT] Read receipt for message 4456 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)
[13:49:32] [CLIENT_SIG] Event received: type=3 messageId=4453
[13:49:32] [WS_EVENT] Received event: type=3, messageId=4453
[13:49:32] [WS_EVENT] Read receipt for message 4453 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE)
[13:49:33] [PUSH_PRELOAD] Fetched 3348 messages - caching for instant display
[13:49:33] [MENU] 🔍 dismissAnyExistingMenu called
[13:49:33] [MENU] â„šī¸ No menu with tag 9999 found
[13:49:33] [MENU] ✅ dismissAnyExistingMenu completed
[13:49:33] [SEARCH] scrollViewWillBeginDragging - isSearchBarVisible=true, tab=0
[13:49:33] [SEARCH] đŸ”Ŋ Hiding search bar (user started scrolling)
[13:49:33] [SEARCH] hideSearchBar() called - animated=true, isSearchBarVisible=true
[13:49:33] [SEARCH] ✅ Setting isSearchBarVisible = false
[13:49:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif, overlayExists=true
[13:49:33] [GIF] configure msgId=4453 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzM2k5dHF2ZjkyN2dzdHBlZmhzMjF4ZzV6ZndvaHZocnF5OHZrZGJraiZlcD12MV9naWZzX3NlYXJjaCZjdD1n/1wuB5IKIsD2mbCYlmV/giphy.gif msgChanged=false owner=false animating=false completed=true
[13:49:33] [GIF] SKIP - same msg, completed
[13:49:33] [SEARCH] Adjusting table contentInset.top by -56.0
[13:49:33] [PUSH_PRELOAD] ⚡ Pre-cached 3348 messages for instant display
[13:49:33] [PUSH_PRELOAD] Fetched 3348 messages - caching for instant display
[13:49:34] [SEARCH] scrollViewDidEndDragging - scrollView=messagesTable, tab=0
[13:49:34] [SEARCH] contentOffset.y=-19.333333333333332, topInset=0.0, pullDistance=19.333333333333332
[13:49:34] [SEARCH] threshold=80.0, wasSearchBarVisibleOnDragStart=true
[13:49:34] [SEARCH] topRefresh.isRefreshing=false
[13:49:34] [SEARCH] ❌ Pull distance 19.333333333333332 < threshold 80.0
[13:49:34] [PUSH_PRELOAD] ⚡ Pre-cached 3348 messages for instant display
[13:49:34] [PUSH_PRELOAD] Fetched 3348 messages - caching for instant display
[13:49:34] [BROADCAST] Starting camera broadcast on session: iosILUIWU
[13:49:34] Initing with camera 0
[13:49:34] [START] AgentController.start() called with session: iosILUIWU
[13:49:34] [START] Cancelling any existing idle stop timer
[13:49:34] [CAM] Disconnected from signaling server
[13:49:34] [BROADCAST] Lightbulb shown at lower left, frame=(20.0, 800.0, 50.0, 50.0)
[13:49:34] [WEBRTC] ✅ Media teardown complete - camera stopped
[13:49:34] [PUSH_PRELOAD] ⚡ Pre-cached 3348 messages for instant display
[13:49:34] WS connected
[13:49:34] [PUSH_PRELOAD] Fetched 3348 messages - caching for instant display
[13:49:35] [MENU] 🔍 dismissAnyExistingMenu called
[13:49:35] [MENU] â„šī¸ No menu with tag 9999 found
[13:49:35] [MENU] ✅ dismissAnyExistingMenu completed
[13:49:35] [SEARCH] scrollViewWillBeginDragging - isSearchBarVisible=false, tab=0
[13:49:35] [SEARCH] handleTopRefresh called - tab=0, wasSearchBarVisibleOnDragStart=false
[13:49:35] [SEARCH] 🔍 First pull on Tab 0 - showing search bar instead of refresh
[13:49:35] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=false
[13:49:35] [SEARCH] ✅ Setting isSearchBarVisible = true
[13:49:35] [SEARCH] chatSearchBar is nil? false
[13:49:35] [SEARCH] Applied theme: day
[13:49:35] [SEARCH] Adjusting table contentInset.top by +56.0
[13:49:35] [SEARCH] Table contentInset.top: 0.0 -> 56.0
[13:49:35] [SEARCH] handleTopRefresh called - tab=0, wasSearchBarVisibleOnDragStart=false
[13:49:35] [SEARCH] 🔍 First pull on Tab 0 - showing search bar instead of refresh
[13:49:35] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=true
[13:49:35] [SEARCH] âš ī¸ Search bar already visible, returning early
[13:49:35] [PUSH_PRELOAD] ⚡ Pre-cached 3348 messages for instant display
[13:49:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails
[13:49:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails
[13:49:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails
[13:49:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 4456, AnyHashable("session_id"): ILUIWU]
[13:49:35] [PUSH] Parsed message_id: 4456
[13:49:35] [PUSH] Parsed operation_type: 3
[13:49:35] [PUSH] Taking direct action: opType=3, messageId=4456
[13:49:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=4456
[13:49:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 4457, AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("session_id"): ILUIWU]
[13:49:35] [PUSH] Parsed message_id: 4457
[13:49:35] [PUSH] Parsed operation_type: 3
[13:49:35] [PUSH] Taking direct action: opType=3, messageId=4457
[13:49:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=4457
[13:49:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 4461]
[13:49:35] [PUSH] Parsed message_id: 4461
[13:49:35] [PUSH] Parsed operation_type: 3
[13:49:35] [PUSH] Taking direct action: opType=3, messageId=4461
[13:49:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=4461
[13:49:35] [SEARCH] scrollViewDidEndDragging - scrollView=messagesTable, tab=0
[13:49:35] [SEARCH] contentOffset.y=-165.33333333333334, topInset=56.0, pullDistance=109.33333333333334
[13:49:35] [SEARCH] threshold=80.0, wasSearchBarVisibleOnDragStart=false
[13:49:35] [SEARCH] topRefresh.isRefreshing=false
[13:49:35] [SEARCH] ✅ Pull distance 109.33333333333334 >= threshold 80.0
[13:49:35] [SEARCH] 🔍 Showing search bar (first pull)
[13:49:35] [SEARCH] showSearchBar() called - animated=true, isSearchBarVisible=true
[13:49:35] [SEARCH] âš ī¸ Search bar already visible, returning early
[13:49:35] [SEARCH] Focusing search field
[13:49:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails
[13:49:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 4453]
[13:49:35] [PUSH] Parsed message_id: 4453
[13:49:35] [PUSH] Parsed operation_type: 3
[13:49:35] [PUSH] Taking direct action: opType=3, messageId=4453
[13:49:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=4453
[13:49:36] [PUSH_DEBUG] âŦ‡ī¸ PUSH RECEIVED at 2025-12-09 10:49:36 +0000 - type: camera_connected, operation_type: nil, message_id: nil, session_id: iosILUIWU, state: 0
[13:49:36] [PUSH_DEBUG] Full userInfo: [AnyHashable("type"): camera_connected, AnyHashable("aps"): {
    alert =     {
        body = "A camera has connected";
        title = "Camera Connected";
    };
    badge = 1;
    sound = default;
}, AnyHashable("session_id"): iosILUIWU]
[13:49:36] [PUSH] App active - suppressing notification UI, posting internal event
[13:49:36] [PUSH_EMBED] No embedded message_data in notification
[13:49:36] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("type"): camera_connected, AnyHashable("aps"): {
    alert =     {
        body = "A camera has connected";
        title = "Camera Connected";
    };
    badge = 1;
    sound = default;
}, AnyHashable("session_id"): iosILUIWU]
[13:49:36] [PUSH] No message_id in userInfo
[13:49:36] [PUSH] No operation_type in userInfo
[13:49:36] [FAST_REFRESH] Evolution disabled - performing incremental sync
[13:49:36] [FAST_REFRESH] Already have 50 messages - skipping local DB load
[13:49:36] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true
[13:49:36] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully
[13:49:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 4461
[13:49:36] [INCREMENTAL_SYNC] ✅ No new messages
[13:49:36] [FAST_REFRESH] Incremental sync complete - 50 messages
[13:49:36] [SIG] agent_connected received for sessionId=iosILUIWU agentId=zv8LGa7Ov145kt0A
[13:49:36] [AGENTS] Skipping connection to broadcast session iosILUIWU - myAgentId not yet known
[13:49:36] [SIG] agents_list received: [["connected": 1, "agentId": zv8LGa7Ov145kt0A, "sessionId": iosILUIWU]]
[13:49:36] [SIG] agent_connected received for sessionId=iosILUIWU agentId=zv8LGa7Ov145kt0A
[13:49:36] [AGENTS] Skipping connection to broadcast session iosILUIWU - myAgentId not yet known
[13:49:36] [SIG] agents_list received: [["sessionId": iosILUIWU, "agentId": zv8LGa7Ov145kt0A, "connected": 1]]
[13:49:36] [CAM] ✅ Connected to signaling server. Session: iosILUIWU, agentId: zv8LGa7Ov145kt0A
[13:49:36] [CAM] helloOK → connected=true, myAgentId=zv8LGa7Ov145kt0A
[13:49:36] [WEBRTC] Creating new WebRTC client
[13:49:36] [CODEC] Available video codecs: H264, H264, VP8, VP9, AV1
[13:49:36] [CODEC] Agent selected encoder: AV1 (best quality)
[13:49:36] [WS AUDIO] Initializing WebSocket audio sender...
[13:49:36] [WS AUDIO] ✅ WebSocket audio sender initialized
[13:49:36] [ICE] Agent using 4 ICE urls:
 - stun:stun.l.google.com:19302
 - turn:crivello.dyndns.org:3478?transport=udp
 - turn:crivello.dyndns.org:3478?transport=tcp
 - turns:crivello.dyndns.org:5349?transport=tcp
[13:49:36] [ICE] Using 2 ICE server entries
[13:49:36] [CAPTURE] startCapture() called with width:1920, height:1080, fps:30
[13:49:36] [CAPTURE] Creating audio track
[13:49:36] [CAPTURE] DataChannelAudioSender already exists
[13:49:36] [CAPTURE] Creating front video source and track
[13:49:36] [CAPTURE] Creating back video source and track
[13:49:36] localVideoTrackFront ok
[13:49:36] localVideoTrackBack ok
[13:49:36] Marking tracks as ready and firing callbacks
[13:49:36] [CAPTURE] ✅ Device supports MultiCam, starting dual camera session
[13:49:36] [CAPTURE] configureAndStartMultiCamSession() starting...
[13:49:36] Video capture stopped (audio still running)
[13:49:36] [CAPTURE] Created MultiCamSession and began configuration
[13:49:36] [CAPTURE] Looking for camera devices...
[13:49:36] [CAPTURE] ✅ Found front camera: Front Camera
[13:49:36] [CAPTURE] ✅ Found back camera: Back Camera
[13:49:36] Selected camera format: 1920x1080, pixel format: 875704438
[13:49:36] [CAPTURE] Enabled continuous autofocus for front camera
[13:49:36] Selected camera format: 1920x1080, pixel format: 875704438
[13:49:36] [CAPTURE] Enabled continuous autofocus for back camera
[13:49:36] Selected camera format: 640x480, pixel format: 875704438
[13:49:36] Selected camera format: 640x480, pixel format: 875704438
[13:49:36] [CAPTURE] Configuration committed
[13:49:36] [CAPTURE] Starting MultiCam session...
[13:49:36] [CAPTURE] ✅ AVCaptureMultiCamSession started successfully (front + back)
[13:49:36] [CAPTURE] Session running: true
[13:49:37] [COMBINED_FETCH] Loaded 3348 read receipts, 395 messages with reactions
[13:49:37] [FAST_REFRESH] Enriched 50 messages with readBy data