← Back to list | Download | 2026-01-18-18-35-no-description.log (89,755 bytes)
=== Eye Viewer Log Cleared at 2026-01-18 16:40:07 +0000 ===
[17:40:07] [CRASH] No crash detected
[17:40:07] [LOG] Log rotation interval exceeded (2h) - clearing logs
[17:40:07] [FONT] Roboto fonts loaded successfully: Roboto-Regular
[17:40:07] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto
[17:40:07] [GIPHY] SDK not available - using REST API fallback
[17:40:07] [BACKGROUND] Background fetch enabled
[17:40:07] [AUTH] Starting PIN authentication
[17:40:07] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU
[17:40:07] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[17:40:07] [CLEANUP] No old timer messages to delete
[17:40:07] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c
[17:40:07] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false
[17:40:07] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow
[17:40:07] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0}
[17:40:07] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[17:40:07] [USER] ✅ User registered successfully
[17:40:07] [PUSH] User registration after token update: success
[17:40:07] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18165)...
[17:40:07] [PRELOAD] Fetched 2 messages
[17:40:07] [PRELOAD] ⚡ Cached 2 messages for instant display (preserved 0 from push)
[17:40:07] [CLIENT_SIG] WebSocket opened
[17:40:07] [CLIENT_SIG] HELLO sent as client for session ILUIWU
[17:40:07] [CLIENT_SIG] Connected! clientId=IWMT6vwZFdM6VTCb
[17:40:07] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU')
[17:40:07] [CLIENT_SIG]   - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[17:40:08] [PIN_AUTH] Correct PIN
[17:40:08] [SECURITY] Restored real session: ILUIWU
[17:40:08] [SECURITY] Restored real session: ILUIWU
[17:40:08] [SECURITY] Saved real session: ILUIWU
[17:40:08] [SCENE] Launched directly to chat view with sessionId: ILUIWU
[17:40:08] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone)
[17:40:08] Documents Directory: /var/mobile/Containers/Data/Application/0323A6A9-E7A4-45D0-B237-86B584E247AE/Documents
[17:40:08] [UPLOAD_QUEUE] Found 0 pending uploads to resume
[17:40:08] [THEME] Applying current theme
[17:40:08] [CHAT] Applied day theme (mode: day)
[17:40:08] [SECURITY] Saved real session: ILUIWU
[17:40:08] [CLIENT_SIG] Setting up client signaling for session: ILUIWU
[17:40:08] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[17:40:08] [NETWORK] Network monitor started
[17:40:08] [NETWORK] Status changed: connected
[17:40:08] Did transition
[17:40:08] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU
[17:40:08] [VIEWER] Screen lock enabled - normal idle behavior
[17:40:08] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU
[17:40:08] [VCC] ========== VideoConnectionClass INIT ==========
[17:40:08] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil
[17:40:08] [DATA AUDIO] ========== setupWebRTC() START ==========
[17:40:08] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device
[17:40:08] [DATA AUDIO] Creating encoder/decoder factories...
[17:40:08] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1
[17:40:08] [CODEC] Viewer selected encoder: AV1 (best quality)
[17:40:08] [DATA AUDIO] Creating RTCPeerConnectionFactory...
[17:40:08] [DATA AUDIO] ✅ Factory created
[17:40:08] [DATA AUDIO] RTCAudioSession locked
[17:40:08] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false
[17:40:08] [DATA AUDIO] RTCAudioSession unlocked
[17:40:08] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer
[17:40:08] [VCC] Initial ICE servers: ["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"]
[17:40:08] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU
[17:40:08] [WS] Opening session at ws://crivello.dyndns.org:8081/
[17:40:08] [QUERY] ✅ tempQueryConnection created for iosILUIWU
[17:40:08] [VIEWER_INIT] Already have 50 messages - just filtering for tab
[17:40:08] [EVENT_POLL] Event polling disabled - using WebSocket events instead
[17:40:08] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0
[17:40:08] Did transition
[17:40:08] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0)
[17:40:08] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[17:40:08] [CHUNK] Merged 841 reactions synchronously
[17:40:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce
[17:40:08] [GALLERY_DB] Loading ALL media messages for session: ILUIWU
[17:40:08] [MIGRATION] No messages need sender_name backfill
[17:40:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50
[17:40:08] [GALLERY_DB] Raw datesent for msg 18162: '2026-01-18 10:37:29'
[17:40:08] [GALLERY_DB] Raw datesent for msg 18161: '2026-01-18 10:36:56'
[17:40:08] [GALLERY_DB] Raw datesent for msg 18159: '2026-01-18 10:17:19'
[17:40:08] [USER] ✅ User registered successfully
[17:40:08] [USER] User registration successful
[17:40:08] [GALLERY_DB] ✅ Loaded 450 media messages
[17:40:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18165
[17:40:08] [INCREMENTAL_SYNC] ✅ Found 2 new messages
[17:40:08] [GALLERY] Filtered 450 -> 411 (only with local thumbnails)
[17:40:08] [GALLERY] First 5 after sort (newest first):
[17:40:08] [GALLERY]   0: id=18162, date=2026-01-18 10:37:29, file=2360d0215b6a2ab2.mov
[17:40:08] [GALLERY]   1: id=18161, date=2026-01-18 10:36:56, file=399b07f80d99b3ff.heic
[17:40:08] [GALLERY]   2: id=18159, date=2026-01-18 10:17:19, file=d709f7e2335b9796.jpeg
[17:40:08] [GALLERY]   3: id=18154, date=2026-01-18 09:40:37, file=80de02d18174956b.jpeg
[17:40:08] [GALLERY]   4: id=18150, date=2026-01-18 08:18:43, file=044523ae024c2e36.mov
[17:40:08] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt
[17:40:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18116, 18117, 18118, 18119, 18120]
[17:40:08] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings
[17:40:08] [CELL_UPLOAD] configure: msgId=18117, file=ca2813d190665dd2.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[17:40:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ca2813d190665dd2.jpg, overlayExists=true
[17:40:08] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:08] [CELL_UPLOAD] → not my message, setting complete
[17:40:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[17:40:08] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:08] [CELL_UPLOAD] → not my message, setting complete
[17:40:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:08] [SERVER] Starting reconnect polling (5s interval)
[17:40:08] [ICONS] Screen width: 440.0, Tab spacing: 75.5
[17:40:08] [ICONS] Offset applied: -14.6
[17:40:08] [ICONS] New left margin: 11.2, New right margin: 11.3
[17:40:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=2
[17:40:08] [ICONS] Chat center: (31.2, 87.0)
[17:40:08] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5
[17:40:08] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5
[17:40:08] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5
[17:40:08] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5
[17:40:08] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5
[17:40:08] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2
[17:40:08] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3
[17:40:08] [ICONS] Screen width: 440.0
[17:40:08] DOWNLOADIIING 2360d0215b6a2ab2.mov
[17:40:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU
[17:40:08] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[17:40:08] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[17:40:08] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU
[17:40:09] [PURGE] ⚠️ Media cache purge DISABLED for debugging
[17:40:09] [UNSENT_RETRY] Checking for unsent messages...
[17:40:09] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ==========
[17:40:09] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF
[17:40:09] [UPLOAD_RECOVERY] Session: ILUIWU
[17:40:09] [UPLOAD_RECOVERY] ✅ No stuck uploads found
[17:40:09] [UPLOAD_RECOVERY] Checking recent media messages on server...
[17:40:09] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18159, file=d709f7e2335b9796.jpeg, upload_status=complete
[17:40:09] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18127, file=62b393a353b38c70.jpg, upload_status=complete
[17:40:09] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18117, file=ca2813d190665dd2.jpg, upload_status=complete
[17:40:09] [UPLOAD_RECOVERY] Verifying 3 media files exist on server...
[17:40:09] [PENDING_UPLOAD] Total pending upload messages: 0
[17:40:09] [UNSENT_RETRY] No unsent messages found
[17:40:09] [PUSH] Silent push received
[17:40:09] [PUSH_EMBED] 📩 Received embedded message: id=18167, type=0, sender=Esra
[17:40:09] [PUSH_EMBED] ✅ Saved message 18167 to local DB (sync)
[17:40:09] [PUSH_EMBED] Created new cache with embedded message 18167
[17:40:09] [PUSH_EMBED] Fetching evolution data for message 18167 in background
[17:40:09] [PUSH_EMBED] ✅ Fully processed message 18167
[17:40:09] [PUSH] Embedded message handled instantly from silent push
[17:40:09] [PUSH_UI] 🔔 handlePushMessageReceived CALLED
[17:40:09] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0
[17:40:09] [PUSH_UI] Message 18167 already in memory - skipping insert
[17:40:09] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18167, AnyHashable("operation_type"): 0, AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("message_data"): {
    datesent = "2026-01-18 14:56:52";
    "file_name" = "";
    message = "Morning was good but afternoon was like a nightmare";
    "message_id" = 18167;
    "message_type" = 0;
    "prev_session_message_id" = 18166;
    "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE";
    "sender_name" = Esra;
    "session_id" = ILUIWU;
    timer = 0;
}, AnyHashable("session_id"): ILUIWU]
[17:40:09] [PUSH_EMBED_VC] Message 18167 already in memory - skipping
[17:40:09] [PUSH] ⚡ Embedded message handled directly in ViewController
[17:40:09] [PUSH] Parsed message_id: 18167
[17:40:09] [PUSH] Parsed operation_type: 0
[17:40:09] [PUSH] Taking direct action: opType=0, messageId=18167
[17:40:09] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18167
[17:40:09] [PUSH] ⚡ Message 18167 already in memory - skipping duplicate notification entirely
[17:40:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:09] new_session POST ok: token len=157
[17:40:09] HELLO → sent (fetched token, role=query)
[17:40:09] [SIG] hello_ok received for query connection - ready to query agents
[17:40:09] [SIG] get_agents request sent for sessionId=ILUIWU
[17:40:09] [SIG] get_agents request sent for sessionId=iosILUIWU
[17:40:09] [SERVER] Stopped reconnect polling
[17:40:09] [SIG] agents_list received: []
[17:40:09] [UPLOAD_RECOVERY] ✅ All media files verified on server
[17:40:09] [SIG] agents_list received: []
[17:40:09] [PUSH_EMBED] Got evolution data for message 18167, saving to local DB
[17:40:09] [PUSH_EMBED] Saved evolution data for message 18167
[17:40:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18116, 18117, 18118, 18119, 18120]
[17:40:09] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:09] [CELL_UPLOAD] → not my message, setting complete
[17:40:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[17:40:09] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:09] [CELL_UPLOAD] → not my message, setting complete
[17:40:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:09] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18165 → 18166
[17:40:09] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18166 → 18167
[17:40:09] [COMBINED_FETCH] Loaded 6934 read receipts, 837 messages with reactions
[17:40:09] [READBY_ENRICH] Enriched 52 messages with readBy data
[17:40:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18116, 18117, 18118, 18119, 18120]
[17:40:09] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:09] [CELL_UPLOAD] → not my message, setting complete
[17:40:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[17:40:09] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:09] [CELL_UPLOAD] → not my message, setting complete
[17:40:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:12] [PUSH] Silent push received
[17:40:12] [PUSH_EMBED] No embedded message_data in notification
[17:40:12] [PUSH] No embedded data, pre-loading messages from server
[17:40:12] [PUSH_PRELOAD] Fetching messages for instant display cache
[17:40:12] [PUSH] Silent push received
[17:40:12] [PUSH_EMBED] No embedded message_data in notification
[17:40:12] [PUSH] No embedded data, pre-loading messages from server
[17:40:12] [PUSH_PRELOAD] Fetching messages for instant display cache
[17:40:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display
[17:40:12] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push)
[17:40:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display
[17:40:12] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push)
[17:40:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails
[17:40:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18166, AnyHashable("operation_type"): 3, AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("session_id"): ILUIWU]
[17:40:12] [PUSH] Parsed message_id: 18166
[17:40:12] [PUSH] Parsed operation_type: 3
[17:40:12] [PUSH] Taking direct action: opType=3, messageId=18166
[17:40:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18166
[17:40:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails
[17:40:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18167, AnyHashable("operation_type"): 3, AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("session_id"): ILUIWU]
[17:40:12] [PUSH] Parsed message_id: 18167
[17:40:12] [PUSH] Parsed operation_type: 3
[17:40:12] [PUSH] Taking direct action: opType=3, messageId=18167
[17:40:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18167
[17:40:12] [CLIENT_SIG] Event received: type=3 messageId=18167
[17:40:12] [WS_EVENT] Received event: type=3, messageId=18167
[17:40:12] [WS_EVENT] Read receipt for message 18167 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[17:40:12] [CLIENT_SIG] Event received: type=3 messageId=18166
[17:40:12] [WS_EVENT] Received event: type=3, messageId=18166
[17:40:12] [WS_EVENT] Read receipt for message 18166 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[17:40:13] [MENU] dismissAnyExistingMenu called
[17:40:13] [MENU] dismissAnyExistingMenu completed
[17:40:25] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply
[17:40:25] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false
[17:40:25] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=53
[17:40:25] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-1, 18167, 18166, 18165, 18164]
[17:40:26] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:26] [CELL_UPLOAD] → not my message, setting complete
[17:40:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:26] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo
[17:40:26] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured
[17:40:26] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:26] [CELL_UPLOAD] → not my message, setting complete
[17:40:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[17:40:28] [CLIENT_SIG] Event received: type=0 messageId=18168
[17:40:28] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18168,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-18 16:40:26"}
[17:40:28] [WS_EVENT] Received event: type=0, messageId=18168
[17:40:28] [WS_EVENT] 📨 New message notification (msgId=18168) - triggering incremental refresh, currentMsgCount=53
[17:40:28] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53
[17:40:28] [CHAT] receive_message.php JSON: ["ok": 1, "message_id": 18168, "session_id": ILUIWU, "message_type": 0, "datesent_utc": 2026-01-18 16:40:26, "file_name": ]
[17:40:28] [DB_UPGRADE] Upgrading message ID: -1 → 18168, preserveOriginalDate=false
[17:40:28] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18167
[17:40:28] [DB_UPGRADE] ✅ Upgraded -1 → 18168 with send_status=0, 1 row(s) affected
[17:40:28] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 18168
[17:40:28] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 18168
[17:40:28] ReloadData 9
[17:40:28] [INCREMENTAL_SYNC] ✅ Found 1 new messages
[17:40:28] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:28] [CELL_UPLOAD] → not my message, setting complete
[17:40:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:28] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1
[17:40:28] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53
[17:40:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18116, 18117, 18118, 18119, 18120]
[17:40:28] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:28] [CELL_UPLOAD] → not my message, setting complete
[17:40:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:44] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply
[17:40:44] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false
[17:40:44] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=54
[17:40:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-2, 18168, 18167, 18166, 18165]
[17:40:44] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:44] [CELL_UPLOAD] → not my message, setting complete
[17:40:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[17:40:44] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo
[17:40:44] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured
[17:40:44] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[17:40:44] [CELL_UPLOAD] → not my message, setting complete
[17:40:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[17:40:44] [LOCK] Lock button tapped - locking app immediately
[17:40:44] [LOCK] Received lock app notification
[17:40:45] [LIFECYCLE] App resigning active - cleared crash flag
[17:40:45] [SECURITY] sceneDidEnterBackground - isAuthenticated=false
[17:40:45] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false
[17:40:45] [LIFECYCLE] App entering background - cleared crash flag
[17:40:45] [CLIENT_SIG] Disconnecting
[17:40:45] [LIFECYCLE] App entering background - disconnecting connections and stopping audio
[17:40:45] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0
[17:40:45] [WS] Canceling WebSocket for query connection to iosILUIWU
[17:40:45] In cleanupPeer
[17:40:45] In cleanupPeer
[17:40:45] [LIFECYCLE] WebRTC audio disabled
[17:40:45] [LIFECYCLE] AVAudioSession deactivated
[17:40:45] [LIFECYCLE] All connections stopped
[17:40:45] [SERVER] Stopped reconnect polling
[17:40:45] Will request stop of video 0
[17:40:45] Will request stop of video 0
[17:40:45] [CLIENT_SIG] WebSocket closed with code 1001
[17:40:45] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1)
[17:40:45] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001
[17:40:45] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views
[17:40:45] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/}
[17:40:45] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2)
[17:40:45] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected
[17:40:45] [WS] Query connection failed - cleaning up all agent connections and views
[17:40:45] [LIFECYCLE] ViewController deallocated
[18:05:54] [CRASH] No crash detected
[18:05:54] [LOG] Within rotation interval - preserving logs (94m until next clear)
[18:05:54] [FONT] Roboto fonts loaded successfully: Roboto-Regular
[18:05:54] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto
[18:05:54] [GIPHY] SDK not available - using REST API fallback
[18:05:54] [BACKGROUND] Background fetch enabled
[18:05:54] [AUTH] Starting PIN authentication
[18:05:54] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU
[18:05:54] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:05:54] [CLEANUP] No old timer messages to delete
[18:05:54] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c
[18:05:54] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0}
[18:05:54] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[18:05:54] [USER] ✅ User registered successfully
[18:05:54] [PUSH] User registration after token update: success
[18:05:54] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false
[18:05:54] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow
[18:05:55] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18168)...
[18:05:55] [CLIENT_SIG] WebSocket opened
[18:05:55] [CLIENT_SIG] HELLO sent as client for session ILUIWU
[18:05:55] [PRELOAD] Fetched 1 messages
[18:05:55] [CLIENT_SIG] Connected! clientId=e96sY6TugGGTsq4S
[18:05:55] [PRELOAD] ⚡ Cached 1 messages for instant display (preserved 0 from push)
[18:05:55] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU')
[18:05:55] [CLIENT_SIG]   - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:05:56] [PIN_AUTH] Correct PIN
[18:05:56] [SECURITY] Restored real session: ILUIWU
[18:05:56] [SECURITY] Restored real session: ILUIWU
[18:05:56] [SECURITY] Saved real session: ILUIWU
[18:05:56] [SCENE] Launched directly to chat view with sessionId: ILUIWU
[18:05:56] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone)
[18:05:56] Documents Directory: /var/mobile/Containers/Data/Application/0323A6A9-E7A4-45D0-B237-86B584E247AE/Documents
[18:05:56] [THEME] Applying current theme
[18:05:56] [CHAT] Applied day theme (mode: day)
[18:05:56] [SECURITY] Saved real session: ILUIWU
[18:05:56] [CLIENT_SIG] Setting up client signaling for session: ILUIWU
[18:05:56] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[18:05:56] [NETWORK] Network monitor started
[18:05:56] [NETWORK] Status changed: connected
[18:05:56] [UPLOAD_QUEUE] Found 0 pending uploads to resume
[18:05:56] Did transition
[18:05:56] [DB_SEND] 📥 Loaded msg id=-2 with send_status=1 (sending)
[18:05:56] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU
[18:05:56] [VIEWER] Screen lock enabled - normal idle behavior
[18:05:56] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU
[18:05:56] [VCC] ========== VideoConnectionClass INIT ==========
[18:05:56] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil
[18:05:56] [DATA AUDIO] ========== setupWebRTC() START ==========
[18:05:56] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device
[18:05:56] [DATA AUDIO] Creating encoder/decoder factories...
[18:05:56] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1
[18:05:56] [CODEC] Viewer selected encoder: AV1 (best quality)
[18:05:56] [DATA AUDIO] Creating RTCPeerConnectionFactory...
[18:05:56] [DATA AUDIO] ✅ Factory created
[18:05:56] [DATA AUDIO] RTCAudioSession locked
[18:05:56] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false
[18:05:56] [DATA AUDIO] RTCAudioSession unlocked
[18:05:56] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer
[18:05:56] [VCC] Initial ICE servers: ["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"]
[18:05:56] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU
[18:05:56] [WS] Opening session at ws://crivello.dyndns.org:8081/
[18:05:56] [QUERY] ✅ tempQueryConnection created for iosILUIWU
[18:05:56] [VIEWER_INIT] Already have 50 messages - just filtering for tab
[18:05:56] [EVENT_POLL] Event polling disabled - using WebSocket events instead
[18:05:56] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0
[18:05:56] Did transition
[18:05:56] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0)
[18:05:56] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[18:05:56] [CHUNK] Merged 841 reactions synchronously
[18:05:56] [RELOAD_TAB] ⏳ Already pending, waiting for debounce
[18:05:56] [GALLERY_DB] Loading ALL media messages for session: ILUIWU
[18:05:56] [MIGRATION] No messages need sender_name backfill
[18:05:56] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50
[18:05:56] [GALLERY_DB] Raw datesent for msg 18162: '2026-01-18 10:37:29'
[18:05:56] [GALLERY_DB] Raw datesent for msg 18161: '2026-01-18 10:36:56'
[18:05:56] [GALLERY_DB] Raw datesent for msg 18159: '2026-01-18 10:17:19'
[18:05:56] [USER] ✅ User registered successfully
[18:05:56] [USER] User registration successful
[18:05:56] [GALLERY_DB] ✅ Loaded 450 media messages
[18:05:56] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18168
[18:05:56] [INCREMENTAL_SYNC] ✅ Found 1 new messages
[18:05:56] [GALLERY] Filtered 450 -> 411 (only with local thumbnails)
[18:05:56] [GALLERY] First 5 after sort (newest first):
[18:05:56] [GALLERY]   0: id=18162, date=2026-01-18 10:37:29, file=2360d0215b6a2ab2.mov
[18:05:56] [GALLERY]   1: id=18161, date=2026-01-18 10:36:56, file=399b07f80d99b3ff.heic
[18:05:56] [GALLERY]   2: id=18159, date=2026-01-18 10:17:19, file=d709f7e2335b9796.jpeg
[18:05:56] [GALLERY]   3: id=18154, date=2026-01-18 09:40:37, file=80de02d18174956b.jpeg
[18:05:56] [GALLERY]   4: id=18150, date=2026-01-18 08:18:43, file=044523ae024c2e36.mov
[18:05:56] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt
[18:05:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18120, 18121, 18122, 18123, 18124]
[18:05:56] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings
[18:05:56] [CELL_UPLOAD] configure: msgId=18127, file=62b393a353b38c70.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:56] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:05:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=62b393a353b38c70.jpg, overlayExists=true
[18:05:56] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:56] [CELL_UPLOAD] → not my message, setting complete
[18:05:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:05:56] [SERVER] Starting reconnect polling (5s interval)
[18:05:56] [ICONS] Screen width: 440.0, Tab spacing: 75.5
[18:05:56] [ICONS] Offset applied: -14.6
[18:05:56] [ICONS] New left margin: 11.2, New right margin: 11.3
[18:05:56] [INCREMENTAL_SYNC] Replaced optimistic message (id=-2) with server message (id=18169)
[18:05:56] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1
[18:05:56] [ICONS] Chat center: (31.2, 87.0)
[18:05:56] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5
[18:05:56] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5
[18:05:56] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5
[18:05:56] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5
[18:05:56] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5
[18:05:56] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2
[18:05:56] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3
[18:05:56] [ICONS] Screen width: 440.0
[18:05:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU
[18:05:56] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[18:05:56] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[18:05:56] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU
[18:05:56] DOWNLOADIIING 2360d0215b6a2ab2.mov
[18:05:56] [PURGE] ⚠️ Media cache purge DISABLED for debugging
[18:05:56] [UNSENT_RETRY] Checking for unsent messages...
[18:05:56] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ==========
[18:05:56] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF
[18:05:56] [UPLOAD_RECOVERY] Session: ILUIWU
[18:05:56] [UPLOAD_RECOVERY] ✅ No stuck uploads found
[18:05:56] [UPLOAD_RECOVERY] Checking recent media messages on server...
[18:05:56] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18159, file=d709f7e2335b9796.jpeg, upload_status=complete
[18:05:56] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18127, file=62b393a353b38c70.jpg, upload_status=complete
[18:05:56] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18117, file=ca2813d190665dd2.jpg, upload_status=complete
[18:05:56] [UPLOAD_RECOVERY] Verifying 3 media files exist on server...
[18:05:56] [PENDING_UPLOAD] Total pending upload messages: 0
[18:05:56] [UNSENT_RETRY] No unsent messages found
[18:05:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:05:56] new_session POST ok: token len=157
[18:05:56] HELLO → sent (fetched token, role=query)
[18:05:56] [SIG] hello_ok received for query connection - ready to query agents
[18:05:56] [SIG] get_agents request sent for sessionId=ILUIWU
[18:05:56] [SIG] get_agents request sent for sessionId=iosILUIWU
[18:05:56] [SERVER] Stopped reconnect polling
[18:05:56] [SIG] agents_list received: []
[18:05:56] [SIG] agents_list received: []
[18:05:56] [UPLOAD_RECOVERY] ✅ All media files verified on server
[18:05:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18120, 18121, 18122, 18123, 18124]
[18:05:56] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:56] [CELL_UPLOAD] → not my message, setting complete
[18:05:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:05:57] [COMBINED_FETCH] Loaded 6936 read receipts, 837 messages with reactions
[18:05:57] [READBY_ENRICH] Enriched 50 messages with readBy data
[18:05:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18120, 18121, 18122, 18123, 18124]
[18:05:57] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:57] [CELL_UPLOAD] → not my message, setting complete
[18:05:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:05:57] [MENU] dismissAnyExistingMenu called
[18:05:57] [MENU] dismissAnyExistingMenu completed
[18:05:57] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:57] [CELL_UPLOAD] → not my message, setting complete
[18:05:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[18:05:57] [SCROLL_BTN] Showing button - 389pt from bottom > half 379pt
[18:05:57] [CELL_UPLOAD] configure: msgId=18159, file=d709f7e2335b9796.jpeg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:57] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:05:57] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d709f7e2335b9796.jpeg, overlayExists=true
[18:05:57] [MENU] dismissAnyExistingMenu called
[18:05:57] [MENU] dismissAnyExistingMenu completed
[18:05:58] [CELL_UPLOAD] configure: msgId=18159, file=d709f7e2335b9796.jpeg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:05:58] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:05:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d709f7e2335b9796.jpeg, overlayExists=true
[18:06:02] [MENU] dismissAnyExistingMenu called
[18:06:02] [MENU] dismissAnyExistingMenu completed
[18:06:03] [MENU] dismissAnyExistingMenu called
[18:06:03] [MENU] dismissAnyExistingMenu completed
[18:06:03] [MENU] dismissAnyExistingMenu called
[18:06:03] [MENU] dismissAnyExistingMenu completed
[18:06:03] [CELL_UPLOAD] configure: msgId=18154, file=80de02d18174956b.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:03] [CELL_UPLOAD] → not my message, setting complete
[18:06:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=80de02d18174956b.jpeg, overlayExists=true
[18:06:04] [CELL_UPLOAD] configure: msgId=18150, file=044523ae024c2e36.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:04] [CELL_UPLOAD] → not my message, setting complete
[18:06:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=044523ae024c2e36.mov, overlayExists=true
[18:06:04] [MENU] dismissAnyExistingMenu called
[18:06:04] [MENU] dismissAnyExistingMenu completed
[18:06:04] [CELL_UPLOAD] configure: msgId=18149, file=bdecbcd267d10e9d.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:04] [CELL_UPLOAD] → not my message, setting complete
[18:06:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=bdecbcd267d10e9d.heic, overlayExists=true
[18:06:04] [CELL_UPLOAD] configure: msgId=18147, file=22d80b8c4c39c5aa.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:04] [CELL_UPLOAD] → not my message, setting complete
[18:06:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true
[18:06:04] [MENU] dismissAnyExistingMenu called
[18:06:04] [MENU] dismissAnyExistingMenu completed
[18:06:05] [CENTER_CONTENT] boundsSize: (0.0, 0.0), contentSize: (440.0, 956.0)
[18:06:05] [CENTER_CONTENT] topSafeArea: 0.0, controlsHeight: 76.0, visibleHeight: -76.0
[18:06:05] [CENTER_CONTENT] Content larger than visible - Setting insets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 76.0, right: 0.0)
[18:06:43] [MENU] dismissAnyExistingMenu called
[18:06:43] [MENU] dismissAnyExistingMenu completed
[18:06:43] [CELL_UPLOAD] configure: msgId=18154, file=80de02d18174956b.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:43] [CELL_UPLOAD] → not my message, setting complete
[18:06:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=80de02d18174956b.jpeg, overlayExists=true
[18:06:43] [CELL_UPLOAD] configure: msgId=18159, file=d709f7e2335b9796.jpeg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:43] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:06:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d709f7e2335b9796.jpeg, overlayExists=true
[18:06:43] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:43] [CELL_UPLOAD] → not my message, setting complete
[18:06:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[18:06:43] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:06:43] [CELL_UPLOAD] → not my message, setting complete
[18:06:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:06:44] [MENU] dismissAnyExistingMenu called
[18:06:44] [MENU] dismissAnyExistingMenu completed
[18:06:47] [MENU] dismissAnyExistingMenu called
[18:06:47] [MENU] dismissAnyExistingMenu completed
[18:07:03] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply
[18:07:03] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false
[18:07:03] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51
[18:07:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 18169, 18168, 18167, 18166]
[18:07:03] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo
[18:07:03] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured
[18:07:03] DOWNLOADIIING 2360d0215b6a2ab2.mov
[18:07:03] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:03] [CELL_UPLOAD] → not my message, setting complete
[18:07:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:07:04] [MENU] dismissAnyExistingMenu called
[18:07:04] [MENU] dismissAnyExistingMenu completed
[18:07:04] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:04] [CELL_UPLOAD] → not my message, setting complete
[18:07:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:07:04] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:04] [CELL_UPLOAD] → not my message, setting complete
[18:07:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[18:07:04] [SCROLL_BTN] Showing button - 289pt from bottom > half 223pt
[18:07:04] [SCROLL_BTN] Showing button - 402pt from bottom > half 379pt
[18:07:04] [SCROLL_BTN] Showing button - 459pt from bottom > half 379pt
[18:07:04] [CELL_UPLOAD] configure: msgId=18159, file=d709f7e2335b9796.jpeg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:04] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:07:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d709f7e2335b9796.jpeg, overlayExists=true
[18:07:04] [CELL_UPLOAD] configure: msgId=18154, file=80de02d18174956b.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:04] [CELL_UPLOAD] → not my message, setting complete
[18:07:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=80de02d18174956b.jpeg, overlayExists=true
[18:07:04] [CELL_UPLOAD] configure: msgId=18150, file=044523ae024c2e36.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:04] [CELL_UPLOAD] → not my message, setting complete
[18:07:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=044523ae024c2e36.mov, overlayExists=true
[18:07:05] [CELL_UPLOAD] configure: msgId=18149, file=bdecbcd267d10e9d.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:05] [CELL_UPLOAD] → not my message, setting complete
[18:07:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=bdecbcd267d10e9d.heic, overlayExists=true
[18:07:05] [MENU] dismissAnyExistingMenu called
[18:07:05] [MENU] dismissAnyExistingMenu completed
[18:07:05] [CELL_UPLOAD] configure: msgId=18147, file=22d80b8c4c39c5aa.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:05] [CELL_UPLOAD] → not my message, setting complete
[18:07:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true
[18:07:05] [MENU] dismissAnyExistingMenu called
[18:07:05] [MENU] dismissAnyExistingMenu completed
[18:07:05] [CELL_UPLOAD] configure: msgId=18150, file=044523ae024c2e36.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:05] [CELL_UPLOAD] → not my message, setting complete
[18:07:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=044523ae024c2e36.mov, overlayExists=true
[18:07:05] [MENU] dismissAnyExistingMenu called
[18:07:05] [MENU] dismissAnyExistingMenu completed
[18:07:05] [CLIENT_SIG] Event received: type=0 messageId=18170
[18:07:05] [WS_EVENT] Received event: type=0, messageId=18170
[18:07:05] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18170,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-18 17:07:03"}
[18:07:05] [WS_EVENT] 📨 New message notification (msgId=18170) - triggering incremental refresh, currentMsgCount=51
[18:07:05] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51
[18:07:05] [CHAT] receive_message.php JSON: ["message_id": 18170, "datesent_utc": 2026-01-18 17:07:03, "session_id": ILUIWU, "ok": 1, "file_name": , "message_type": 0]
[18:07:05] [DB_UPGRADE] Upgrading message ID: -1 → 18170, preserveOriginalDate=false
[18:07:05] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18169
[18:07:06] [DB_UPGRADE] ✅ Upgraded -1 → 18170 with send_status=0, 1 row(s) affected
[18:07:06] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 18170
[18:07:06] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 18170
[18:07:06] ReloadData 9
[18:07:06] [INCREMENTAL_SYNC] ✅ Found 1 new messages
[18:07:06] [CELL_UPLOAD] configure: msgId=18147, file=22d80b8c4c39c5aa.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:06] [CELL_UPLOAD] → not my message, setting complete
[18:07:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true
[18:07:06] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1
[18:07:06] [CELL_UPLOAD] configure: msgId=18149, file=bdecbcd267d10e9d.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:06] [CELL_UPLOAD] → not my message, setting complete
[18:07:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=bdecbcd267d10e9d.heic, overlayExists=true
[18:07:06] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51
[18:07:06] [CELL_UPLOAD] configure: msgId=18149, file=bdecbcd267d10e9d.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:06] [CELL_UPLOAD] → not my message, setting complete
[18:07:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=bdecbcd267d10e9d.heic, overlayExists=true
[18:07:07] [MENU] dismissAnyExistingMenu called
[18:07:07] [MENU] dismissAnyExistingMenu completed
[18:07:07] [CELL_UPLOAD] configure: msgId=18127, file=62b393a353b38c70.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:07] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:07:07] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=62b393a353b38c70.jpg, overlayExists=true
[18:07:07] [MENU] dismissAnyExistingMenu called
[18:07:07] [MENU] dismissAnyExistingMenu completed
[18:07:08] [COMBINED_FETCH] Loaded 6937 read receipts, 837 messages with reactions
[18:07:08] [PAGINATION] 📜 Loading 49 older messages, firstVisibleRow=10, oldOffset=1419.3333333333333
[18:07:08] [PAGINATION] 📜 Total now: 100
[18:07:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=100, first5Ids=[18071, 18072, 18073, 18074, 18075]
[18:07:08] [PAGINATION] 📜 newHeight=11077.0, heightDiff=4871.0, newOffset=6290.333333333333
[18:07:08] [PAGINATION] 📜 After setContentOffset, actual offset=6290.333333333333
[18:07:08] [PAGINATION] 📜 After main queue, offset=6290.333333333333
[18:07:08] [MENU] dismissAnyExistingMenu called
[18:07:08] [MENU] dismissAnyExistingMenu completed
[18:07:10] [CELL_UPLOAD] configure: msgId=18147, file=22d80b8c4c39c5aa.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:10] [CELL_UPLOAD] → not my message, setting complete
[18:07:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true
[18:07:13] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:13] [CELL_UPLOAD] → not my message, setting complete
[18:07:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:07:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:07:13] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:07:13] [CELL_UPLOAD] → not my message, setting complete
[18:07:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:07:15] [LOCK] Lock button tapped - locking app immediately
[18:07:15] [LOCK] Received lock app notification
[18:07:16] [LIFECYCLE] App resigning active - cleared crash flag
[18:07:16] [SECURITY] sceneDidEnterBackground - isAuthenticated=false
[18:07:16] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false
[18:07:16] [LIFECYCLE] App entering background - cleared crash flag
[18:07:16] [CLIENT_SIG] Disconnecting
[18:07:16] [LIFECYCLE] App entering background - disconnecting connections and stopping audio
[18:07:16] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0
[18:07:16] [WS] Canceling WebSocket for query connection to iosILUIWU
[18:07:16] In cleanupPeer
[18:07:16] In cleanupPeer
[18:07:16] [LIFECYCLE] WebRTC audio disabled
[18:07:16] [LIFECYCLE] AVAudioSession deactivated
[18:07:16] [LIFECYCLE] All connections stopped
[18:07:16] [CLIENT_SIG] WebSocket closed with code 1001
[18:07:16] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1)
[18:07:16] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/}
[18:07:16] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2)
[18:07:16] [SERVER] Stopped reconnect polling
[18:07:16] Will request stop of video 0
[18:07:16] Will request stop of video 0
[18:07:16] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled
[18:07:16] [WS] Query connection error - cleaning up all agent connections and views
[18:07:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected
[18:07:16] [WS] Query connection failed - cleaning up all agent connections and views
[18:07:16] [PIP] Removing 0 tracks from PiP for connection 0
[18:07:16] [PIP] ✅ All tracks removed for connection 0
[18:07:16] [PIP] Removing 0 tracks from PiP for connection 0
[18:07:16] [PIP] ✅ All tracks removed for connection 0
[18:07:16] [CLEANUP] ========================================
[18:07:16] [CLEANUP] Cleaning up all agent connections and views
[18:07:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0
[18:07:16] [CLEANUP] Stopped and removed 0 video connections
[18:07:16] [CLEANUP] Removed 0 video views
[18:07:16] [CLEANUP] Removed 0 feed scroll views
[18:07:16] [CLEANUP] Removed 0 status labels
[18:07:16] [CLEANUP] Reset agent query state
[18:07:16] [CLEANUP] Updated page indicator
[18:07:16] [CLEANUP] Rebuilt video layout
[18:07:16] [CLEANUP] ✅ All agent connections and views cleaned up
[18:07:16] [CLEANUP] ========================================
[18:07:16] [SERVER] Skipping reconnect polling - app is in background
[18:07:16] [WS] URLSession invalidated successfully
[18:07:16] [CLEANUP] ========================================
[18:07:16] [CLEANUP] Cleaning up all agent connections and views
[18:07:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0
[18:07:16] [CLEANUP] Stopped and removed 0 video connections
[18:07:16] [CLEANUP] Removed 0 video views
[18:07:16] [CLEANUP] Removed 0 feed scroll views
[18:07:16] [CLEANUP] Removed 0 status labels
[18:07:16] [CLEANUP] Reset agent query state
[18:07:16] [CLEANUP] Updated page indicator
[18:07:16] [CLEANUP] Rebuilt video layout
[18:07:16] [CLEANUP] ✅ All agent connections and views cleaned up
[18:07:16] [CLEANUP] ========================================
[18:07:16] [SERVER] Skipping reconnect polling - app is in background
[18:12:25] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU
[18:12:25] [WS] Opening session at ws://crivello.dyndns.org:8081/
[18:12:25] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:12:26] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU
[18:12:26] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[18:12:26] [LIFECYCLE] App entering foreground - restoring connections
[18:12:26] [LIFECYCLE] Away > 2 minutes (309s) - will scroll to bottom
[18:12:26] [UPLOAD_RETRY] No pending uploads to retry
[18:12:26] [LIFECYCLE] Merged 841 reactions from local DB
[18:12:26] [LIFECYCLE] WebRTC audio re-enabled
[18:12:26] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone)
[18:12:26] [CLIENT_SIG] Setting up client signaling for session: ILUIWU
[18:12:26] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[18:12:26] [VIEWER] Reconnecting after background - querying agents
[18:12:26] [UNSENT_RETRY] Checking for unsent messages...
[18:12:26] [PENDING_UPLOAD] Total pending upload messages: 0
[18:12:26] [UNSENT_RETRY] No unsent messages found
[18:12:26] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:12:26] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:12:26] [CELL_UPLOAD] → not my message, setting complete
[18:12:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:12:26] DOWNLOADIIING 2360d0215b6a2ab2.mov
[18:12:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:12:26] [CLIENT_SIG] WebSocket opened
[18:12:26] [CLIENT_SIG] HELLO sent as client for session ILUIWU
[18:12:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU
[18:12:26] HELLO → sent (cached token, role=query)
[18:12:26] [CLIENT_SIG] Connected! clientId=pRRWAGpqyXEUzGza
[18:12:26] [SIG] hello_ok received for query connection - ready to query agents
[18:12:26] [SIG] get_agents request sent for sessionId=ILUIWU
[18:12:26] [SIG] get_agents request sent for sessionId=iosILUIWU
[18:12:26] [SERVER] Stopped reconnect polling
[18:12:26] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU')
[18:12:26] [CLIENT_SIG]   - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:12:26] [SIG] agents_list received: []
[18:12:26] [SIG] agents_list received: []
[18:12:26] [COMBINED_FETCH] Loaded 6937 read receipts, 837 messages with reactions
[18:12:26] [FOREGROUND] Enriched 0 messages with readBy data from server
[18:12:26] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false
[18:12:26] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow
[18:12:26] [PUSH] handlePollEventsNotification userInfo: [:]
[18:12:26] [PUSH] No message_id in userInfo
[18:12:26] [PUSH] No operation_type in userInfo
[18:12:26] [FAST_REFRESH] Evolution disabled - performing incremental sync
[18:12:26] [FAST_REFRESH] Already have 50 messages - skipping local DB load
[18:12:26] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true
[18:12:26] [RELOAD_TAB] ⏳ Already pending, waiting for debounce
[18:12:26] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully
[18:12:26] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50
[18:12:26] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18170
[18:12:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:12:27] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:12:27] [CELL_UPLOAD] → not my message, setting complete
[18:12:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:12:27] [INCREMENTAL_SYNC] ✅ No new messages
[18:12:27] [FAST_REFRESH] Incremental sync complete - 50 messages
[18:12:27] [COMBINED_FETCH] Loaded 6937 read receipts, 837 messages with reactions
[18:12:27] [FAST_REFRESH] Enriched 50 messages with readBy data
[18:12:27] [LIFECYCLE] App resigning active - cleared crash flag
[18:12:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:12:27] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:12:27] [CELL_UPLOAD] → not my message, setting complete
[18:12:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:12:28] [SECURITY] sceneDidEnterBackground - isAuthenticated=false
[18:12:28] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false
[18:12:28] [LIFECYCLE] App entering background - cleared crash flag
[18:12:28] [CLIENT_SIG] Disconnecting
[18:12:28] [LIFECYCLE] App entering background - disconnecting connections and stopping audio
[18:12:28] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0
[18:12:28] [WS] Canceling WebSocket for query connection to iosILUIWU
[18:12:28] In cleanupPeer
[18:12:28] In cleanupPeer
[18:12:28] [LIFECYCLE] WebRTC audio disabled
[18:12:28] [LIFECYCLE] AVAudioSession deactivated
[18:12:28] [LIFECYCLE] All connections stopped
[18:12:28] [CLIENT_SIG] WebSocket closed with code 1001
[18:12:28] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1)
[18:12:28] [SERVER] Stopped reconnect polling
[18:12:28] Will request stop of video 0
[18:12:28] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled
[18:12:28] [WS] Query connection error - cleaning up all agent connections and views
[18:12:28] Will request stop of video 0
[18:12:28] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected
[18:12:28] [WS] Query connection failed - cleaning up all agent connections and views
[18:12:28] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/}
[18:27:01] [CRASH] No crash detected
[18:27:01] [LOG] Within rotation interval - preserving logs (73m until next clear)
[18:27:01] [FONT] Roboto fonts loaded successfully: Roboto-Regular
[18:27:01] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto
[18:27:01] [GIPHY] SDK not available - using REST API fallback
[18:27:01] [BACKGROUND] Background fetch enabled
[18:27:01] [AUTH] Starting PIN authentication
[18:27:01] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU
[18:27:01] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:27:01] [CLEANUP] No old timer messages to delete
[18:27:01] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c
[18:27:02] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0}
[18:27:02] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[18:27:02] [USER] ✅ User registered successfully
[18:27:02] [PUSH] User registration after token update: success
[18:27:02] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false
[18:27:02] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow
[18:27:02] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18170)...
[18:27:02] [CLIENT_SIG] WebSocket opened
[18:27:02] [CLIENT_SIG] HELLO sent as client for session ILUIWU
[18:27:02] [CLIENT_SIG] Connected! clientId=KT4UcFGMVelI8tjX
[18:27:02] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU')
[18:27:02] [CLIENT_SIG]   - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:27:02] [PRELOAD] No messages or parse error
[18:27:03] [PIN_AUTH] Correct PIN
[18:27:03] [SECURITY] Restored real session: ILUIWU
[18:27:03] [SECURITY] Restored real session: ILUIWU
[18:27:03] [SECURITY] Saved real session: ILUIWU
[18:27:03] [SCENE] Launched directly to chat view with sessionId: ILUIWU
[18:27:03] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone)
[18:27:03] Documents Directory: /var/mobile/Containers/Data/Application/0323A6A9-E7A4-45D0-B237-86B584E247AE/Documents
[18:27:03] [THEME] Applying current theme
[18:27:03] [CHAT] Applied day theme (mode: day)
[18:27:03] [SECURITY] Saved real session: ILUIWU
[18:27:03] [CLIENT_SIG] Setting up client signaling for session: ILUIWU
[18:27:03] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[18:27:03] [NETWORK] Network monitor started
[18:27:03] [NETWORK] Status changed: connected
[18:27:03] Did transition
[18:27:03] [UPLOAD_QUEUE] Found 0 pending uploads to resume
[18:27:03] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU
[18:27:03] [VIEWER] Screen lock enabled - normal idle behavior
[18:27:03] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU
[18:27:03] [VCC] ========== VideoConnectionClass INIT ==========
[18:27:03] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil
[18:27:03] [DATA AUDIO] ========== setupWebRTC() START ==========
[18:27:03] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device
[18:27:03] [DATA AUDIO] Creating encoder/decoder factories...
[18:27:03] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1
[18:27:03] [CODEC] Viewer selected encoder: AV1 (best quality)
[18:27:03] [DATA AUDIO] Creating RTCPeerConnectionFactory...
[18:27:03] [DATA AUDIO] ✅ Factory created
[18:27:03] [DATA AUDIO] RTCAudioSession locked
[18:27:03] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false
[18:27:03] [DATA AUDIO] RTCAudioSession unlocked
[18:27:03] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer
[18:27:03] [VCC] Initial ICE servers: ["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"]
[18:27:03] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU
[18:27:03] [WS] Opening session at ws://crivello.dyndns.org:8081/
[18:27:03] [QUERY] ✅ tempQueryConnection created for iosILUIWU
[18:27:03] [VIEWER_INIT] Already have 50 messages - just filtering for tab
[18:27:03] [EVENT_POLL] Event polling disabled - using WebSocket events instead
[18:27:03] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0
[18:27:03] Did transition
[18:27:03] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0)
[18:27:03] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[18:27:03] [CHUNK] Merged 841 reactions synchronously
[18:27:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce
[18:27:03] [GALLERY_DB] Loading ALL media messages for session: ILUIWU
[18:27:03] [MIGRATION] No messages need sender_name backfill
[18:27:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50
[18:27:03] [GALLERY_DB] Raw datesent for msg 18162: '2026-01-18 10:37:29'
[18:27:03] [GALLERY_DB] Raw datesent for msg 18161: '2026-01-18 10:36:56'
[18:27:03] [GALLERY_DB] Raw datesent for msg 18159: '2026-01-18 10:17:19'
[18:27:03] [USER] ✅ User registered successfully
[18:27:03] [USER] User registration successful
[18:27:03] [GALLERY_DB] ✅ Loaded 450 media messages
[18:27:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18170
[18:27:03] [INCREMENTAL_SYNC] ✅ No new messages
[18:27:03] [GALLERY] Filtered 450 -> 411 (only with local thumbnails)
[18:27:03] [GALLERY] First 5 after sort (newest first):
[18:27:03] [GALLERY]   0: id=18162, date=2026-01-18 10:37:29, file=2360d0215b6a2ab2.mov
[18:27:03] [GALLERY]   1: id=18161, date=2026-01-18 10:36:56, file=399b07f80d99b3ff.heic
[18:27:03] [GALLERY]   2: id=18159, date=2026-01-18 10:17:19, file=d709f7e2335b9796.jpeg
[18:27:03] [GALLERY]   3: id=18154, date=2026-01-18 09:40:37, file=80de02d18174956b.jpeg
[18:27:03] [GALLERY]   4: id=18150, date=2026-01-18 08:18:43, file=044523ae024c2e36.mov
[18:27:03] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt
[18:27:03] [SERVER] Starting reconnect polling (5s interval)
[18:27:03] [ICONS] Screen width: 440.0, Tab spacing: 75.5
[18:27:03] [ICONS] Offset applied: -14.6
[18:27:03] [ICONS] New left margin: 11.2, New right margin: 11.3
[18:27:03] [ICONS] Chat center: (31.2, 87.0)
[18:27:03] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5
[18:27:03] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5
[18:27:03] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5
[18:27:03] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5
[18:27:03] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5
[18:27:03] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2
[18:27:03] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3
[18:27:03] [ICONS] Screen width: 440.0
[18:27:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:27:03] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings
[18:27:03] [CELL_UPLOAD] configure: msgId=18127, file=62b393a353b38c70.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:27:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:27:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=62b393a353b38c70.jpg, overlayExists=true
[18:27:03] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:27:03] [CELL_UPLOAD] → not my message, setting complete
[18:27:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:27:03] [PURGE] ⚠️ Media cache purge DISABLED for debugging
[18:27:03] [UNSENT_RETRY] Checking for unsent messages...
[18:27:03] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ==========
[18:27:03] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF
[18:27:03] [UPLOAD_RECOVERY] Session: ILUIWU
[18:27:03] [UPLOAD_RECOVERY] ✅ No stuck uploads found
[18:27:03] [UPLOAD_RECOVERY] Checking recent media messages on server...
[18:27:03] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18159, file=d709f7e2335b9796.jpeg, upload_status=complete
[18:27:03] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18127, file=62b393a353b38c70.jpg, upload_status=complete
[18:27:03] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18117, file=ca2813d190665dd2.jpg, upload_status=complete
[18:27:03] [UPLOAD_RECOVERY] Verifying 3 media files exist on server...
[18:27:03] [PENDING_UPLOAD] Total pending upload messages: 0
[18:27:03] [UNSENT_RETRY] No unsent messages found
[18:27:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU
[18:27:03] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[18:27:03] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[18:27:03] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU
[18:27:03] DOWNLOADIIING 2360d0215b6a2ab2.mov
[18:27:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:27:04] [UPLOAD_RECOVERY] ✅ All media files verified on server
[18:27:04] new_session POST ok: token len=157
[18:27:04] HELLO → sent (fetched token, role=query)
[18:27:04] [SIG] hello_ok received for query connection - ready to query agents
[18:27:04] [SIG] get_agents request sent for sessionId=ILUIWU
[18:27:04] [SIG] get_agents request sent for sessionId=iosILUIWU
[18:27:04] [SERVER] Stopped reconnect polling
[18:27:04] [SIG] agents_list received: []
[18:27:04] [SIG] agents_list received: []
[18:27:04] [COMBINED_FETCH] Loaded 6937 read receipts, 837 messages with reactions
[18:27:04] [READBY_ENRICH] Enriched 50 messages with readBy data
[18:27:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:27:04] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:27:04] [CELL_UPLOAD] → not my message, setting complete
[18:27:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:27:09] [MENU] dismissAnyExistingMenu called
[18:27:09] [MENU] dismissAnyExistingMenu completed
[18:27:09] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:27:09] [CELL_UPLOAD] → not my message, setting complete
[18:27:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[18:27:10] [SCROLL_BTN] Showing button - 379pt from bottom > half 379pt
[18:27:10] [MENU] dismissAnyExistingMenu called
[18:27:10] [MENU] dismissAnyExistingMenu completed
[18:27:10] [MENU] dismissAnyExistingMenu called
[18:27:10] [MENU] dismissAnyExistingMenu completed
[18:27:15] [MENU] dismissAnyExistingMenu called
[18:27:15] [MENU] dismissAnyExistingMenu completed
[18:27:15] [CELL_UPLOAD] configure: msgId=18159, file=d709f7e2335b9796.jpeg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:27:15] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:27:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d709f7e2335b9796.jpeg, overlayExists=true
[18:27:15] [MENU] dismissAnyExistingMenu called
[18:27:15] [MENU] dismissAnyExistingMenu completed
[18:27:35] [LOCK] Lock button tapped - locking app immediately
[18:27:35] [LOCK] Received lock app notification
[18:27:35] [LIFECYCLE] App resigning active - cleared crash flag
[18:27:36] [SECURITY] sceneDidEnterBackground - isAuthenticated=false
[18:27:36] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false
[18:27:36] [LIFECYCLE] App entering background - cleared crash flag
[18:27:36] [CLIENT_SIG] Disconnecting
[18:27:36] [LIFECYCLE] App entering background - disconnecting connections and stopping audio
[18:27:36] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0
[18:27:36] [WS] Canceling WebSocket for query connection to iosILUIWU
[18:27:36] In cleanupPeer
[18:27:36] In cleanupPeer
[18:27:36] [LIFECYCLE] WebRTC audio disabled
[18:27:36] [LIFECYCLE] AVAudioSession deactivated
[18:27:36] [LIFECYCLE] All connections stopped
[18:27:36] [SERVER] Stopped reconnect polling
[18:27:36] Will request stop of video 0
[18:27:36] Will request stop of video 0
[18:35:12] [CRASH] No crash detected
[18:35:12] [LOG] Within rotation interval - preserving logs (64m until next clear)
[18:35:12] [FONT] Roboto fonts loaded successfully: Roboto-Regular
[18:35:12] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto
[18:35:12] [GIPHY] SDK not available - using REST API fallback
[18:35:12] [BACKGROUND] Background fetch enabled
[18:35:12] [AUTH] Starting PIN authentication
[18:35:12] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU
[18:35:12] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:35:12] [CLEANUP] No old timer messages to delete
[18:35:12] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c
[18:35:12] [CLIENT_SIG] WebSocket opened
[18:35:12] [CLIENT_SIG] HELLO sent as client for session ILUIWU
[18:35:12] [CLIENT_SIG] Connected! clientId=XOEHe9vpDxlS1OmM
[18:35:12] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU')
[18:35:12] [CLIENT_SIG]   - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)
[18:35:12] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false
[18:35:12] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow
[18:35:12] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0}
[18:35:12] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[18:35:12] [USER] ✅ User registered successfully
[18:35:12] [PUSH] User registration after token update: success
[18:35:12] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18170)...
[18:35:12] [PRELOAD] No messages or parse error
[18:35:14] [PIN_AUTH] Correct PIN
[18:35:14] [SECURITY] Restored real session: ILUIWU
[18:35:14] [SECURITY] Restored real session: ILUIWU
[18:35:14] [SECURITY] Saved real session: ILUIWU
[18:35:14] [SCENE] Launched directly to chat view with sessionId: ILUIWU
[18:35:14] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone)
[18:35:14] Documents Directory: /var/mobile/Containers/Data/Application/0323A6A9-E7A4-45D0-B237-86B584E247AE/Documents
[18:35:14] [UPLOAD_QUEUE] Found 0 pending uploads to resume
[18:35:14] [THEME] Applying current theme
[18:35:14] [CHAT] Applied day theme (mode: day)
[18:35:14] [SECURITY] Saved real session: ILUIWU
[18:35:14] [CLIENT_SIG] Setting up client signaling for session: ILUIWU
[18:35:14] [CLIENT_SIG] Already connected/connecting to session ILUIWU
[18:35:14] [NETWORK] Network monitor started
[18:35:14] [NETWORK] Status changed: connected
[18:35:14] Did transition
[18:35:14] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU
[18:35:14] [VIEWER] Screen lock enabled - normal idle behavior
[18:35:14] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU
[18:35:14] [VCC] ========== VideoConnectionClass INIT ==========
[18:35:14] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil
[18:35:14] [DATA AUDIO] ========== setupWebRTC() START ==========
[18:35:14] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device
[18:35:14] [DATA AUDIO] Creating encoder/decoder factories...
[18:35:14] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1
[18:35:14] [CODEC] Viewer selected encoder: AV1 (best quality)
[18:35:14] [DATA AUDIO] Creating RTCPeerConnectionFactory...
[18:35:14] [DATA AUDIO] ✅ Factory created
[18:35:14] [DATA AUDIO] RTCAudioSession locked
[18:35:14] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false
[18:35:14] [DATA AUDIO] RTCAudioSession unlocked
[18:35:14] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer
[18:35:14] [VCC] Initial ICE servers: ["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"]
[18:35:14] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU
[18:35:14] [WS] Opening session at ws://crivello.dyndns.org:8081/
[18:35:14] [QUERY] ✅ tempQueryConnection created for iosILUIWU
[18:35:14] [VIEWER_INIT] Already have 50 messages - just filtering for tab
[18:35:14] [EVENT_POLL] Event polling disabled - using WebSocket events instead
[18:35:14] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0
[18:35:14] Did transition
[18:35:14] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0)
[18:35:14] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent
[18:35:14] [CHUNK] Merged 841 reactions synchronously
[18:35:14] [RELOAD_TAB] ⏳ Already pending, waiting for debounce
[18:35:14] [GALLERY_DB] Loading ALL media messages for session: ILUIWU
[18:35:14] [MIGRATION] No messages need sender_name backfill
[18:35:14] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50
[18:35:14] [GALLERY_DB] Raw datesent for msg 18162: '2026-01-18 10:37:29'
[18:35:14] [GALLERY_DB] Raw datesent for msg 18161: '2026-01-18 10:36:56'
[18:35:14] [GALLERY_DB] Raw datesent for msg 18159: '2026-01-18 10:17:19'
[18:35:14] [USER] ✅ User registered successfully
[18:35:14] [USER] User registration successful
[18:35:14] [GALLERY_DB] ✅ Loaded 450 media messages
[18:35:14] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18170
[18:35:14] [INCREMENTAL_SYNC] ✅ No new messages
[18:35:14] [GALLERY] Filtered 450 -> 411 (only with local thumbnails)
[18:35:14] [GALLERY] First 5 after sort (newest first):
[18:35:14] [GALLERY]   0: id=18162, date=2026-01-18 10:37:29, file=2360d0215b6a2ab2.mov
[18:35:14] [GALLERY]   1: id=18161, date=2026-01-18 10:36:56, file=399b07f80d99b3ff.heic
[18:35:14] [GALLERY]   2: id=18159, date=2026-01-18 10:17:19, file=d709f7e2335b9796.jpeg
[18:35:14] [GALLERY]   3: id=18154, date=2026-01-18 09:40:37, file=80de02d18174956b.jpeg
[18:35:14] [GALLERY]   4: id=18150, date=2026-01-18 08:18:43, file=044523ae024c2e36.mov
[18:35:14] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt
[18:35:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:35:14] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings
[18:35:14] [CELL_UPLOAD] configure: msgId=18127, file=62b393a353b38c70.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:35:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=62b393a353b38c70.jpg, overlayExists=true
[18:35:14] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:14] [CELL_UPLOAD] → not my message, setting complete
[18:35:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:35:14] [SERVER] Starting reconnect polling (5s interval)
[18:35:14] [ICONS] Screen width: 440.0, Tab spacing: 75.5
[18:35:14] [ICONS] Offset applied: -14.6
[18:35:14] [ICONS] New left margin: 11.2, New right margin: 11.3
[18:35:14] [ICONS] Chat center: (31.2, 87.0)
[18:35:14] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5
[18:35:14] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5
[18:35:14] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5
[18:35:14] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5
[18:35:14] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5
[18:35:14] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2
[18:35:14] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3
[18:35:14] [ICONS] Screen width: 440.0
[18:35:14] DOWNLOADIIING 2360d0215b6a2ab2.mov
[18:35:14] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU
[18:35:14] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[18:35:14] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/
[18:35:14] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU
[18:35:14] [PURGE] ⚠️ Media cache purge DISABLED for debugging
[18:35:14] [UNSENT_RETRY] Checking for unsent messages...
[18:35:14] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ==========
[18:35:14] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF
[18:35:14] [UPLOAD_RECOVERY] Session: ILUIWU
[18:35:14] [UPLOAD_RECOVERY] ✅ No stuck uploads found
[18:35:14] [UPLOAD_RECOVERY] Checking recent media messages on server...
[18:35:14] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18159, file=d709f7e2335b9796.jpeg, upload_status=complete
[18:35:14] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18127, file=62b393a353b38c70.jpg, upload_status=complete
[18:35:14] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18117, file=ca2813d190665dd2.jpg, upload_status=complete
[18:35:14] [UPLOAD_RECOVERY] Verifying 3 media files exist on server...
[18:35:14] [PENDING_UPLOAD] Total pending upload messages: 0
[18:35:14] [UNSENT_RETRY] No unsent messages found
[18:35:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:35:14] new_session POST ok: token len=157
[18:35:14] HELLO → sent (fetched token, role=query)
[18:35:14] [SIG] hello_ok received for query connection - ready to query agents
[18:35:14] [SIG] get_agents request sent for sessionId=ILUIWU
[18:35:14] [SIG] get_agents request sent for sessionId=iosILUIWU
[18:35:14] [SERVER] Stopped reconnect polling
[18:35:14] [SIG] agents_list received: []
[18:35:14] [UPLOAD_RECOVERY] ✅ All media files verified on server
[18:35:14] [SIG] agents_list received: []
[18:35:14] [COMBINED_FETCH] Loaded 6937 read receipts, 837 messages with reactions
[18:35:14] [READBY_ENRICH] Enriched 50 messages with readBy data
[18:35:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18121, 18122, 18123, 18124, 18125]
[18:35:15] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:15] [CELL_UPLOAD] → not my message, setting complete
[18:35:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true
[18:35:15] [MENU] dismissAnyExistingMenu called
[18:35:15] [MENU] dismissAnyExistingMenu completed
[18:35:15] [CELL_UPLOAD] configure: msgId=18161, file=399b07f80d99b3ff.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:15] [CELL_UPLOAD] → not my message, setting complete
[18:35:15] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true
[18:35:15] [MENU] dismissAnyExistingMenu called
[18:35:15] [MENU] dismissAnyExistingMenu completed
[18:35:18] [MENU] dismissAnyExistingMenu called
[18:35:18] [MENU] dismissAnyExistingMenu completed
[18:35:18] [SCROLL_BTN] Showing button - 381pt from bottom > half 379pt
[18:35:18] [CELL_UPLOAD] configure: msgId=18159, file=d709f7e2335b9796.jpeg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:18] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete
[18:35:18] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d709f7e2335b9796.jpeg, overlayExists=true
[18:35:18] [CELL_UPLOAD] configure: msgId=18154, file=80de02d18174956b.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:18] [CELL_UPLOAD] → not my message, setting complete
[18:35:18] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=80de02d18174956b.jpeg, overlayExists=true
[18:35:19] [CELL_UPLOAD] configure: msgId=18150, file=044523ae024c2e36.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:19] [CELL_UPLOAD] → not my message, setting complete
[18:35:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=044523ae024c2e36.mov, overlayExists=true
[18:35:19] [CELL_UPLOAD] configure: msgId=18149, file=bdecbcd267d10e9d.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:19] [CELL_UPLOAD] → not my message, setting complete
[18:35:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=bdecbcd267d10e9d.heic, overlayExists=true
[18:35:19] [MENU] dismissAnyExistingMenu called
[18:35:19] [MENU] dismissAnyExistingMenu completed
[18:35:19] [CELL_UPLOAD] configure: msgId=18147, file=22d80b8c4c39c5aa.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:19] [CELL_UPLOAD] → not my message, setting complete
[18:35:19] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true
[18:35:20] [MENU] dismissAnyExistingMenu called
[18:35:20] [MENU] dismissAnyExistingMenu completed
[18:35:20] [CELL_UPLOAD] configure: msgId=18147, file=22d80b8c4c39c5aa.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:20] [CELL_UPLOAD] → not my message, setting complete
[18:35:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true
[18:35:20] [MENU] dismissAnyExistingMenu called
[18:35:20] [MENU] dismissAnyExistingMenu completed
[18:35:24] [LOG_GESTURE] handleLongPress called, state=1, isToday=true
[18:35:24] [LOG_GESTURE] Long press on Today detected! Triggering log upload...
[18:35:24] [LOG] Long-press on 'Today' detected - prompting for description
[18:35:24] [LOG_GESTURE] handleLongPress called, state=4, isToday=true
[18:35:25] [CELL_UPLOAD] configure: msgId=18162, file=2360d0215b6a2ab2.mov, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0
[18:35:25] [CELL_UPLOAD] → not my message, setting complete
[18:35:25] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true