=== Eye Viewer Log Rotated at 2026-01-21 10:56:04 +0000 === alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 11:04:49"; "file_name" = ""; message = Okii; "message_id" = 18384; "message_type" = 0; "prev_session_message_id" = 18383; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18384, AnyHashable("operation_type"): 3] - 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 datesent = "2026-01-21 11:20:40"; "file_name" = ""; message = "\Ud83d\Udc8b"; "message_id" = 18385; "message_type" = 0; "prev_session_message_id" = 18384; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18385] datesent = "2026-01-21 11:20:40"; "file_name" = ""; message = "\Ud83d\Udc8b"; "message_id" = 18385; "message_type" = 0; "prev_session_message_id" = 18384; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18385] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-21 11:20:40"; "file_name" = ""; message = "\Ud83d\Udc8b"; "message_id" = 18385; "message_type" = 0; "prev_session_message_id" = 18384; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] - 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 "LocalWebSocketTask <622300CF-5BD1-445E-9935-9BE955B4F47C>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <622300CF-5BD1-445E-9935-9BE955B4F47C>.<1>} "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18386, AnyHashable("operation_type"): 3] "LocalWebSocketTask <37837BEB-46F9-4935-AF5A-43BDB98CA0DD>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <37837BEB-46F9-4935-AF5A-43BDB98CA0DD>.<1>} datesent = "2026-01-21 12:16:28"; "file_name" = ""; message = "I was in a call with sasa baby"; "message_id" = 18388; "message_type" = 0; "prev_session_message_id" = 18387; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] datesent = "2026-01-21 12:16:31"; "file_name" = ""; message = "Sorry\Ud83e\Udd72"; "message_id" = 18389; "message_type" = 0; "prev_session_message_id" = 18388; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 2; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 12:16:31"; "file_name" = ""; message = "Sorry\Ud83e\Udd72"; "message_id" = 18389; "message_type" = 0; "prev_session_message_id" = 18388; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18389] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18390] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18391] "LocalWebSocketTask <5B5E188C-4F2F-44A5-A562-5B4D26D46C91>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <5B5E188C-4F2F-44A5-A562-5B4D26D46C91>.<1>} datesent = "2026-01-21 12:24:40"; "file_name" = ""; message = "Im sure it will baby\U2665\Ufe0f"; "message_id" = 18393; "message_type" = 0; "prev_session_message_id" = 18392; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18393, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18393, AnyHashable("message_data"): { datesent = "2026-01-21 12:24:40"; "file_name" = ""; message = "Im sure it will baby\U2665\Ufe0f"; "message_id" = 18393; "message_type" = 0; "prev_session_message_id" = 18392; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-21 12:35:13"; "file_name" = ""; message = "Babyyy!!!!!!"; "message_id" = 18396; "message_type" = 0; "prev_session_message_id" = 18395; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18396] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18396] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 12:35:22"; "file_name" = ""; message = "\Ud83d\Ude21"; "message_id" = 18397; "message_type" = 0; "prev_session_message_id" = 18396; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18397, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "LocalWebSocketTask <6DEF45AE-ECF0-48E2-ABCE-C8D608D0AC30>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <6DEF45AE-ECF0-48E2-ABCE-C8D608D0AC30>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18397, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 12:35:22"; "file_name" = ""; message = "\Ud83d\Ude21"; "message_id" = 18397; "message_type" = 0; "prev_session_message_id" = 18396; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18397] datesent = "2026-01-21 12:56:37"; "file_name" = ""; message = "I do, I always do !"; "message_id" = 18400; "message_type" = 0; "prev_session_message_id" = 18399; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 18400, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "LocalDataTask <7074F352-0D31-4D01-A5AE-7D58AE30AFF6>.<150>" ), NSLocalizedDescription=The network connection was lost., NSErrorFailingURLStringKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, NSErrorFailingURLKey=https://crivello.dyndns.org:443/WebRTC/chat/receive_message.php, _kCFStreamErrorDomainKey=4} - 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 "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18404, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] datesent = "2026-01-21 16:09:06"; "file_name" = ""; message = "Ahhh I wish I can go\Ud83e\Udd72"; "message_id" = 18416; "message_type" = 0; "prev_session_message_id" = 18415; "replied_message" = "Maybe Pilates ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18408; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 7; "content-available" = 1; sound = default; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 18415] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18414] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18412] "content-available" = 1; }, AnyHashable("message_id"): 18410] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [17:37:33] [CRASH] No crash detected [17:37:33] [FONT] Roboto fonts loaded successfully: Roboto-Regular [17:37:33] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [17:37:33] [GIPHY] SDK not available - using REST API fallback [17:37:33] [BACKGROUND] Background fetch enabled [17:37:33] [CLEANUP] No old timer messages to delete [17:37:33] [SECURITY] Initial launch - timeout exceeded (325.33579301834106s > 300.0s) [17:37:33] [AUTH] Starting PIN authentication [17:37:33] [PUSH] Notification tapped - session_id: ILUIWU [17:37:33] [PUSH] Max message_id before tap: 18418 [17:37:33] [PUSH] Stored pending session: ILUIWU [17:37:33] [PUSH_EMBED] 📩 Received embedded message: id=18419, type=0, sender=Esra [17:37:33] [PUSH_EMBED] ✅ Saved message 18419 to local DB (sync) [17:37:33] [PUSH_EMBED] Created new cache with embedded message 18419 [17:37:33] [PUSH_EMBED] Fetching evolution data for message 18419 in background [17:37:33] [PUSH_EMBED] ✅ Fully processed message 18419 [17:37:33] [PUSH] Embedded message handled instantly on tap [17:37:33] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:37:33] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:37:33] [PUSH] Fetching server messages since_id=18418 to catch coalesced notifications on tap [17:37:33] [PUSH_PRELOAD] Fetching up to 50 messages since_id=18418 to catch coalesced notifications [17:37:33] [PUSH_PRELOAD] Fetching messages for instant display cache [17:37:33] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [17:37:33] [PRELOAD] Cache has only 1 messages (from push) - will load full history [17:37:33] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18419)... [17:37:33] [PUSH_EMBED] Got evolution data for message 18419, saving to local DB [17:37:33] [PUSH_EMBED] Saved evolution data for message 18419 [17:37:33] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [17:37:33] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:37:34] [CLIENT_SIG] WebSocket opened [17:37:34] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:37:34] [CLIENT_SIG] Connected! clientId=nkL3iBH0f1aK7hNY [17:37:34] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [17:37:34] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:37:34] [PRELOAD] No messages or parse error [17:37:34] [PUSH_PRELOAD] Fetched 1 messages - caching for instant display [17:37:34] [PUSH_PRELOAD] ⚡ Pre-cached 1 messages for instant display (preserved 0 from push) [17:37:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:37:34] [PUSH] Server fetch on tap completed (success=true) [17:37:34] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:37:34] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:37:34] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:37:34] [USER] ✅ User registered successfully [17:37:34] [PUSH] User registration after token update: success [17:37:35] [PUSH] Silent push received [17:37:35] [PUSH_EMBED] 📩 Received embedded message: id=18419, type=0, sender=Esra [17:37:35] [PUSH_EMBED] ✅ Saved message 18419 to local DB (sync) [17:37:35] [PUSH_EMBED] Created new cache with embedded message 18419 [17:37:35] [PUSH_EMBED] Fetching evolution data for message 18419 in background [17:37:35] [PUSH_EMBED] ✅ Fully processed message 18419 [17:37:35] [PUSH] Embedded message handled instantly from silent push [17:37:35] [PIN_AUTH] Correct PIN [17:37:35] [SECURITY] Restored real session: ILUIWU [17:37:35] [SECURITY] Restored real session: ILUIWU [17:37:35] [PUSH_EMBED] Got evolution data for message 18419, saving to local DB [17:37:35] [PUSH_EMBED] Saved evolution data for message 18419 [17:37:35] [SECURITY] Saved real session: ILUIWU [17:37:35] [SCENE] Launched directly to chat view with sessionId: ILUIWU [17:37:35] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:37:35] Documents Directory: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents [17:37:35] [UPLOAD_QUEUE] Found 0 pending uploads to resume [17:37:35] [THEME] Applying current theme [17:37:35] [CHAT] Applied day theme (mode: day) [17:37:35] [SECURITY] Saved real session: ILUIWU [17:37:35] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:37:35] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:37:35] [NETWORK] Network monitor started [17:37:35] [NETWORK] Status changed: connected [17:37:35] Did transition [17:37:35] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [17:37:35] [VIEWER] Screen lock enabled - normal idle behavior [17:37:35] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [17:37:35] [VCC] ========== VideoConnectionClass INIT ========== [17:37:35] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [17:37:35] [DATA AUDIO] ========== setupWebRTC() START ========== [17:37:35] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [17:37:35] [DATA AUDIO] Creating encoder/decoder factories... [17:37:35] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [17:37:35] [CODEC] Viewer selected encoder: AV1 (best quality) [17:37:35] [DATA AUDIO] Creating RTCPeerConnectionFactory... [17:37:35] [DATA AUDIO] ✅ Factory created [17:37:35] [DATA AUDIO] RTCAudioSession locked [17:37:35] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [17:37:35] [DATA AUDIO] RTCAudioSession unlocked [17:37:35] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [17:37:35] [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:37:35] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [17:37:35] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:37:35] [QUERY] ✅ tempQueryConnection created for iosILUIWU [17:37:35] [VIEWER_INIT] Already have 50 messages - just filtering for tab [17:37:35] [EVENT_POLL] Event polling disabled - using WebSocket events instead [17:37:35] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [17:37:35] Did transition [17:37:35] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [17:37:35] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:37:35] [CHUNK] Merged 868 reactions synchronously [17:37:35] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [17:37:35] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [17:37:35] [MIGRATION] No messages need sender_name backfill [17:37:35] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [17:37:35] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [17:37:35] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [17:37:35] [GALLERY_DB] Raw datesent for msg 18380: '2026-01-21 10:30:35' [17:37:36] [GALLERY_DB] ✅ Loaded 475 media messages [17:37:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18419 [17:37:36] [INCREMENTAL_SYNC] ✅ No new messages [17:37:36] [USER] ✅ User registered successfully [17:37:36] [USER] User registration successful [17:37:36] [GALLERY] Filtered 475 -> 436 (only with local thumbnails) [17:37:36] [GALLERY] First 5 after sort (newest first): [17:37:36] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [17:37:36] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [17:37:36] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [17:37:36] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [17:37:36] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [17:37:36] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [17:37:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:37:36] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [17:37:36] [CELL_UPLOAD] configure: msgId=18378, file=7fcf17ed21a942d6.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [17:37:36] [CELL_UPLOAD] → not my message, setting complete [17:37:36] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7fcf17ed21a942d6.jpg, overlayExists=true [17:37:36] [CELL_UPLOAD] configure: msgId=18409, file=f733dc0a9f704916.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [17:37:36] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [17:37:36] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f733dc0a9f704916.jpg, overlayExists=true [17:37:36] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18418 → 18419 [17:37:36] [SERVER] Starting reconnect polling (5s interval) [17:37:36] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [17:37:36] [ICONS] Offset applied: -14.6 [17:37:36] [ICONS] New left margin: 11.2, New right margin: 11.3 [17:37:36] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:37:36] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [17:37:36] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [17:37:36] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [17:37:36] [ICONS] Chat center: (31.2, 87.0) [17:37:36] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [17:37:36] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [17:37:36] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [17:37:36] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [17:37:36] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [17:37:36] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [17:37:36] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [17:37:36] [ICONS] Screen width: 440.0 [17:37:36] [PURGE] ⚠️ Media cache purge DISABLED for debugging [17:37:36] [UNSENT_RETRY] Checking for unsent messages... [17:37:36] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [17:37:36] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [17:37:36] [UPLOAD_RECOVERY] Session: ILUIWU [17:37:36] [UPLOAD_RECOVERY] ✅ No stuck uploads found [17:37:36] [UPLOAD_RECOVERY] Checking recent media messages on server... [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [17:37:36] [UPLOAD_RECOVERY] Verifying 10 media files exist on server... [17:37:36] [PENDING_UPLOAD] Total pending upload messages: 0 [17:37:36] [UNSENT_RETRY] No unsent messages found [17:37:37] new_session POST ok: token len=157 [17:37:37] HELLO → sent (fetched token, role=query) [17:37:37] [SIG] hello_ok received for query connection - ready to query agents [17:37:37] [SIG] get_agents request sent for sessionId=ILUIWU [17:37:37] [SIG] get_agents request sent for sessionId=iosILUIWU [17:37:37] [SERVER] Stopped reconnect polling [17:37:37] [SIG] agents_list received: [] [17:37:37] [UPLOAD_RECOVERY] ✅ All media files verified on server [17:37:37] [SIG] agents_list received: [] [17:37:37] [COMBINED_FETCH] Loaded 7185 read receipts, 871 messages with reactions [17:37:37] [READBY_ENRICH] Enriched 50 messages with readBy data [17:37:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:37:38] [CELL_UPLOAD] configure: msgId=18409, file=f733dc0a9f704916.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [17:37:38] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [17:37:38] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f733dc0a9f704916.jpg, overlayExists=true [17:37:38] [PUSH] Silent push received [17:37:38] [PUSH_EMBED] No embedded message_data in notification [17:37:38] [PUSH] No embedded data, pre-loading messages from server [17:37:38] [PUSH_PRELOAD] Fetching messages for instant display cache [17:37:38] [CLIENT_SIG] Event received: type=3 messageId=18419 [17:37:38] [WS_EVENT] Received event: type=3, messageId=18419 [17:37:38] [WS_EVENT] Read receipt for message 18419 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:37:38] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:37:38] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [17:37:38] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:37:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18419] [17:37:38] [PUSH] Parsed message_id: 18419 [17:37:38] [PUSH] Parsed operation_type: 3 [17:37:38] [PUSH] Taking direct action: opType=3, messageId=18419 [17:37:38] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18419 [17:37:39] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:37:40] [CLIENT_SIG] Event received: type=0 messageId=18420 [17:37:40] [WS_EVENT] Received event: type=0, messageId=18420 [17:37:40] [WS_EVENT] 📨 New message notification (msgId=18420) - triggering incremental refresh, currentMsgCount=50 [17:37:40] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [17:37:40] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18419 [17:37:40] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-21 16:37:40 +0000 - type: unknown, operation_type: 0, message_id: 18420, session_id: ILUIWU, state: 0 [17:37:40] [PUSH_DEBUG] Full userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:37:39"; "file_name" = ""; message = "I haven\U2019t eaten anything yet today"; "message_id" = 18420; "message_type" = 0; "prev_session_message_id" = 18419; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18420, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [17:37:40] [PUSH] App active - suppressing notification UI, posting internal event [17:37:40] [PUSH_EMBED] 📩 Received embedded message: id=18420, type=0, sender=Esra [17:37:40] [PUSH_EMBED] ✅ Saved message 18420 to local DB (sync) [17:37:40] [PUSH_EMBED] Inserted message 18420 into existing cache (now 51 messages) [17:37:40] [PUSH_EMBED] Fetching evolution data for message 18420 in background [17:37:40] [PUSH_EMBED] ✅ Fully processed message 18420 [17:37:40] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:37:39"; "file_name" = ""; message = "I haven\U2019t eaten anything yet today"; "message_id" = 18420; "message_type" = 0; "prev_session_message_id" = 18419; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18420, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [17:37:40] [PUSH_EMBED_VC] Processing embedded message: id=18420, type=0, sender=Esra, prevId=18419 [17:37:40] [PUSH_EMBED_VC] Inserted message 18420 into allMessagesWithReadBy (now 51 messages) [17:37:40] [PUSH_EMBED_VC] ✅ Previous message 18419 exists in memory [17:37:40] [PUSH] ⚡ Embedded message handled directly in ViewController [17:37:40] [PUSH] Parsed message_id: 18420 [17:37:40] [PUSH] Parsed operation_type: 0 [17:37:40] [PUSH] Taking direct action: opType=0, messageId=18420 [17:37:40] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18420 [17:37:40] [PUSH] ⚡ Message 18420 already in memory - skipping duplicate notification entirely [17:37:40] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [17:37:40] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [17:37:40] [PUSH_UI] Message 18420 already in memory - skipping insert [17:37:40] [PUSH_EMBED_VC] Saved message 18420 to local DB [17:37:40] [PUSH] Silent push received [17:37:40] [PUSH_EMBED] 📩 Received embedded message: id=18420, type=0, sender=Esra [17:37:40] [PUSH_EMBED] ✅ Saved message 18420 to local DB (sync) [17:37:40] [PUSH_EMBED] Fetching evolution data for message 18420 in background [17:37:40] [PUSH_EMBED] ✅ Fully processed message 18420 [17:37:40] [PUSH] Embedded message handled instantly from silent push [17:37:40] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [17:37:40] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [17:37:40] [PUSH_UI] Message 18420 already in memory - skipping insert [17:37:40] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:37:39"; "file_name" = ""; message = "I haven\U2019t eaten anything yet today"; "message_id" = 18420; "message_type" = 0; "prev_session_message_id" = 18419; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18420, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [17:37:40] [PUSH_EMBED_VC] Message 18420 already in memory - skipping [17:37:40] [PUSH] ⚡ Embedded message handled directly in ViewController [17:37:40] [PUSH] Parsed message_id: 18420 [17:37:40] [PUSH] Parsed operation_type: 0 [17:37:40] [PUSH] Taking direct action: opType=0, messageId=18420 [17:37:40] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18420 [17:37:40] [PUSH] ⚡ Message 18420 already in memory - skipping duplicate notification entirely [17:37:40] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:37:40] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:37:40] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [17:37:40] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [17:37:40] [PUSH_EMBED] Got evolution data for message 18420, saving to local DB [17:37:40] [PUSH_EMBED] Saved evolution data for message 18420 [17:37:40] [PUSH_EMBED] Got evolution data for message 18420, saving to local DB [17:37:40] [PUSH_EMBED] Saved evolution data for message 18420 [17:37:40] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:37:40] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18419 → 18420 [17:37:42] [PUSH] Silent push received [17:37:42] [PUSH_EMBED] No embedded message_data in notification [17:37:42] [PUSH] No embedded data, pre-loading messages from server [17:37:42] [PUSH_PRELOAD] Fetching messages for instant display cache [17:37:42] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:37:42] [CLIENT_SIG] Event received: type=3 messageId=18420 [17:37:42] [WS_EVENT] Received event: type=3, messageId=18420 [17:37:42] [WS_EVENT] Read receipt for message 18420 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:37:42] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [18370] [17:37:42] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [17:37:42] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:37:42] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18420, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [17:37:42] [PUSH] Parsed message_id: 18420 [17:37:42] [PUSH] Parsed operation_type: 3 [17:37:42] [PUSH] Taking direct action: opType=3, messageId=18420 [17:37:42] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18420 [17:38:01] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:38:01] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [17:38:01] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=52 [17:38:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-1, 18420, 18419, 18418, 18417] [17:38:01] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:38:01] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:38:03] [CLIENT_SIG] Event received: type=0 messageId=18421 [17:38:03] [WS_EVENT] Received event: type=0, messageId=18421 [17:38:03] [WS_EVENT] 📨 New message notification (msgId=18421) - triggering incremental refresh, currentMsgCount=52 [17:38:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [17:38:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18420 [17:38:03] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18421,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 16:38:01"} [17:38:03] [CHAT] receive_message.php JSON: ["message_type": 0, "ok": 1, "file_name": , "session_id": ILUIWU, "message_id": 18421, "datesent_utc": 2026-01-21 16:38:01] [17:38:03] [DB_UPGRADE] Upgrading message ID: -1 → 18421, preserveOriginalDate=false [17:38:03] [DB_UPGRADE] ✅ Upgraded -1 → 18421 with send_status=0, 1 row(s) affected [17:38:03] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 18421 [17:38:03] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 18421 [17:38:03] ReloadData 9 [17:38:03] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:38:03] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:38:03] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [17:38:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:38:12] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:38:12] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [17:38:12] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=53 [17:38:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-2, 18421, 18420, 18419, 18418] [17:38:12] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:38:12] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:38:12] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:14] [CLIENT_SIG] Event received: type=0 messageId=18422 [17:38:14] [WS_EVENT] Received event: type=0, messageId=18422 [17:38:14] [WS_EVENT] 📨 New message notification (msgId=18422) - triggering incremental refresh, currentMsgCount=53 [17:38:14] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [17:38:14] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18421 [17:38:14] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18422,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 16:38:12"} [17:38:14] [CHAT] receive_message.php JSON: ["message_id": 18422, "session_id": ILUIWU, "ok": 1, "message_type": 0, "datesent_utc": 2026-01-21 16:38:12, "file_name": ] [17:38:14] [DB_UPGRADE] Upgrading message ID: -2 → 18422, preserveOriginalDate=false [17:38:14] [DB_UPGRADE] ✅ Upgraded -2 → 18422 with send_status=0, 1 row(s) affected [17:38:14] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 18422 [17:38:14] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 18422 [17:38:14] ReloadData 9 [17:38:14] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:38:14] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:38:14] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [17:38:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:38:15] [PUSH] Silent push received [17:38:15] [PUSH_EMBED] No embedded message_data in notification [17:38:15] [PUSH] No embedded data, pre-loading messages from server [17:38:15] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:15] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:15] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [18372, 18371, 18370] [17:38:15] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [17:38:15] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:15] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 18421, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [17:38:15] [PUSH] Parsed message_id: 18421 [17:38:15] [PUSH] Parsed operation_type: 3 [17:38:15] [PUSH] Taking direct action: opType=3, messageId=18421 [17:38:15] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18421 [17:38:15] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:15] [CLIENT_SIG] Event received: type=3 messageId=18421 [17:38:15] [WS_EVENT] Received event: type=3, messageId=18421 [17:38:15] [WS_EVENT] Read receipt for message 18421 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:17] [PUSH] Silent push received [17:38:17] [PUSH_EMBED] No embedded message_data in notification [17:38:17] [PUSH] No embedded data, pre-loading messages from server [17:38:17] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:17] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:17] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [18373, 18372, 18371, 18370] [17:38:17] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [17:38:17] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:17] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18422, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [17:38:17] [PUSH] Parsed message_id: 18422 [17:38:17] [PUSH] Parsed operation_type: 3 [17:38:17] [PUSH] Taking direct action: opType=3, messageId=18422 [17:38:17] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18422 [17:38:17] [CLIENT_SIG] Event received: type=0 messageId=18423 [17:38:17] [WS_EVENT] Received event: type=0, messageId=18423 [17:38:17] [WS_EVENT] 📨 New message notification (msgId=18423) - triggering incremental refresh, currentMsgCount=53 [17:38:17] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [17:38:17] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18423 [17:38:17] [INCREMENTAL_SYNC] ✅ No new messages [17:38:17] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [17:38:17] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-21 16:38:17 +0000 - type: unknown, operation_type: 0, message_id: 18423, session_id: ILUIWU, state: 0 [17:38:17] [PUSH_DEBUG] Full userInfo: [AnyHashable("message_id"): 18423, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:16"; "file_name" = ""; message = "Yes I was baby"; "message_id" = 18423; "message_type" = 0; "prev_session_message_id" = 18422; "replied_message" = "Were you alone at home today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18406; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [17:38:17] [PUSH] App active - suppressing notification UI, posting internal event [17:38:17] [PUSH_EMBED] 📩 Received embedded message: id=18423, type=0, sender=Esra [17:38:17] [PUSH_EMBED] ✅ Saved message 18423 to local DB (sync) [17:38:17] [PUSH_EMBED] Fetching evolution data for message 18423 in background [17:38:17] [PUSH_EMBED] ✅ Fully processed message 18423 [17:38:17] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18423, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:16"; "file_name" = ""; message = "Yes I was baby"; "message_id" = 18423; "message_type" = 0; "prev_session_message_id" = 18422; "replied_message" = "Were you alone at home today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18406; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [17:38:17] [PUSH_EMBED_VC] Processing embedded message: id=18423, type=0, sender=Esra, prevId=18422 [17:38:17] [PUSH_EMBED_VC] Inserted message 18423 into allMessagesWithReadBy (now 54 messages) [17:38:17] [PUSH_EMBED_VC] ✅ Previous message 18422 exists in memory [17:38:17] [PUSH] ⚡ Embedded message handled directly in ViewController [17:38:17] [PUSH] Parsed message_id: 18423 [17:38:17] [PUSH] Parsed operation_type: 0 [17:38:17] [PUSH] Taking direct action: opType=0, messageId=18423 [17:38:17] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18423 [17:38:17] [PUSH] ⚡ Message 18423 already in memory - skipping duplicate notification entirely [17:38:17] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [17:38:17] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [17:38:17] [PUSH_UI] Message 18423 already in memory - skipping insert [17:38:17] [PUSH_EMBED_VC] Saved message 18423 to local DB [17:38:17] [PUSH] Silent push received [17:38:17] [PUSH_EMBED] 📩 Received embedded message: id=18423, type=0, sender=Esra [17:38:17] [PUSH_EMBED] ✅ Saved message 18423 to local DB (sync) [17:38:17] [PUSH_EMBED] Fetching evolution data for message 18423 in background [17:38:17] [PUSH_EMBED] ✅ Fully processed message 18423 [17:38:17] [PUSH] Embedded message handled instantly from silent push [17:38:17] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [17:38:17] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [17:38:17] [PUSH_UI] Message 18423 already in memory - skipping insert [17:38:17] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 18423, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:16"; "file_name" = ""; message = "Yes I was baby"; "message_id" = 18423; "message_type" = 0; "prev_session_message_id" = 18422; "replied_message" = "Were you alone at home today ?"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18406; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [17:38:17] [PUSH_EMBED_VC] Message 18423 already in memory - skipping [17:38:17] [PUSH] ⚡ Embedded message handled directly in ViewController [17:38:17] [PUSH] Parsed message_id: 18423 [17:38:17] [PUSH] Parsed operation_type: 0 [17:38:17] [PUSH] Taking direct action: opType=0, messageId=18423 [17:38:17] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18423 [17:38:17] [PUSH] ⚡ Message 18423 already in memory - skipping duplicate notification entirely [17:38:17] [PUSH_EMBED] Got evolution data for message 18423, saving to local DB [17:38:17] [PUSH_EMBED] Saved evolution data for message 18423 [17:38:17] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18423, 18370, 18371, 18372, 18373] [17:38:17] [PUSH_EMBED] Got evolution data for message 18423, saving to local DB [17:38:17] [PUSH_EMBED] Saved evolution data for message 18423 [17:38:17] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18422 → 18423 [17:38:17] [CLIENT_SIG] Event received: type=3 messageId=18422 [17:38:17] [WS_EVENT] Received event: type=3, messageId=18422 [17:38:17] [WS_EVENT] Read receipt for message 18422 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:19] [PUSH] Silent push received [17:38:19] [PUSH_EMBED] No embedded message_data in notification [17:38:19] [PUSH] No embedded data, pre-loading messages from server [17:38:19] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:19] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:19] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [18373, 18372, 18371, 18370] [17:38:19] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [17:38:19] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:19] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18423, AnyHashable("operation_type"): 3] [17:38:19] [PUSH] Parsed message_id: 18423 [17:38:19] [PUSH] Parsed operation_type: 3 [17:38:19] [PUSH] Taking direct action: opType=3, messageId=18423 [17:38:19] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18423 [17:38:20] [CLIENT_SIG] Event received: type=3 messageId=18423 [17:38:20] [WS_EVENT] Received event: type=3, messageId=18423 [17:38:20] [WS_EVENT] Read receipt for message 18423 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:38:25] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:38] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:38:38] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=54, isReloading=false [17:38:38] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=55 [17:38:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[-3, 18423, 18422, 18421, 18420] [17:38:38] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:38:38] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:38:40] [CLIENT_SIG] Event received: type=0 messageId=18424 [17:38:40] [WS_EVENT] Received event: type=0, messageId=18424 [17:38:40] [WS_EVENT] 📨 New message notification (msgId=18424) - triggering incremental refresh, currentMsgCount=55 [17:38:40] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=55 [17:38:40] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18424,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 16:38:38"} [17:38:40] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18423 [17:38:40] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-21 16:38:38, "ok": 1, "session_id": ILUIWU, "file_name": , "message_type": 0, "message_id": 18424] [17:38:40] [DB_UPGRADE] Upgrading message ID: -3 → 18424, preserveOriginalDate=false [17:38:40] [DB_UPGRADE] ✅ Upgraded -3 → 18424 with send_status=0, 1 row(s) affected [17:38:40] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 18424 [17:38:40] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 18424 [17:38:40] ReloadData 9 [17:38:40] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:38:40] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:38:40] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=55 [17:38:40] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:38:43] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:44] [PUSH] Silent push received [17:38:44] [PUSH_EMBED] No embedded message_data in notification [17:38:44] [PUSH] No embedded data, pre-loading messages from server [17:38:44] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:44] [CLIENT_SIG] Event received: type=3 messageId=18424 [17:38:44] [WS_EVENT] Received event: type=3, messageId=18424 [17:38:44] [WS_EVENT] Read receipt for message 18424 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [17:38:45] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:45] [PRELOAD_CACHE] Preserving 6 push-inserted messages: [18375, 18374, 18373, 18372, 18371, 18370] [17:38:45] [PUSH_PRELOAD] ⚡ Pre-cached 56 messages for instant display (preserved 6 from push) [17:38:45] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:45] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18424] [17:38:45] [PUSH] Parsed message_id: 18424 [17:38:45] [PUSH] Parsed operation_type: 3 [17:38:45] [PUSH] Taking direct action: opType=3, messageId=18424 [17:38:45] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18424 [17:38:46] [CLIENT_SIG] Event received: type=0 messageId=18425 [17:38:46] [WS_EVENT] Received event: type=0, messageId=18425 [17:38:46] [WS_EVENT] 📨 New message notification (msgId=18425) - triggering incremental refresh, currentMsgCount=55 [17:38:46] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=55 [17:38:46] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18425 [17:38:46] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-21 16:38:46 +0000 - type: unknown, operation_type: 0, message_id: 18425, session_id: ILUIWU, state: 0 [17:38:46] [PUSH_DEBUG] Full userInfo: [AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:43"; "file_name" = ""; message = "Not sure about that, gained some weight during weekend \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18425; "message_type" = 0; "prev_session_message_id" = 18424; "replied_message" = "More needed for me than for you !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18422; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18425] [17:38:46] [PUSH] App active - suppressing notification UI, posting internal event [17:38:46] [PUSH_EMBED] 📩 Received embedded message: id=18425, type=0, sender=Esra [17:38:46] [PUSH_EMBED] ✅ Saved message 18425 to local DB (sync) [17:38:46] [PUSH_EMBED] Fetching evolution data for message 18425 in background [17:38:46] [PUSH_EMBED] ✅ Fully processed message 18425 [17:38:46] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 16:38:43"; "file_name" = ""; message = "Not sure about that, gained some weight during weekend \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18425; "message_type" = 0; "prev_session_message_id" = 18424; "replied_message" = "More needed for me than for you !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18422; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18425] [17:38:46] [PUSH_EMBED_VC] Processing embedded message: id=18425, type=0, sender=Esra, prevId=18424 [17:38:46] [PUSH_EMBED_VC] Inserted message 18425 into allMessagesWithReadBy (now 56 messages) [17:38:46] [PUSH_EMBED_VC] ✅ Previous message 18424 exists in memory [17:38:46] [PUSH] ⚡ Embedded message handled directly in ViewController [17:38:46] [PUSH] Parsed message_id: 18425 [17:38:46] [PUSH] Parsed operation_type: 0 [17:38:46] [PUSH] Taking direct action: opType=0, messageId=18425 [17:38:46] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18425 [17:38:46] [PUSH] ⚡ Message 18425 already in memory - skipping duplicate notification entirely [17:38:46] [PUSH_EMBED_VC] Saved message 18425 to local DB [17:38:46] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [17:38:46] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [17:38:46] [PUSH_UI] Message 18425 already in memory - skipping insert [17:38:46] [PUSH] Silent push received [17:38:46] [PUSH_EMBED] 📩 Received embedded message: id=18425, type=0, sender=Esra [17:38:46] [PUSH_EMBED] ✅ Saved message 18425 to local DB (sync) [17:38:46] [PUSH_EMBED] Fetching evolution data for message 18425 in background [17:38:46] [PUSH_EMBED] ✅ Fully processed message 18425 [17:38:46] [PUSH] Embedded message handled instantly from silent push [17:38:46] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [17:38:46] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [17:38:46] [PUSH_UI] Message 18425 already in memory - skipping insert [17:38:46] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): { datesent = "2026-01-21 16:38:43"; "file_name" = ""; message = "Not sure about that, gained some weight during weekend \Ud83e\Udd23\Ud83e\Udd23"; "message_id" = 18425; "message_type" = 0; "prev_session_message_id" = 18424; "replied_message" = "More needed for me than for you !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18422; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18425, AnyHashable("session_id"): ILUIWU] [17:38:46] [PUSH_EMBED_VC] Message 18425 already in memory - skipping [17:38:46] [PUSH] ⚡ Embedded message handled directly in ViewController [17:38:46] [PUSH] Parsed message_id: 18425 [17:38:46] [PUSH] Parsed operation_type: 0 [17:38:46] [PUSH] Taking direct action: opType=0, messageId=18425 [17:38:46] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18425 [17:38:46] [PUSH] ⚡ Message 18425 already in memory - skipping duplicate notification entirely [17:38:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[18425, 18370, 18371, 18372, 18373] [17:38:46] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18424 → 18425 [17:38:47] [INCREMENTAL_SYNC] ✅ No new messages [17:38:47] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=56 [17:38:47] [PUSH_EMBED] Got evolution data for message 18425, saving to local DB [17:38:47] [PUSH_EMBED] Saved evolution data for message 18425 [17:38:47] [PUSH_EMBED] Got evolution data for message 18425, saving to local DB [17:38:47] [PUSH_EMBED] Saved evolution data for message 18425 [17:38:49] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [17:38:49] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [17:38:50] [PUSH] Silent push received [17:38:50] [PUSH_EMBED] No embedded message_data in notification [17:38:50] [PUSH] No embedded data, pre-loading messages from server [17:38:50] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:50] [CLIENT_SIG] Event received: type=3 messageId=18425 [17:38:50] [WS_EVENT] Received event: type=3, messageId=18425 [17:38:50] [WS_EVENT] Read receipt for message 18425 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:38:51] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:51] [PRELOAD_CACHE] Preserving 6 push-inserted messages: [18375, 18374, 18373, 18372, 18371, 18370] [17:38:51] [PUSH_PRELOAD] ⚡ Pre-cached 56 messages for instant display (preserved 6 from push) [17:38:51] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:51] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18425] [17:38:51] [PUSH] Parsed message_id: 18425 [17:38:51] [PUSH] Parsed operation_type: 3 [17:38:51] [PUSH] Taking direct action: opType=3, messageId=18425 [17:38:51] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18425 [17:39:12] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:39:12] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=56, isReloading=false [17:39:12] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=57 [17:39:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[-4, 18425, 18424, 18423, 18422] [17:39:12] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:39:12] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:39:14] [CLIENT_SIG] Event received: type=0 messageId=18426 [17:39:14] [WS_EVENT] Received event: type=0, messageId=18426 [17:39:14] [WS_EVENT] 📨 New message notification (msgId=18426) - triggering incremental refresh, currentMsgCount=57 [17:39:14] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=57 [17:39:14] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18425 [17:39:14] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18426,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 16:39:12"} [17:39:14] [CHAT] receive_message.php JSON: ["ok": 1, "file_name": , "message_id": 18426, "message_type": 0, "datesent_utc": 2026-01-21 16:39:12, "session_id": ILUIWU] [17:39:14] [DB_UPGRADE] Upgrading message ID: -4 → 18426, preserveOriginalDate=false [17:39:14] [DB_UPGRADE] ✅ Upgraded -4 → 18426 with send_status=0, 1 row(s) affected [17:39:14] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 18426 [17:39:14] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 18426 [17:39:14] ReloadData 9 [17:39:14] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:39:14] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:39:14] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=57 [17:39:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:39:15] [LIFECYCLE] App resigning active - cleared crash flag [17:39:15] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [17:39:15] [SECURITY] Saved background timestamp [17:39:15] [LIFECYCLE] App entering background - cleared crash flag [17:39:15] [CLIENT_SIG] Disconnecting [17:39:15] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:39:15] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [17:39:15] [WS] Canceling WebSocket for query connection to iosILUIWU [17:39:15] In cleanupPeer [17:39:15] In cleanupPeer [17:39:15] [LIFECYCLE] WebRTC audio disabled [17:39:15] [LIFECYCLE] AVAudioSession deactivated [17:39:15] [LIFECYCLE] All connections stopped [17:39:15] [CLIENT_SIG] WebSocket closed with code 1001 [17:39:15] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:39:15] [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:39:15] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:39:15] [SERVER] Stopped reconnect polling [17:39:15] Will request stop of video 0 [17:39:15] Will request stop of video 0 [17:39:15] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [17:39:15] [WS] Query connection error - cleaning up all agent connections and views [17:39:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:39:15] [WS] Query connection failed - cleaning up all agent connections and views [17:39:15] [PIP] Removing 0 tracks from PiP for connection 0 [17:39:15] [PIP] ✅ All tracks removed for connection 0 [17:39:15] [PIP] Removing 0 tracks from PiP for connection 0 [17:39:15] [PIP] ✅ All tracks removed for connection 0 [17:39:15] [CLEANUP] ======================================== [17:39:15] [CLEANUP] Cleaning up all agent connections and views [17:39:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:39:15] [CLEANUP] Stopped and removed 0 video connections [17:39:15] [CLEANUP] Removed 0 video views [17:39:15] [CLEANUP] Removed 0 feed scroll views [17:39:15] [CLEANUP] Removed 0 status labels [17:39:15] [CLEANUP] Reset agent query state [17:39:15] [CLEANUP] Updated page indicator [17:39:15] [CLEANUP] Rebuilt video layout [17:39:15] [CLEANUP] ✅ All agent connections and views cleaned up [17:39:15] [CLEANUP] ======================================== [17:39:15] [SERVER] Skipping reconnect polling - app is in background [17:39:15] [WS] URLSession invalidated successfully [17:39:15] [CLEANUP] ======================================== [17:39:15] [CLEANUP] Cleaning up all agent connections and views [17:39:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:39:15] [CLEANUP] Stopped and removed 0 video connections [17:39:15] [CLEANUP] Removed 0 video views [17:39:15] [CLEANUP] Removed 0 feed scroll views [17:39:15] [CLEANUP] Removed 0 status labels [17:39:15] [CLEANUP] Reset agent query state [17:39:15] [CLEANUP] Updated page indicator [17:39:15] [CLEANUP] Rebuilt video layout [17:39:15] [CLEANUP] ✅ All agent connections and views cleaned up [17:39:15] [CLEANUP] ======================================== [17:39:15] [SERVER] Skipping reconnect polling - app is in background [17:41:31] [NETWORK] Status changed: connected [17:41:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:41:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:41:31] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:41:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:41:31] [CLIENT_SIG] WebSocket opened [17:41:31] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:41:31] HELLO → sent (cached token, role=query) [17:41:31] [CLIENT_SIG] Connected! clientId=qonMnSI4ko4ky2uK [17:41:31] [SIG] hello_ok received for query connection - ready to query agents [17:41:31] [SIG] get_agents request sent for sessionId=ILUIWU [17:41:31] [SIG] get_agents request sent for sessionId=iosILUIWU [17:41:31] [SERVER] Stopped reconnect polling [17:41:31] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:41:31] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:41:31] [SIG] agents_list received: [] [17:41:33] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} [17:41:33] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:41:33] [WS] WebSocket task completed with error - isQueryOnly=true: The network connection was lost. [17:41:33] [WS] Query connection error - cleaning up all agent connections and views [17:41:33] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [17:41:33] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:41:33] [WS] Connection failed: The operation couldn’t be completed. Operation canceled [17:41:33] [WS] Query connection failed - cleaning up all agent connections and views [17:41:33] [CLEANUP] ======================================== [17:41:33] [CLEANUP] Cleaning up all agent connections and views [17:41:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:41:33] [CLEANUP] Stopped and removed 0 video connections [17:41:33] [CLEANUP] Removed 0 video views [17:41:33] [CLEANUP] Removed 0 feed scroll views [17:41:33] [CLEANUP] Removed 0 status labels [17:41:33] [CLEANUP] Reset agent query state [17:41:33] [CLEANUP] Updated page indicator [17:41:33] [CLEANUP] Rebuilt video layout [17:41:33] [CLEANUP] ✅ All agent connections and views cleaned up [17:41:33] [CLEANUP] ======================================== [17:41:33] [SERVER] Skipping reconnect polling - app is in background [17:41:33] [CLEANUP] ======================================== [17:41:33] [CLEANUP] Cleaning up all agent connections and views [17:41:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:41:33] [CLEANUP] Stopped and removed 0 video connections [17:41:33] [CLEANUP] Removed 0 video views [17:41:33] [CLEANUP] Removed 0 feed scroll views [17:41:33] [CLEANUP] Removed 0 status labels [17:41:33] [CLEANUP] Reset agent query state [17:41:33] [CLEANUP] Updated page indicator [17:41:33] [CLEANUP] Rebuilt video layout [17:41:33] [CLEANUP] ✅ All agent connections and views cleaned up [17:41:33] [CLEANUP] ======================================== [17:41:33] [SERVER] Skipping reconnect polling - app is in background [17:41:35] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:41:35] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:41:35] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:41:35] HELLO → sent (cached token, role=query) [17:41:35] [SIG] hello_ok received for query connection - ready to query agents [17:41:35] [SIG] get_agents request sent for sessionId=ILUIWU [17:41:35] [SIG] get_agents request sent for sessionId=iosILUIWU [17:41:35] [SERVER] Stopped reconnect polling [17:41:35] [SIG] agents_list received: [] [17:41:35] [SIG] agents_list received: [] [17:41:36] [SECURITY] Timeout check: elapsed=141.06570887565613s, timeout=300.0s [17:41:36] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:41:36] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:41:36] [LIFECYCLE] App entering foreground - restoring connections [17:41:36] [LIFECYCLE] Away > 2 minutes (141s) - will scroll to bottom [17:41:36] [UPLOAD_RETRY] No pending uploads to retry [17:41:36] [LIFECYCLE] Merged 868 reactions from local DB [17:41:36] [LIFECYCLE] WebRTC audio re-enabled [17:41:36] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:41:36] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:41:36] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:41:36] [VIEWER] Reconnecting after background - querying agents [17:41:36] [UNSENT_RETRY] Checking for unsent messages... [17:41:36] [PENDING_UPLOAD] Total pending upload messages: 0 [17:41:36] [UNSENT_RETRY] No unsent messages found [17:41:36] [CLIENT_SIG] WebSocket opened [17:41:36] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:41:36] [CLIENT_SIG] Connected! clientId=xMRIHih12EIesJRP [17:41:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:36] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:41:36] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:41:37] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [17:41:37] [SECURITY] Saved background timestamp [17:41:37] [LIFECYCLE] App entering background - cleared crash flag [17:41:37] [CLIENT_SIG] Disconnecting [17:41:37] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:41:37] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [17:41:37] [WS] Canceling WebSocket for query connection to iosILUIWU [17:41:37] In cleanupPeer [17:41:37] In cleanupPeer [17:41:37] [LIFECYCLE] WebRTC audio disabled [17:41:37] [LIFECYCLE] AVAudioSession deactivated [17:41:37] [LIFECYCLE] All connections stopped [17:41:37] [CLIENT_SIG] WebSocket closed with code 1001 [17:41:37] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:41:37] [SERVER] Stopped reconnect polling [17:41:37] Will request stop of video 0 [17:41:37] Will request stop of video 0 [17:41:37] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [17:41:37] [WS] Query connection error - cleaning up all agent connections and views [17:41:37] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:41:37] [WS] Query connection failed - cleaning up all agent connections and views [17:41:37] [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:41:37] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:41:37] [COMBINED_FETCH] Loaded 7192 read receipts, 873 messages with reactions [17:41:37] [FOREGROUND] Enriched 0 messages with readBy data from server [17:41:37] [PIP] Removing 0 tracks from PiP for connection 0 [17:41:37] [PIP] ✅ All tracks removed for connection 0 [17:41:37] [PIP] Removing 0 tracks from PiP for connection 0 [17:41:37] [PIP] ✅ All tracks removed for connection 0 [17:41:37] [CLEANUP] ======================================== [17:41:37] [CLEANUP] Cleaning up all agent connections and views [17:41:37] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:41:37] [CLEANUP] Stopped and removed 0 video connections [17:41:37] [CLEANUP] Removed 0 video views [17:41:37] [CLEANUP] Removed 0 feed scroll views [17:41:37] [CLEANUP] Removed 0 status labels [17:41:37] [CLEANUP] Reset agent query state [17:41:37] [CLEANUP] Updated page indicator [17:41:37] [CLEANUP] Rebuilt video layout [17:41:37] [CLEANUP] ✅ All agent connections and views cleaned up [17:41:37] [CLEANUP] ======================================== [17:41:37] [WS] URLSession invalidated successfully [17:41:37] [CLEANUP] ======================================== [17:41:37] [CLEANUP] Cleaning up all agent connections and views [17:41:37] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:41:37] [CLEANUP] Stopped and removed 0 video connections [17:41:37] [CLEANUP] Removed 0 video views [17:41:37] [CLEANUP] Removed 0 feed scroll views [17:41:37] [CLEANUP] Removed 0 status labels [17:41:37] [CLEANUP] Reset agent query state [17:41:37] [CLEANUP] Updated page indicator [17:41:37] [CLEANUP] Rebuilt video layout [17:41:37] [CLEANUP] ✅ All agent connections and views cleaned up [17:41:37] [CLEANUP] ======================================== [17:41:37] [SERVER] Skipping reconnect polling - app is in background [17:41:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:38] [SECURITY] Timeout check: elapsed=0.9255220890045166s, timeout=300.0s [17:41:38] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:41:38] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:41:38] [LIFECYCLE] App entering foreground - restoring connections [17:41:38] [UPLOAD_RETRY] No pending uploads to retry [17:41:38] [LIFECYCLE] Merged 868 reactions from local DB [17:41:38] [LIFECYCLE] WebRTC audio re-enabled [17:41:38] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:41:38] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:41:38] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:41:38] [VIEWER] Reconnecting after background - querying agents [17:41:38] [UNSENT_RETRY] Checking for unsent messages... [17:41:38] [PENDING_UPLOAD] Total pending upload messages: 0 [17:41:38] [UNSENT_RETRY] No unsent messages found [17:41:38] [CLIENT_SIG] WebSocket opened [17:41:38] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:41:38] [CLIENT_SIG] Connected! clientId=aUDfpEPEtE7PvM3k [17:41:38] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:41:38] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:41:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:39] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [17:41:39] [SECURITY] Within timeout - cleared background flag [17:41:39] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:41:39] [PUSH] handlePollEventsNotification userInfo: [:] [17:41:39] [PUSH] No message_id in userInfo [17:41:39] [PUSH] No operation_type in userInfo [17:41:39] [FAST_REFRESH] Evolution disabled - performing incremental sync [17:41:39] [FAST_REFRESH] Already have 57 messages - skipping local DB load [17:41:39] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [17:41:39] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [17:41:39] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=57 [17:41:39] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18426 [17:41:39] [INCREMENTAL_SYNC] ✅ No new messages [17:41:39] [FAST_REFRESH] Incremental sync complete - 57 messages [17:41:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:39] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:41:39] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:41:39] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:41:39] HELLO → sent (cached token, role=query) [17:41:39] [COMBINED_FETCH] Loaded 7192 read receipts, 873 messages with reactions [17:41:39] [FOREGROUND] Enriched 0 messages with readBy data from server [17:41:39] [SIG] hello_ok received for query connection - ready to query agents [17:41:39] [SIG] get_agents request sent for sessionId=ILUIWU [17:41:39] [SIG] get_agents request sent for sessionId=iosILUIWU [17:41:39] [SERVER] Stopped reconnect polling [17:41:39] [SIG] agents_list received: [] [17:41:39] [SIG] agents_list received: [] [17:41:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:40] [COMBINED_FETCH] Loaded 7192 read receipts, 873 messages with reactions [17:41:40] [FAST_REFRESH] Enriched 57 messages with readBy data [17:41:40] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:41] [MENU] dismissAnyExistingMenu called [17:41:41] [MENU] dismissAnyExistingMenu completed [17:41:41] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:41:42] [MENU] dismissAnyExistingMenu called [17:41:42] [MENU] dismissAnyExistingMenu completed [17:41:49] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [17:41:49] [WS] Query connection error - cleaning up all agent connections and views [17:41:49] [CLEANUP] ======================================== [17:41:49] [CLEANUP] Cleaning up all agent connections and views [17:41:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:41:49] [CLEANUP] Stopped and removed 0 video connections [17:41:49] [CLEANUP] Removed 0 video views [17:41:49] [CLEANUP] Removed 0 feed scroll views [17:41:49] [CLEANUP] Removed 0 status labels [17:41:49] [CLEANUP] Reset agent query state [17:41:49] [CLEANUP] Updated page indicator [17:41:49] [CLEANUP] Rebuilt video layout [17:41:49] [CLEANUP] ✅ All agent connections and views cleaned up [17:41:49] [CLEANUP] ======================================== [17:41:49] [SERVER] Starting reconnect polling (5s interval) [17:41:51] [MENU] dismissAnyExistingMenu called [17:41:51] [MENU] dismissAnyExistingMenu completed [17:41:51] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:41:51] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=57, isReloading=false [17:41:51] [SEND_MESSAGE] ✅ Added optimistic message id=-5 to arrays, newMsgCount=58 [17:41:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[-5, 18426, 18425, 18424, 18423] [17:41:51] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:41:51] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:41:53] [LOCK] Lock button tapped - locking app immediately [17:41:53] [LOCK] Received lock app notification [17:41:53] [CLIENT_SIG] Event received: type=0 messageId=18427 [17:41:53] [WS_EVENT] Received event: type=0, messageId=18427 [17:41:53] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18427,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 16:41:52"} [17:41:53] [WS_EVENT] 📨 New message notification (msgId=18427) - triggering incremental refresh, currentMsgCount=58 [17:41:53] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [17:41:53] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-21 16:41:52, "message_type": 0, "ok": 1, "session_id": ILUIWU, "file_name": , "message_id": 18427] [17:41:53] [DB_UPGRADE] Upgrading message ID: -5 → 18427, preserveOriginalDate=false [17:41:53] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18426 [17:41:53] [DB_UPGRADE] ✅ Upgraded -5 → 18427 with send_status=0, 1 row(s) affected [17:41:53] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -5 → 18427 [17:41:53] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -5 → 18427 [17:41:53] ReloadData 9 [17:41:53] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:41:53] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:41:53] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=58 [17:41:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:41:54] [LIFECYCLE] App resigning active - cleared crash flag [17:41:54] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [17:41:54] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [17:41:54] [LIFECYCLE] App entering background - cleared crash flag [17:41:54] [CLIENT_SIG] Disconnecting [17:41:54] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:41:54] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [17:41:54] [WS] Canceling WebSocket for query connection to iosILUIWU [17:41:54] In cleanupPeer [17:41:54] In cleanupPeer [17:41:54] [LIFECYCLE] WebRTC audio disabled [17:41:54] [LIFECYCLE] AVAudioSession deactivated [17:41:54] [LIFECYCLE] All connections stopped [17:41:54] [CLIENT_SIG] WebSocket closed with code 1001 [17:41:54] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:41:54] [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:41:54] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:41:54] [SERVER] Stopped reconnect polling [17:41:54] [WS] URLSession invalidated successfully [17:41:54] Will request stop of video 0 [17:41:54] Will request stop of video 0 [17:41:54] [PIP] Removing 0 tracks from PiP for connection 0 [17:41:54] [PIP] ✅ All tracks removed for connection 0 [17:41:54] [PIP] Removing 0 tracks from PiP for connection 0 [17:41:54] [PIP] ✅ All tracks removed for connection 0 [17:45:40] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:45:40] [NETWORK] Status changed: connected [17:45:40] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [17:45:40] [WS] Query connection failed - cleaning up all agent connections and views [17:45:40] [CLEANUP] ======================================== [17:45:40] [CLEANUP] Cleaning up all agent connections and views [17:45:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:45:40] [CLEANUP] Stopped and removed 0 video connections [17:45:40] [CLEANUP] Removed 0 video views [17:45:40] [CLEANUP] Removed 0 feed scroll views [17:45:40] [CLEANUP] Removed 0 status labels [17:45:40] [CLEANUP] Reset agent query state [17:45:40] [CLEANUP] Updated page indicator [17:45:40] [CLEANUP] Rebuilt video layout [17:45:40] [CLEANUP] ✅ All agent connections and views cleaned up [17:45:40] [CLEANUP] ======================================== [17:45:40] [SERVER] Skipping reconnect polling - app is in background [17:45:40] [CLIENT_SIG] WebSocket opened [17:45:40] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:45:40] [CLIENT_SIG] Connected! clientId=hBvAvRvL3AND5W-I [17:45:40] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:45:40] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:46:08] [LAST_SEEN] Fetch error: The request timed out. [17:46:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:46:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:46:08] [NETWORK] Status changed: connected [17:46:08] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [17:46:08] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:46:08] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <6E11C228-B24A-4F7A-AC00-58DDE0A5B60C>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <6E11C228-B24A-4F7A-AC00-58DDE0A5B60C>.<1>} [17:46:08] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:46:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:46:08] HELLO → sent (cached token, role=query) [17:46:08] [SIG] hello_ok received for query connection - ready to query agents [17:46:08] [SIG] get_agents request sent for sessionId=ILUIWU [17:46:08] [SIG] get_agents request sent for sessionId=iosILUIWU [17:46:08] [SERVER] Stopped reconnect polling [17:46:08] [SIG] agents_list received: [] [17:46:08] [SIG] agents_list received: [] [17:46:08] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [17:46:08] [WS] Query connection failed - cleaning up all agent connections and views [17:46:08] [WS] WebSocket task completed with error - isQueryOnly=true: The operation couldn’t be completed. Software caused connection abort [17:46:08] [WS] Query connection error - cleaning up all agent connections and views [17:46:08] [CLEANUP] ======================================== [17:46:08] [CLEANUP] Cleaning up all agent connections and views [17:46:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:46:08] [CLEANUP] Stopped and removed 0 video connections [17:46:08] [CLEANUP] Removed 0 video views [17:46:08] [CLEANUP] Removed 0 feed scroll views [17:46:08] [CLEANUP] Removed 0 status labels [17:46:08] [CLEANUP] Reset agent query state [17:46:08] [CLEANUP] Updated page indicator [17:46:08] [CLEANUP] Rebuilt video layout [17:46:08] [CLEANUP] ✅ All agent connections and views cleaned up [17:46:08] [CLEANUP] ======================================== [17:46:08] [SERVER] Skipping reconnect polling - app is in background [17:46:08] [CLEANUP] ======================================== [17:46:08] [CLEANUP] Cleaning up all agent connections and views [17:46:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:46:08] [CLEANUP] Stopped and removed 0 video connections [17:46:08] [CLEANUP] Removed 0 video views [17:46:08] [CLEANUP] Removed 0 feed scroll views [17:46:08] [CLEANUP] Removed 0 status labels [17:46:08] [CLEANUP] Reset agent query state [17:46:08] [CLEANUP] Updated page indicator [17:46:08] [CLEANUP] Rebuilt video layout [17:46:08] [CLEANUP] ✅ All agent connections and views cleaned up [17:46:08] [CLEANUP] ======================================== [17:46:08] [SERVER] Skipping reconnect polling - app is in background [17:46:17] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:46:17] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:46:17] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:46:17] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:46:17] [CLIENT_SIG] WebSocket opened [17:46:17] HELLO → sent (cached token, role=query) [17:46:17] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:46:17] [CLIENT_SIG] Connected! clientId=TstZhYJHuibkajf6 [17:46:17] [SIG] hello_ok received for query connection - ready to query agents [17:46:17] [SIG] get_agents request sent for sessionId=ILUIWU [17:46:17] [SIG] get_agents request sent for sessionId=iosILUIWU [17:46:17] [SERVER] Stopped reconnect polling [17:46:17] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:46:17] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:46:17] [SIG] agents_list received: [] [17:46:17] [SIG] agents_list received: [] [17:46:18] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [17:46:18] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:46:18] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} [17:46:18] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:46:18] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [17:46:18] [WS] Query connection failed - cleaning up all agent connections and views [17:46:18] [WS] WebSocket task completed with error - isQueryOnly=true: The operation couldn’t be completed. Software caused connection abort [17:46:18] [WS] Query connection error - cleaning up all agent connections and views [17:46:18] [CLEANUP] ======================================== [17:46:18] [CLEANUP] Cleaning up all agent connections and views [17:46:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:46:18] [CLEANUP] Stopped and removed 0 video connections [17:46:18] [CLEANUP] Removed 0 video views [17:46:18] [CLEANUP] Removed 0 feed scroll views [17:46:18] [CLEANUP] Removed 0 status labels [17:46:18] [CLEANUP] Reset agent query state [17:46:18] [CLEANUP] Updated page indicator [17:46:18] [CLEANUP] Rebuilt video layout [17:46:18] [CLEANUP] ✅ All agent connections and views cleaned up [17:46:18] [CLEANUP] ======================================== [17:46:18] [SERVER] Skipping reconnect polling - app is in background [17:46:18] [CLEANUP] ======================================== [17:46:18] [CLEANUP] Cleaning up all agent connections and views [17:46:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:46:18] [CLEANUP] Stopped and removed 0 video connections [17:46:18] [CLEANUP] Removed 0 video views [17:46:18] [CLEANUP] Removed 0 feed scroll views [17:46:18] [CLEANUP] Removed 0 status labels [17:46:18] [CLEANUP] Reset agent query state [17:46:18] [CLEANUP] Updated page indicator [17:46:18] [CLEANUP] Rebuilt video layout [17:46:18] [CLEANUP] ✅ All agent connections and views cleaned up [17:46:18] [CLEANUP] ======================================== [17:46:18] [SERVER] Skipping reconnect polling - app is in background [17:46:19] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:46:19] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:46:19] [LIFECYCLE] App entering foreground - restoring connections [17:46:19] [LIFECYCLE] Away > 2 minutes (264s) - will scroll to bottom [17:46:19] [UPLOAD_RETRY] No pending uploads to retry [17:46:19] [LIFECYCLE] Merged 868 reactions from local DB [17:46:19] [LIFECYCLE] WebRTC audio re-enabled [17:46:19] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:46:19] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:46:19] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:46:19] [VIEWER] Reconnecting after background - querying agents [17:46:19] [UNSENT_RETRY] Checking for unsent messages... [17:46:19] [PENDING_UPLOAD] Total pending upload messages: 0 [17:46:19] [UNSENT_RETRY] No unsent messages found [17:46:19] [CLIENT_SIG] WebSocket opened [17:46:19] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:46:19] [CLIENT_SIG] Connected! clientId=7EiXrger4I6J-Qfp [17:46:19] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:46:19] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:46:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:46:19] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:46:19] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:46:19] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:46:19] HELLO → sent (cached token, role=query) [17:46:19] [SIG] hello_ok received for query connection - ready to query agents [17:46:19] [SIG] get_agents request sent for sessionId=ILUIWU [17:46:19] [SIG] get_agents request sent for sessionId=iosILUIWU [17:46:19] [SERVER] Stopped reconnect polling [17:46:19] [SIG] agents_list received: [] [17:46:19] [SIG] agents_list received: [] [17:46:19] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [17:46:19] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:46:19] [PUSH] handlePollEventsNotification userInfo: [:] [17:46:19] [PUSH] No message_id in userInfo [17:46:19] [PUSH] No operation_type in userInfo [17:46:19] [FAST_REFRESH] Evolution disabled - performing incremental sync [17:46:19] [FAST_REFRESH] Already have 58 messages - skipping local DB load [17:46:19] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [17:46:19] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [17:46:19] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [17:46:19] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18427 [17:46:19] [LIFECYCLE] App resigning active - cleared crash flag [17:46:19] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:46:19] [FOREGROUND] Enriched 0 messages with readBy data from server [17:46:19] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [17:46:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:46:20] [INCREMENTAL_SYNC] ✅ No new messages [17:46:20] [FAST_REFRESH] Incremental sync complete - 58 messages [17:46:20] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [17:46:20] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [17:46:20] [LIFECYCLE] App entering background - cleared crash flag [17:46:20] [CLIENT_SIG] Disconnecting [17:46:20] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:46:20] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [17:46:20] [WS] Canceling WebSocket for query connection to iosILUIWU [17:46:20] In cleanupPeer [17:46:20] In cleanupPeer [17:46:20] [LIFECYCLE] WebRTC audio disabled [17:46:20] [LIFECYCLE] AVAudioSession deactivated [17:46:20] [LIFECYCLE] All connections stopped [17:46:20] [CLIENT_SIG] WebSocket closed with code 1001 [17:46:20] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:46:20] [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:46:20] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:46:20] [SERVER] Stopped reconnect polling [17:46:20] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [17:46:20] [WS] Query connection error - cleaning up all agent connections and views [17:46:20] Will request stop of video 0 [17:46:20] Will request stop of video 0 [17:46:20] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:46:20] [WS] Query connection failed - cleaning up all agent connections and views [17:46:20] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:46:20] [FAST_REFRESH] Enriched 58 messages with readBy data [17:46:20] [CLEANUP] ======================================== [17:46:20] [CLEANUP] Cleaning up all agent connections and views [17:46:20] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:46:20] [CLEANUP] Stopped and removed 0 video connections [17:46:20] [CLEANUP] Removed 0 video views [17:46:20] [CLEANUP] Removed 0 feed scroll views [17:46:20] [CLEANUP] Removed 0 status labels [17:46:20] [CLEANUP] Reset agent query state [17:46:20] [CLEANUP] Updated page indicator [17:46:20] [CLEANUP] Rebuilt video layout [17:46:20] [CLEANUP] ✅ All agent connections and views cleaned up [17:46:20] [CLEANUP] ======================================== [17:46:20] [SERVER] Skipping reconnect polling - app is in background [17:46:20] [PIP] Removing 0 tracks from PiP for connection 0 [17:46:20] [PIP] ✅ All tracks removed for connection 0 [17:46:20] [PIP] Removing 0 tracks from PiP for connection 0 [17:46:20] [PIP] ✅ All tracks removed for connection 0 [17:46:20] [WS] URLSession invalidated successfully [17:46:20] [CLEANUP] ======================================== [17:46:20] [CLEANUP] Cleaning up all agent connections and views [17:46:20] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:46:20] [CLEANUP] Stopped and removed 0 video connections [17:46:20] [CLEANUP] Removed 0 video views [17:46:20] [CLEANUP] Removed 0 feed scroll views [17:46:20] [CLEANUP] Removed 0 status labels [17:46:20] [CLEANUP] Reset agent query state [17:46:20] [CLEANUP] Updated page indicator [17:46:20] [CLEANUP] Rebuilt video layout [17:46:20] [CLEANUP] ✅ All agent connections and views cleaned up [17:46:20] [CLEANUP] ======================================== [17:46:20] [SERVER] Skipping reconnect polling - app is in background [17:50:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:50:16] [NETWORK] Status changed: connected [17:50:16] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:50:16] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:50:16] [LIFECYCLE] App entering foreground - restoring connections [17:50:16] [LIFECYCLE] Away > 2 minutes (235s) - will scroll to bottom [17:50:16] [UPLOAD_RETRY] No pending uploads to retry [17:50:16] [LIFECYCLE] Merged 868 reactions from local DB [17:50:16] [LIFECYCLE] WebRTC audio re-enabled [17:50:16] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:50:16] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:50:16] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:50:16] [VIEWER] Reconnecting after background - querying agents [17:50:16] [UNSENT_RETRY] Checking for unsent messages... [17:50:16] [PENDING_UPLOAD] Total pending upload messages: 0 [17:50:16] [UNSENT_RETRY] No unsent messages found [17:50:16] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:16] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:50:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:16] [CLIENT_SIG] WebSocket opened [17:50:16] HELLO → sent (cached token, role=query) [17:50:16] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:50:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:16] [WS] Query connection failed - cleaning up all agent connections and views [17:50:16] [CLEANUP] ======================================== [17:50:16] [CLEANUP] Cleaning up all agent connections and views [17:50:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:16] [CLEANUP] Stopped and removed 0 video connections [17:50:16] [CLEANUP] Removed 0 video views [17:50:16] [CLEANUP] Removed 0 feed scroll views [17:50:16] [CLEANUP] Removed 0 status labels [17:50:16] [CLEANUP] Reset agent query state [17:50:16] [CLEANUP] Updated page indicator [17:50:16] [CLEANUP] Rebuilt video layout [17:50:16] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:16] [CLEANUP] ======================================== [17:50:16] [SERVER] Starting reconnect polling (5s interval) [17:50:16] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:16] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:16] [CLEANUP] ======================================== [17:50:16] [CLEANUP] Cleaning up all agent connections and views [17:50:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:16] [CLEANUP] Stopped and removed 0 video connections [17:50:16] [CLEANUP] Removed 0 video views [17:50:16] [CLEANUP] Removed 0 feed scroll views [17:50:16] [CLEANUP] Removed 0 status labels [17:50:16] [CLEANUP] Reset agent query state [17:50:16] [CLEANUP] Updated page indicator [17:50:16] [CLEANUP] Rebuilt video layout [17:50:16] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:16] [CLEANUP] ======================================== [17:50:16] [SERVER] Starting reconnect polling (5s interval) [17:50:16] [CLIENT_SIG] Connected! clientId=1gOOGFQJkwZ5YGqY [17:50:16] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:50:16] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:50:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:50:16] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [17:50:16] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:50:16] [PUSH] handlePollEventsNotification userInfo: [:] [17:50:16] [PUSH] No message_id in userInfo [17:50:16] [PUSH] No operation_type in userInfo [17:50:16] [FAST_REFRESH] Evolution disabled - performing incremental sync [17:50:16] [FAST_REFRESH] Already have 58 messages - skipping local DB load [17:50:16] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [17:50:16] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [17:50:16] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [17:50:16] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18427 [17:50:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:50:16] [INCREMENTAL_SYNC] ✅ No new messages [17:50:16] [FAST_REFRESH] Incremental sync complete - 58 messages [17:50:17] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:50:17] [FOREGROUND] Enriched 0 messages with readBy data from server [17:50:17] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:50:17] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:50:17] [FAST_REFRESH] Enriched 58 messages with readBy data [17:50:17] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[18370, 18371, 18372, 18373, 18374] [17:50:18] [PIN_AUTH] Correct PIN [17:50:18] [SECURITY] Restored real session: ILUIWU [17:50:18] [SECURITY] Restored real session: ILUIWU [17:50:18] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:18] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:18] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:18] HELLO → sent (cached token, role=query) [17:50:18] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:18] [WS] Query connection failed - cleaning up all agent connections and views [17:50:18] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:18] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:18] [CLEANUP] ======================================== [17:50:18] [CLEANUP] Cleaning up all agent connections and views [17:50:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:18] [CLEANUP] Stopped and removed 0 video connections [17:50:18] [CLEANUP] Removed 0 video views [17:50:18] [CLEANUP] Removed 0 feed scroll views [17:50:18] [CLEANUP] Removed 0 status labels [17:50:18] [CLEANUP] Reset agent query state [17:50:18] [CLEANUP] Updated page indicator [17:50:18] [CLEANUP] Rebuilt video layout [17:50:18] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:18] [CLEANUP] ======================================== [17:50:18] [SERVER] Starting reconnect polling (5s interval) [17:50:18] [CLEANUP] ======================================== [17:50:18] [CLEANUP] Cleaning up all agent connections and views [17:50:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:18] [CLEANUP] Stopped and removed 0 video connections [17:50:18] [CLEANUP] Removed 0 video views [17:50:18] [CLEANUP] Removed 0 feed scroll views [17:50:18] [CLEANUP] Removed 0 status labels [17:50:18] [CLEANUP] Reset agent query state [17:50:18] [CLEANUP] Updated page indicator [17:50:18] [CLEANUP] Rebuilt video layout [17:50:18] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:18] [CLEANUP] ======================================== [17:50:18] [SERVER] Starting reconnect polling (5s interval) [17:50:18] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [17:50:18] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [17:50:18] [AUTH] UI update complete [17:50:18] [FAKE MODE] Exiting fake mode, restoring real session [17:50:18] [SECURITY] Restored real session: ILUIWU [17:50:18] [SECURITY] Saved real session: ILUIWU [17:50:18] [FAKE MODE] ✅ Restored real session: ILUIWU [17:50:18] [FAKE MODE] Loaded 50 messages (limited to page size) [17:50:18] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [17:50:18] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:50:18] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18378, 18379, 18380, 18381, 18382] [17:50:18] [USER] ✅ User registered successfully [17:50:18] [PUSH] User registration after token update: success [17:50:19] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:50:19] [FAKE MODE] Enriched 50 messages with readBy data [17:50:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18378, 18379, 18380, 18381, 18382] [17:50:19] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:19] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:19] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:19] HELLO → sent (cached token, role=query) [17:50:19] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:19] [WS] Query connection failed - cleaning up all agent connections and views [17:50:19] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:19] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:19] [CLEANUP] ======================================== [17:50:19] [CLEANUP] Cleaning up all agent connections and views [17:50:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:19] [CLEANUP] Stopped and removed 0 video connections [17:50:19] [CLEANUP] Removed 0 video views [17:50:19] [CLEANUP] Removed 0 feed scroll views [17:50:19] [CLEANUP] Removed 0 status labels [17:50:19] [CLEANUP] Reset agent query state [17:50:19] [CLEANUP] Updated page indicator [17:50:19] [CLEANUP] Rebuilt video layout [17:50:19] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:19] [CLEANUP] ======================================== [17:50:19] [SERVER] Starting reconnect polling (5s interval) [17:50:19] [CLEANUP] ======================================== [17:50:19] [CLEANUP] Cleaning up all agent connections and views [17:50:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:19] [CLEANUP] Stopped and removed 0 video connections [17:50:19] [CLEANUP] Removed 0 video views [17:50:19] [CLEANUP] Removed 0 feed scroll views [17:50:19] [CLEANUP] Removed 0 status labels [17:50:19] [CLEANUP] Reset agent query state [17:50:19] [CLEANUP] Updated page indicator [17:50:19] [CLEANUP] Rebuilt video layout [17:50:19] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:19] [CLEANUP] ======================================== [17:50:19] [SERVER] Starting reconnect polling (5s interval) [17:50:21] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:21] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:21] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:21] HELLO → sent (cached token, role=query) [17:50:21] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:21] [WS] Query connection failed - cleaning up all agent connections and views [17:50:21] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:21] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:21] [CLEANUP] ======================================== [17:50:21] [CLEANUP] Cleaning up all agent connections and views [17:50:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:21] [CLEANUP] Stopped and removed 0 video connections [17:50:21] [CLEANUP] Removed 0 video views [17:50:21] [CLEANUP] Removed 0 feed scroll views [17:50:21] [CLEANUP] Removed 0 status labels [17:50:21] [CLEANUP] Reset agent query state [17:50:21] [CLEANUP] Updated page indicator [17:50:21] [CLEANUP] Rebuilt video layout [17:50:21] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:21] [CLEANUP] ======================================== [17:50:21] [SERVER] Starting reconnect polling (5s interval) [17:50:21] [CLEANUP] ======================================== [17:50:21] [CLEANUP] Cleaning up all agent connections and views [17:50:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:21] [CLEANUP] Stopped and removed 0 video connections [17:50:21] [CLEANUP] Removed 0 video views [17:50:21] [CLEANUP] Removed 0 feed scroll views [17:50:21] [CLEANUP] Removed 0 status labels [17:50:21] [CLEANUP] Reset agent query state [17:50:21] [CLEANUP] Updated page indicator [17:50:21] [CLEANUP] Rebuilt video layout [17:50:21] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:21] [CLEANUP] ======================================== [17:50:21] [SERVER] Starting reconnect polling (5s interval) [17:50:23] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:23] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:23] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:23] HELLO → sent (cached token, role=query) [17:50:23] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:23] [WS] Query connection failed - cleaning up all agent connections and views [17:50:23] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:23] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:23] [CLEANUP] ======================================== [17:50:23] [CLEANUP] Cleaning up all agent connections and views [17:50:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:23] [CLEANUP] Stopped and removed 0 video connections [17:50:23] [CLEANUP] Removed 0 video views [17:50:23] [CLEANUP] Removed 0 feed scroll views [17:50:23] [CLEANUP] Removed 0 status labels [17:50:23] [CLEANUP] Reset agent query state [17:50:23] [CLEANUP] Updated page indicator [17:50:23] [CLEANUP] Rebuilt video layout [17:50:23] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:23] [CLEANUP] ======================================== [17:50:23] [SERVER] Starting reconnect polling (5s interval) [17:50:23] [CLEANUP] ======================================== [17:50:23] [CLEANUP] Cleaning up all agent connections and views [17:50:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:23] [CLEANUP] Stopped and removed 0 video connections [17:50:23] [CLEANUP] Removed 0 video views [17:50:23] [CLEANUP] Removed 0 feed scroll views [17:50:23] [CLEANUP] Removed 0 status labels [17:50:23] [CLEANUP] Reset agent query state [17:50:23] [CLEANUP] Updated page indicator [17:50:23] [CLEANUP] Rebuilt video layout [17:50:23] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:23] [CLEANUP] ======================================== [17:50:23] [SERVER] Starting reconnect polling (5s interval) [17:50:24] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:24] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:24] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:24] HELLO → sent (cached token, role=query) [17:50:24] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:24] [WS] Query connection failed - cleaning up all agent connections and views [17:50:24] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:24] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:24] [CLEANUP] ======================================== [17:50:24] [CLEANUP] Cleaning up all agent connections and views [17:50:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:24] [CLEANUP] Stopped and removed 0 video connections [17:50:24] [CLEANUP] Removed 0 video views [17:50:24] [CLEANUP] Removed 0 feed scroll views [17:50:24] [CLEANUP] Removed 0 status labels [17:50:24] [CLEANUP] Reset agent query state [17:50:24] [CLEANUP] Updated page indicator [17:50:24] [CLEANUP] Rebuilt video layout [17:50:24] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:24] [CLEANUP] ======================================== [17:50:24] [SERVER] Starting reconnect polling (5s interval) [17:50:24] [CLEANUP] ======================================== [17:50:24] [CLEANUP] Cleaning up all agent connections and views [17:50:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:24] [CLEANUP] Stopped and removed 0 video connections [17:50:24] [CLEANUP] Removed 0 video views [17:50:24] [CLEANUP] Removed 0 feed scroll views [17:50:24] [CLEANUP] Removed 0 status labels [17:50:24] [CLEANUP] Reset agent query state [17:50:24] [CLEANUP] Updated page indicator [17:50:24] [CLEANUP] Rebuilt video layout [17:50:24] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:24] [CLEANUP] ======================================== [17:50:24] [SERVER] Starting reconnect polling (5s interval) [17:50:26] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:26] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:26] HELLO → sent (cached token, role=query) [17:50:26] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:26] [WS] Query connection failed - cleaning up all agent connections and views [17:50:26] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:26] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:26] [CLEANUP] ======================================== [17:50:26] [CLEANUP] Cleaning up all agent connections and views [17:50:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:26] [CLEANUP] Stopped and removed 0 video connections [17:50:26] [CLEANUP] Removed 0 video views [17:50:26] [CLEANUP] Removed 0 feed scroll views [17:50:26] [CLEANUP] Removed 0 status labels [17:50:26] [CLEANUP] Reset agent query state [17:50:26] [CLEANUP] Updated page indicator [17:50:26] [CLEANUP] Rebuilt video layout [17:50:26] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:26] [CLEANUP] ======================================== [17:50:26] [SERVER] Starting reconnect polling (5s interval) [17:50:26] [CLEANUP] ======================================== [17:50:26] [CLEANUP] Cleaning up all agent connections and views [17:50:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:26] [CLEANUP] Stopped and removed 0 video connections [17:50:26] [CLEANUP] Removed 0 video views [17:50:26] [CLEANUP] Removed 0 feed scroll views [17:50:26] [CLEANUP] Removed 0 status labels [17:50:26] [CLEANUP] Reset agent query state [17:50:26] [CLEANUP] Updated page indicator [17:50:26] [CLEANUP] Rebuilt video layout [17:50:26] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:26] [CLEANUP] ======================================== [17:50:26] [SERVER] Starting reconnect polling (5s interval) [17:50:28] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:28] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:28] [CAMERA] Switch-over factors: [2, 8] [17:50:28] [CAMERA] Virtual device max zoom: 123.75 [17:50:28] [CAMERA] 0.5x: virtual device at zoom 1.0 (ultra-wide) [17:50:28] [CAMERA] 1x: virtual device at zoom 2.0 (wide angle, macro enabled) [17:50:28] [CAMERA] 2x: virtual device at zoom 4.0 [17:50:28] [CAMERA] 4x: virtual device at zoom 8.0 (telephoto) [17:50:28] [CAMERA] 8x: virtual device at zoom 16.0 [17:50:28] [CAMERA] Discovered 5 lenses: ["0.5x=1.0", "1x=2.0", "2x=4.0", "4x=8.0", "8x=16.0"] [17:50:28] [CAMERA] Using device: Front Camera (AVCaptureDeviceTypeBuiltInWideAngleCamera) [17:50:28] [CAMERA] updateVideoOrientation - no connection or orientation not supported [17:50:28] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [17:50:28] [CAMERA] updateVideoOrientation - no connection or orientation not supported [17:50:28] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [17:50:28] [VOLUME] Starting volume button monitoring [17:50:28] [VOLUME] Hidden MPVolumeView installed [17:50:29] [VOLUME] Audio session active, initial volume: 0.5 [17:50:29] [VOLUME] Volume observation started [17:50:29] [CAMERA] updateVideoOrientation - no connection or orientation not supported [17:50:29] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [17:50:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:29] HELLO → sent (cached token, role=query) [17:50:29] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:29] [WS] Query connection failed - cleaning up all agent connections and views [17:50:29] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:29] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:29] [CLEANUP] ======================================== [17:50:29] [CLEANUP] Cleaning up all agent connections and views [17:50:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:29] [CLEANUP] Stopped and removed 0 video connections [17:50:29] [CLEANUP] Removed 0 video views [17:50:29] [CLEANUP] Removed 0 feed scroll views [17:50:29] [CLEANUP] Removed 0 status labels [17:50:29] [CLEANUP] Reset agent query state [17:50:29] [CLEANUP] Updated page indicator [17:50:29] [CLEANUP] Rebuilt video layout [17:50:29] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:29] [CLEANUP] ======================================== [17:50:29] [SERVER] Starting reconnect polling (5s interval) [17:50:29] [CLEANUP] ======================================== [17:50:29] [CLEANUP] Cleaning up all agent connections and views [17:50:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:29] [CLEANUP] Stopped and removed 0 video connections [17:50:29] [CLEANUP] Removed 0 video views [17:50:29] [CLEANUP] Removed 0 feed scroll views [17:50:29] [CLEANUP] Removed 0 status labels [17:50:29] [CLEANUP] Reset agent query state [17:50:29] [CLEANUP] Updated page indicator [17:50:29] [CLEANUP] Rebuilt video layout [17:50:29] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:29] [CLEANUP] ======================================== [17:50:29] [SERVER] Starting reconnect polling (5s interval) [17:50:29] [CAMERA] Configuring focus for Front Camera [17:50:29] [CAMERA] Focus configured: mode=1, subjectAreaMonitoring=true [17:50:29] [CAMERA] setupPreviewLayer - previewView.bounds: (0.0, 0.0, 440.0, 796.0), previewLayer.frame: (0.0, 0.0, 440.0, 796.0) [17:50:30] [CAMERA] Switched to continuous autofocus, lens position: 0.6431372 [17:50:30] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:30] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:30] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:30] HELLO → sent (cached token, role=query) [17:50:30] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:30] [WS] Query connection failed - cleaning up all agent connections and views [17:50:30] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:30] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:30] [CLEANUP] ======================================== [17:50:30] [CLEANUP] Cleaning up all agent connections and views [17:50:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:30] [CLEANUP] Stopped and removed 0 video connections [17:50:30] [CLEANUP] Removed 0 video views [17:50:30] [CLEANUP] Removed 0 feed scroll views [17:50:30] [CLEANUP] Removed 0 status labels [17:50:30] [CLEANUP] Reset agent query state [17:50:30] [CLEANUP] Updated page indicator [17:50:30] [CLEANUP] Rebuilt video layout [17:50:30] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:30] [CLEANUP] ======================================== [17:50:30] [SERVER] Starting reconnect polling (5s interval) [17:50:30] [CLEANUP] ======================================== [17:50:30] [CLEANUP] Cleaning up all agent connections and views [17:50:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:30] [CLEANUP] Stopped and removed 0 video connections [17:50:30] [CLEANUP] Removed 0 video views [17:50:30] [CLEANUP] Removed 0 feed scroll views [17:50:30] [CLEANUP] Removed 0 status labels [17:50:30] [CLEANUP] Reset agent query state [17:50:30] [CLEANUP] Updated page indicator [17:50:30] [CLEANUP] Rebuilt video layout [17:50:30] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:30] [CLEANUP] ======================================== [17:50:30] [SERVER] Starting reconnect polling (5s interval) [17:50:30] [VOLUME] Stopping volume button monitoring [17:50:30] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [17:50:30] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [17:50:30] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [17:50:30] [GALLERY_DB] Raw datesent for msg 18380: '2026-01-21 10:30:35' [17:50:31] [GALLERY_DB] ✅ Loaded 475 media messages [17:50:31] [GALLERY] Filtered 475 -> 436 (only with local thumbnails) [17:50:31] [GALLERY] First 5 after sort (newest first): [17:50:31] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [17:50:31] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [17:50:31] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [17:50:31] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [17:50:31] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [17:50:32] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:32] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:32] HELLO → sent (cached token, role=query) [17:50:32] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:32] [WS] Query connection failed - cleaning up all agent connections and views [17:50:32] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:32] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:32] [CLEANUP] ======================================== [17:50:32] [CLEANUP] Cleaning up all agent connections and views [17:50:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:32] [CLEANUP] Stopped and removed 0 video connections [17:50:32] [CLEANUP] Removed 0 video views [17:50:32] [CLEANUP] Removed 0 feed scroll views [17:50:32] [CLEANUP] Removed 0 status labels [17:50:32] [CLEANUP] Reset agent query state [17:50:32] [CLEANUP] Updated page indicator [17:50:32] [CLEANUP] Rebuilt video layout [17:50:32] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:32] [CLEANUP] ======================================== [17:50:32] [SERVER] Starting reconnect polling (5s interval) [17:50:32] [CLEANUP] ======================================== [17:50:32] [CLEANUP] Cleaning up all agent connections and views [17:50:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:32] [CLEANUP] Stopped and removed 0 video connections [17:50:32] [CLEANUP] Removed 0 video views [17:50:32] [CLEANUP] Removed 0 feed scroll views [17:50:32] [CLEANUP] Removed 0 status labels [17:50:32] [CLEANUP] Reset agent query state [17:50:32] [CLEANUP] Updated page indicator [17:50:32] [CLEANUP] Rebuilt video layout [17:50:32] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:32] [CLEANUP] ======================================== [17:50:32] [SERVER] Starting reconnect polling (5s interval) [17:50:33] [LOG] Long press on chat icon detected! Triggering log upload... [17:50:33] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [17:50:34] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:34] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:34] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:34] HELLO → sent (cached token, role=query) [17:50:34] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:34] [WS] Query connection failed - cleaning up all agent connections and views [17:50:34] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:34] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:34] [CLEANUP] ======================================== [17:50:34] [CLEANUP] Cleaning up all agent connections and views [17:50:34] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:34] [CLEANUP] Stopped and removed 0 video connections [17:50:34] [CLEANUP] Removed 0 video views [17:50:34] [CLEANUP] Removed 0 feed scroll views [17:50:34] [CLEANUP] Removed 0 status labels [17:50:34] [CLEANUP] Reset agent query state [17:50:34] [CLEANUP] Updated page indicator [17:50:34] [CLEANUP] Rebuilt video layout [17:50:34] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:34] [CLEANUP] ======================================== [17:50:34] [SERVER] Starting reconnect polling (5s interval) [17:50:34] [CLEANUP] ======================================== [17:50:34] [CLEANUP] Cleaning up all agent connections and views [17:50:34] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:34] [CLEANUP] Stopped and removed 0 video connections [17:50:34] [CLEANUP] Removed 0 video views [17:50:34] [CLEANUP] Removed 0 feed scroll views [17:50:34] [CLEANUP] Removed 0 status labels [17:50:34] [CLEANUP] Reset agent query state [17:50:34] [CLEANUP] Updated page indicator [17:50:34] [CLEANUP] Rebuilt video layout [17:50:34] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:34] [CLEANUP] ======================================== [17:50:34] [SERVER] Starting reconnect polling (5s interval) [17:50:35] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:35] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:35] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:35] HELLO → sent (cached token, role=query) [17:50:35] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:35] [WS] Query connection failed - cleaning up all agent connections and views [17:50:35] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:35] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:35] [CLEANUP] ======================================== [17:50:35] [CLEANUP] Cleaning up all agent connections and views [17:50:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:35] [CLEANUP] Stopped and removed 0 video connections [17:50:35] [CLEANUP] Removed 0 video views [17:50:35] [CLEANUP] Removed 0 feed scroll views [17:50:35] [CLEANUP] Removed 0 status labels [17:50:35] [CLEANUP] Reset agent query state [17:50:35] [CLEANUP] Updated page indicator [17:50:35] [CLEANUP] Rebuilt video layout [17:50:35] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:35] [CLEANUP] ======================================== [17:50:35] [SERVER] Starting reconnect polling (5s interval) [17:50:35] [CLEANUP] ======================================== [17:50:35] [CLEANUP] Cleaning up all agent connections and views [17:50:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:35] [CLEANUP] Stopped and removed 0 video connections [17:50:35] [CLEANUP] Removed 0 video views [17:50:35] [CLEANUP] Removed 0 feed scroll views [17:50:35] [CLEANUP] Removed 0 status labels [17:50:35] [CLEANUP] Reset agent query state [17:50:35] [CLEANUP] Updated page indicator [17:50:35] [CLEANUP] Rebuilt video layout [17:50:35] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:35] [CLEANUP] ======================================== [17:50:35] [SERVER] Starting reconnect polling (5s interval) [17:50:37] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:37] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:37] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:37] HELLO → sent (cached token, role=query) [17:50:37] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:37] [WS] Query connection failed - cleaning up all agent connections and views [17:50:37] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:37] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:37] [CLEANUP] ======================================== [17:50:37] [CLEANUP] Cleaning up all agent connections and views [17:50:37] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:37] [CLEANUP] Stopped and removed 0 video connections [17:50:37] [CLEANUP] Removed 0 video views [17:50:37] [CLEANUP] Removed 0 feed scroll views [17:50:37] [CLEANUP] Removed 0 status labels [17:50:37] [CLEANUP] Reset agent query state [17:50:37] [CLEANUP] Updated page indicator [17:50:37] [CLEANUP] Rebuilt video layout [17:50:37] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:37] [CLEANUP] ======================================== [17:50:37] [SERVER] Starting reconnect polling (5s interval) [17:50:37] [CLEANUP] ======================================== [17:50:37] [CLEANUP] Cleaning up all agent connections and views [17:50:37] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:37] [CLEANUP] Stopped and removed 0 video connections [17:50:37] [CLEANUP] Removed 0 video views [17:50:37] [CLEANUP] Removed 0 feed scroll views [17:50:37] [CLEANUP] Removed 0 status labels [17:50:37] [CLEANUP] Reset agent query state [17:50:37] [CLEANUP] Updated page indicator [17:50:37] [CLEANUP] Rebuilt video layout [17:50:37] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:37] [CLEANUP] ======================================== [17:50:37] [SERVER] Starting reconnect polling (5s interval) [17:50:39] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:39] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:39] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:39] HELLO → sent (cached token, role=query) [17:50:39] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:39] [WS] Query connection failed - cleaning up all agent connections and views [17:50:39] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:39] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:39] [CLEANUP] ======================================== [17:50:39] [CLEANUP] Cleaning up all agent connections and views [17:50:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:39] [CLEANUP] Stopped and removed 0 video connections [17:50:39] [CLEANUP] Removed 0 video views [17:50:39] [CLEANUP] Removed 0 feed scroll views [17:50:39] [CLEANUP] Removed 0 status labels [17:50:39] [CLEANUP] Reset agent query state [17:50:39] [CLEANUP] Updated page indicator [17:50:39] [CLEANUP] Rebuilt video layout [17:50:39] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:39] [CLEANUP] ======================================== [17:50:39] [SERVER] Starting reconnect polling (5s interval) [17:50:39] [CLEANUP] ======================================== [17:50:39] [CLEANUP] Cleaning up all agent connections and views [17:50:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:39] [CLEANUP] Stopped and removed 0 video connections [17:50:39] [CLEANUP] Removed 0 video views [17:50:39] [CLEANUP] Removed 0 feed scroll views [17:50:39] [CLEANUP] Removed 0 status labels [17:50:39] [CLEANUP] Reset agent query state [17:50:39] [CLEANUP] Updated page indicator [17:50:39] [CLEANUP] Rebuilt video layout [17:50:39] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:39] [CLEANUP] ======================================== [17:50:39] [SERVER] Starting reconnect polling (5s interval) [17:50:40] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:40] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:40] [NETWORK] Status changed: connected [17:50:40] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:40] HELLO → sent (cached token, role=query) [17:50:40] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:40] [WS] Query connection failed - cleaning up all agent connections and views [17:50:40] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:40] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:40] [CLEANUP] ======================================== [17:50:40] [CLEANUP] Cleaning up all agent connections and views [17:50:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:40] [CLEANUP] Stopped and removed 0 video connections [17:50:40] [CLEANUP] Removed 0 video views [17:50:40] [CLEANUP] Removed 0 feed scroll views [17:50:40] [CLEANUP] Removed 0 status labels [17:50:40] [CLEANUP] Reset agent query state [17:50:40] [CLEANUP] Updated page indicator [17:50:40] [CLEANUP] Rebuilt video layout [17:50:40] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:40] [CLEANUP] ======================================== [17:50:40] [SERVER] Starting reconnect polling (5s interval) [17:50:40] [CLEANUP] ======================================== [17:50:40] [CLEANUP] Cleaning up all agent connections and views [17:50:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:40] [CLEANUP] Stopped and removed 0 video connections [17:50:40] [CLEANUP] Removed 0 video views [17:50:40] [CLEANUP] Removed 0 feed scroll views [17:50:40] [CLEANUP] Removed 0 status labels [17:50:40] [CLEANUP] Reset agent query state [17:50:40] [CLEANUP] Updated page indicator [17:50:40] [CLEANUP] Rebuilt video layout [17:50:40] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:40] [CLEANUP] ======================================== [17:50:40] [SERVER] Starting reconnect polling (5s interval) [17:50:42] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:42] HELLO → sent (cached token, role=query) [17:50:42] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:42] [WS] Query connection failed - cleaning up all agent connections and views [17:50:42] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:42] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:42] [CLEANUP] ======================================== [17:50:42] [CLEANUP] Cleaning up all agent connections and views [17:50:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:42] [CLEANUP] Stopped and removed 0 video connections [17:50:42] [CLEANUP] Removed 0 video views [17:50:42] [CLEANUP] Removed 0 feed scroll views [17:50:42] [CLEANUP] Removed 0 status labels [17:50:42] [CLEANUP] Reset agent query state [17:50:42] [CLEANUP] Updated page indicator [17:50:42] [CLEANUP] Rebuilt video layout [17:50:42] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:42] [CLEANUP] ======================================== [17:50:42] [SERVER] Starting reconnect polling (5s interval) [17:50:42] [CLEANUP] ======================================== [17:50:42] [CLEANUP] Cleaning up all agent connections and views [17:50:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:42] [CLEANUP] Stopped and removed 0 video connections [17:50:42] [CLEANUP] Removed 0 video views [17:50:42] [CLEANUP] Removed 0 feed scroll views [17:50:42] [CLEANUP] Removed 0 status labels [17:50:42] [CLEANUP] Reset agent query state [17:50:42] [CLEANUP] Updated page indicator [17:50:42] [CLEANUP] Rebuilt video layout [17:50:42] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:42] [CLEANUP] ======================================== [17:50:42] [SERVER] Starting reconnect polling (5s interval) [17:50:43] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:43] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:43] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:43] HELLO → sent (cached token, role=query) [17:50:43] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:43] [WS] Query connection failed - cleaning up all agent connections and views [17:50:43] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:43] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:43] [CLEANUP] ======================================== [17:50:43] [CLEANUP] Cleaning up all agent connections and views [17:50:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:43] [CLEANUP] Stopped and removed 0 video connections [17:50:43] [CLEANUP] Removed 0 video views [17:50:43] [CLEANUP] Removed 0 feed scroll views [17:50:43] [CLEANUP] Removed 0 status labels [17:50:43] [CLEANUP] Reset agent query state [17:50:43] [CLEANUP] Updated page indicator [17:50:43] [CLEANUP] Rebuilt video layout [17:50:43] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:43] [CLEANUP] ======================================== [17:50:43] [SERVER] Starting reconnect polling (5s interval) [17:50:43] [CLEANUP] ======================================== [17:50:43] [CLEANUP] Cleaning up all agent connections and views [17:50:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:43] [CLEANUP] Stopped and removed 0 video connections [17:50:43] [CLEANUP] Removed 0 video views [17:50:43] [CLEANUP] Removed 0 feed scroll views [17:50:43] [CLEANUP] Removed 0 status labels [17:50:43] [CLEANUP] Reset agent query state [17:50:43] [CLEANUP] Updated page indicator [17:50:43] [CLEANUP] Rebuilt video layout [17:50:43] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:43] [CLEANUP] ======================================== [17:50:43] [SERVER] Starting reconnect polling (5s interval) [17:50:45] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:45] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:45] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:45] HELLO → sent (cached token, role=query) [17:50:45] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:45] [WS] Query connection failed - cleaning up all agent connections and views [17:50:45] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:45] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:45] [CLEANUP] ======================================== [17:50:45] [CLEANUP] Cleaning up all agent connections and views [17:50:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:45] [CLEANUP] Stopped and removed 0 video connections [17:50:45] [CLEANUP] Removed 0 video views [17:50:45] [CLEANUP] Removed 0 feed scroll views [17:50:45] [CLEANUP] Removed 0 status labels [17:50:45] [CLEANUP] Reset agent query state [17:50:45] [CLEANUP] Updated page indicator [17:50:45] [CLEANUP] Rebuilt video layout [17:50:45] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:45] [CLEANUP] ======================================== [17:50:45] [SERVER] Starting reconnect polling (5s interval) [17:50:45] [CLEANUP] ======================================== [17:50:45] [CLEANUP] Cleaning up all agent connections and views [17:50:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:45] [CLEANUP] Stopped and removed 0 video connections [17:50:45] [CLEANUP] Removed 0 video views [17:50:45] [CLEANUP] Removed 0 feed scroll views [17:50:45] [CLEANUP] Removed 0 status labels [17:50:45] [CLEANUP] Reset agent query state [17:50:45] [CLEANUP] Updated page indicator [17:50:45] [CLEANUP] Rebuilt video layout [17:50:45] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:45] [CLEANUP] ======================================== [17:50:45] [SERVER] Starting reconnect polling (5s interval) [17:50:47] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:47] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:47] HELLO → sent (cached token, role=query) [17:50:47] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:47] [WS] Query connection failed - cleaning up all agent connections and views [17:50:47] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:47] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:47] [CLEANUP] ======================================== [17:50:47] [CLEANUP] Cleaning up all agent connections and views [17:50:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:47] [CLEANUP] Stopped and removed 0 video connections [17:50:47] [CLEANUP] Removed 0 video views [17:50:47] [CLEANUP] Removed 0 feed scroll views [17:50:47] [CLEANUP] Removed 0 status labels [17:50:47] [CLEANUP] Reset agent query state [17:50:47] [CLEANUP] Updated page indicator [17:50:47] [CLEANUP] Rebuilt video layout [17:50:47] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:47] [CLEANUP] ======================================== [17:50:47] [SERVER] Starting reconnect polling (5s interval) [17:50:47] [CLEANUP] ======================================== [17:50:47] [CLEANUP] Cleaning up all agent connections and views [17:50:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:47] [CLEANUP] Stopped and removed 0 video connections [17:50:47] [CLEANUP] Removed 0 video views [17:50:47] [CLEANUP] Removed 0 feed scroll views [17:50:47] [CLEANUP] Removed 0 status labels [17:50:47] [CLEANUP] Reset agent query state [17:50:47] [CLEANUP] Updated page indicator [17:50:47] [CLEANUP] Rebuilt video layout [17:50:47] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:47] [CLEANUP] ======================================== [17:50:47] [SERVER] Starting reconnect polling (5s interval) [17:50:48] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:48] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:48] HELLO → sent (cached token, role=query) [17:50:48] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:48] [WS] Query connection failed - cleaning up all agent connections and views [17:50:48] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:48] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:48] [CLEANUP] ======================================== [17:50:48] [CLEANUP] Cleaning up all agent connections and views [17:50:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:48] [CLEANUP] Stopped and removed 0 video connections [17:50:48] [CLEANUP] Removed 0 video views [17:50:48] [CLEANUP] Removed 0 feed scroll views [17:50:48] [CLEANUP] Removed 0 status labels [17:50:48] [CLEANUP] Reset agent query state [17:50:48] [CLEANUP] Updated page indicator [17:50:48] [CLEANUP] Rebuilt video layout [17:50:48] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:48] [CLEANUP] ======================================== [17:50:48] [SERVER] Starting reconnect polling (5s interval) [17:50:48] [CLEANUP] ======================================== [17:50:48] [CLEANUP] Cleaning up all agent connections and views [17:50:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:48] [CLEANUP] Stopped and removed 0 video connections [17:50:48] [CLEANUP] Removed 0 video views [17:50:48] [CLEANUP] Removed 0 feed scroll views [17:50:48] [CLEANUP] Removed 0 status labels [17:50:48] [CLEANUP] Reset agent query state [17:50:48] [CLEANUP] Updated page indicator [17:50:48] [CLEANUP] Rebuilt video layout [17:50:48] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:48] [CLEANUP] ======================================== [17:50:48] [SERVER] Starting reconnect polling (5s interval) [17:50:50] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:50] HELLO → sent (cached token, role=query) [17:50:50] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:50] [WS] Query connection failed - cleaning up all agent connections and views [17:50:50] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:50] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:50] [CLEANUP] ======================================== [17:50:50] [CLEANUP] Cleaning up all agent connections and views [17:50:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:50] [CLEANUP] Stopped and removed 0 video connections [17:50:50] [CLEANUP] Removed 0 video views [17:50:50] [CLEANUP] Removed 0 feed scroll views [17:50:50] [CLEANUP] Removed 0 status labels [17:50:50] [CLEANUP] Reset agent query state [17:50:50] [CLEANUP] Updated page indicator [17:50:50] [CLEANUP] Rebuilt video layout [17:50:50] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:50] [CLEANUP] ======================================== [17:50:50] [SERVER] Starting reconnect polling (5s interval) [17:50:50] [CLEANUP] ======================================== [17:50:50] [CLEANUP] Cleaning up all agent connections and views [17:50:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:50] [CLEANUP] Stopped and removed 0 video connections [17:50:50] [CLEANUP] Removed 0 video views [17:50:50] [CLEANUP] Removed 0 feed scroll views [17:50:50] [CLEANUP] Removed 0 status labels [17:50:50] [CLEANUP] Reset agent query state [17:50:50] [CLEANUP] Updated page indicator [17:50:50] [CLEANUP] Rebuilt video layout [17:50:50] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:50] [CLEANUP] ======================================== [17:50:50] [SERVER] Starting reconnect polling (5s interval) [17:50:52] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:52] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:52] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:52] HELLO → sent (cached token, role=query) [17:50:52] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:52] [WS] Query connection failed - cleaning up all agent connections and views [17:50:52] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:52] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:52] [CLEANUP] ======================================== [17:50:52] [CLEANUP] Cleaning up all agent connections and views [17:50:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:52] [CLEANUP] Stopped and removed 0 video connections [17:50:52] [CLEANUP] Removed 0 video views [17:50:52] [CLEANUP] Removed 0 feed scroll views [17:50:52] [CLEANUP] Removed 0 status labels [17:50:52] [CLEANUP] Reset agent query state [17:50:52] [CLEANUP] Updated page indicator [17:50:52] [CLEANUP] Rebuilt video layout [17:50:52] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:52] [CLEANUP] ======================================== [17:50:52] [SERVER] Starting reconnect polling (5s interval) [17:50:52] [CLEANUP] ======================================== [17:50:52] [CLEANUP] Cleaning up all agent connections and views [17:50:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:52] [CLEANUP] Stopped and removed 0 video connections [17:50:52] [CLEANUP] Removed 0 video views [17:50:52] [CLEANUP] Removed 0 feed scroll views [17:50:52] [CLEANUP] Removed 0 status labels [17:50:52] [CLEANUP] Reset agent query state [17:50:52] [CLEANUP] Updated page indicator [17:50:52] [CLEANUP] Rebuilt video layout [17:50:52] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:52] [CLEANUP] ======================================== [17:50:52] [SERVER] Starting reconnect polling (5s interval) [17:50:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:53] HELLO → sent (cached token, role=query) [17:50:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:53] [WS] Query connection failed - cleaning up all agent connections and views [17:50:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:53] [CLEANUP] ======================================== [17:50:53] [CLEANUP] Cleaning up all agent connections and views [17:50:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:53] [CLEANUP] Stopped and removed 0 video connections [17:50:53] [CLEANUP] Removed 0 video views [17:50:53] [CLEANUP] Removed 0 feed scroll views [17:50:53] [CLEANUP] Removed 0 status labels [17:50:53] [CLEANUP] Reset agent query state [17:50:53] [CLEANUP] Updated page indicator [17:50:53] [CLEANUP] Rebuilt video layout [17:50:53] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:53] [CLEANUP] ======================================== [17:50:53] [SERVER] Starting reconnect polling (5s interval) [17:50:53] [CLEANUP] ======================================== [17:50:53] [CLEANUP] Cleaning up all agent connections and views [17:50:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:53] [CLEANUP] Stopped and removed 0 video connections [17:50:53] [CLEANUP] Removed 0 video views [17:50:53] [CLEANUP] Removed 0 feed scroll views [17:50:53] [CLEANUP] Removed 0 status labels [17:50:53] [CLEANUP] Reset agent query state [17:50:53] [CLEANUP] Updated page indicator [17:50:53] [CLEANUP] Rebuilt video layout [17:50:53] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:53] [CLEANUP] ======================================== [17:50:53] [SERVER] Starting reconnect polling (5s interval) [17:50:55] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:55] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:55] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:55] HELLO → sent (cached token, role=query) [17:50:55] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:55] [WS] Query connection failed - cleaning up all agent connections and views [17:50:55] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:55] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:55] [CLEANUP] ======================================== [17:50:55] [CLEANUP] Cleaning up all agent connections and views [17:50:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:55] [CLEANUP] Stopped and removed 0 video connections [17:50:55] [CLEANUP] Removed 0 video views [17:50:55] [CLEANUP] Removed 0 feed scroll views [17:50:55] [CLEANUP] Removed 0 status labels [17:50:55] [CLEANUP] Reset agent query state [17:50:55] [CLEANUP] Updated page indicator [17:50:55] [CLEANUP] Rebuilt video layout [17:50:55] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:55] [CLEANUP] ======================================== [17:50:55] [SERVER] Starting reconnect polling (5s interval) [17:50:55] [CLEANUP] ======================================== [17:50:55] [CLEANUP] Cleaning up all agent connections and views [17:50:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:55] [CLEANUP] Stopped and removed 0 video connections [17:50:55] [CLEANUP] Removed 0 video views [17:50:55] [CLEANUP] Removed 0 feed scroll views [17:50:55] [CLEANUP] Removed 0 status labels [17:50:55] [CLEANUP] Reset agent query state [17:50:55] [CLEANUP] Updated page indicator [17:50:55] [CLEANUP] Rebuilt video layout [17:50:55] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:55] [CLEANUP] ======================================== [17:50:55] [SERVER] Starting reconnect polling (5s interval) [17:50:56] [LOG] Uploading log as '2026-01-21-17-50-do-not-listen-to-sound-when-activating-camera-in-p-Laurent.log' (615 KB) to server... [17:50:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:57] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:57] HELLO → sent (cached token, role=query) [17:50:57] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:57] [WS] Query connection failed - cleaning up all agent connections and views [17:50:57] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:57] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:57] [CLEANUP] ======================================== [17:50:57] [CLEANUP] Cleaning up all agent connections and views [17:50:57] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:57] [CLEANUP] Stopped and removed 0 video connections [17:50:57] [CLEANUP] Removed 0 video views [17:50:57] [CLEANUP] Removed 0 feed scroll views [17:50:57] [CLEANUP] Removed 0 status labels [17:50:57] [CLEANUP] Reset agent query state [17:50:57] [CLEANUP] Updated page indicator [17:50:57] [CLEANUP] Rebuilt video layout [17:50:57] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:57] [CLEANUP] ======================================== [17:50:57] [SERVER] Starting reconnect polling (5s interval) [17:50:57] [CLEANUP] ======================================== [17:50:57] [CLEANUP] Cleaning up all agent connections and views [17:50:57] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:57] [CLEANUP] Stopped and removed 0 video connections [17:50:57] [CLEANUP] Removed 0 video views [17:50:57] [CLEANUP] Removed 0 feed scroll views [17:50:57] [CLEANUP] Removed 0 status labels [17:50:57] [CLEANUP] Reset agent query state [17:50:57] [CLEANUP] Updated page indicator [17:50:57] [CLEANUP] Rebuilt video layout [17:50:57] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:57] [CLEANUP] ======================================== [17:50:57] [SERVER] Starting reconnect polling (5s interval) [17:50:57] [LOG] Upload HTTP status: 200 [17:50:57] [LOG] Upload successful: 2026-01-21-17-50-do-not-listen-to-sound-when-activating-camera-in-p-Laurent.log [17:50:57] [LOG] Skipping cross-device log request (description doesn't end with '2') [17:50:58] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:50:58] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:58] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:58] HELLO → sent (cached token, role=query) [17:50:58] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:50:58] [WS] Query connection failed - cleaning up all agent connections and views [17:50:58] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:50:58] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:50:58] [CLEANUP] ======================================== [17:50:58] [CLEANUP] Cleaning up all agent connections and views [17:50:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:58] [CLEANUP] Stopped and removed 0 video connections [17:50:58] [CLEANUP] Removed 0 video views [17:50:58] [CLEANUP] Removed 0 feed scroll views [17:50:58] [CLEANUP] Removed 0 status labels [17:50:58] [CLEANUP] Reset agent query state [17:50:58] [CLEANUP] Updated page indicator [17:50:58] [CLEANUP] Rebuilt video layout [17:50:58] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:58] [CLEANUP] ======================================== [17:50:58] [SERVER] Starting reconnect polling (5s interval) [17:50:58] [CLEANUP] ======================================== [17:50:58] [CLEANUP] Cleaning up all agent connections and views [17:50:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:50:58] [CLEANUP] Stopped and removed 0 video connections [17:50:58] [CLEANUP] Removed 0 video views [17:50:58] [CLEANUP] Removed 0 feed scroll views [17:50:58] [CLEANUP] Removed 0 status labels [17:50:58] [CLEANUP] Reset agent query state [17:50:58] [CLEANUP] Updated page indicator [17:50:58] [CLEANUP] Rebuilt video layout [17:50:58] [CLEANUP] ✅ All agent connections and views cleaned up [17:50:58] [CLEANUP] ======================================== [17:50:58] [SERVER] Starting reconnect polling (5s interval) [17:51:00] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:00] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:00] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:00] HELLO → sent (cached token, role=query) [17:51:00] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:00] [WS] Query connection failed - cleaning up all agent connections and views [17:51:00] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:00] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:00] [CLEANUP] ======================================== [17:51:00] [CLEANUP] Cleaning up all agent connections and views [17:51:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:00] [CLEANUP] Stopped and removed 0 video connections [17:51:00] [CLEANUP] Removed 0 video views [17:51:00] [CLEANUP] Removed 0 feed scroll views [17:51:00] [CLEANUP] Removed 0 status labels [17:51:00] [CLEANUP] Reset agent query state [17:51:00] [CLEANUP] Updated page indicator [17:51:00] [CLEANUP] Rebuilt video layout [17:51:00] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:00] [CLEANUP] ======================================== [17:51:00] [SERVER] Starting reconnect polling (5s interval) [17:51:00] [CLEANUP] ======================================== [17:51:00] [CLEANUP] Cleaning up all agent connections and views [17:51:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:00] [CLEANUP] Stopped and removed 0 video connections [17:51:00] [CLEANUP] Removed 0 video views [17:51:00] [CLEANUP] Removed 0 feed scroll views [17:51:00] [CLEANUP] Removed 0 status labels [17:51:00] [CLEANUP] Reset agent query state [17:51:00] [CLEANUP] Updated page indicator [17:51:00] [CLEANUP] Rebuilt video layout [17:51:00] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:00] [CLEANUP] ======================================== [17:51:00] [SERVER] Starting reconnect polling (5s interval) [17:51:00] [LIFECYCLE] App resigning active - cleared crash flag [17:51:01] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [17:51:01] [SECURITY] Saved background timestamp [17:51:01] [LIFECYCLE] App entering background - cleared crash flag [17:51:01] [CLIENT_SIG] Disconnecting [17:51:01] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:51:01] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [17:51:01] [WS] Canceling WebSocket for query connection to iosILUIWU [17:51:01] In cleanupPeer [17:51:01] In cleanupPeer [17:51:01] [LIFECYCLE] WebRTC audio disabled [17:51:01] [LIFECYCLE] AVAudioSession deactivated [17:51:01] [LIFECYCLE] All connections stopped [17:51:01] [CLIENT_SIG] WebSocket closed with code 1001 [17:51:01] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:51:01] [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:51:01] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:51:01] [SERVER] Stopped reconnect polling [17:51:01] [WS] URLSession invalidated successfully [17:51:01] Will request stop of video 0 [17:51:01] Will request stop of video 0 [17:51:01] [PIP] Removing 0 tracks from PiP for connection 0 [17:51:01] [PIP] ✅ All tracks removed for connection 0 [17:51:01] [PIP] Removing 0 tracks from PiP for connection 0 [17:51:01] [PIP] ✅ All tracks removed for connection 0 [17:51:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:03] [SECURITY] Timeout check: elapsed=2.3706912994384766s, timeout=300.0s [17:51:03] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:51:03] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:51:03] [LIFECYCLE] App entering foreground - restoring connections [17:51:03] [NETWORK] Status changed: connected [17:51:03] [UPLOAD_RETRY] No pending uploads to retry [17:51:03] [LIFECYCLE] Merged 868 reactions from local DB [17:51:03] [LIFECYCLE] WebRTC audio re-enabled [17:51:03] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:51:03] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:51:03] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:51:03] [VIEWER] Reconnecting after background - querying agents [17:51:03] [UNSENT_RETRY] Checking for unsent messages... [17:51:03] [PENDING_UPLOAD] Total pending upload messages: 0 [17:51:03] [UNSENT_RETRY] No unsent messages found [17:51:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:03] [CLIENT_SIG] WebSocket opened [17:51:03] HELLO → sent (cached token, role=query) [17:51:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:51:03] [CLIENT_SIG] Connected! clientId=0eN-Hi6dCV9LWCbH [17:51:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:03] [WS] Query connection failed - cleaning up all agent connections and views [17:51:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:03] [CLEANUP] ======================================== [17:51:03] [CLEANUP] Cleaning up all agent connections and views [17:51:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:03] [CLEANUP] Stopped and removed 0 video connections [17:51:03] [CLEANUP] Removed 0 video views [17:51:03] [CLEANUP] Removed 0 feed scroll views [17:51:03] [CLEANUP] Removed 0 status labels [17:51:03] [CLEANUP] Reset agent query state [17:51:03] [CLEANUP] Updated page indicator [17:51:03] [CLEANUP] Rebuilt video layout [17:51:03] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:03] [CLEANUP] ======================================== [17:51:03] [SERVER] Starting reconnect polling (5s interval) [17:51:03] [CLEANUP] ======================================== [17:51:03] [CLEANUP] Cleaning up all agent connections and views [17:51:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:03] [CLEANUP] Stopped and removed 0 video connections [17:51:03] [CLEANUP] Removed 0 video views [17:51:03] [CLEANUP] Removed 0 feed scroll views [17:51:03] [CLEANUP] Removed 0 status labels [17:51:03] [CLEANUP] Reset agent query state [17:51:03] [CLEANUP] Updated page indicator [17:51:03] [CLEANUP] Rebuilt video layout [17:51:03] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:03] [CLEANUP] ======================================== [17:51:03] [SERVER] Starting reconnect polling (5s interval) [17:51:03] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:51:03] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:51:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18378, 18379, 18380, 18381, 18382] [17:51:03] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [17:51:03] [SECURITY] Within timeout - cleared background flag [17:51:03] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:51:03] [PUSH] handlePollEventsNotification userInfo: [:] [17:51:03] [PUSH] No message_id in userInfo [17:51:03] [PUSH] No operation_type in userInfo [17:51:03] [FAST_REFRESH] Evolution disabled - performing incremental sync [17:51:03] [FAST_REFRESH] Already have 50 messages - skipping local DB load [17:51:03] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [17:51:03] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [17:51:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [17:51:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18427 [17:51:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18378, 18379, 18380, 18381, 18382] [17:51:04] [INCREMENTAL_SYNC] ✅ No new messages [17:51:04] [FAST_REFRESH] Incremental sync complete - 50 messages [17:51:05] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:51:05] [FOREGROUND] Enriched 0 messages with readBy data from server [17:51:05] [COMBINED_FETCH] Loaded 7193 read receipts, 873 messages with reactions [17:51:05] [FAST_REFRESH] Enriched 50 messages with readBy data [17:51:05] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [17:51:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18378, 18379, 18380, 18381, 18382] [17:51:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:05] HELLO → sent (cached token, role=query) [17:51:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:05] [WS] Query connection failed - cleaning up all agent connections and views [17:51:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:05] [CLEANUP] ======================================== [17:51:05] [CLEANUP] Cleaning up all agent connections and views [17:51:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:05] [CLEANUP] Stopped and removed 0 video connections [17:51:05] [CLEANUP] Removed 0 video views [17:51:05] [CLEANUP] Removed 0 feed scroll views [17:51:05] [CLEANUP] Removed 0 status labels [17:51:05] [CLEANUP] Reset agent query state [17:51:05] [CLEANUP] Updated page indicator [17:51:05] [CLEANUP] Rebuilt video layout [17:51:05] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:05] [CLEANUP] ======================================== [17:51:05] [SERVER] Starting reconnect polling (5s interval) [17:51:05] [CLEANUP] ======================================== [17:51:05] [CLEANUP] Cleaning up all agent connections and views [17:51:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:05] [CLEANUP] Stopped and removed 0 video connections [17:51:05] [CLEANUP] Removed 0 video views [17:51:05] [CLEANUP] Removed 0 feed scroll views [17:51:05] [CLEANUP] Removed 0 status labels [17:51:05] [CLEANUP] Reset agent query state [17:51:05] [CLEANUP] Updated page indicator [17:51:05] [CLEANUP] Rebuilt video layout [17:51:05] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:05] [CLEANUP] ======================================== [17:51:05] [SERVER] Starting reconnect polling (5s interval) [17:51:05] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:51:06] [CAMERA] Switch-over factors: [2, 8] [17:51:06] [CAMERA] Virtual device max zoom: 123.75 [17:51:06] [CAMERA] 0.5x: virtual device at zoom 1.0 (ultra-wide) [17:51:06] [CAMERA] 1x: virtual device at zoom 2.0 (wide angle, macro enabled) [17:51:06] [CAMERA] 2x: virtual device at zoom 4.0 [17:51:06] [CAMERA] 4x: virtual device at zoom 8.0 (telephoto) [17:51:06] [CAMERA] 8x: virtual device at zoom 16.0 [17:51:06] [CAMERA] Discovered 5 lenses: ["0.5x=1.0", "1x=2.0", "2x=4.0", "4x=8.0", "8x=16.0"] [17:51:06] [CAMERA] Using device: Front Camera (AVCaptureDeviceTypeBuiltInWideAngleCamera) [17:51:06] [CAMERA] updateVideoOrientation - no connection or orientation not supported [17:51:06] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [17:51:06] [CAMERA] updateVideoOrientation - no connection or orientation not supported [17:51:06] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [17:51:06] [VOLUME] Starting volume button monitoring [17:51:06] [VOLUME] Hidden MPVolumeView installed [17:51:06] [VOLUME] Audio session active, initial volume: 0.5 [17:51:06] [VOLUME] Volume observation started [17:51:06] [CAMERA] updateVideoOrientation - no connection or orientation not supported [17:51:06] [CAMERA] viewDidLayoutSubviews - previewView.bounds: (0.0, 0.0, 440.0, 796.0), camera: FRONT [17:51:06] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:06] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:07] HELLO → sent (cached token, role=query) [17:51:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:07] [WS] Query connection failed - cleaning up all agent connections and views [17:51:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:07] [CLEANUP] ======================================== [17:51:07] [CLEANUP] Cleaning up all agent connections and views [17:51:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:07] [CLEANUP] Stopped and removed 0 video connections [17:51:07] [CLEANUP] Removed 0 video views [17:51:07] [CLEANUP] Removed 0 feed scroll views [17:51:07] [CLEANUP] Removed 0 status labels [17:51:07] [CLEANUP] Reset agent query state [17:51:07] [CLEANUP] Updated page indicator [17:51:07] [CLEANUP] Rebuilt video layout [17:51:07] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:07] [CLEANUP] ======================================== [17:51:07] [SERVER] Starting reconnect polling (5s interval) [17:51:07] [CLEANUP] ======================================== [17:51:07] [CLEANUP] Cleaning up all agent connections and views [17:51:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:07] [CLEANUP] Stopped and removed 0 video connections [17:51:07] [CLEANUP] Removed 0 video views [17:51:07] [CLEANUP] Removed 0 feed scroll views [17:51:07] [CLEANUP] Removed 0 status labels [17:51:07] [CLEANUP] Reset agent query state [17:51:07] [CLEANUP] Updated page indicator [17:51:07] [CLEANUP] Rebuilt video layout [17:51:07] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:07] [CLEANUP] ======================================== [17:51:07] [SERVER] Starting reconnect polling (5s interval) [17:51:07] [CAMERA] Configuring focus for Front Camera [17:51:07] [CAMERA] Focus configured: mode=1, subjectAreaMonitoring=true [17:51:07] [CAMERA] setupPreviewLayer - previewView.bounds: (0.0, 0.0, 440.0, 796.0), previewLayer.frame: (0.0, 0.0, 440.0, 796.0) [17:51:07] [CAMERA] Switched to continuous autofocus, lens position: 0.6431372 [17:51:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:08] HELLO → sent (cached token, role=query) [17:51:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:08] [WS] Query connection failed - cleaning up all agent connections and views [17:51:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:08] [CLEANUP] ======================================== [17:51:08] [CLEANUP] Cleaning up all agent connections and views [17:51:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:08] [CLEANUP] Stopped and removed 0 video connections [17:51:08] [CLEANUP] Removed 0 video views [17:51:08] [CLEANUP] Removed 0 feed scroll views [17:51:08] [CLEANUP] Removed 0 status labels [17:51:08] [CLEANUP] Reset agent query state [17:51:08] [CLEANUP] Updated page indicator [17:51:08] [CLEANUP] Rebuilt video layout [17:51:08] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:08] [CLEANUP] ======================================== [17:51:08] [SERVER] Starting reconnect polling (5s interval) [17:51:08] [CLEANUP] ======================================== [17:51:08] [CLEANUP] Cleaning up all agent connections and views [17:51:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:08] [CLEANUP] Stopped and removed 0 video connections [17:51:08] [CLEANUP] Removed 0 video views [17:51:08] [CLEANUP] Removed 0 feed scroll views [17:51:08] [CLEANUP] Removed 0 status labels [17:51:08] [CLEANUP] Reset agent query state [17:51:08] [CLEANUP] Updated page indicator [17:51:08] [CLEANUP] Rebuilt video layout [17:51:08] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:08] [CLEANUP] ======================================== [17:51:08] [SERVER] Starting reconnect polling (5s interval) [17:51:09] [CAMERA] flipTapped - switching to: BACK [17:51:09] [CAMERA] flipTapped - device: Back Triple Camera, activeFormat: 4032x3024 [17:51:09] [CAMERA] flipTapped - sessionPreset: AVCaptureSessionPresetPhoto [17:51:10] [CAMERA] flipTapped - set initial zoom to 2.0 [17:51:10] [CAMERA] Configuring focus for Back Triple Camera [17:51:10] [CAMERA] Focus configured: mode=1, subjectAreaMonitoring=true [17:51:10] [CAMERA] updateVideoOrientation - set to: 1 (1=portrait, 3=landscapeRight, 4=landscapeLeft) [17:51:10] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:10] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:10] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:10] HELLO → sent (cached token, role=query) [17:51:10] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:10] [WS] Query connection failed - cleaning up all agent connections and views [17:51:10] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:10] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:10] [CLEANUP] ======================================== [17:51:10] [CLEANUP] Cleaning up all agent connections and views [17:51:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:10] [CLEANUP] Stopped and removed 0 video connections [17:51:10] [CLEANUP] Removed 0 video views [17:51:10] [CLEANUP] Removed 0 feed scroll views [17:51:10] [CLEANUP] Removed 0 status labels [17:51:10] [CLEANUP] Reset agent query state [17:51:10] [CLEANUP] Updated page indicator [17:51:10] [CLEANUP] Rebuilt video layout [17:51:10] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:10] [CLEANUP] ======================================== [17:51:10] [SERVER] Starting reconnect polling (5s interval) [17:51:10] [CLEANUP] ======================================== [17:51:10] [CLEANUP] Cleaning up all agent connections and views [17:51:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:10] [CLEANUP] Stopped and removed 0 video connections [17:51:10] [CLEANUP] Removed 0 video views [17:51:10] [CLEANUP] Removed 0 feed scroll views [17:51:10] [CLEANUP] Removed 0 status labels [17:51:10] [CLEANUP] Reset agent query state [17:51:10] [CLEANUP] Updated page indicator [17:51:10] [CLEANUP] Rebuilt video layout [17:51:10] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:10] [CLEANUP] ======================================== [17:51:10] [SERVER] Starting reconnect polling (5s interval) [17:51:10] [CAMERA] Switched to continuous autofocus, lens position: 0.61176467 [17:51:11] [CAMERA] flipTapped - switching to: FRONT [17:51:11] [CAMERA] flipTapped - device: Front Camera, activeFormat: 1920x1080 [17:51:11] [CAMERA] flipTapped - sessionPreset: AVCaptureSessionPresetHigh [17:51:11] [CAMERA] Configuring focus for Front Camera [17:51:11] [CAMERA] Focus configured: mode=1, subjectAreaMonitoring=true [17:51:11] [CAMERA] updateVideoOrientation - set to: 1 (1=portrait, 3=landscapeRight, 4=landscapeLeft) [17:51:11] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:11] HELLO → sent (cached token, role=query) [17:51:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:11] [WS] Query connection failed - cleaning up all agent connections and views [17:51:11] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:11] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:11] [CLEANUP] ======================================== [17:51:11] [CLEANUP] Cleaning up all agent connections and views [17:51:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:11] [CLEANUP] Stopped and removed 0 video connections [17:51:11] [CLEANUP] Removed 0 video views [17:51:11] [CLEANUP] Removed 0 feed scroll views [17:51:11] [CLEANUP] Removed 0 status labels [17:51:11] [CLEANUP] Reset agent query state [17:51:11] [CLEANUP] Updated page indicator [17:51:11] [CLEANUP] Rebuilt video layout [17:51:11] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:11] [CLEANUP] ======================================== [17:51:11] [SERVER] Starting reconnect polling (5s interval) [17:51:11] [CLEANUP] ======================================== [17:51:11] [CLEANUP] Cleaning up all agent connections and views [17:51:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:11] [CLEANUP] Stopped and removed 0 video connections [17:51:11] [CLEANUP] Removed 0 video views [17:51:11] [CLEANUP] Removed 0 feed scroll views [17:51:11] [CLEANUP] Removed 0 status labels [17:51:11] [CLEANUP] Reset agent query state [17:51:11] [CLEANUP] Updated page indicator [17:51:11] [CLEANUP] Rebuilt video layout [17:51:11] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:11] [CLEANUP] ======================================== [17:51:11] [SERVER] Starting reconnect polling (5s interval) [17:51:12] [CAMERA] Switched to continuous autofocus, lens position: 0.65098035 [17:51:13] [HAPTIC] triggerHapticFeedback called - mode: photo, isRecording: false [17:51:13] [HAPTIC] Triggering peek haptic for photo [17:51:13] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:13] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:13] HELLO → sent (cached token, role=query) [17:51:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:13] [WS] Query connection failed - cleaning up all agent connections and views [17:51:13] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:13] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:13] [CLEANUP] ======================================== [17:51:13] [CLEANUP] Cleaning up all agent connections and views [17:51:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:13] [CLEANUP] Stopped and removed 0 video connections [17:51:13] [CLEANUP] Removed 0 video views [17:51:13] [CLEANUP] Removed 0 feed scroll views [17:51:13] [CLEANUP] Removed 0 status labels [17:51:13] [CLEANUP] Reset agent query state [17:51:13] [CLEANUP] Updated page indicator [17:51:13] [CLEANUP] Rebuilt video layout [17:51:13] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:13] [CLEANUP] ======================================== [17:51:13] [SERVER] Starting reconnect polling (5s interval) [17:51:13] [CLEANUP] ======================================== [17:51:13] [CLEANUP] Cleaning up all agent connections and views [17:51:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:13] [CLEANUP] Stopped and removed 0 video connections [17:51:13] [CLEANUP] Removed 0 video views [17:51:13] [CLEANUP] Removed 0 feed scroll views [17:51:13] [CLEANUP] Removed 0 status labels [17:51:13] [CLEANUP] Reset agent query state [17:51:13] [CLEANUP] Updated page indicator [17:51:13] [CLEANUP] Rebuilt video layout [17:51:13] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:13] [CLEANUP] ======================================== [17:51:13] [SERVER] Starting reconnect polling (5s interval) [17:51:13] [VOLUME] Stopping volume button monitoring [17:51:13] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [17:51:13] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [17:51:13] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [17:51:13] [GALLERY_DB] Raw datesent for msg 18380: '2026-01-21 10:30:35' [17:51:13] [GALLERY_DB] ✅ Loaded 475 media messages [17:51:13] [GALLERY] Filtered 475 -> 436 (only with local thumbnails) [17:51:13] [GALLERY] First 5 after sort (newest first): [17:51:13] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [17:51:13] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [17:51:13] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [17:51:13] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [17:51:13] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [17:51:15] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:15] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:15] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:15] HELLO → sent (cached token, role=query) [17:51:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:15] [WS] Query connection failed - cleaning up all agent connections and views [17:51:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:15] [CLEANUP] ======================================== [17:51:15] [CLEANUP] Cleaning up all agent connections and views [17:51:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:15] [CLEANUP] Stopped and removed 0 video connections [17:51:15] [CLEANUP] Removed 0 video views [17:51:15] [CLEANUP] Removed 0 feed scroll views [17:51:15] [CLEANUP] Removed 0 status labels [17:51:15] [CLEANUP] Reset agent query state [17:51:15] [CLEANUP] Updated page indicator [17:51:15] [CLEANUP] Rebuilt video layout [17:51:15] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:15] [CLEANUP] ======================================== [17:51:15] [SERVER] Starting reconnect polling (5s interval) [17:51:15] [CLEANUP] ======================================== [17:51:15] [CLEANUP] Cleaning up all agent connections and views [17:51:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:15] [CLEANUP] Stopped and removed 0 video connections [17:51:15] [CLEANUP] Removed 0 video views [17:51:15] [CLEANUP] Removed 0 feed scroll views [17:51:15] [CLEANUP] Removed 0 status labels [17:51:15] [CLEANUP] Reset agent query state [17:51:15] [CLEANUP] Updated page indicator [17:51:15] [CLEANUP] Rebuilt video layout [17:51:15] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:15] [CLEANUP] ======================================== [17:51:15] [SERVER] Starting reconnect polling (5s interval) [17:51:16] Chosen timer = 0 [17:51:16] [MEDIA_SEND] ========== NEW UPLOAD ========== [17:51:16] [MEDIA_SEND] onSend called [17:51:16] [MEDIA_SEND] Source URL: /private/var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/tmp/52C3E3CB-5E34-4677-919E-8FD153485066.jpg [17:51:16] [MEDIA_SEND] Source file exists: true [17:51:16] [MEDIA_SEND] Original filename: 52C3E3CB-5E34-4677-919E-8FD153485066.jpg [17:51:16] [MEDIA_SEND] Random filename: f36a462089f1685a.jpg [17:51:16] [MEDIA_SEND] File extension: jpg [17:51:16] [MEDIA_SEND] Local media path: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/f36a462089f1685a.jpg [17:51:16] [MEDIA_SEND] Local thumbnail path: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/t_f36a462089f1685a.jpg [17:51:16] [MEDIA_SEND] Source file size: 491178 bytes (0.47 MB) [17:51:16] [MEDIA_SEND] Copying file (<100MB) [17:51:16] [MEDIA_SEND] File copied successfully [17:51:16] [MEDIA_SEND] Destination file exists: true [17:51:16] [MEDIA_SEND] Destination file size: 491178 bytes [17:51:16] [MEDIA_SEND] Creating thumbnail... [17:51:16] [MEDIA_SEND] Thumbnail created in 0.01s [17:51:16] [MEDIA_SEND] Thumbnail dimensions: (225.0, 400.0) [17:51:16] [MEDIA_SEND] Thumbnail exists: true [17:51:16] [MEDIA_SEND] Thumbnail file size: 23553 bytes [17:51:16] [MEDIA_SEND] Sending message to server... [17:51:16] [MEDIA_SEND] Caption: '' [17:51:16] [MEDIA_SEND] Timer: 0 [17:51:16] [MEDIA_SEND] Filename: f36a462089f1685a.jpg [17:51:16] [MEDIA_FLOW] ⚠️ Message sent BEFORE upload starts - if app dies now, file won't be uploaded! [17:51:16] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [17:51:16] [MEDIA_SEND] 📤 Creating media message: id=-6, file=f36a462089f1685a.jpg, isGiphy=false, upload_status=1 (pending) [17:51:16] [MEDIA_SEND] 💾 Inserted to DB with upload_status=1 [17:51:16] [SEND_MESSAGE] ✅ Added optimistic message id=-6 to arrays, newMsgCount=51 [17:51:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-6, 18427, 18426, 18425, 18424] [17:51:16] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:51:16] [CELL_UPLOAD] configure: msgId=-6, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=1 [17:51:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=1 → pending [17:51:16] [CELL_UPLOAD] setUploadStatus(pending, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [17:51:16] [CELL_UPLOAD] → pending: overlay.isHidden=false, alpha=1.0 [17:51:16] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:51:16] [MEDIA_SEND] sendMessage API call completed [17:51:16] [MEDIA_SEND] Starting THUMBNAIL upload: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_ENQUEUE] 📥 ========== ENQUEUE UPLOAD ========== [17:51:16] [UPLOAD_ENQUEUE] 📥 File: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_ENQUEUE] 📥 Local path: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_ENQUEUE] 📥 Session: ILUIWU [17:51:16] [UPLOAD_ENQUEUE] 📥 File exists: true, size: 0.0 MB [17:51:16] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [17:51:16] [GALLERY_DB] Raw datesent for msg -6: '2026-01-21 16:51:16' [17:51:16] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [17:51:16] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [17:51:16] [UPLOAD_QUEUE] Enqueued upload id=621 for t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_DEBUG] ========== START UPLOAD ========== [17:51:16] [UPLOAD_DEBUG] Item ID: 621 [17:51:16] [UPLOAD_DEBUG] Local URL: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_DEBUG] Random filename: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_DEBUG] Session ID: ILUIWU [17:51:16] [UPLOAD_DEBUG] API Base: https://crivello.dyndns.org:443/WebRTC/chat/ [17:51:16] [UPLOAD_DEBUG] Retry count: 0 [17:51:16] [UPLOAD_NOTIFY] 📣 Posting notification: file=t_f36a462089f1685a.jpg, status=uploading (2), progress=0.0% [17:51:16] [UPLOAD_DEBUG] File exists: true [17:51:16] [UPLOAD_DEBUG] File size: 23553 bytes (0.0 MB) [17:51:16] [UPLOAD_DEBUG] Chunked threshold: 104857600 bytes (100 MB) [17:51:16] [UPLOAD_DEBUG] → Using STANDARD upload (file <= threshold) [17:51:16] [UPLOAD_DEBUG] --- startStandardUpload --- [17:51:16] [UPLOAD_DEBUG] Upload URL: https://crivello.dyndns.org:443/WebRTC/chat/upload_media.php [17:51:16] [UPLOAD_DEBUG] File extension: jpg, MIME type: image/jpeg [17:51:16] [UPLOAD_DEBUG] Temp file URL: /private/var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/tmp/7FC3677B-D7A9-40B6-BCE6-02334E39CBAE.upload [17:51:16] [UPLOAD_DEBUG] File size: 23553 bytes, in-memory threshold: 10485760 bytes [17:51:16] [UPLOAD_DEBUG] Creating multipart body (in-memory mode)... [17:51:16] [UPLOAD_DEBUG] ✓ In-memory body written to temp file (24035 bytes) [17:51:16] [UPLOAD_DEBUG] Creating background upload task... [17:51:16] [UPLOAD_DEBUG] Task created with identifier: 1 [17:51:16] [UPLOAD_DEBUG] Added to activeUploads dictionary [17:51:16] [UPLOAD_DEBUG] Updated DB status to 'uploading' [17:51:16] [UPLOAD_LIFECYCLE] 🚀 STARTED | task=1 | file=t_f36a462089f1685a.jpg | size=0.0MB | retries=0 [17:51:16] [UPLOAD_DEBUG] ✓ Task resumed - upload should be in progress now [17:51:16] [UPLOAD_DEBUG] ========== UPLOAD STARTED ========== [17:51:16] [GALLERY_DB] ✅ Loaded 476 media messages [17:51:16] [UPLOAD_PROGRESS] t_f36a462089f1685a.jpg: 100% (0.0/0.0 MB) task=1 [17:51:16] [UPLOAD_NOTIFY] 📣 Posting notification: file=t_f36a462089f1685a.jpg, status=uploading (2), progress=100.0% [17:51:16] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18428,"session_id":"ILUIWU","message_type":1,"file_name":"f36a462089f1685a.jpg","datesent_utc":"2026-01-21 16:51:16"} [17:51:16] [CHAT] receive_message.php JSON: ["message_id": 18428, "session_id": ILUIWU, "file_name": f36a462089f1685a.jpg, "datesent_utc": 2026-01-21 16:51:16, "message_type": 1, "ok": 1] [17:51:16] [DB_UPGRADE] Upgrading message ID: -6 → 18428, preserveOriginalDate=false [17:51:16] [DB_UPGRADE] ✅ Upgraded -6 → 18428 with send_status=0, 1 row(s) affected [17:51:16] [GALLERY] Filtered 476 -> 437 (only with local thumbnails) [17:51:16] [GALLERY] First 5 after sort (newest first): [17:51:16] [GALLERY] 0: id=-6, date=2026-01-21 16:51:16, file=f36a462089f1685a.jpg [17:51:16] [GALLERY] 1: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [17:51:16] [GALLERY] 2: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [17:51:16] [GALLERY] 3: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [17:51:16] [GALLERY] 4: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [17:51:16] [UPLOAD_STATUS] 📬 Received notification: file=t_f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] ⚠️ File not found in memory arrays: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_STATUS] 💾 Updating DB: file=t_f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] ⚠️ DB update: 0 rows affected - file=t_f36a462089f1685a.jpg not found in local_messages [17:51:16] [UPLOAD_STATUS] 📬 Received notification: file=t_f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] ⚠️ File not found in memory arrays: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_STATUS] 💾 Updating DB: file=t_f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] ⚠️ DB update: 0 rows affected - file=t_f36a462089f1685a.jpg not found in local_messages [17:51:16] [CLIENT_SIG] Event received: type=0 messageId=18428 [17:51:16] [WS_EVENT] Received event: type=0, messageId=18428 [17:51:16] [WS_EVENT] 📨 New message notification (msgId=18428) - triggering incremental refresh, currentMsgCount=51 [17:51:16] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [17:51:16] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18428 [17:51:16] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -6 → 18428 [17:51:16] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -6 → 18428 [17:51:16] ReloadData 9 [17:51:16] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=1 [17:51:16] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=1 → pending [17:51:16] [CELL_UPLOAD] setUploadStatus(pending, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [17:51:16] [CELL_UPLOAD] → pending: overlay.isHidden=false, alpha=1.0 [17:51:16] [INCREMENTAL_SYNC] ✅ No new messages [17:51:16] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [17:51:16] [UPLOAD_RESPONSE] Started receiving response for task 1 [17:51:16] [UPLOAD_METRICS] Task 1 metrics: [17:51:16] [UPLOAD_METRICS] Total time: 0.29s [17:51:16] [UPLOAD_METRICS] Upload time: 0.00s [17:51:16] [UPLOAD_METRICS] Response time: 0.00s [17:51:16] [UPLOAD_METRICS] Network protocol: http/1.1 [17:51:16] [UPLOAD_METRICS] Proxy: no [17:51:16] [UPLOAD_METRICS] Reused connection: no [17:51:16] [UPLOAD_COMPLETE] ========== Task Completed ========== [17:51:16] [UPLOAD_COMPLETE] Task ID: 1 [17:51:16] [UPLOAD_COMPLETE] Task state: 3 (0=running, 1=suspended, 2=canceling, 3=completed) [17:51:16] [UPLOAD_COMPLETE] Filename: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_COMPLETE] Local path: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_COMPLETE] Retry count: 0 [17:51:16] [UPLOAD_COMPLETE] HTTP Status: 200 [17:51:16] [UPLOAD_COMPLETE] Response headers: [AnyHashable("Content-Type"): application/json, AnyHashable("Date"): Wed, 21 Jan 2026 16:51:16 GMT, AnyHashable("Content-Length"): 217, AnyHashable("Server"): Apache/2.4.65 (Debian), AnyHashable("Connection"): Keep-Alive, AnyHashable("Keep-Alive"): timeout=5, max=100] [17:51:16] [UPLOAD_COMPLETE] Response body (217 bytes): {"ok":true,"file_name":"t_f36a462089f1685a.jpg","orig_name":"t_f36a462089f1685a.jpg","size":23553,"env":{"file_uploads":"1","upload_max_filesize":"5G","post_max_size":"10G","upload_tmp_dir":"","content_length":24035}} [17:51:16] [UPLOAD_COMPLETE] ✅ Server confirmed upload OK [17:51:16] [UPLOAD_COMPLETE] Server filename: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_VERIFY] Verifying file exists: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_VERIFY] ✅ File verified: t_f36a462089f1685a.jpg (size: 23553) [17:51:16] [UPLOAD_LIFECYCLE] ✅ COMPLETED | file=t_f36a462089f1685a.jpg | id=621 | retries=0 [17:51:16] [UPLOAD_COMPLETE] ✅ ========== UPLOAD COMPLETED ========== [17:51:16] [UPLOAD_COMPLETE] ✅ File: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_COMPLETE] ✅ Queue ID: 621 [17:51:16] [UPLOAD_COMPLETE] ✅ Session: ILUIWU [17:51:16] [UPLOAD_COMPLETE] ✅ Server filename: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_COMPLETE] ✅ Posting .complete status notification [17:51:16] [UPLOAD_NOTIFY] 📣 Posting notification: file=t_f36a462089f1685a.jpg, status=complete (0), progress=0.0% [17:51:16] [UPLOAD_STATUS] 📬 Received notification: file=t_f36a462089f1685a.jpg, status=0 (complete) [17:51:16] [UPLOAD_STATUS] ⚠️ File not found in memory arrays: t_f36a462089f1685a.jpg [17:51:16] [UPLOAD_STATUS] 💾 Updating DB: file=t_f36a462089f1685a.jpg, status=0 (complete) [17:51:16] [UPLOAD_STATUS] ⚠️ DB update: 0 rows affected - file=t_f36a462089f1685a.jpg not found in local_messages [17:51:16] [UPLOAD_COMPLETE] ✅ Upload queue DB updated to 'completed' for id=621 [17:51:16] [MEDIA_SEND] Thumbnail uploaded successfully in 0.33s [17:51:16] [MEDIA_SEND] Thumbnail server filename: t_f36a462089f1685a.jpg [17:51:16] [MEDIA_SEND] Starting MAIN FILE upload: f36a462089f1685a.jpg [17:51:16] [UPLOAD_ENQUEUE] 📥 ========== ENQUEUE UPLOAD ========== [17:51:16] [UPLOAD_ENQUEUE] 📥 File: f36a462089f1685a.jpg [17:51:16] [UPLOAD_ENQUEUE] 📥 Local path: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/f36a462089f1685a.jpg [17:51:16] [UPLOAD_ENQUEUE] 📥 Session: ILUIWU [17:51:16] [UPLOAD_ENQUEUE] 📥 File exists: true, size: 0.5 MB [17:51:16] [UPLOAD_QUEUE] Enqueued upload id=622 for f36a462089f1685a.jpg [17:51:16] [UPLOAD_DEBUG] ========== START UPLOAD ========== [17:51:16] [UPLOAD_DEBUG] Item ID: 622 [17:51:16] [UPLOAD_DEBUG] Local URL: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/f36a462089f1685a.jpg [17:51:16] [UPLOAD_DEBUG] Random filename: f36a462089f1685a.jpg [17:51:16] [UPLOAD_DEBUG] Session ID: ILUIWU [17:51:16] [UPLOAD_DEBUG] API Base: https://crivello.dyndns.org:443/WebRTC/chat/ [17:51:16] [UPLOAD_DEBUG] Retry count: 0 [17:51:16] [UPLOAD_NOTIFY] 📣 Posting notification: file=f36a462089f1685a.jpg, status=uploading (2), progress=0.0% [17:51:16] [UPLOAD_STATUS] 📬 Received notification: file=f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] 📝 Updated allMessagesWithReadBy[0]: 1 → 2 [17:51:16] [UPLOAD_DEBUG] File exists: true [17:51:16] [UPLOAD_STATUS] 📝 Updated chatMessages[0]: status=2 [17:51:16] [UPLOAD_STATUS] 💾 Updating DB: file=f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_DEBUG] File size: 491178 bytes (0.5 MB) [17:51:16] [UPLOAD_DEBUG] Chunked threshold: 104857600 bytes (100 MB) [17:51:16] [UPLOAD_DEBUG] → Using STANDARD upload (file <= threshold) [17:51:16] [UPLOAD_DEBUG] --- startStandardUpload --- [17:51:16] [UPLOAD_DEBUG] Upload URL: https://crivello.dyndns.org:443/WebRTC/chat/upload_media.php [17:51:16] [UPLOAD_DEBUG] File extension: jpg, MIME type: image/jpeg [17:51:16] [UPLOAD_DEBUG] Temp file URL: /private/var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/tmp/96FDF885-A9B7-413F-B1CF-BA676A397C15.upload [17:51:16] [UPLOAD_DEBUG] File size: 491178 bytes, in-memory threshold: 10485760 bytes [17:51:16] [UPLOAD_DEBUG] Creating multipart body (in-memory mode)... [17:51:16] [UPLOAD_STATUS] ✅ DB updated: 1 row(s) affected for file=f36a462089f1685a.jpg [17:51:16] [CELL_UPLOAD] setUploadStatus(uploading, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [17:51:16] [CELL_UPLOAD] → uploading: circularProgress visible, overlay.isHidden=false [17:51:16] [UPLOAD_DEBUG] ✓ In-memory body written to temp file (491654 bytes) [17:51:16] [UPLOAD_DEBUG] Creating background upload task... [17:51:16] [UPLOAD_DEBUG] Task created with identifier: 2 [17:51:16] [UPLOAD_DEBUG] Added to activeUploads dictionary [17:51:16] [UPLOAD_DEBUG] Updated DB status to 'uploading' [17:51:16] [UPLOAD_LIFECYCLE] 🚀 STARTED | task=2 | file=f36a462089f1685a.jpg | size=0.5MB | retries=0 [17:51:16] [UPLOAD_DEBUG] ✓ Task resumed - upload should be in progress now [17:51:16] [UPLOAD_DEBUG] ========== UPLOAD STARTED ========== [17:51:16] [UPLOAD_PROGRESS] f36a462089f1685a.jpg: 100% (0.5/0.5 MB) task=2 [17:51:16] [UPLOAD_NOTIFY] 📣 Posting notification: file=f36a462089f1685a.jpg, status=uploading (2), progress=100.0% [17:51:16] [UPLOAD_STATUS] 📬 Received notification: file=f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] 📝 Updated allMessagesWithReadBy[0]: 2 → 2 [17:51:16] [UPLOAD_STATUS] 📝 Updated chatMessages[0]: status=2 [17:51:16] [UPLOAD_STATUS] 💾 Updating DB: file=f36a462089f1685a.jpg, status=2 (uploading) [17:51:16] [UPLOAD_STATUS] ✅ DB updated: 1 row(s) affected for file=f36a462089f1685a.jpg [17:51:16] [MEDIA_SEND] Main upload progress: 100% [17:51:16] [CELL_UPLOAD] setUploadStatus(uploading, progress=1.0) for file=f36a462089f1685a.jpg, overlayExists=true [17:51:16] [CELL_UPLOAD] → uploading: circularProgress visible, overlay.isHidden=false [17:51:16] [PROGRESS] Updated cell for f36a462089f1685a.jpg: 100% [17:51:16] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:16] HELLO → sent (cached token, role=query) [17:51:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:16] [WS] Query connection failed - cleaning up all agent connections and views [17:51:16] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:16] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:16] [CLEANUP] ======================================== [17:51:16] [CLEANUP] Cleaning up all agent connections and views [17:51:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:16] [CLEANUP] Stopped and removed 0 video connections [17:51:16] [CLEANUP] Removed 0 video views [17:51:16] [CLEANUP] Removed 0 feed scroll views [17:51:16] [CLEANUP] Removed 0 status labels [17:51:16] [CLEANUP] Reset agent query state [17:51:16] [CLEANUP] Updated page indicator [17:51:16] [CLEANUP] Rebuilt video layout [17:51:16] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:16] [CLEANUP] ======================================== [17:51:16] [SERVER] Starting reconnect polling (5s interval) [17:51:16] [CLEANUP] ======================================== [17:51:16] [CLEANUP] Cleaning up all agent connections and views [17:51:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:16] [CLEANUP] Stopped and removed 0 video connections [17:51:16] [CLEANUP] Removed 0 video views [17:51:16] [CLEANUP] Removed 0 feed scroll views [17:51:16] [CLEANUP] Removed 0 status labels [17:51:16] [CLEANUP] Reset agent query state [17:51:16] [CLEANUP] Updated page indicator [17:51:16] [CLEANUP] Rebuilt video layout [17:51:16] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:16] [CLEANUP] ======================================== [17:51:16] [SERVER] Starting reconnect polling (5s interval) [17:51:17] [UPLOAD_RESPONSE] Started receiving response for task 2 [17:51:17] [UPLOAD_METRICS] Task 2 metrics: [17:51:17] [UPLOAD_METRICS] Total time: 1.30s [17:51:17] [UPLOAD_METRICS] Upload time: 0.43s [17:51:17] [UPLOAD_METRICS] Response time: 0.00s [17:51:17] [UPLOAD_METRICS] Network protocol: http/1.1 [17:51:17] [UPLOAD_METRICS] Proxy: no [17:51:17] [UPLOAD_METRICS] Reused connection: yes [17:51:17] [UPLOAD_COMPLETE] ========== Task Completed ========== [17:51:17] [UPLOAD_COMPLETE] Task ID: 2 [17:51:17] [UPLOAD_COMPLETE] Task state: 3 (0=running, 1=suspended, 2=canceling, 3=completed) [17:51:17] [UPLOAD_COMPLETE] Filename: f36a462089f1685a.jpg [17:51:17] [UPLOAD_COMPLETE] Local path: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents/MediaCache/f36a462089f1685a.jpg [17:51:17] [UPLOAD_COMPLETE] Retry count: 0 [17:51:17] [UPLOAD_COMPLETE] HTTP Status: 200 [17:51:17] [UPLOAD_COMPLETE] Response headers: [AnyHashable("Keep-Alive"): timeout=5, max=99, AnyHashable("Connection"): Keep-Alive, AnyHashable("Content-Type"): application/json, AnyHashable("Content-Length"): 215, AnyHashable("Date"): Wed, 21 Jan 2026 16:51:16 GMT, AnyHashable("Server"): Apache/2.4.65 (Debian)] [17:51:17] [UPLOAD_COMPLETE] Response body (215 bytes): {"ok":true,"file_name":"f36a462089f1685a.jpg","orig_name":"f36a462089f1685a.jpg","size":491178,"env":{"file_uploads":"1","upload_max_filesize":"5G","post_max_size":"10G","upload_tmp_dir":"","content_length":491654}} [17:51:17] [UPLOAD_COMPLETE] ✅ Server confirmed upload OK [17:51:17] [UPLOAD_COMPLETE] Server filename: f36a462089f1685a.jpg [17:51:17] [UPLOAD_VERIFY] Verifying file exists: f36a462089f1685a.jpg [17:51:17] [UPLOAD_VERIFY] ✅ File verified: f36a462089f1685a.jpg (size: 491178) [17:51:17] [UPLOAD_LIFECYCLE] ✅ COMPLETED | file=f36a462089f1685a.jpg | id=622 | retries=0 [17:51:17] [UPLOAD_COMPLETE] ✅ ========== UPLOAD COMPLETED ========== [17:51:17] [UPLOAD_COMPLETE] ✅ File: f36a462089f1685a.jpg [17:51:17] [UPLOAD_COMPLETE] ✅ Queue ID: 622 [17:51:17] [UPLOAD_COMPLETE] ✅ Session: ILUIWU [17:51:17] [UPLOAD_COMPLETE] ✅ Server filename: f36a462089f1685a.jpg [17:51:17] [UPLOAD_COMPLETE] ✅ Posting .complete status notification [17:51:17] [UPLOAD_NOTIFY] 📣 Posting notification: file=f36a462089f1685a.jpg, status=complete (0), progress=0.0% [17:51:17] [UPLOAD_STATUS] 📬 Received notification: file=f36a462089f1685a.jpg, status=0 (complete) [17:51:17] [UPLOAD_STATUS] 📝 Updated allMessagesWithReadBy[0]: 2 → 0 [17:51:17] [UPLOAD_STATUS] 📝 Updated chatMessages[0]: status=0 [17:51:17] [UPLOAD_STATUS] 💾 Updating DB: file=f36a462089f1685a.jpg, status=0 (complete) [17:51:17] [UPLOAD_COMPLETE] ✅ Upload queue DB updated to 'completed' for id=622 [17:51:17] [UPLOAD_STATUS] ✅ DB updated: 1 row(s) affected for file=f36a462089f1685a.jpg [17:51:17] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [17:51:17] [MEDIA_SEND] MAIN FILE UPLOADED SUCCESSFULLY [17:51:17] [MEDIA_SEND] Server filename: f36a462089f1685a.jpg [17:51:17] [MEDIA_SEND] Main upload duration: 1.34s [17:51:17] [MEDIA_SEND] Total upload duration: 1.68s [17:51:17] [MEDIA_SEND] ========== UPLOAD COMPLETE ========== [17:51:17] [PROGRESS] Updated cell for f36a462089f1685a.jpg: 100% [17:51:18] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:18] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:18] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:18] HELLO → sent (cached token, role=query) [17:51:18] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:18] [WS] Query connection failed - cleaning up all agent connections and views [17:51:18] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:18] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:18] [CLEANUP] ======================================== [17:51:18] [CLEANUP] Cleaning up all agent connections and views [17:51:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:18] [CLEANUP] Stopped and removed 0 video connections [17:51:18] [CLEANUP] Removed 0 video views [17:51:18] [CLEANUP] Removed 0 feed scroll views [17:51:18] [CLEANUP] Removed 0 status labels [17:51:18] [CLEANUP] Reset agent query state [17:51:18] [CLEANUP] Updated page indicator [17:51:18] [CLEANUP] Rebuilt video layout [17:51:18] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:18] [CLEANUP] ======================================== [17:51:18] [SERVER] Starting reconnect polling (5s interval) [17:51:18] [CLEANUP] ======================================== [17:51:18] [CLEANUP] Cleaning up all agent connections and views [17:51:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:18] [CLEANUP] Stopped and removed 0 video connections [17:51:18] [CLEANUP] Removed 0 video views [17:51:18] [CLEANUP] Removed 0 feed scroll views [17:51:18] [CLEANUP] Removed 0 status labels [17:51:18] [CLEANUP] Reset agent query state [17:51:18] [CLEANUP] Updated page indicator [17:51:18] [CLEANUP] Rebuilt video layout [17:51:18] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:18] [CLEANUP] ======================================== [17:51:18] [SERVER] Starting reconnect polling (5s interval) [17:51:20] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:20] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:20] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:20] HELLO → sent (cached token, role=query) [17:51:20] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:20] [WS] Query connection failed - cleaning up all agent connections and views [17:51:20] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:20] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:20] [CLEANUP] ======================================== [17:51:20] [CLEANUP] Cleaning up all agent connections and views [17:51:20] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:20] [CLEANUP] Stopped and removed 0 video connections [17:51:20] [CLEANUP] Removed 0 video views [17:51:20] [CLEANUP] Removed 0 feed scroll views [17:51:20] [CLEANUP] Removed 0 status labels [17:51:20] [CLEANUP] Reset agent query state [17:51:20] [CLEANUP] Updated page indicator [17:51:20] [CLEANUP] Rebuilt video layout [17:51:20] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:20] [CLEANUP] ======================================== [17:51:20] [SERVER] Starting reconnect polling (5s interval) [17:51:20] [CLEANUP] ======================================== [17:51:20] [CLEANUP] Cleaning up all agent connections and views [17:51:20] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:20] [CLEANUP] Stopped and removed 0 video connections [17:51:20] [CLEANUP] Removed 0 video views [17:51:20] [CLEANUP] Removed 0 feed scroll views [17:51:20] [CLEANUP] Removed 0 status labels [17:51:20] [CLEANUP] Reset agent query state [17:51:20] [CLEANUP] Updated page indicator [17:51:20] [CLEANUP] Rebuilt video layout [17:51:20] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:20] [CLEANUP] ======================================== [17:51:20] [SERVER] Starting reconnect polling (5s interval) [17:51:21] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:21] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:21] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:21] HELLO → sent (cached token, role=query) [17:51:21] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:21] [WS] Query connection failed - cleaning up all agent connections and views [17:51:21] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:21] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:21] [CLEANUP] ======================================== [17:51:21] [CLEANUP] Cleaning up all agent connections and views [17:51:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:21] [CLEANUP] Stopped and removed 0 video connections [17:51:21] [CLEANUP] Removed 0 video views [17:51:21] [CLEANUP] Removed 0 feed scroll views [17:51:21] [CLEANUP] Removed 0 status labels [17:51:21] [CLEANUP] Reset agent query state [17:51:21] [CLEANUP] Updated page indicator [17:51:21] [CLEANUP] Rebuilt video layout [17:51:21] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:21] [CLEANUP] ======================================== [17:51:21] [SERVER] Starting reconnect polling (5s interval) [17:51:21] [CLEANUP] ======================================== [17:51:21] [CLEANUP] Cleaning up all agent connections and views [17:51:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:21] [CLEANUP] Stopped and removed 0 video connections [17:51:21] [CLEANUP] Removed 0 video views [17:51:21] [CLEANUP] Removed 0 feed scroll views [17:51:21] [CLEANUP] Removed 0 status labels [17:51:21] [CLEANUP] Reset agent query state [17:51:21] [CLEANUP] Updated page indicator [17:51:21] [CLEANUP] Rebuilt video layout [17:51:21] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:21] [CLEANUP] ======================================== [17:51:21] [SERVER] Starting reconnect polling (5s interval) [17:51:23] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:23] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:23] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:23] HELLO → sent (cached token, role=query) [17:51:23] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:23] [WS] Query connection failed - cleaning up all agent connections and views [17:51:23] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:23] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:23] [CLEANUP] ======================================== [17:51:23] [CLEANUP] Cleaning up all agent connections and views [17:51:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:23] [CLEANUP] Stopped and removed 0 video connections [17:51:23] [CLEANUP] Removed 0 video views [17:51:23] [CLEANUP] Removed 0 feed scroll views [17:51:23] [CLEANUP] Removed 0 status labels [17:51:23] [CLEANUP] Reset agent query state [17:51:23] [CLEANUP] Updated page indicator [17:51:23] [CLEANUP] Rebuilt video layout [17:51:23] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:23] [CLEANUP] ======================================== [17:51:23] [SERVER] Starting reconnect polling (5s interval) [17:51:23] [CLEANUP] ======================================== [17:51:23] [CLEANUP] Cleaning up all agent connections and views [17:51:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:23] [CLEANUP] Stopped and removed 0 video connections [17:51:23] [CLEANUP] Removed 0 video views [17:51:23] [CLEANUP] Removed 0 feed scroll views [17:51:23] [CLEANUP] Removed 0 status labels [17:51:23] [CLEANUP] Reset agent query state [17:51:23] [CLEANUP] Updated page indicator [17:51:23] [CLEANUP] Rebuilt video layout [17:51:23] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:23] [CLEANUP] ======================================== [17:51:23] [SERVER] Starting reconnect polling (5s interval) [17:51:25] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:25] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:25] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:25] HELLO → sent (cached token, role=query) [17:51:25] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:25] [WS] Query connection failed - cleaning up all agent connections and views [17:51:25] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:25] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:25] [CLEANUP] ======================================== [17:51:25] [CLEANUP] Cleaning up all agent connections and views [17:51:25] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:25] [CLEANUP] Stopped and removed 0 video connections [17:51:25] [CLEANUP] Removed 0 video views [17:51:25] [CLEANUP] Removed 0 feed scroll views [17:51:25] [CLEANUP] Removed 0 status labels [17:51:25] [CLEANUP] Reset agent query state [17:51:25] [CLEANUP] Updated page indicator [17:51:25] [CLEANUP] Rebuilt video layout [17:51:25] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:25] [CLEANUP] ======================================== [17:51:25] [SERVER] Starting reconnect polling (5s interval) [17:51:25] [CLEANUP] ======================================== [17:51:25] [CLEANUP] Cleaning up all agent connections and views [17:51:25] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:25] [CLEANUP] Stopped and removed 0 video connections [17:51:25] [CLEANUP] Removed 0 video views [17:51:25] [CLEANUP] Removed 0 feed scroll views [17:51:25] [CLEANUP] Removed 0 status labels [17:51:25] [CLEANUP] Reset agent query state [17:51:25] [CLEANUP] Updated page indicator [17:51:25] [CLEANUP] Rebuilt video layout [17:51:25] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:25] [CLEANUP] ======================================== [17:51:25] [SERVER] Starting reconnect polling (5s interval) [17:51:26] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:26] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:26] HELLO → sent (cached token, role=query) [17:51:26] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:26] [WS] Query connection failed - cleaning up all agent connections and views [17:51:26] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:26] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:26] [CLEANUP] ======================================== [17:51:26] [CLEANUP] Cleaning up all agent connections and views [17:51:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:26] [CLEANUP] Stopped and removed 0 video connections [17:51:26] [CLEANUP] Removed 0 video views [17:51:26] [CLEANUP] Removed 0 feed scroll views [17:51:26] [CLEANUP] Removed 0 status labels [17:51:26] [CLEANUP] Reset agent query state [17:51:26] [CLEANUP] Updated page indicator [17:51:26] [CLEANUP] Rebuilt video layout [17:51:26] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:26] [CLEANUP] ======================================== [17:51:26] [SERVER] Starting reconnect polling (5s interval) [17:51:26] [CLEANUP] ======================================== [17:51:26] [CLEANUP] Cleaning up all agent connections and views [17:51:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:26] [CLEANUP] Stopped and removed 0 video connections [17:51:26] [CLEANUP] Removed 0 video views [17:51:26] [CLEANUP] Removed 0 feed scroll views [17:51:26] [CLEANUP] Removed 0 status labels [17:51:26] [CLEANUP] Reset agent query state [17:51:26] [CLEANUP] Updated page indicator [17:51:26] [CLEANUP] Rebuilt video layout [17:51:26] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:26] [CLEANUP] ======================================== [17:51:26] [SERVER] Starting reconnect polling (5s interval) [17:51:28] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:28] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:28] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:28] HELLO → sent (cached token, role=query) [17:51:28] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:28] [WS] Query connection failed - cleaning up all agent connections and views [17:51:28] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:28] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:28] [CLEANUP] ======================================== [17:51:28] [CLEANUP] Cleaning up all agent connections and views [17:51:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:28] [CLEANUP] Stopped and removed 0 video connections [17:51:28] [CLEANUP] Removed 0 video views [17:51:28] [CLEANUP] Removed 0 feed scroll views [17:51:28] [CLEANUP] Removed 0 status labels [17:51:28] [CLEANUP] Reset agent query state [17:51:28] [CLEANUP] Updated page indicator [17:51:28] [CLEANUP] Rebuilt video layout [17:51:28] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:28] [CLEANUP] ======================================== [17:51:28] [SERVER] Starting reconnect polling (5s interval) [17:51:28] [CLEANUP] ======================================== [17:51:28] [CLEANUP] Cleaning up all agent connections and views [17:51:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:28] [CLEANUP] Stopped and removed 0 video connections [17:51:28] [CLEANUP] Removed 0 video views [17:51:28] [CLEANUP] Removed 0 feed scroll views [17:51:28] [CLEANUP] Removed 0 status labels [17:51:28] [CLEANUP] Reset agent query state [17:51:28] [CLEANUP] Updated page indicator [17:51:28] [CLEANUP] Rebuilt video layout [17:51:28] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:28] [CLEANUP] ======================================== [17:51:28] [SERVER] Starting reconnect polling (5s interval) [17:51:29] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:29] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:30] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:30] HELLO → sent (cached token, role=query) [17:51:30] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:30] [WS] Query connection failed - cleaning up all agent connections and views [17:51:30] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:30] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:30] [CLEANUP] ======================================== [17:51:30] [CLEANUP] Cleaning up all agent connections and views [17:51:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:30] [CLEANUP] Stopped and removed 0 video connections [17:51:30] [CLEANUP] Removed 0 video views [17:51:30] [CLEANUP] Removed 0 feed scroll views [17:51:30] [CLEANUP] Removed 0 status labels [17:51:30] [CLEANUP] Reset agent query state [17:51:30] [CLEANUP] Updated page indicator [17:51:30] [CLEANUP] Rebuilt video layout [17:51:30] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:30] [CLEANUP] ======================================== [17:51:30] [SERVER] Starting reconnect polling (5s interval) [17:51:30] [CLEANUP] ======================================== [17:51:30] [CLEANUP] Cleaning up all agent connections and views [17:51:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:30] [CLEANUP] Stopped and removed 0 video connections [17:51:30] [CLEANUP] Removed 0 video views [17:51:30] [CLEANUP] Removed 0 feed scroll views [17:51:30] [CLEANUP] Removed 0 status labels [17:51:30] [CLEANUP] Reset agent query state [17:51:30] [CLEANUP] Updated page indicator [17:51:30] [CLEANUP] Rebuilt video layout [17:51:30] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:30] [CLEANUP] ======================================== [17:51:30] [SERVER] Starting reconnect polling (5s interval) [17:51:31] [LIFECYCLE] App resigning active - cleared crash flag [17:51:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [17:51:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:51:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:51:31] HELLO → sent (cached token, role=query) [17:51:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:51:31] [WS] Query connection failed - cleaning up all agent connections and views [17:51:31] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [17:51:31] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [17:51:31] [CLEANUP] ======================================== [17:51:31] [CLEANUP] Cleaning up all agent connections and views [17:51:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:31] [CLEANUP] Stopped and removed 0 video connections [17:51:31] [CLEANUP] Removed 0 video views [17:51:31] [CLEANUP] Removed 0 feed scroll views [17:51:31] [CLEANUP] Removed 0 status labels [17:51:31] [CLEANUP] Reset agent query state [17:51:31] [CLEANUP] Updated page indicator [17:51:31] [CLEANUP] Rebuilt video layout [17:51:31] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:31] [CLEANUP] ======================================== [17:51:31] [SERVER] Starting reconnect polling (5s interval) [17:51:31] [CLEANUP] ======================================== [17:51:31] [CLEANUP] Cleaning up all agent connections and views [17:51:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [17:51:31] [CLEANUP] Stopped and removed 0 video connections [17:51:31] [CLEANUP] Removed 0 video views [17:51:31] [CLEANUP] Removed 0 feed scroll views [17:51:31] [CLEANUP] Removed 0 status labels [17:51:31] [CLEANUP] Reset agent query state [17:51:31] [CLEANUP] Updated page indicator [17:51:31] [CLEANUP] Rebuilt video layout [17:51:31] [CLEANUP] ✅ All agent connections and views cleaned up [17:51:31] [CLEANUP] ======================================== [17:51:31] [SERVER] Starting reconnect polling (5s interval) [17:51:32] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [17:51:32] [SECURITY] Saved background timestamp [17:51:32] [LIFECYCLE] App entering background - cleared crash flag [17:51:32] [CLIENT_SIG] Disconnecting [17:51:32] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:51:32] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [17:51:32] [WS] Canceling WebSocket for query connection to iosILUIWU [17:51:32] In cleanupPeer [17:51:32] In cleanupPeer [17:51:32] [LIFECYCLE] WebRTC audio disabled [17:51:32] [LIFECYCLE] AVAudioSession deactivated [17:51:32] [LIFECYCLE] All connections stopped [17:51:32] [CLIENT_SIG] WebSocket closed with code 1001 [17:51:32] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:51:32] [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:51:32] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:51:32] [SERVER] Stopped reconnect polling [17:51:32] [WS] URLSession invalidated successfully [17:51:32] Will request stop of video 0 [17:51:32] Will request stop of video 0 [17:51:32] [PIP] Removing 0 tracks from PiP for connection 0 [17:51:32] [PIP] ✅ All tracks removed for connection 0 [17:51:32] [PIP] Removing 0 tracks from PiP for connection 0 [17:51:32] [PIP] ✅ All tracks removed for connection 0 [18:22:08] [CRASH] No crash detected [18:22:08] [FONT] Roboto fonts loaded successfully: Roboto-Regular [18:22:08] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [18:22:08] [GIPHY] SDK not available - using REST API fallback [18:22:08] [BACKGROUND] Background fetch enabled [18:22:08] [SECURITY] Initial launch - timeout exceeded (1836.225112915039s > 300.0s) [18:22:08] [AUTH] Starting PIN authentication [18:22:08] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [18:22:08] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:22:08] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [18:22:08] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [18:22:08] [CLEANUP] No old timer messages to delete [18:22:08] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [18:22:08] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [18:22:08] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [18:22:08] [CLIENT_SIG] WebSocket opened [18:22:08] [CLIENT_SIG] HELLO sent as client for session ILUIWU [18:22:08] [USER] ✅ User registered successfully [18:22:08] [PUSH] User registration after token update: success [18:22:08] [CLIENT_SIG] Connected! clientId=DpRtqDxeOUpwShBF [18:22:08] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [18:22:08] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:22:08] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18428)... [18:22:08] [PRELOAD] No messages or parse error [18:22:09] [PIN_AUTH] Correct PIN [18:22:09] [SECURITY] Restored real session: ILUIWU [18:22:09] [SECURITY] Restored real session: ILUIWU [18:22:10] [SECURITY] Saved real session: ILUIWU [18:22:10] [SCENE] Launched directly to chat view with sessionId: ILUIWU [18:22:10] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [18:22:10] Documents Directory: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents [18:22:10] [THEME] Applying current theme [18:22:10] [CHAT] Applied day theme (mode: day) [18:22:10] [SECURITY] Saved real session: ILUIWU [18:22:10] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [18:22:10] [CLIENT_SIG] Already connected/connecting to session ILUIWU [18:22:10] [NETWORK] Network monitor started [18:22:10] [NETWORK] Status changed: connected [18:22:10] [UPLOAD_QUEUE] Found 0 pending uploads to resume [18:22:10] Did transition [18:22:10] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [18:22:10] [VIEWER] Screen lock enabled - normal idle behavior [18:22:10] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [18:22:10] [VCC] ========== VideoConnectionClass INIT ========== [18:22:10] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [18:22:10] [DATA AUDIO] ========== setupWebRTC() START ========== [18:22:10] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [18:22:10] [DATA AUDIO] Creating encoder/decoder factories... [18:22:10] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [18:22:10] [CODEC] Viewer selected encoder: AV1 (best quality) [18:22:10] [DATA AUDIO] Creating RTCPeerConnectionFactory... [18:22:10] [DATA AUDIO] ✅ Factory created [18:22:10] [DATA AUDIO] RTCAudioSession locked [18:22:10] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [18:22:10] [DATA AUDIO] RTCAudioSession unlocked [18:22:10] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [18:22:10] [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:22:10] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [18:22:10] [WS] Opening session at ws://crivello.dyndns.org:8081/ [18:22:10] [QUERY] ✅ tempQueryConnection created for iosILUIWU [18:22:10] [VIEWER_INIT] Already have 50 messages - just filtering for tab [18:22:10] [EVENT_POLL] Event polling disabled - using WebSocket events instead [18:22:10] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [18:22:10] Did transition [18:22:10] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [18:22:10] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [18:22:10] [CHUNK] Merged 868 reactions synchronously [18:22:10] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [18:22:10] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [18:22:10] [MIGRATION] No messages need sender_name backfill [18:22:10] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [18:22:10] [GALLERY_DB] Raw datesent for msg 18428: '2026-01-21 16:51:16' [18:22:10] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [18:22:10] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [18:22:10] [USER] ✅ User registered successfully [18:22:10] [USER] User registration successful [18:22:10] [GALLERY_DB] ✅ Loaded 476 media messages [18:22:10] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18428 [18:22:10] [INCREMENTAL_SYNC] ✅ No new messages [18:22:10] [GALLERY] Filtered 476 -> 437 (only with local thumbnails) [18:22:10] [GALLERY] First 5 after sort (newest first): [18:22:10] [GALLERY] 0: id=18428, date=2026-01-21 16:51:16, file=f36a462089f1685a.jpg [18:22:10] [GALLERY] 1: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [18:22:10] [GALLERY] 2: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [18:22:10] [GALLERY] 3: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [18:22:10] [GALLERY] 4: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [18:22:10] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [18:22:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:22:10] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [18:22:10] [CELL_UPLOAD] configure: msgId=18380, file=47f0a79ffd2469ec.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:22:10] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:22:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=47f0a79ffd2469ec.jpg, overlayExists=true [18:22:10] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:22:10] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:22:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:22:10] [SERVER] Starting reconnect polling (5s interval) [18:22:10] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [18:22:10] [ICONS] Offset applied: -14.6 [18:22:10] [ICONS] New left margin: 11.2, New right margin: 11.3 [18:22:10] [ICONS] Chat center: (31.2, 87.0) [18:22:10] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [18:22:10] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [18:22:10] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [18:22:10] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [18:22:10] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [18:22:10] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [18:22:10] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [18:22:10] [ICONS] Screen width: 440.0 [18:22:10] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [18:22:10] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [18:22:10] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [18:22:10] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [18:22:10] [PURGE] ⚠️ Media cache purge DISABLED for debugging [18:22:10] [UNSENT_RETRY] Checking for unsent messages... [18:22:10] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [18:22:10] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [18:22:10] [UPLOAD_RECOVERY] Session: ILUIWU [18:22:10] [UPLOAD_RECOVERY] ✅ No stuck uploads found [18:22:10] [UPLOAD_RECOVERY] Checking recent media messages on server... [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [18:22:10] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [18:22:10] [PENDING_UPLOAD] Total pending upload messages: 0 [18:22:10] [UNSENT_RETRY] No unsent messages found [18:22:10] new_session POST ok: token len=157 [18:22:10] HELLO → sent (fetched token, role=query) [18:22:10] [SIG] hello_ok received for query connection - ready to query agents [18:22:10] [SIG] get_agents request sent for sessionId=ILUIWU [18:22:10] [SIG] get_agents request sent for sessionId=iosILUIWU [18:22:10] [SERVER] Stopped reconnect polling [18:22:10] [SIG] agents_list received: [] [18:22:10] [SIG] agents_list received: [] [18:22:10] [UPLOAD_RECOVERY] ✅ All media files verified on server [18:22:10] [COMBINED_FETCH] Loaded 7194 read receipts, 873 messages with reactions [18:22:10] [READBY_ENRICH] Enriched 50 messages with readBy data [18:22:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:22:11] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:22:11] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:22:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:22:13] [MENU] dismissAnyExistingMenu called [18:22:13] [MENU] dismissAnyExistingMenu completed [18:22:13] [SCROLL_BTN] Showing button - 239pt from bottom > half 223pt [18:22:14] [MENU] dismissAnyExistingMenu called [18:22:14] [MENU] dismissAnyExistingMenu completed [18:22:14] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:22:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:22:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:23:10] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [18:23:10] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [18:23:10] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [18:23:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 18428, 18427, 18426, 18425] [18:23:10] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:23:10] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:23:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:23:10] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [18:23:10] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [18:23:11] [CLIENT_SIG] Event received: type=0 messageId=18429 [18:23:11] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18429,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 17:23:11"} [18:23:11] [WS_EVENT] Received event: type=0, messageId=18429 [18:23:11] [WS_EVENT] 📨 New message notification (msgId=18429) - triggering incremental refresh, currentMsgCount=51 [18:23:11] [CHAT] receive_message.php JSON: ["message_type": 0, "session_id": ILUIWU, "file_name": , "datesent_utc": 2026-01-21 17:23:11, "ok": 1, "message_id": 18429] [18:23:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [18:23:11] [DB_UPGRADE] Upgrading message ID: -1 → 18429, preserveOriginalDate=false [18:23:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18428 [18:23:11] [DB_UPGRADE] ✅ Upgraded -1 → 18429 with send_status=0, 1 row(s) affected [18:23:11] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 18429 [18:23:11] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 18429 [18:23:11] ReloadData 9 [18:23:11] [INCREMENTAL_SYNC] ✅ Found 1 new messages [18:23:11] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:23:11] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:23:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:23:11] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [18:23:11] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [18:23:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:23:12] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:23:12] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:23:12] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:23:13] [LOCK] Lock button tapped - locking app immediately [18:23:13] [LOCK] Received lock app notification [18:23:14] [LIFECYCLE] App resigning active - cleared crash flag [18:23:14] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [18:23:14] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [18:23:14] [LIFECYCLE] App entering background - cleared crash flag [18:23:14] [CLIENT_SIG] Disconnecting [18:23:14] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [18:23:14] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [18:23:14] [WS] Canceling WebSocket for query connection to iosILUIWU [18:23:14] In cleanupPeer [18:23:14] In cleanupPeer [18:23:14] [LIFECYCLE] WebRTC audio disabled [18:23:14] [LIFECYCLE] AVAudioSession deactivated [18:23:14] [LIFECYCLE] All connections stopped [18:23:15] [CLIENT_SIG] WebSocket closed with code 1001 [18:23:15] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [18:23:15] [SERVER] Stopped reconnect polling [18:23:15] Will request stop of video 0 [18:23:15] Will request stop of video 0 [18:23:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [18:23:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [18:23:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [18:23:15] [WS] Query connection failed - cleaning up all agent connections and views [18:23:15] [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:23:15] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [18:23:15] [PIP] Removing 0 tracks from PiP for connection 0 [18:23:15] [PIP] ✅ All tracks removed for connection 0 [18:23:15] [PIP] Removing 0 tracks from PiP for connection 0 [18:23:15] [PIP] ✅ All tracks removed for connection 0 [18:23:15] [CLEANUP] ======================================== [18:23:15] [CLEANUP] Cleaning up all agent connections and views [18:23:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [18:23:15] [CLEANUP] Stopped and removed 0 video connections [18:23:15] [CLEANUP] Removed 0 video views [18:23:15] [CLEANUP] Removed 0 feed scroll views [18:23:15] [CLEANUP] Removed 0 status labels [18:23:15] [CLEANUP] Reset agent query state [18:23:15] [CLEANUP] Updated page indicator [18:23:15] [CLEANUP] Rebuilt video layout [18:23:15] [CLEANUP] ✅ All agent connections and views cleaned up [18:23:15] [CLEANUP] ======================================== [18:23:15] [SERVER] Skipping reconnect polling - app is in background [18:23:15] [WS] URLSession invalidated successfully [18:23:15] [CLEANUP] ======================================== [18:23:15] [CLEANUP] Cleaning up all agent connections and views [18:23:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [18:23:15] [CLEANUP] Stopped and removed 0 video connections [18:23:15] [CLEANUP] Removed 0 video views [18:23:15] [CLEANUP] Removed 0 feed scroll views [18:23:15] [CLEANUP] Removed 0 status labels [18:23:15] [CLEANUP] Reset agent query state [18:23:15] [CLEANUP] Updated page indicator [18:23:15] [CLEANUP] Rebuilt video layout [18:23:15] [CLEANUP] ✅ All agent connections and views cleaned up [18:23:15] [CLEANUP] ======================================== [18:23:15] [SERVER] Skipping reconnect polling - app is in background [18:24:42] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [18:24:42] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:24:42] [LIFECYCLE] App entering foreground - restoring connections [18:24:42] [UPLOAD_RETRY] No pending uploads to retry [18:24:42] [LIFECYCLE] Merged 868 reactions from local DB [18:24:42] [LIFECYCLE] WebRTC audio re-enabled [18:24:42] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [18:24:42] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [18:24:42] [CLIENT_SIG] Already connected/connecting to session ILUIWU [18:24:42] [VIEWER] Reconnecting after background - querying agents [18:24:42] [UNSENT_RETRY] Checking for unsent messages... [18:24:42] [PENDING_UPLOAD] Total pending upload messages: 0 [18:24:42] [UNSENT_RETRY] No unsent messages found [18:24:42] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [18:24:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [18:24:42] [CLIENT_SIG] Already connected/connecting to session ILUIWU [18:24:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:24:42] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:42] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [18:24:42] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [18:24:42] [PUSH] handlePollEventsNotification userInfo: [:] [18:24:42] [PUSH] No message_id in userInfo [18:24:42] [PUSH] No operation_type in userInfo [18:24:42] [FAST_REFRESH] Evolution disabled - performing incremental sync [18:24:42] [FAST_REFRESH] Already have 51 messages - skipping local DB load [18:24:42] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [18:24:42] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [18:24:42] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [18:24:42] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18429 [18:24:42] [CLIENT_SIG] WebSocket opened [18:24:42] [CLIENT_SIG] HELLO sent as client for session ILUIWU [18:24:42] [CLIENT_SIG] Connected! clientId=5-cUPgelTSE0c9f2 [18:24:42] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [18:24:42] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:24:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [18:24:42] HELLO → sent (cached token, role=query) [18:24:42] [SIG] hello_ok received for query connection - ready to query agents [18:24:42] [SIG] get_agents request sent for sessionId=ILUIWU [18:24:42] [SIG] get_agents request sent for sessionId=iosILUIWU [18:24:42] [SERVER] Stopped reconnect polling [18:24:42] [SIG] agents_list received: [] [18:24:42] [SIG] agents_list received: [] [18:24:42] [INCREMENTAL_SYNC] ✅ No new messages [18:24:42] [FAST_REFRESH] Incremental sync complete - 51 messages [18:24:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:24:42] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:42] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [18:24:42] [FOREGROUND] Enriched 0 messages with readBy data from server [18:24:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:24:43] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:43] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:43] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [18:24:43] [FAST_REFRESH] Enriched 51 messages with readBy data [18:24:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18379, 18380, 18381, 18382, 18383] [18:24:43] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:43] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:43] [PIN_AUTH] Correct PIN [18:24:43] [SECURITY] Restored real session: ILUIWU [18:24:43] [SECURITY] Restored real session: ILUIWU [18:24:43] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [18:24:43] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [18:24:43] [AUTH] UI update complete [18:24:43] [FAKE MODE] Exiting fake mode, restoring real session [18:24:43] [SECURITY] Restored real session: ILUIWU [18:24:43] [SECURITY] Saved real session: ILUIWU [18:24:43] [FAKE MODE] ✅ Restored real session: ILUIWU [18:24:43] [FAKE MODE] Loaded 50 messages (limited to page size) [18:24:43] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [18:24:43] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [18:24:43] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:43] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [18:24:43] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:43] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:43] [USER] ✅ User registered successfully [18:24:43] [PUSH] User registration after token update: success [18:24:44] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [18:24:44] [FAKE MODE] Enriched 50 messages with readBy data [18:24:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [18:24:44] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:24:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:24:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:24:45] [MENU] dismissAnyExistingMenu called [18:24:45] [MENU] dismissAnyExistingMenu completed [18:24:45] [MENU] Created button 'Reply' at index 0 [18:24:45] [MENU] Created button 'Hide' at index 1 [18:24:45] [MENU] Created button 'Delete' at index 2 [18:24:45] [MENU] Menu added at y=595.0 [18:24:46] [MENU] dismissMenuFromSnapshot - tap on floating message [18:24:46] [MENU] dismissAnyExistingMenu called [18:24:46] [MENU] Found menu with tag 9999, removing [18:24:46] [MENU] Removing blur effect [18:24:46] [MENU] Removing floating message snapshot [18:24:46] [MENU] Recorded dismissal time for debounce [18:24:46] [MENU] dismissAnyExistingMenu completed [18:24:46] [MENU] dismissAnyExistingMenu called [18:24:46] [MENU] dismissAnyExistingMenu completed [18:24:48] [MENU] dismissAnyExistingMenu called [18:24:48] [MENU] dismissAnyExistingMenu completed [18:24:48] [MENU] Created button 'Reply' at index 0 [18:24:48] [MENU] Created button 'Edit' at index 1 [18:24:48] [MENU] Created button 'Copy' at index 2 [18:24:48] [MENU] Created button 'Delete' at index 3 [18:24:48] [MENU] Menu added at y=476.0 [18:24:50] [MENU] menuButtonTouchDown - button title: Edit, tag: 1 [18:24:50] [MENU] menuButtonTapped - button title: Edit, tag: 1 [18:24:50] [MENU] Button frame: (0.0, 44.0, 120.0, 44.0), superview: true [18:24:50] [MENU] Found action closure, dismissing menu first [18:24:50] [MENU] dismissAnyExistingMenu called [18:24:50] [MENU] Found menu with tag 9999, removing [18:24:50] [MENU] Removing blur effect [18:24:50] [MENU] Removing floating message snapshot [18:24:50] [MENU] Recorded dismissal time for debounce [18:24:50] [MENU] dismissAnyExistingMenu completed [18:24:50] [MENU] Menu dismissed, executing action [18:24:50] [MENU] Action executed [18:24:50] [SCROLL_BTN] Showing button - 365pt from bottom > half 196pt [18:24:52] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [18:24:52] [WS] Query connection error - cleaning up all agent connections and views [18:24:52] [CLEANUP] ======================================== [18:24:52] [CLEANUP] Cleaning up all agent connections and views [18:24:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [18:24:52] [CLEANUP] Stopped and removed 0 video connections [18:24:52] [CLEANUP] Removed 0 video views [18:24:52] [CLEANUP] Removed 0 feed scroll views [18:24:52] [CLEANUP] Removed 0 status labels [18:24:52] [CLEANUP] Reset agent query state [18:24:52] [CLEANUP] Updated page indicator [18:24:52] [CLEANUP] Rebuilt video layout [18:24:52] [CLEANUP] ✅ All agent connections and views cleaned up [18:24:52] [CLEANUP] ======================================== [18:24:52] [SERVER] Starting reconnect polling (5s interval) [18:24:57] [SERVER] Polling - attempting to reconnect... [18:25:02] [SERVER] Polling - attempting to reconnect... [18:25:05] ReloadData 11 - applying tab 0 filtering after message edit [18:25:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [18:25:05] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:05] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:25:07] [CLIENT_SIG] Event received: type=2 messageId=18429 [18:25:07] [CHAT] edit_message.php HTTP 200 ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18429,"event_type":2} [18:25:07] [WS_EVENT] Received event: type=2, messageId=18429 [18:25:07] [WS_EVENT] Message edited/updated: 18429 [18:25:07] [SERVER] Polling - attempting to reconnect... [18:25:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [18:25:07] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:07] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:07] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:25:08] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [18:25:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [18:25:08] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:25:09] [MENU] dismissAnyExistingMenu called [18:25:09] [MENU] dismissAnyExistingMenu completed [18:25:09] [MENU] Created button 'Reply' at index 0 [18:25:09] [MENU] Created button 'Hide' at index 1 [18:25:09] [MENU] Created button 'Delete' at index 2 [18:25:09] [MENU] Menu added at y=595.0 [18:25:11] [MENU] menuButtonTouchDown - button title: Hide, tag: 1 [18:25:11] [MENU] menuButtonTapped - button title: Hide, tag: 1 [18:25:11] [MENU] Button frame: (0.0, 44.0, 120.0, 44.0), superview: true [18:25:11] [MENU] Found action closure, dismissing menu first [18:25:11] [MENU] dismissAnyExistingMenu called [18:25:11] [MENU] Found menu with tag 9999, removing [18:25:11] [MENU] Removing blur effect [18:25:11] [MENU] Removing floating message snapshot [18:25:11] [MENU] Recorded dismissal time for debounce [18:25:11] [MENU] dismissAnyExistingMenu completed [18:25:11] [MENU] Menu dismissed, executing action [18:25:11] [HIDE] Hiding media message id=18428 [18:25:11] [MENU] dismissAnyExistingMenu called [18:25:11] [MENU] dismissAnyExistingMenu completed [18:25:11] [GUARD] ⚠️ buildChatRows received 7191 messages - truncating to 500 [18:25:11] [MENU] Action executed [18:25:11] DOWNLOADIIING 2360d0215b6a2ab2.mov [18:25:12] [SERVER] Polling - attempting to reconnect... [18:25:13] [MENU] dismissAnyExistingMenu called [18:25:13] [MENU] dismissAnyExistingMenu completed [18:25:13] [SCROLL_BTN] Showing button - 44787pt from bottom > half 379pt [18:25:14] [CELL_UPLOAD] configure: msgId=18040, file=9517bfe6ca98fe6d.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=9517bfe6ca98fe6d.heic, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18045, file=fc97f5d36a4b78a8.jpeg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=fc97f5d36a4b78a8.jpeg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18058, file=f533b6e6646d4d9c.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f533b6e6646d4d9c.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18077, file=7a7b561868bcacae.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7a7b561868bcacae.heic, overlayExists=true [18:25:14] [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 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ca2813d190665dd2.jpg, overlayExists=true [18:25:14] [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:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=22d80b8c4c39c5aa.png, overlayExists=true [18:25:14] [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:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=bdecbcd267d10e9d.heic, overlayExists=true [18:25:14] [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:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=399b07f80d99b3ff.heic, overlayExists=true [18:25: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:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2360d0215b6a2ab2.mov, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18192, file=4bbbc4757d54023e.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=4bbbc4757d54023e.png, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18249, file=19efa1fb2f984328.heic, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=19efa1fb2f984328.heic, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18267, file=e30710a6fc631f7e.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=e30710a6fc631f7e.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18296, file=e27abe61119a26c3.mov, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=e27abe61119a26c3.mov, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18312, file=077bf4aba425ab65.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=077bf4aba425ab65.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18319, file=69cc52974ecff2d4.png, senderId=EYE-SYSTEM-00000000-0000-0000-0000-000000000000, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=69cc52974ecff2d4.png, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18338, file=587faef97c05d266.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=587faef97c05d266.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18378, file=7fcf17ed21a942d6.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → not my message, setting complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7fcf17ed21a942d6.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18380, file=47f0a79ffd2469ec.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=47f0a79ffd2469ec.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18407, file=7494d317859e38fb.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7494d317859e38fb.jpg, overlayExists=true [18:25:14] [CELL_UPLOAD] configure: msgId=18409, file=f733dc0a9f704916.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f733dc0a9f704916.jpg, overlayExists=true [18:25:14] [SCROLL_BTN] Showing button - 846pt from bottom > half 379pt [18:25:14] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:25:14] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:25:14] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [18:25:14] [PUSH] Silent push received [18:25:14] [PUSH_EMBED] No embedded message_data in notification [18:25:14] [PUSH] No embedded data, pre-loading messages from server [18:25:14] [PUSH_PRELOAD] Fetching messages for instant display cache [18:25:15] [HIDE] Timer updated successfully on server (timer=-2) [18:25:15] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:25:15] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [18:25:15] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:25:15] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 4, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 18428] [18:25:15] [PUSH] Parsed message_id: 18428 [18:25:15] [PUSH] Parsed operation_type: 4 [18:25:15] [PUSH] Taking direct action: opType=4, messageId=18428 [18:25:15] [PUSH] TakeActionFromPush called: OperationType=4, MessageIds=18428 [18:25:15] [PUSH] Unknown operation type: 4 [18:25:16] [LOCK] Lock button tapped - locking app immediately [18:25:16] [LOCK] Received lock app notification [18:25:17] [LIFECYCLE] App resigning active - cleared crash flag [18:25:17] [SERVER] Polling - attempting to reconnect... [18:25:17] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [18:25:17] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [18:25:17] [LIFECYCLE] App entering background - cleared crash flag [18:25:17] [CLIENT_SIG] Disconnecting [18:25:17] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [18:25:17] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [18:25:17] [WS] Canceling WebSocket for query connection to iosILUIWU [18:25:17] In cleanupPeer [18:25:17] In cleanupPeer [18:25:17] [LIFECYCLE] WebRTC audio disabled [18:25:17] [LIFECYCLE] AVAudioSession deactivated [18:25:17] [LIFECYCLE] All connections stopped [18:25:18] [CLIENT_SIG] WebSocket closed with code 1001 [18:25:18] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [18:25:18] [SERVER] Stopped reconnect polling [18:25:18] [WS] URLSession invalidated successfully [18:25:18] Will request stop of video 0 [18:25:18] Will request stop of video 0 [18:25:18] [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:25:18] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [18:25:18] [PIP] Removing 0 tracks from PiP for connection 0 [18:25:18] [PIP] ✅ All tracks removed for connection 0 [18:25:18] [PIP] Removing 0 tracks from PiP for connection 0 [18:25:18] [PIP] ✅ All tracks removed for connection 0 [19:06:07] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:06:07] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:06:07] [LIFECYCLE] App entering foreground - restoring connections [19:06:07] [LIFECYCLE] Away > 2 minutes (2449s) - will scroll to bottom [19:06:07] [UPLOAD_RETRY] No pending uploads to retry [19:06:07] [LIFECYCLE] Merged 868 reactions from local DB [19:06:07] [LIFECYCLE] WebRTC audio re-enabled [19:06:07] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:06:07] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:06:07] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:06:07] [VIEWER] Reconnecting after background - querying agents [19:06:07] [UNSENT_RETRY] Checking for unsent messages... [19:06:07] [PENDING_UPLOAD] Total pending upload messages: 0 [19:06:07] [UNSENT_RETRY] No unsent messages found [19:06:07] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:06:07] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [19:06:07] [WS] Query connection failed - cleaning up all agent connections and views [19:06:07] [CLEANUP] ======================================== [19:06:07] [CLEANUP] Cleaning up all agent connections and views [19:06:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:06:07] [CLEANUP] Stopped and removed 0 video connections [19:06:07] [CLEANUP] Removed 0 video views [19:06:07] [CLEANUP] Removed 0 feed scroll views [19:06:07] [CLEANUP] Removed 0 status labels [19:06:07] [CLEANUP] Reset agent query state [19:06:07] [CLEANUP] Updated page indicator [19:06:07] [CLEANUP] Rebuilt video layout [19:06:07] [CLEANUP] ✅ All agent connections and views cleaned up [19:06:07] [CLEANUP] ======================================== [19:06:07] [SERVER] Starting reconnect polling (5s interval) [19:06:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:06:07] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:06:07] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:06:07] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:06:07] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:06:07] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:06:07] [PUSH] handlePollEventsNotification userInfo: [:] [19:06:07] [PUSH] No message_id in userInfo [19:06:07] [PUSH] No operation_type in userInfo [19:06:07] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:06:07] [FAST_REFRESH] Already have 50 messages - skipping local DB load [19:06:07] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:06:07] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:06:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:06:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18429 [19:06:07] [CLIENT_SIG] WebSocket opened [19:06:07] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:06:07] [CLIENT_SIG] Connected! clientId=gKQpxrE3ZSN2_b79 [19:06:07] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:06:07] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:06:07] [INCREMENTAL_SYNC] ✅ No new messages [19:06:07] [FAST_REFRESH] Incremental sync complete - 50 messages [19:06:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:06:07] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:06:07] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:06:07] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:06:07] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [19:06:07] [FOREGROUND] Enriched 0 messages with readBy data from server [19:06:07] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [19:06:07] [FAST_REFRESH] Enriched 50 messages with readBy data [19:06:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:06:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:06:08] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:06:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:06:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true[19:06:08] [LOG] Pruned 396 entries older than 3 hours [19:06:08] [SECURITY] Restored real session: ILUIWU [19:06:08] [SECURITY] Restored real session: ILUIWU [19:06:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:06:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:06:08] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [19:06:08] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [19:06:08] [AUTH] UI update complete [19:06:08] [FAKE MODE] Exiting fake mode, restoring real session [19:06:08] [SECURITY] Restored real session: ILUIWU [19:06:08] [SECURITY] Saved real session: ILUIWU [19:06:08] [FAKE MODE] ✅ Restored real session: ILUIWU [19:06:08] [FAKE MODE] Loaded 50 messages (limited to page size) [19:06:08] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:06:08] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:06:08] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:06:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:06:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:06:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:06:08] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:06:08] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:06:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:06:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:06:08] HELLO → sent (cached token, role=query) [19:06:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:06:08] [WS] Query connection failed - cleaning up all agent connections and views [19:06:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [19:06:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [19:06:08] [CLEANUP] ======================================== [19:06:08] [CLEANUP] Cleaning up all agent connections and views [19:06:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:06:08] [CLEANUP] Stopped and removed 0 video connections [19:06:08] [CLEANUP] Removed 0 video views [19:06:08] [CLEANUP] Removed 0 feed scroll views [19:06:08] [CLEANUP] Removed 0 status labels [19:06:08] [CLEANUP] Reset agent query state [19:06:08] [CLEANUP] Updated page indicator [19:06:08] [CLEANUP] Rebuilt video layout [19:06:08] [CLEANUP] ✅ All agent connections and views cleaned up [19:06:08] [CLEANUP] ======================================== [19:06:08] [SERVER] Starting reconnect polling (5s interval) [19:06:08] [CLEANUP] ======================================== [19:06:08] [CLEANUP] Cleaning up all agent connections and views [19:06:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:06:08] [CLEANUP] Stopped and removed 0 video connections [19:06:08] [CLEANUP] Removed 0 video views [19:06:08] [CLEANUP] Removed 0 feed scroll views [19:06:08] [CLEANUP] Removed 0 status labels [19:06:08] [CLEANUP] Reset agent query state [19:06:08] [CLEANUP] Updated page indicator [19:06:08] [CLEANUP] Rebuilt video layout [19:06:08] [CLEANUP] ✅ All agent connections and views cleaned up [19:06:08] [CLEANUP] ======================================== [19:06:08] [SERVER] Starting reconnect polling (5s interval) [19:06:09] [USER] ✅ User registered successfully [19:06:09] [PUSH] User registration after token update: success [19:06:09] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [19:06:09] [FAKE MODE] Enriched 50 messages with readBy data [19:06:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:06:09] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:06:09] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:06:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:06:10] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:06:10] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:06:10] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:06:10] HELLO → sent (cached token, role=query) [19:06:10] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:06:10] [WS] Query connection failed - cleaning up all agent connections and views [19:06:10] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [19:06:10] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [19:06:10] [CLEANUP] ======================================== [19:06:10] [CLEANUP] Cleaning up all agent connections and views [19:06:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:06:10] [CLEANUP] Stopped and removed 0 video connections [19:06:10] [CLEANUP] Removed 0 video views [19:06:10] [CLEANUP] Removed 0 feed scroll views [19:06:10] [CLEANUP] Removed 0 status labels [19:06:10] [CLEANUP] Reset agent query state [19:06:10] [CLEANUP] Updated page indicator [19:06:10] [CLEANUP] Rebuilt video layout [19:06:10] [CLEANUP] ✅ All agent connections and views cleaned up [19:06:10] [CLEANUP] ======================================== [19:06:10] [SERVER] Starting reconnect polling (5s interval) [19:06:10] [CLEANUP] ======================================== [19:06:10] [CLEANUP] Cleaning up all agent connections and views [19:06:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:06:10] [CLEANUP] Stopped and removed 0 video connections [19:06:10] [CLEANUP] Removed 0 video views [19:06:10] [CLEANUP] Removed 0 feed scroll views [19:06:10] [CLEANUP] Removed 0 status labels [19:06:10] [CLEANUP] Reset agent query state [19:06:10] [CLEANUP] Updated page indicator [19:06:10] [CLEANUP] Rebuilt video layout [19:06:10] [CLEANUP] ✅ All agent connections and views cleaned up [19:06:10] [CLEANUP] ======================================== [19:06:10] [SERVER] Starting reconnect polling (5s interval) [19:06:11] [LOCK] Lock button tapped - locking app immediately [19:06:11] [LOCK] Received lock app notification [19:06:12] [LIFECYCLE] App resigning active - cleared crash flag [19:06:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:06:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:06:12] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:06:12] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:06:12] [LIFECYCLE] App entering background - cleared crash flag [19:06:12] [CLIENT_SIG] Disconnecting [19:06:12] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:06:12] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:06:12] [WS] Canceling WebSocket for query connection to iosILUIWU [19:06:12] In cleanupPeer [19:06:12] In cleanupPeer [19:06:12] [LIFECYCLE] WebRTC audio disabled [19:06:12] [LIFECYCLE] AVAudioSession deactivated [19:06:12] [LIFECYCLE] All connections stopped [19:06:12] [CLIENT_SIG] WebSocket closed with code 1001 [19:06:12] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:06:12] [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/} [19:06:12] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:06:12] [SERVER] Stopped reconnect polling [19:06:12] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [19:06:12] [WS] Query connection error - cleaning up all agent connections and views [19:06:12] Will request stop of video 0 [19:06:12] [WS] Connection failed: cancelled [19:06:12] [WS] Query connection failed - cleaning up all agent connections and views [19:06:12] Will request stop of video 0 [19:06:12] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [19:06:12] [APP_TERMINATE] ⚠️ 2 pending uploads in DB queue: [19:06:12] [APP_TERMINATE] - id=335, file=t_21b86ebc5e802df4.jpg, status=uploading, retries=0, size=0.0MB [19:06:12] [APP_TERMINATE] - id=474, file=1f0e8529cd56643f.mov, status=uploading, retries=0, size=0.0MB [19:09:58] [CRASH] No crash detected [19:09:58] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:09:58] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:09:58] [GIPHY] SDK not available - using REST API fallback [19:09:58] [BACKGROUND] Background fetch enabled [19:09:58] [AUTH] Starting PIN authentication [19:09:58] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:09:58] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:09:58] [CLEANUP] No old timer messages to delete [19:09:58] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:09:59] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:09:59] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:09:59] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:09:59] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:09:59] [USER] ✅ User registered successfully [19:09:59] [PUSH] User registration after token update: success [19:09:59] [CLIENT_SIG] WebSocket opened [19:09:59] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:09:59] [CLIENT_SIG] Connected! clientId=CkI5Syi50YBwikPW [19:09:59] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:09:59] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:09:59] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18429)... [19:09:59] [PRELOAD] No messages or parse error [19:10:00] [PIN_AUTH] Correct PIN [19:10:00] [SECURITY] Restored real session: ILUIWU [19:10:00] [SECURITY] Restored real session: ILUIWU [19:10:00] [SECURITY] Saved real session: ILUIWU [19:10:00] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:10:00] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:10:00] Documents Directory: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents [19:10:00] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:10:00] [THEME] Applying current theme [19:10:00] [CHAT] Applied day theme (mode: day) [19:10:00] [SECURITY] Saved real session: ILUIWU [19:10:00] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:10:00] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:10:00] [NETWORK] Network monitor started [19:10:00] [NETWORK] Status changed: connected [19:10:00] Did transition [19:10:00] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:10:00] [VIEWER] Screen lock enabled - normal idle behavior [19:10:00] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:10:00] [VCC] ========== VideoConnectionClass INIT ========== [19:10:00] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:10:00] [DATA AUDIO] ========== setupWebRTC() START ========== [19:10:00] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:10:00] [DATA AUDIO] Creating encoder/decoder factories... [19:10:00] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:10:00] [CODEC] Viewer selected encoder: AV1 (best quality) [19:10:00] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:10:00] [DATA AUDIO] ✅ Factory created [19:10:00] [DATA AUDIO] RTCAudioSession locked [19:10:00] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:10:00] [DATA AUDIO] RTCAudioSession unlocked [19:10:00] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:10:00] [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"] [19:10:00] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:10:00] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:10:00] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:10:00] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:10:00] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:10:00] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:10:00] Did transition [19:10:00] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:10:00] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:10:00] [CHUNK] Merged 868 reactions synchronously [19:10:00] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:10:00] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:10:00] [MIGRATION] No messages need sender_name backfill [19:10:00] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:10:00] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:10:00] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:10:00] [GALLERY_DB] Raw datesent for msg 18380: '2026-01-21 10:30:35' [19:10:00] [USER] ✅ User registered successfully [19:10:00] [USER] User registration successful [19:10:00] [GALLERY_DB] ✅ Loaded 475 media messages [19:10:00] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18429 [19:10:00] [INCREMENTAL_SYNC] ✅ No new messages [19:10:00] [GALLERY] Filtered 475 -> 436 (only with local thumbnails) [19:10:00] [GALLERY] First 5 after sort (newest first): [19:10:00] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:10:00] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:10:00] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:10:00] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:10:00] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:10:00] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:10:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:10:00] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:10:00] [CELL_UPLOAD] configure: msgId=18380, file=47f0a79ffd2469ec.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:10:00] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:10:00] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=47f0a79ffd2469ec.jpg, overlayExists=true [19:10:00] [SERVER] Starting reconnect polling (5s interval) [19:10:00] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:10:00] [ICONS] Offset applied: -14.6 [19:10:00] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:10:00] [ICONS] Chat center: (31.2, 87.0) [19:10:00] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:10:00] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:10:00] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:10:00] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:10:00] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:10:00] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:10:00] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:10:00] [ICONS] Screen width: 440.0 [19:10:00] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:10:00] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:10:00] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:10:00] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:10:00] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:10:00] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:10:00] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:10:00] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:10:00] [UNSENT_RETRY] Checking for unsent messages... [19:10:00] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:10:00] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:10:00] [UPLOAD_RECOVERY] Session: ILUIWU [19:10:00] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:10:00] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:10:00] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:10:00] [PENDING_UPLOAD] Total pending upload messages: 0 [19:10:00] [UNSENT_RETRY] No unsent messages found [19:10:00] new_session POST ok: token len=157 [19:10:00] HELLO → sent (fetched token, role=query) [19:10:00] [SIG] hello_ok received for query connection - ready to query agents [19:10:00] [SIG] get_agents request sent for sessionId=ILUIWU [19:10:00] [SIG] get_agents request sent for sessionId=iosILUIWU [19:10:00] [SERVER] Stopped reconnect polling [19:10:00] [SIG] agents_list received: [] [19:10:00] [SIG] agents_list received: [] [19:10:01] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:10:01] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [19:10:01] [READBY_ENRICH] Enriched 50 messages with readBy data [19:10:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:10:01] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:10:01] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:10:01] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:10:14] [LOCK] Lock button tapped - locking app immediately [19:10:14] [LOCK] Received lock app notification [19:10:15] [LIFECYCLE] App resigning active - cleared crash flag [19:10:16] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:10:16] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:10:16] [LIFECYCLE] App entering background - cleared crash flag [19:10:16] [CLIENT_SIG] Disconnecting [19:10:16] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:10:16] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:10:16] [WS] Canceling WebSocket for query connection to iosILUIWU [19:10:16] In cleanupPeer [19:10:16] In cleanupPeer [19:10:16] [LIFECYCLE] WebRTC audio disabled [19:10:16] [LIFECYCLE] AVAudioSession deactivated [19:10:16] [LIFECYCLE] All connections stopped [19:10:16] [CLIENT_SIG] WebSocket closed with code 1001 [19:10:16] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:10: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/} [19:10:16] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:10:16] [SERVER] Stopped reconnect polling [19:10:16] Will request stop of video 0 [19:10:16] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [19:10:16] [WS] Query connection error - cleaning up all agent connections and views [19:10:16] Will request stop of video 0 [19:10:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:10:16] [WS] Query connection failed - cleaning up all agent connections and views [19:10:16] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [19:10:16] [APP_TERMINATE] ⚠️ 2 pending uploads in DB queue: [19:10:16] [APP_TERMINATE] - id=335, file=t_21b86ebc5e802df4.jpg, status=uploading, retries=0, size=0.0MB [19:10:16] [APP_TERMINATE] - id=474, file=1f0e8529cd56643f.mov, status=uploading, retries=0, size=0.0MB [19:10:16] [LIFECYCLE] ViewController deallocated [19:16:44] [CRASH] No crash detected [19:16:44] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:16:44] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:16:44] [GIPHY] SDK not available - using REST API fallback [19:16:44] [BACKGROUND] Background fetch enabled [19:16:44] [CLEANUP] No old timer messages to delete [19:16:44] [AUTH] Starting PIN authentication [19:16:44] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:16:44] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:16:44] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:16:44] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:16:44] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:16:44] [USER] ✅ User registered successfully [19:16:44] [PUSH] User registration after token update: success [19:16:44] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:16:44] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:16:44] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18429)... [19:16:44] [CLIENT_SIG] WebSocket opened [19:16:44] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:16:44] [CLIENT_SIG] Connected! clientId=6xCv5C2y1RPhgpPh [19:16:44] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:16:44] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:16:45] [PRELOAD] No messages or parse error [19:16:46] [PIN_AUTH] Correct PIN [19:16:46] [SECURITY] Restored real session: ILUIWU [19:16:46] [SECURITY] Restored real session: ILUIWU [19:16:46] [SECURITY] Saved real session: ILUIWU [19:16:46] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:16:46] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:16:46] Documents Directory: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents [19:16:46] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:16:46] [THEME] Applying current theme [19:16:46] [CHAT] Applied day theme (mode: day) [19:16:46] [SECURITY] Saved real session: ILUIWU [19:16:46] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:16:46] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:16:46] [NETWORK] Network monitor started [19:16:46] [NETWORK] Status changed: connected [19:16:46] Did transition [19:16:46] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:16:46] [VIEWER] Screen lock enabled - normal idle behavior [19:16:46] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:16:46] [VCC] ========== VideoConnectionClass INIT ========== [19:16:46] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:16:46] [DATA AUDIO] ========== setupWebRTC() START ========== [19:16:46] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:16:46] [DATA AUDIO] Creating encoder/decoder factories... [19:16:46] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:16:46] [CODEC] Viewer selected encoder: AV1 (best quality) [19:16:46] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:16:46] [DATA AUDIO] ✅ Factory created [19:16:46] [DATA AUDIO] RTCAudioSession locked [19:16:46] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:16:46] [DATA AUDIO] RTCAudioSession unlocked [19:16:46] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:16:46] [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"] [19:16:46] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:16:46] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:16:46] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:16:46] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:16:46] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:16:46] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:16:46] Did transition [19:16:46] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:16:46] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:16:46] [CHUNK] Merged 868 reactions synchronously [19:16:46] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:16:46] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:16:46] [MIGRATION] No messages need sender_name backfill [19:16:46] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:16:46] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:16:46] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:16:46] [GALLERY_DB] Raw datesent for msg 18380: '2026-01-21 10:30:35' [19:16:46] [GALLERY_DB] ✅ Loaded 475 media messages [19:16:46] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18429 [19:16:46] [GALLERY] Filtered 475 -> 436 (only with local thumbnails) [19:16:46] [GALLERY] First 5 after sort (newest first): [19:16:46] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:16:46] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:16:46] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:16:46] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:16:46] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:16:46] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:16:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:16:46] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:16:46] [CELL_UPLOAD] configure: msgId=18380, file=47f0a79ffd2469ec.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:16:46] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:16:46] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=47f0a79ffd2469ec.jpg, overlayExists=true [19:16:46] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:16:46] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:16:46] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:16:46] [SERVER] Starting reconnect polling (5s interval) [19:16:46] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:16:46] [ICONS] Offset applied: -14.6 [19:16:46] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:16:46] [ICONS] Chat center: (31.2, 87.0) [19:16:46] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:16:46] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:16:46] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:16:46] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:16:46] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:16:46] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:16:46] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:16:46] [ICONS] Screen width: 440.0 [19:16:46] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:16:46] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:16:46] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:16:46] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:16:46] [USER] ✅ User registered successfully [19:16:46] [USER] User registration successful [19:16:46] [INCREMENTAL_SYNC] ✅ No new messages [19:16:46] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:16:46] [UNSENT_RETRY] Checking for unsent messages... [19:16:46] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:16:46] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:16:46] [UPLOAD_RECOVERY] Session: ILUIWU [19:16:46] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:16:46] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:16:46] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:16:46] [PENDING_UPLOAD] Total pending upload messages: 0 [19:16:46] [UNSENT_RETRY] No unsent messages found [19:16:46] new_session POST ok: token len=157 [19:16:46] HELLO → sent (fetched token, role=query) [19:16:46] [SIG] hello_ok received for query connection - ready to query agents [19:16:46] [SIG] get_agents request sent for sessionId=ILUIWU [19:16:46] [SIG] get_agents request sent for sessionId=iosILUIWU [19:16:46] [SERVER] Stopped reconnect polling [19:16:46] [SIG] agents_list received: [] [19:16:46] [SIG] agents_list received: [] [19:16:46] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:16:47] [COMBINED_FETCH] Loaded 7195 read receipts, 873 messages with reactions [19:16:47] [READBY_ENRICH] Enriched 50 messages with readBy data [19:16:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:16:47] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:16:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:16:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:17:11] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:17:11] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:17:11] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:17:11] [GALLERY_DB] Raw datesent for msg 18380: '2026-01-21 10:30:35' [19:17:11] [GALLERY_DB] ✅ Loaded 475 media messages [19:17:11] [GALLERY] Filtered 475 -> 436 (only with local thumbnails) [19:17:11] [GALLERY] First 5 after sort (newest first): [19:17:11] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:17:11] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:17:11] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:17:11] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:17:11] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:17:11] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [19:17:11] [MEDIA_SEND] 📤 Creating media message: id=-1, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, isGiphy=true, upload_status=0 (complete-giphy) [19:17:11] [MEDIA_SEND] 💾 Inserted to DB with upload_status=0 [19:17:11] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [19:17:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 18429, 18428, 18427, 18426] [19:17:11] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:17:11] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:17:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:17:11] [GIF] configure msgId=-1 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:17:11] [GIF] msgId=-1 START fresh animation [19:17:11] [CELL_UPLOAD] configure: msgId=-1, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:17:11] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:17:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:17:11] [GIF] configure msgId=-1 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:17:11] [GIF] msgId=-1 CONTINUE animation (elapsed=0.014163970947265625s) [19:17:11] [CELL_UPLOAD] configure: msgId=-1, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:17:11] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:17:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:17:11] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:17:11] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:17:11] [SCROLL_BTN] Showing button - 380pt from bottom > half 379pt [19:17:11] [CLIENT_SIG] Event received: type=0 messageId=18430 [19:17:11] [WS_EVENT] Received event: type=0, messageId=18430 [19:17:11] [WS_EVENT] 📨 New message notification (msgId=18430) - triggering incremental refresh, currentMsgCount=51 [19:17:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [19:17:11] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18430,"session_id":"ILUIWU","message_type":1,"file_name":"giphy:https:\/\/media3.giphy.com\/media\/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n\/5WSdgFuyGNK7Zt8ajG\/giphy.gif","datesent_utc":"2026-01-21 18:17:11"} [19:17:11] [CHAT] receive_message.php JSON: ["message_type": 1, "session_id": ILUIWU, "message_id": 18430, "file_name": giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, "datesent_utc": 2026-01-21 18:17:11, "ok": 1] [19:17:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18429 [19:17:11] [DB_UPGRADE] Upgrading message ID: -1 → 18430, preserveOriginalDate=false [19:17:11] [DB_UPGRADE] ✅ Upgraded -1 → 18430 with send_status=0, 1 row(s) affected [19:17:11] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 18430 [19:17:11] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 18430 [19:17:11] ReloadData 9 [19:17:11] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:17:11] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:17:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:17:11] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:17:11] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:17:11] [GIF] msgId=18430 START fresh animation [19:17:11] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:17:11] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:17:11] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:17:11] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:17:11] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [19:17:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18380, 18381, 18382, 18383, 18384] [19:17:12] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:17:12] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:17:12] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:17:12] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:17:12] [GIF] msgId=18430 CONTINUE animation (elapsed=0.19328594207763672s) [19:17:12] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:17:12] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:17:12] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:17:12] [MENU] dismissAnyExistingMenu called [19:17:12] [MENU] dismissAnyExistingMenu completed [19:17:14] [MENU] dismissAnyExistingMenu called [19:17:14] [MENU] dismissAnyExistingMenu completed [19:17:15] [MENU] dismissAnyExistingMenu called [19:17:15] [MENU] dismissAnyExistingMenu completed [19:17:15] [LOCK] Lock button tapped - locking app immediately [19:17:15] [LOCK] Received lock app notification [19:17:15] [LIFECYCLE] App resigning active - cleared crash flag [19:17:16] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:17:16] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:17:16] [LIFECYCLE] App entering background - cleared crash flag [19:17:16] [CLIENT_SIG] Disconnecting [19:17:16] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:17:16] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:17:16] [WS] Canceling WebSocket for query connection to iosILUIWU [19:17:16] In cleanupPeer [19:17:16] In cleanupPeer [19:17:16] [LIFECYCLE] WebRTC audio disabled [19:17:16] [LIFECYCLE] AVAudioSession deactivated [19:17:16] [LIFECYCLE] All connections stopped [19:17:16] [SERVER] Stopped reconnect polling [19:17:16] [CLIENT_SIG] WebSocket closed with code 1001 [19:17:16] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:17:16] Will request stop of video 0 [19:17:16] Will request stop of video 0 [19:17:16] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [19:17:16] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [19:17:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:17:16] [WS] Query connection failed - cleaning up all agent connections and views [19:17: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/} [19:17:16] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:17:16] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [19:17:16] [APP_TERMINATE] ⚠️ 2 pending uploads in DB queue: [19:17:16] [APP_TERMINATE] - id=335, file=t_21b86ebc5e802df4.jpg, status=uploading, retries=0, size=0.0MB [19:17:16] [APP_TERMINATE] - id=474, file=1f0e8529cd56643f.mov, status=uploading, retries=0, size=0.0MB [19:17:16] [LIFECYCLE] ViewController deallocated [19:18:53] [CRASH] No crash detected [19:18:53] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:18:53] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:18:53] [GIPHY] SDK not available - using REST API fallback [19:18:53] [BACKGROUND] Background fetch enabled [19:18:53] [CLEANUP] No old timer messages to delete [19:18:53] [AUTH] Starting PIN authentication [19:18:53] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:18:53] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:18:53] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:18:53] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:18:53] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:18:53] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18430)... [19:18:53] [CLIENT_SIG] WebSocket opened [19:18:53] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:18:53] [CLIENT_SIG] Connected! clientId=7nU6SJLwa0R4cq5l [19:18:53] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:18:53] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:18:53] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:18:53] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:18:53] [USER] ✅ User registered successfully [19:18:53] [PUSH] User registration after token update: success [19:18:53] [PRELOAD] No messages or parse error [19:18:55] [PIN_AUTH] Correct PIN [19:18:55] [SECURITY] Restored real session: ILUIWU [19:18:55] [SECURITY] Restored real session: ILUIWU [19:18:55] [SECURITY] Saved real session: ILUIWU [19:18:55] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:18:55] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:18:55] Documents Directory: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents [19:18:55] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:18:55] [THEME] Applying current theme [19:18:55] [CHAT] Applied day theme (mode: day) [19:18:55] [SECURITY] Saved real session: ILUIWU [19:18:55] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:18:55] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:18:55] [NETWORK] Network monitor started [19:18:55] [NETWORK] Status changed: connected [19:18:55] Did transition [19:18:55] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:18:55] [VIEWER] Screen lock enabled - normal idle behavior [19:18:55] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:18:55] [VCC] ========== VideoConnectionClass INIT ========== [19:18:55] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:18:55] [DATA AUDIO] ========== setupWebRTC() START ========== [19:18:55] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:18:55] [DATA AUDIO] Creating encoder/decoder factories... [19:18:55] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:18:55] [CODEC] Viewer selected encoder: AV1 (best quality) [19:18:55] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:18:55] [DATA AUDIO] ✅ Factory created [19:18:55] [DATA AUDIO] RTCAudioSession locked [19:18:55] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:18:55] [DATA AUDIO] RTCAudioSession unlocked [19:18:55] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:18:55] [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"] [19:18:55] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:18:55] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:18:55] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:18:55] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:18:55] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:18:55] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:18:55] Did transition [19:18:55] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:18:55] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:18:55] [CHUNK] Merged 868 reactions synchronously [19:18:55] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:18:55] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:18:55] [MIGRATION] No messages need sender_name backfill [19:18:55] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:18:55] [GALLERY_DB] Raw datesent for msg 18430: '2026-01-21 18:17:11' [19:18:55] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:18:55] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:18:55] [USER] ✅ User registered successfully [19:18:55] [USER] User registration successful [19:18:55] [GALLERY_DB] ✅ Loaded 476 media messages [19:18:55] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18430 [19:18:55] [INCREMENTAL_SYNC] ✅ No new messages [19:18:55] [GALLERY] Filtered 476 -> 436 (only with local thumbnails) [19:18:55] [GALLERY] First 5 after sort (newest first): [19:18:55] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:18:55] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:18:55] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:18:55] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:18:55] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:18:55] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:18:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:18:55] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:18:55] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:18:55] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:18:55] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:18:55] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:18:55] [GIF] msgId=18430 START fresh animation [19:18:55] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:18:55] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:18:55] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:18:55] [SERVER] Starting reconnect polling (5s interval) [19:18:55] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:18:55] [ICONS] Offset applied: -14.6 [19:18:55] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:18:55] [ICONS] Chat center: (31.2, 87.0) [19:18:55] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:18:55] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:18:55] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:18:55] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:18:55] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:18:55] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:18:55] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:18:55] [ICONS] Screen width: 440.0 [19:18:55] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:18:55] [UNSENT_RETRY] Checking for unsent messages... [19:18:55] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:18:55] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:18:55] [UPLOAD_RECOVERY] Session: ILUIWU [19:18:55] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:18:55] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:18:55] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:18:55] [PENDING_UPLOAD] Total pending upload messages: 0 [19:18:55] [UNSENT_RETRY] No unsent messages found [19:18:55] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:18:55] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:18:55] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:18:55] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:18:55] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:18:55] new_session POST ok: token len=157 [19:18:55] HELLO → sent (fetched token, role=query) [19:18:55] [SIG] hello_ok received for query connection - ready to query agents [19:18:55] [SIG] get_agents request sent for sessionId=ILUIWU [19:18:55] [SIG] get_agents request sent for sessionId=iosILUIWU [19:18:55] [SERVER] Stopped reconnect polling [19:18:55] [SIG] agents_list received: [] [19:18:55] [SIG] agents_list received: [] [19:18:55] [COMBINED_FETCH] Loaded 7196 read receipts, 873 messages with reactions [19:18:55] [READBY_ENRICH] Enriched 50 messages with readBy data [19:18:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:18:56] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:18:56] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:18:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:18:56] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:18:56] [GIF] msgId=18430 CONTINUE animation (elapsed=0.6007089614868164s) [19:18:56] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:18:56] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:18:56] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:18:57] [MENU] dismissAnyExistingMenu called [19:18:57] [MENU] dismissAnyExistingMenu completed [19:18:57] [MENU] Created button 'Reply' at index 0 [19:18:57] [MENU] Created button 'Edit' at index 1 [19:18:57] [MENU] Created button 'Copy' at index 2 [19:18:57] [MENU] Created button 'Delete' at index 3 [19:18:57] [MENU] Menu added at y=487.0 [19:18:58] [MENU] menuButtonTouchDown - button title: Edit, tag: 1 [19:18:59] [MENU] menuButtonTapped - button title: Edit, tag: 1 [19:18:59] [MENU] Button frame: (0.0, 44.0, 120.0, 44.0), superview: true [19:18:59] [MENU] Found action closure, dismissing menu first [19:18:59] [MENU] dismissAnyExistingMenu called [19:18:59] [MENU] Found menu with tag 9999, removing [19:18:59] [MENU] Removing blur effect [19:18:59] [MENU] Removing floating message snapshot [19:18:59] [MENU] Recorded dismissal time for debounce [19:18:59] [MENU] dismissAnyExistingMenu completed [19:18:59] [MENU] Menu dismissed, executing action [19:18:59] [MENU] Action executed [19:18:59] [SCROLL_BTN] Showing button - 384pt from bottom > half 186pt [19:19:19] ReloadData 11 - applying tab 0 filtering after message edit [19:19:19] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:19:19] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:19:19] [GIF] SKIP - same msg, completed [19:19:20] [MENU] dismissAnyExistingMenu called [19:19:20] [MENU] dismissAnyExistingMenu completed [19:19:20] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:19:20] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:19:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:19:21] [CLIENT_SIG] Event received: type=2 messageId=18429 [19:19:21] [CHAT] edit_message.php HTTP 200 ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18429,"event_type":2} [19:19:21] [WS_EVENT] Received event: type=2, messageId=18429 [19:19:21] [WS_EVENT] Message edited/updated: 18429 [19:19:21] [COMBINED_FETCH] Loaded 7196 read receipts, 873 messages with reactions [19:19:21] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:19:22] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:19:22] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:19:22] [GIF] SKIP - same msg, completed [19:19:24] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:19:24] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:19:24] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:19:24] [LOCK] Lock button tapped - locking app immediately [19:19:24] [LOCK] Received lock app notification [19:19:24] [LIFECYCLE] App resigning active - cleared crash flag [19:19:25] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:19:25] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:19:25] [LIFECYCLE] App entering background - cleared crash flag [19:19:25] [CLIENT_SIG] Disconnecting [19:19:25] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:19:25] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:19:25] [WS] Canceling WebSocket for query connection to iosILUIWU [19:19:25] In cleanupPeer [19:19:25] In cleanupPeer [19:19:25] [LIFECYCLE] WebRTC audio disabled [19:19:25] [LIFECYCLE] AVAudioSession deactivated [19:19:25] [LIFECYCLE] All connections stopped [19:19:25] [SERVER] Stopped reconnect polling [19:19:25] Will request stop of video 0 [19:19:25] Will request stop of video 0 [19:19:25] [CLIENT_SIG] WebSocket closed with code 1001 [19:19:25] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:19:25] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [19:19:25] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [19:19:25] [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/} [19:19:25] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:19:25] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:19:25] [WS] Query connection failed - cleaning up all agent connections and views [19:19:25] [APP_DISCONNECT] Scene disconnecting - logging pending uploads... [19:19:25] [APP_TERMINATE] ⚠️ 2 pending uploads in DB queue: [19:19:25] [APP_TERMINATE] - id=335, file=t_21b86ebc5e802df4.jpg, status=uploading, retries=0, size=0.0MB [19:19:25] [APP_TERMINATE] - id=474, file=1f0e8529cd56643f.mov, status=uploading, retries=0, size=0.0MB [19:19:25] [LIFECYCLE] ViewController deallocated[19:37:29] [LOG] Pruned 3301 entries older than 3 hours [19:37:29] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:37:29] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:37:29] [GIPHY] SDK not available - using REST API fallback [19:37:29] [BACKGROUND] Background fetch enabled [19:37:29] [AUTH] Starting PIN authentication [19:37:29] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:37:29] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:37:29] [CLEANUP] No old timer messages to delete [19:37:29] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:37:29] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:37:29] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:37:29] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:37:29] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:37:29] [USER] ✅ User registered successfully [19:37:29] [PUSH] User registration after token update: success [19:37:29] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18430)... [19:37:29] [CLIENT_SIG] WebSocket opened [19:37:29] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:37:29] [CLIENT_SIG] Connected! clientId=VI3Bg2_V98afRl-Y [19:37:29] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:37:29] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:37:29] [PRELOAD] No messages or parse error[19:37:30] [LOG] Pruned 32 entries older than 3 hours [19:37:30] [SECURITY] Restored real session: ILUIWU [19:37:30] [SECURITY] Restored real session: ILUIWU [19:37:30] [SECURITY] Saved real session: ILUIWU [19:37:30] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:37:30] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:37:30] Documents Directory: /var/mobile/Containers/Data/Application/BCEE3A1D-777A-4FA7-8430-4ADDB19C5FAA/Documents [19:37:30] [THEME] Applying current theme [19:37:30] [CHAT] Applied day theme (mode: day) [19:37:30] [SECURITY] Saved real session: ILUIWU [19:37:30] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:37:30] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:37:30] [NETWORK] Network monitor started [19:37:30] [NETWORK] Status changed: connected [19:37:30] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:37:30] Did transition [19:37:31] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:37:31] [VIEWER] Screen lock enabled - normal idle behavior [19:37:31] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:37:31] [VCC] ========== VideoConnectionClass INIT ========== [19:37:31] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:37:31] [DATA AUDIO] ========== setupWebRTC() START ========== [19:37:31] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:37:31] [DATA AUDIO] Creating encoder/decoder factories... [19:37:31] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:37:31] [CODEC] Viewer selected encoder: AV1 (best quality) [19:37:31] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:37:31] [DATA AUDIO] ✅ Factory created [19:37:31] [DATA AUDIO] RTCAudioSession locked [19:37:31] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:37:31] [DATA AUDIO] RTCAudioSession unlocked [19:37:31] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:37:31] [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"] [19:37:31] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:37:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:37:31] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:37:31] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:37:31] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:37:31] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:37:31] Did transition [19:37:31] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:37:31] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:37:31] [CHUNK] Merged 868 reactions synchronously [19:37:31] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:37:31] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:37:31] [GALLERY_DB] Raw datesent for msg 18430: '2026-01-21 18:17:11' [19:37:31] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:37:31] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:37:31] [USER] ✅ User registered successfully [19:37:31] [USER] User registration successful [19:37:31] [GALLERY_DB] ✅ Loaded 476 media messages [19:37:31] [MIGRATION] No messages need sender_name backfill [19:37:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:37:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18430 [19:37:31] [INCREMENTAL_SYNC] ✅ No new messages [19:37:31] [GALLERY] Filtered 476 -> 436 (only with local thumbnails) [19:37:31] [GALLERY] First 5 after sort (newest first): [19:37:31] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:37:31] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:37:31] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:37:31] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:37:31] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:37:31] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:37:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:37:31] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:37:31] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:37:31] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:37:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:37:31] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:37:31] [GIF] msgId=18430 START fresh animation [19:37:31] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:37:31] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:37:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:37:31] [SERVER] Starting reconnect polling (5s interval) [19:37:31] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:37:31] [ICONS] Offset applied: -14.6 [19:37:31] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:37:31] [ICONS] Chat center: (31.2, 87.0) [19:37:31] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:37:31] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:37:31] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:37:31] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:37:31] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:37:31] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:37:31] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:37:31] [ICONS] Screen width: 440.0 [19:37:31] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:37:31] [UNSENT_RETRY] Checking for unsent messages... [19:37:31] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:37:31] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:37:31] [UPLOAD_RECOVERY] Session: ILUIWU [19:37:31] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:37:31] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:37:31] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:37:31] [PENDING_UPLOAD] Total pending upload messages: 0 [19:37:31] [UNSENT_RETRY] No unsent messages found [19:37:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:37:31] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:37:31] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:37:31] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:37:31] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:37:31] new_session POST ok: token len=157 [19:37:31] HELLO → sent (fetched token, role=query) [19:37:31] [SIG] hello_ok received for query connection - ready to query agents [19:37:31] [SIG] get_agents request sent for sessionId=ILUIWU [19:37:31] [SIG] get_agents request sent for sessionId=iosILUIWU [19:37:31] [SERVER] Stopped reconnect polling [19:37:31] [SIG] agents_list received: [] [19:37:31] [SIG] agents_list received: [] [19:37:31] [COMBINED_FETCH] Loaded 7196 read receipts, 873 messages with reactions [19:37:31] [READBY_ENRICH] Enriched 50 messages with readBy data [19:37:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:37:31] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:37:31] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:37:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:37:31] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:37:31] [GIF] msgId=18430 CONTINUE animation (elapsed=0.6830060482025146s) [19:37:31] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:37:31] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:37:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:37:41] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:37:41] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [19:37:41] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [19:37:41] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 18430, 18429, 18428, 18427] [19:37:41] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:37:41] [GIF] SKIP - same msg, completed [19:37:41] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:37:41] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:37:42] [CLIENT_SIG] Event received: type=0 messageId=18431 [19:37:42] [WS_EVENT] Received event: type=0, messageId=18431 [19:37:42] [WS_EVENT] 📨 New message notification (msgId=18431) - triggering incremental refresh, currentMsgCount=51 [19:37:42] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18431,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:37:41"} [19:37:42] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [19:37:42] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "ok": 1, "message_id": 18431, "file_name": , "message_type": 0, "datesent_utc": 2026-01-21 18:37:41] [19:37:42] [DB_UPGRADE] Upgrading message ID: -1 → 18431, preserveOriginalDate=false [19:37:42] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18430 [19:37:42] [DB_UPGRADE] ✅ Upgraded -1 → 18431 with send_status=0, 1 row(s) affected [19:37:42] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 18431 [19:37:42] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 18431 [19:37:42] ReloadData 9 [19:37:42] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:37:42] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:37:42] [GIF] SKIP - same msg, completed [19:37:42] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:37:42] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [19:37:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:37:42] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:37:42] [GIF] SKIP - same msg, completed [19:37:52] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:37:52] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [19:37:52] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=52 [19:37:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-2, 18431, 18430, 18429, 18428] [19:37:52] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:37:52] [GIF] SKIP - same msg, completed [19:37:52] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:37:52] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:37:53] [CLIENT_SIG] Event received: type=0 messageId=18432 [19:37:53] [WS_EVENT] Received event: type=0, messageId=18432 [19:37:53] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18432,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:37:52"} [19:37:53] [WS_EVENT] 📨 New message notification (msgId=18432) - triggering incremental refresh, currentMsgCount=52 [19:37:53] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [19:37:53] [CHAT] receive_message.php JSON: ["ok": 1, "message_type": 0, "file_name": , "datesent_utc": 2026-01-21 18:37:52, "session_id": ILUIWU, "message_id": 18432] [19:37:53] [DB_UPGRADE] Upgrading message ID: -2 → 18432, preserveOriginalDate=false [19:37:53] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18431 [19:37:53] [DB_UPGRADE] ✅ Upgraded -2 → 18432 with send_status=0, 1 row(s) affected [19:37:53] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 18432 [19:37:53] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 18432 [19:37:53] ReloadData 9 [19:37:53] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:37:53] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:37:53] [GIF] SKIP - same msg, completed [19:37:53] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:37:53] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [19:37:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:37:53] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:37:53] [GIF] SKIP - same msg, completed [19:37:58] [LIFECYCLE] App resigning active - cleared crash flag [19:37:59] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [19:37:59] [SECURITY] Saved background timestamp [19:37:59] [LIFECYCLE] App entering background - cleared crash flag [19:37:59] [CLIENT_SIG] Disconnecting [19:37:59] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:37:59] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:37:59] [WS] Canceling WebSocket for query connection to iosILUIWU [19:37:59] In cleanupPeer [19:37:59] In cleanupPeer [19:37:59] [LIFECYCLE] WebRTC audio disabled [19:37:59] [LIFECYCLE] AVAudioSession deactivated [19:37:59] [LIFECYCLE] All connections stopped [19:37:59] [CLIENT_SIG] WebSocket closed with code 1001 [19:37:59] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:37:59] [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/} [19:37:59] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:37:59] [SERVER] Stopped reconnect polling [19:37:59] Will request stop of video 0 [19:37:59] Will request stop of video 0 [19:37:59] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [19:37:59] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [19:37:59] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:37:59] [WS] Query connection failed - cleaning up all agent connections and views [19:37:59] [PIP] Removing 0 tracks from PiP for connection 0 [19:37:59] [PIP] ✅ All tracks removed for connection 0 [19:37:59] [PIP] Removing 0 tracks from PiP for connection 0 [19:37:59] [PIP] ✅ All tracks removed for connection 0 [19:37:59] [CLEANUP] ======================================== [19:37:59] [CLEANUP] Cleaning up all agent connections and views [19:37:59] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:37:59] [CLEANUP] Stopped and removed 0 video connections [19:37:59] [CLEANUP] Removed 0 video views [19:37:59] [CLEANUP] Removed 0 feed scroll views [19:37:59] [CLEANUP] Removed 0 status labels [19:37:59] [CLEANUP] Reset agent query state [19:37:59] [CLEANUP] Updated page indicator [19:37:59] [CLEANUP] Rebuilt video layout [19:37:59] [CLEANUP] ✅ All agent connections and views cleaned up [19:37:59] [CLEANUP] ======================================== [19:37:59] [SERVER] Skipping reconnect polling - app is in background [19:37:59] [WS] URLSession invalidated successfully [19:37:59] [CLEANUP] ======================================== [19:37:59] [CLEANUP] Cleaning up all agent connections and views [19:37:59] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:37:59] [CLEANUP] Stopped and removed 0 video connections [19:37:59] [CLEANUP] Removed 0 video views [19:37:59] [CLEANUP] Removed 0 feed scroll views [19:37:59] [CLEANUP] Removed 0 status labels [19:37:59] [CLEANUP] Reset agent query state [19:37:59] [CLEANUP] Updated page indicator [19:37:59] [CLEANUP] Rebuilt video layout [19:37:59] [CLEANUP] ✅ All agent connections and views cleaned up [19:37:59] [CLEANUP] ======================================== [19:37:59] [SERVER] Skipping reconnect polling - app is in background [19:38:14] [SECURITY] Timeout check: elapsed=15.124987125396729s, timeout=300.0s [19:38:14] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:38:14] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:38:14] [LIFECYCLE] App entering foreground - restoring connections [19:38:14] [UPLOAD_RETRY] No pending uploads to retry [19:38:14] [LIFECYCLE] Merged 868 reactions from local DB [19:38:14] [LIFECYCLE] WebRTC audio re-enabled [19:38:14] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:38:14] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:38:14] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:38:14] [VIEWER] Reconnecting after background - querying agents [19:38:14] [UNSENT_RETRY] Checking for unsent messages... [19:38:14] [PENDING_UPLOAD] Total pending upload messages: 0 [19:38:14] [UNSENT_RETRY] No unsent messages found [19:38:14] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:38:14] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:38:14] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:38:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:38:14] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:14] [GIF] SKIP - same msg, completed [19:38:14] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [19:38:14] [SECURITY] Within timeout - cleared background flag [19:38:14] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:38:14] [PUSH] handlePollEventsNotification userInfo: [:] [19:38:14] [PUSH] No message_id in userInfo [19:38:14] [PUSH] No operation_type in userInfo [19:38:14] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:38:14] [FAST_REFRESH] Already have 52 messages - skipping local DB load [19:38:14] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:38:14] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:38:14] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [19:38:14] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18432 [19:38:14] [CLIENT_SIG] WebSocket opened [19:38:14] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:38:14] [CLIENT_SIG] Connected! clientId=OzMnp7SBu7sw3gRl [19:38:14] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:38:14] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:38:14] [INCREMENTAL_SYNC] ✅ No new messages [19:38:14] [FAST_REFRESH] Incremental sync complete - 52 messages [19:38:14] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:38:14] HELLO → sent (cached token, role=query) [19:38:14] [SIG] hello_ok received for query connection - ready to query agents [19:38:14] [SIG] get_agents request sent for sessionId=ILUIWU [19:38:14] [SIG] get_agents request sent for sessionId=iosILUIWU [19:38:14] [SERVER] Stopped reconnect polling [19:38:14] [SIG] agents_list received: [] [19:38:14] [SIG] agents_list received: [] [19:38:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:38:15] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:15] [GIF] SKIP - same msg, completed [19:38:15] [COMBINED_FETCH] Loaded 7198 read receipts, 873 messages with reactions [19:38:15] [FOREGROUND] Enriched 0 messages with readBy data from server [19:38:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:38:15] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:15] [GIF] SKIP - same msg, completed [19:38:15] [COMBINED_FETCH] Loaded 7198 read receipts, 873 messages with reactions [19:38:15] [FAST_REFRESH] Enriched 52 messages with readBy data [19:38:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:38:15] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:15] [GIF] SKIP - same msg, completed [19:38:24] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [19:38:24] [WS] Query connection error - cleaning up all agent connections and views [19:38:24] [CLEANUP] ======================================== [19:38:24] [CLEANUP] Cleaning up all agent connections and views [19:38:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:38:24] [CLEANUP] Stopped and removed 0 video connections [19:38:24] [CLEANUP] Removed 0 video views [19:38:24] [CLEANUP] Removed 0 feed scroll views [19:38:24] [CLEANUP] Removed 0 status labels [19:38:24] [CLEANUP] Reset agent query state [19:38:24] [CLEANUP] Updated page indicator [19:38:24] [CLEANUP] Rebuilt video layout [19:38:24] [CLEANUP] ✅ All agent connections and views cleaned up [19:38:24] [CLEANUP] ======================================== [19:38:24] [SERVER] Starting reconnect polling (5s interval) [19:38:29] [SERVER] Polling - attempting to reconnect... [19:38:34] [SERVER] Polling - attempting to reconnect... [19:38:39] [SERVER] Polling - attempting to reconnect... [19:38:44] [SERVER] Polling - attempting to reconnect... [19:38:47] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:38:47] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [19:38:47] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=53 [19:38:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-3, 18432, 18431, 18430, 18429] [19:38:47] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:47] [GIF] SKIP - same msg, completed [19:38:47] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:38:47] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:38:48] [CLIENT_SIG] Event received: type=0 messageId=18433 [19:38:48] [WS_EVENT] Received event: type=0, messageId=18433 [19:38:48] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18433,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:38:47"} [19:38:48] [WS_EVENT] 📨 New message notification (msgId=18433) - triggering incremental refresh, currentMsgCount=53 [19:38:48] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [19:38:48] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-21 18:38:47, "ok": 1, "message_type": 0, "file_name": , "session_id": ILUIWU, "message_id": 18433] [19:38:48] [DB_UPGRADE] Upgrading message ID: -3 → 18433, preserveOriginalDate=false [19:38:48] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18432 [19:38:48] [DB_UPGRADE] ✅ Upgraded -3 → 18433 with send_status=0, 1 row(s) affected [19:38:48] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 18433 [19:38:48] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 18433 [19:38:48] ReloadData 9 [19:38:48] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:38:48] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:48] [GIF] SKIP - same msg, completed [19:38:48] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:38:48] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [19:38:48] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:38:48] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:38:48] [GIF] SKIP - same msg, completed [19:38:49] [LOCK] Lock button tapped - locking app immediately [19:38:49] [LOCK] Received lock app notification [19:38:49] [LIFECYCLE] App resigning active - cleared crash flag [19:38:49] [SERVER] Polling - attempting to reconnect... [19:38:50] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:38:50] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:38:50] [LIFECYCLE] App entering background - cleared crash flag [19:38:50] [CLIENT_SIG] Disconnecting [19:38:50] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:38:50] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [19:38:50] [WS] Canceling WebSocket for query connection to iosILUIWU [19:38:50] In cleanupPeer [19:38:50] In cleanupPeer [19:38:50] [LIFECYCLE] WebRTC audio disabled [19:38:50] [LIFECYCLE] AVAudioSession deactivated [19:38:50] [LIFECYCLE] All connections stopped [19:38:50] [CLIENT_SIG] WebSocket closed with code 1001 [19:38:50] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:38:50] [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/} [19:38:50] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:38:50] [SERVER] Stopped reconnect polling [19:38:50] Will request stop of video 0 [19:38:50] Will request stop of video 0 [19:38:50] [WS] URLSession invalidated successfully [19:38:50] [PIP] Removing 0 tracks from PiP for connection 0 [19:38:50] [PIP] ✅ All tracks removed for connection 0 [19:38:50] [PIP] Removing 0 tracks from PiP for connection 0 [19:38:50] [PIP] ✅ All tracks removed for connection 0 [19:38:51] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [19:38:51] [WS] Query connection failed - cleaning up all agent connections and views [19:38:51] [CLEANUP] ======================================== [19:38:51] [CLEANUP] Cleaning up all agent connections and views [19:38:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:38:51] [CLEANUP] Stopped and removed 0 video connections [19:38:51] [CLEANUP] Removed 0 video views [19:38:51] [CLEANUP] Removed 0 feed scroll views [19:38:51] [CLEANUP] Removed 0 status labels [19:38:51] [CLEANUP] Reset agent query state [19:38:51] [CLEANUP] Updated page indicator [19:38:51] [CLEANUP] Rebuilt video layout [19:38:51] [CLEANUP] ✅ All agent connections and views cleaned up [19:38:51] [CLEANUP] ======================================== [19:38:51] [SERVER] Skipping reconnect polling - app is in background [19:41:22] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:41:22] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:41:22] [LIFECYCLE] App entering foreground - restoring connections [19:41:22] [LIFECYCLE] Away > 2 minutes (152s) - will scroll to bottom [19:41:22] [UPLOAD_RETRY] No pending uploads to retry [19:41:22] [LIFECYCLE] Merged 868 reactions from local DB [19:41:22] [LIFECYCLE] WebRTC audio re-enabled [19:41:22] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:41:22] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:41:22] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:41:22] [VIEWER] Reconnecting after background - querying agents [19:41:22] [UNSENT_RETRY] Checking for unsent messages... [19:41:22] [PENDING_UPLOAD] Total pending upload messages: 0 [19:41:22] [UNSENT_RETRY] No unsent messages found [19:41:22] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:41:22] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:41:22] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:41:22] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:41:22] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:22] [GIF] SKIP - same msg, completed [19:41:22] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:41:22] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:41:22] [PUSH] handlePollEventsNotification userInfo: [:] [19:41:22] [PUSH] No message_id in userInfo [19:41:22] [PUSH] No operation_type in userInfo [19:41:22] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:41:22] [FAST_REFRESH] Already have 53 messages - skipping local DB load [19:41:22] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:41:22] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:41:22] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [19:41:22] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18433 [19:41:22] [CLIENT_SIG] WebSocket opened [19:41:22] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:41:22] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:41:22] HELLO → sent (cached token, role=query) [19:41:22] [CLIENT_SIG] Connected! clientId=_mLD25ac8zu0MaxU [19:41:22] [SIG] hello_ok received for query connection - ready to query agents [19:41:22] [SIG] get_agents request sent for sessionId=ILUIWU [19:41:22] [SIG] get_agents request sent for sessionId=iosILUIWU [19:41:22] [SERVER] Stopped reconnect polling [19:41:22] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:41:22] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:41:22] [SIG] agents_list received: [] [19:41:22] [SIG] agents_list received: [] [19:41:22] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:41:22] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:22] [GIF] SKIP - same msg, completed [19:41:22] [INCREMENTAL_SYNC] ✅ No new messages [19:41:22] [FAST_REFRESH] Incremental sync complete - 53 messages [19:41:23] [COMBINED_FETCH] Loaded 7199 read receipts, 873 messages with reactions [19:41:23] [FAST_REFRESH] Enriched 53 messages with readBy data [19:41:23] [COMBINED_FETCH] Loaded 7199 read receipts, 873 messages with reactions [19:41:23] [FOREGROUND] Enriched 0 messages with readBy data from server [19:41:23] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:41:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18381, 18382, 18383, 18384, 18385] [19:41:23] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:23] [GIF] SKIP - same msg, completed[19:41:23] [LOG] Pruned 93 entries older than 3 hours [19:41:23] [SECURITY] Restored real session: ILUIWU [19:41:23] [SECURITY] Restored real session: ILUIWU [19:41:24] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [19:41:24] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [19:41:24] [AUTH] UI update complete [19:41:24] [FAKE MODE] Exiting fake mode, restoring real session [19:41:24] [SECURITY] Restored real session: ILUIWU [19:41:24] [SECURITY] Saved real session: ILUIWU [19:41:24] [FAKE MODE] ✅ Restored real session: ILUIWU [19:41:24] [FAKE MODE] Loaded 50 messages (limited to page size) [19:41:24] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:24] [GIF] SKIP - same msg, completed [19:41:24] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:41:24] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:41:24] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:41:24] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:24] [GIF] SKIP - same msg, completed [19:41:24] [USER] ✅ User registered successfully [19:41:24] [PUSH] User registration after token update: success [19:41:24] [COMBINED_FETCH] Loaded 7199 read receipts, 873 messages with reactions [19:41:24] [FAKE MODE] Enriched 50 messages with readBy data [19:41:24] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:41:25] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:41:25] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:41:25] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:41:25] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=true [19:41:25] [GIF] msgId=18430 globally completed - showing static frame [19:41:25] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:41:25] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:41:25] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:41:26] [MENU] dismissAnyExistingMenu called [19:41:26] [MENU] dismissAnyExistingMenu completed [19:41:26] [MENU] Created button 'Reply' at index 0 [19:41:26] [MENU] Created button 'Edit' at index 1 [19:41:26] [MENU] Created button 'Copy' at index 2 [19:41:26] [MENU] Created button 'Delete' at index 3 [19:41:26] [MENU] Menu added at y=454.5 [19:41:27] [MENU] menuButtonTouchDown - button title: Edit, tag: 1 [19:41:27] [MENU] menuButtonTapped - button title: Edit, tag: 1 [19:41:27] [MENU] Button frame: (0.0, 44.0, 120.0, 44.0), superview: true [19:41:27] [MENU] Found action closure, dismissing menu first [19:41:27] [MENU] dismissAnyExistingMenu called [19:41:27] [MENU] Found menu with tag 9999, removing [19:41:27] [MENU] Removing blur effect [19:41:27] [MENU] Removing floating message snapshot [19:41:27] [MENU] Recorded dismissal time for debounce [19:41:27] [MENU] dismissAnyExistingMenu completed [19:41:27] [MENU] Menu dismissed, executing action [19:41:27] [MENU] Action executed [19:41:27] [SCROLL_BTN] Showing button - 327pt from bottom > half 214pt [19:41:32] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [19:41:32] [WS] Query connection error - cleaning up all agent connections and views [19:41:32] [CLEANUP] ======================================== [19:41:32] [CLEANUP] Cleaning up all agent connections and views [19:41:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:41:32] [CLEANUP] Stopped and removed 0 video connections [19:41:32] [CLEANUP] Removed 0 video views [19:41:32] [CLEANUP] Removed 0 feed scroll views [19:41:32] [CLEANUP] Removed 0 status labels [19:41:32] [CLEANUP] Reset agent query state [19:41:32] [CLEANUP] Updated page indicator [19:41:32] [CLEANUP] Rebuilt video layout [19:41:32] [CLEANUP] ✅ All agent connections and views cleaned up [19:41:32] [CLEANUP] ======================================== [19:41:32] [SERVER] Starting reconnect polling (5s interval) [19:41:37] [SERVER] Polling - attempting to reconnect... [19:41:42] [SERVER] Polling - attempting to reconnect... [19:41:44] ReloadData 11 - applying tab 0 filtering after message edit [19:41:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:41:44] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:44] [GIF] SKIP - same msg, completed [19:41:45] [CLIENT_SIG] Event received: type=2 messageId=18432 [19:41:45] [CHAT] edit_message.php HTTP 200 ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":18432,"event_type":2} [19:41:45] [WS_EVENT] Received event: type=2, messageId=18432 [19:41:45] [WS_EVENT] Message edited/updated: 18432 [19:41:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:41:45] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:45] [GIF] SKIP - same msg, completed [19:41:46] [COMBINED_FETCH] Loaded 7199 read receipts, 873 messages with reactions [19:41:46] [LOCK] Lock button tapped - locking app immediately [19:41:46] [LOCK] Received lock app notification [19:41:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:41:46] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:41:46] [GIF] SKIP - same msg, completed [19:41:46] [LIFECYCLE] App resigning active - cleared crash flag [19:41:47] [SERVER] Polling - attempting to reconnect... [19:41:47] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:41:47] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:41:47] [LIFECYCLE] App entering background - cleared crash flag [19:41:47] [CLIENT_SIG] Disconnecting [19:41:47] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:41:47] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [19:41:47] [WS] Canceling WebSocket for query connection to iosILUIWU [19:41:47] In cleanupPeer [19:41:47] In cleanupPeer [19:41:47] [LIFECYCLE] WebRTC audio disabled [19:41:47] [LIFECYCLE] AVAudioSession deactivated [19:41:47] [LIFECYCLE] All connections stopped [19:41:47] [CLIENT_SIG] WebSocket closed with code 1001 [19:41:47] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:41:47] [SERVER] Stopped reconnect polling [19:41:47] [WS] URLSession invalidated successfully [19:41:47] Will request stop of video 0 [19:41:47] Will request stop of video 0 [19:41:47] [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/} [19:41:47] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:41:47] [PIP] Removing 0 tracks from PiP for connection 0 [19:41:47] [PIP] ✅ All tracks removed for connection 0 [19:41:47] [PIP] Removing 0 tracks from PiP for connection 0 [19:41:47] [PIP] ✅ All tracks removed for connection 0 [19:49:01] [CRASH] No crash detected [19:49:01] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:49:01] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:49:01] [GIPHY] SDK not available - using REST API fallback [19:49:01] [BACKGROUND] Background fetch enabled [19:49:01] [AUTH] Starting PIN authentication [19:49:01] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:49:01] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:49:01] [CLEANUP] No old timer messages to delete [19:49:01] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:49:01] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:49:01] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:49:01] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18433)... [19:49:01] [CLIENT_SIG] WebSocket opened [19:49:01] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:49:01] [CLIENT_SIG] Connected! clientId=bp7vD3reGk4yNAl_ [19:49:01] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:49:01] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:49:01] [PRELOAD] No messages or parse error [19:49:01] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:49:01] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:49:01] [USER] ✅ User registered successfully [19:49:01] [PUSH] User registration after token update: success [19:49:04] [PIN_AUTH] Correct PIN [19:49:04] [SECURITY] Restored real session: ILUIWU [19:49:04] [SECURITY] Restored real session: ILUIWU [19:49:04] [SECURITY] Saved real session: ILUIWU [19:49:04] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:49:04] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:49:04] Documents Directory: /var/mobile/Containers/Data/Application/BBFC9F60-CAC6-4879-97D2-CF4DDD0C5899/Documents [19:49:04] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:49:04] [THEME] Applying current theme [19:49:04] [CHAT] Applied day theme (mode: day) [19:49:04] [SECURITY] Saved real session: ILUIWU [19:49:04] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:49:04] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:49:04] [NETWORK] Network monitor started [19:49:04] [NETWORK] Status changed: connected [19:49:04] Did transition [19:49:04] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:49:04] [VIEWER] Screen lock enabled - normal idle behavior [19:49:04] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:49:04] [VCC] ========== VideoConnectionClass INIT ========== [19:49:04] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:49:04] [DATA AUDIO] ========== setupWebRTC() START ========== [19:49:04] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:49:04] [DATA AUDIO] Creating encoder/decoder factories... [19:49:04] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:49:04] [CODEC] Viewer selected encoder: AV1 (best quality) [19:49:04] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:49:04] [DATA AUDIO] ✅ Factory created [19:49:04] [DATA AUDIO] RTCAudioSession locked [19:49:04] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:49:04] [DATA AUDIO] RTCAudioSession unlocked [19:49:04] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:49:04] [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"] [19:49:04] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:49:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:49:04] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:49:04] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:49:04] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:49:04] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:49:04] Did transition [19:49:04] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:49:04] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:49:04] [CHUNK] Merged 868 reactions synchronously [19:49:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:49:04] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:49:04] [MIGRATION] No messages need sender_name backfill [19:49:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:49:04] [GALLERY_DB] Raw datesent for msg 18430: '2026-01-21 18:17:11' [19:49:04] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:49:04] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:49:04] [GALLERY_DB] ✅ Loaded 476 media messages [19:49:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18433 [19:49:04] [GALLERY] Filtered 476 -> 436 (only with local thumbnails) [19:49:04] [GALLERY] First 5 after sort (newest first): [19:49:04] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:49:04] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:49:04] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:49:04] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:49:04] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:49:04] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:49:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:49:05] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:49:05] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:49:05] [GIF] msgId=18430 START fresh animation [19:49:05] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:49:05] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:49:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:49:05] [USER] ✅ User registered successfully [19:49:05] [USER] User registration successful [19:49:05] [SERVER] Starting reconnect polling (5s interval) [19:49:05] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:49:05] [ICONS] Offset applied: -14.6 [19:49:05] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:49:05] [ICONS] Chat center: (31.2, 87.0) [19:49:05] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:49:05] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:49:05] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:49:05] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:49:05] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:49:05] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:49:05] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:49:05] [ICONS] Screen width: 440.0 [19:49:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:49:05] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:49:05] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:49:05] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:49:05] [INCREMENTAL_SYNC] ✅ No new messages [19:49:05] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:49:05] [UNSENT_RETRY] Checking for unsent messages... [19:49:05] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:49:05] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:49:05] [UPLOAD_RECOVERY] Session: ILUIWU [19:49:05] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:49:05] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:49:05] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:49:05] [PENDING_UPLOAD] Total pending upload messages: 0 [19:49:05] [UNSENT_RETRY] No unsent messages found [19:49:05] new_session POST ok: token len=157 [19:49:05] HELLO → sent (fetched token, role=query) [19:49:05] [SIG] hello_ok received for query connection - ready to query agents [19:49:05] [SIG] get_agents request sent for sessionId=ILUIWU [19:49:05] [SIG] get_agents request sent for sessionId=iosILUIWU [19:49:05] [SERVER] Stopped reconnect polling [19:49:05] [SIG] agents_list received: [] [19:49:05] [SIG] agents_list received: [] [19:49:05] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:49:05] [COMBINED_FETCH] Loaded 7199 read receipts, 873 messages with reactions [19:49:05] [READBY_ENRICH] Enriched 50 messages with readBy data [19:49:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:49:05] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:49:05] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:49:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:49:05] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:49:05] [GIF] msgId=18430 CONTINUE animation (elapsed=0.6893410682678223s) [19:49:05] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:49:05] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:49:05] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:49:14] [MENU] dismissAnyExistingMenu called [19:49:14] [MENU] dismissAnyExistingMenu completed [19:49:14] [SCROLL_BTN] Showing button - 380pt from bottom > half 379pt [19:49:15] [MENU] dismissAnyExistingMenu called [19:49:15] [MENU] dismissAnyExistingMenu completed [19:49:17] [LOCK] Lock button tapped - locking app immediately [19:49:17] [LOCK] Received lock app notification [19:49:18] [LIFECYCLE] App resigning active - cleared crash flag [19:49:19] [NETWORK] Status changed: connected [19:49:19] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:51:59] [CRASH] No crash detected [19:51:59] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:51:59] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:51:59] [GIPHY] SDK not available - using REST API fallback [19:51:59] [BACKGROUND] Background fetch enabled [19:51:59] [AUTH] Starting PIN authentication [19:51:59] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:51:59] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:51:59] [CLEANUP] No old timer messages to delete [19:51:59] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:51:59] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:51:59] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:51:59] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:51:59] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:51:59] [USER] ✅ User registered successfully [19:51:59] [PUSH] User registration after token update: success [19:51:59] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18433)... [19:51:59] [PRELOAD] No messages or parse error [19:52:00] [CLIENT_SIG] WebSocket opened [19:52:00] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:52:00] [CLIENT_SIG] Connected! clientId=MNOpdpeBWrsnuXzl [19:52:00] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:52:00] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:52:02] [PIN_AUTH] Correct PIN [19:52:02] [SECURITY] Restored real session: ILUIWU [19:52:02] [SECURITY] Restored real session: ILUIWU [19:52:02] [SECURITY] Saved real session: ILUIWU [19:52:02] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:52:02] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:52:02] Documents Directory: /var/mobile/Containers/Data/Application/FEAD2E1F-C4A1-4969-9070-16A67DA77312/Documents [19:52:02] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:52:02] [THEME] Applying current theme [19:52:02] [CHAT] Applied day theme (mode: day) [19:52:02] [SECURITY] Saved real session: ILUIWU [19:52:02] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:52:02] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:52:02] [NETWORK] Network monitor started [19:52:02] [NETWORK] Status changed: connected [19:52:02] Did transition [19:52:02] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:52:02] [VIEWER] Screen lock enabled - normal idle behavior [19:52:02] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:52:02] [VCC] ========== VideoConnectionClass INIT ========== [19:52:02] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:52:02] [DATA AUDIO] ========== setupWebRTC() START ========== [19:52:02] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:52:02] [DATA AUDIO] Creating encoder/decoder factories... [19:52:02] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:52:02] [CODEC] Viewer selected encoder: AV1 (best quality) [19:52:02] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:52:02] [DATA AUDIO] ✅ Factory created [19:52:02] [DATA AUDIO] RTCAudioSession locked [19:52:02] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:52:02] [DATA AUDIO] RTCAudioSession unlocked [19:52:02] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:52:02] [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"] [19:52:02] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:52:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:52:02] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:52:02] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:52:02] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:52:02] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:52:02] Did transition [19:52:02] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:52:02] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:52:02] [CHUNK] Merged 868 reactions synchronously [19:52:02] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:52:02] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:52:02] [MIGRATION] No messages need sender_name backfill [19:52:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:52:02] [GALLERY_DB] Raw datesent for msg 18430: '2026-01-21 18:17:11' [19:52:02] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:52:02] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:52:02] [USER] ✅ User registered successfully [19:52:02] [USER] User registration successful [19:52:02] [GALLERY_DB] ✅ Loaded 476 media messages [19:52:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18433 [19:52:02] [INCREMENTAL_SYNC] ✅ No new messages [19:52:02] [GALLERY] Filtered 476 -> 436 (only with local thumbnails) [19:52:02] [GALLERY] First 5 after sort (newest first): [19:52:02] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:52:02] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:52:02] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:52:02] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:52:02] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:52:02] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:52:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:52:02] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:52:02] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:52:02] [GIF] msgId=18430 START fresh animation [19:52:02] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:52:02] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:52:02] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:52:02] [SERVER] Starting reconnect polling (5s interval) [19:52:02] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:52:02] [ICONS] Offset applied: -14.6 [19:52:02] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:52:02] [ICONS] Chat center: (31.2, 87.0) [19:52:02] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:52:02] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:52:02] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:52:02] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:52:02] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:52:02] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:52:02] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:52:02] [ICONS] Screen width: 440.0 [19:52:02] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:52:02] [UNSENT_RETRY] Checking for unsent messages... [19:52:02] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:52:02] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:52:02] [UPLOAD_RECOVERY] Session: ILUIWU [19:52:02] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:52:02] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:52:02] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:52:02] [PENDING_UPLOAD] Total pending upload messages: 0 [19:52:02] [UNSENT_RETRY] No unsent messages found [19:52:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:52:02] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:52:02] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:52:02] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:52:02] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:52:02] new_session POST ok: token len=157 [19:52:02] HELLO → sent (fetched token, role=query) [19:52:02] [SIG] hello_ok received for query connection - ready to query agents [19:52:02] [SIG] get_agents request sent for sessionId=ILUIWU [19:52:02] [SIG] get_agents request sent for sessionId=iosILUIWU [19:52:02] [SERVER] Stopped reconnect polling [19:52:02] [SIG] agents_list received: [] [19:52:02] [SIG] agents_list received: [] [19:52:03] [COMBINED_FETCH] Loaded 7199 read receipts, 873 messages with reactions [19:52:03] [READBY_ENRICH] Enriched 50 messages with readBy data [19:52:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18384, 18385, 18386, 18387, 18388] [19:52:03] [CELL_UPLOAD] configure: msgId=18428, file=f36a462089f1685a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [19:52:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [19:52:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f36a462089f1685a.jpg, overlayExists=true [19:52:03] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:52:03] [GIF] msgId=18430 CONTINUE animation (elapsed=1.0060440301895142s) [19:52:03] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:52:03] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:52:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:52:05] [LOCK] Lock button tapped - locking app immediately [19:52:05] [LOCK] Received lock app notification [19:52:05] [LIFECYCLE] App resigning active - cleared crash flag [19:52:06] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:52:06] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:52:06] [LIFECYCLE] App entering background - cleared crash flag [19:52:06] [CLIENT_SIG] Disconnecting [19:52:06] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:52:06] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:52:06] [WS] Canceling WebSocket for query connection to iosILUIWU [19:52:06] In cleanupPeer [19:52:06] In cleanupPeer [19:52:06] [LIFECYCLE] WebRTC audio disabled [19:52:06] [LIFECYCLE] AVAudioSession deactivated [19:52:06] [LIFECYCLE] All connections stopped [19:52:06] [CLIENT_SIG] WebSocket closed with code 1001 [19:52:06] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:52:06] [SERVER] Stopped reconnect polling [19:52:06] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1001 [19:52:06] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [19:52:06] Will request stop of video 0 [19:52:06] Will request stop of video 0 [19:52:06] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:52:06] [WS] Query connection failed - cleaning up all agent connections and views [19:52:06] [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/} [19:52:06] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:52:06] [CLEANUP] ======================================== [19:52:06] [CLEANUP] Cleaning up all agent connections and views [19:52:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:52:06] [CLEANUP] Stopped and removed 0 video connections [19:52:06] [CLEANUP] Removed 0 video views [19:52:06] [CLEANUP] Removed 0 feed scroll views [19:52:06] [CLEANUP] Removed 0 status labels [19:52:06] [CLEANUP] Reset agent query state [19:52:06] [CLEANUP] Updated page indicator [19:52:06] [CLEANUP] Rebuilt video layout [19:52:06] [CLEANUP] ✅ All agent connections and views cleaned up [19:52:06] [CLEANUP] ======================================== [19:52:06] [SERVER] Skipping reconnect polling - app is in background [19:52:06] [WS] URLSession invalidated successfully [19:52:06] [PIP] Removing 0 tracks from PiP for connection 0 [19:52:06] [PIP] ✅ All tracks removed for connection 0 [19:52:06] [PIP] Removing 0 tracks from PiP for connection 0 [19:52:06] [PIP] ✅ All tracks removed for connection 0 [19:52:06] [CLEANUP] ======================================== [19:52:06] [CLEANUP] Cleaning up all agent connections and views [19:52:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:52:06] [CLEANUP] Stopped and removed 0 video connections [19:52:06] [CLEANUP] Removed 0 video views [19:52:06] [CLEANUP] Removed 0 feed scroll views [19:52:06] [CLEANUP] Removed 0 status labels [19:52:06] [CLEANUP] Reset agent query state [19:52:06] [CLEANUP] Updated page indicator [19:52:06] [CLEANUP] Rebuilt video layout [19:52:06] [CLEANUP] ✅ All agent connections and views cleaned up [19:52:06] [CLEANUP] ======================================== [19:52:06] [SERVER] Skipping reconnect polling - app is in background [19:54:05] [CRASH] No crash detected [19:54:05] [FONT] Roboto fonts loaded successfully: Roboto-Regular [19:54:05] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [19:54:05] [GIPHY] SDK not available - using REST API fallback [19:54:05] [BACKGROUND] Background fetch enabled [19:54:05] [CLEANUP] No old timer messages to delete [19:54:05] [AUTH] Starting PIN authentication [19:54:05] [PUSH] Notification tapped - session_id: ILUIWU [19:54:05] [PUSH] Max message_id before tap: 18433 [19:54:05] [PUSH] Stored pending session: ILUIWU [19:54:05] [PUSH_EMBED] 📩 Received embedded message: id=18434, type=0, sender=Esra [19:54:05] [PUSH_EMBED] ✅ Saved message 18434 to local DB (sync) [19:54:05] [PUSH_EMBED] Created new cache with embedded message 18434 [19:54:05] [PUSH_EMBED] Fetching evolution data for message 18434 in background [19:54:05] [PUSH_EMBED] ✅ Fully processed message 18434 [19:54:05] [PUSH] Embedded message handled instantly on tap [19:54:05] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:54:05] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:54:05] [PUSH] Fetching server messages since_id=18433 to catch coalesced notifications on tap [19:54:05] [PUSH_PRELOAD] Fetching up to 50 messages since_id=18433 to catch coalesced notifications [19:54:05] [PUSH_PRELOAD] Fetching messages for instant display cache [19:54:05] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [19:54:05] [PUSH_EMBED] Got evolution data for message 18434, saving to local DB [19:54:05] [PUSH_EMBED] Saved evolution data for message 18434 [19:54:05] [PRELOAD] Cache has only 1 messages (from push) - will load full history [19:54:05] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:54:05] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:54:05] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18434)... [19:54:05] [USER] ✅ User registered successfully [19:54:05] [PUSH] User registration after token update: success [19:54:05] [PUSH_PRELOAD] Fetched 1 messages - caching for instant display [19:54:05] [PUSH_PRELOAD] ⚡ Pre-cached 1 messages for instant display (preserved 0 from push) [19:54:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:54:05] [PUSH] Server fetch on tap completed (success=true) [19:54:05] [PRELOAD] No messages or parse error [19:54:05] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:54:05] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:54:05] [CLIENT_SIG] WebSocket opened [19:54:05] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:54:05] [CLIENT_SIG] Connected! clientId=Dm5pL2J7D3Cr_dBT [19:54:06] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:54:06] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:54:06] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:54:06] [PUSH] Silent push received [19:54:06] [PUSH_EMBED] 📩 Received embedded message: id=18434, type=0, sender=Esra [19:54:06] [PUSH_EMBED] ✅ Saved message 18434 to local DB (sync) [19:54:06] [PUSH_EMBED] Created new cache with embedded message 18434 [19:54:06] [PUSH_EMBED] Fetching evolution data for message 18434 in background [19:54:06] [PUSH_EMBED] ✅ Fully processed message 18434 [19:54:06] [PUSH] Embedded message handled instantly from silent push [19:54:06] [PUSH_EMBED] Got evolution data for message 18434, saving to local DB [19:54:06] [PUSH_EMBED] Saved evolution data for message 18434 [19:54:07] [PIN_AUTH] Correct PIN [19:54:07] [SECURITY] Restored real session: ILUIWU [19:54:07] [SECURITY] Restored real session: ILUIWU [19:54:07] [SECURITY] Saved real session: ILUIWU [19:54:07] [SCENE] Launched directly to chat view with sessionId: ILUIWU [19:54:07] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:54:07] Documents Directory: /var/mobile/Containers/Data/Application/FEAD2E1F-C4A1-4969-9070-16A67DA77312/Documents [19:54:07] [UPLOAD_QUEUE] Found 0 pending uploads to resume [19:54:07] [THEME] Applying current theme [19:54:07] [CHAT] Applied day theme (mode: day) [19:54:07] [SECURITY] Saved real session: ILUIWU [19:54:07] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:54:07] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:54:07] [NETWORK] Network monitor started [19:54:07] [NETWORK] Status changed: connected [19:54:07] Did transition [19:54:07] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [19:54:07] [VIEWER] Screen lock enabled - normal idle behavior [19:54:07] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [19:54:07] [VCC] ========== VideoConnectionClass INIT ========== [19:54:07] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [19:54:07] [DATA AUDIO] ========== setupWebRTC() START ========== [19:54:07] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [19:54:07] [DATA AUDIO] Creating encoder/decoder factories... [19:54:07] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [19:54:07] [CODEC] Viewer selected encoder: AV1 (best quality) [19:54:07] [DATA AUDIO] Creating RTCPeerConnectionFactory... [19:54:07] [DATA AUDIO] ✅ Factory created [19:54:07] [DATA AUDIO] RTCAudioSession locked [19:54:07] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [19:54:07] [DATA AUDIO] RTCAudioSession unlocked [19:54:07] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [19:54:07] [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"] [19:54:07] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [19:54:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:54:07] [QUERY] ✅ tempQueryConnection created for iosILUIWU [19:54:07] [VIEWER_INIT] Already have 50 messages - just filtering for tab [19:54:07] [EVENT_POLL] Event polling disabled - using WebSocket events instead [19:54:07] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [19:54:07] Did transition [19:54:07] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [19:54:07] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:54:07] [CHUNK] Merged 868 reactions synchronously [19:54:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:54:07] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [19:54:07] [MIGRATION] No messages need sender_name backfill [19:54:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:54:07] [GALLERY_DB] Raw datesent for msg 18430: '2026-01-21 18:17:11' [19:54:07] [GALLERY_DB] Raw datesent for msg 18409: '2026-01-21 15:37:22' [19:54:07] [GALLERY_DB] Raw datesent for msg 18407: '2026-01-21 15:35:55' [19:54:07] [USER] ✅ User registered successfully [19:54:07] [USER] User registration successful [19:54:07] [GALLERY_DB] ✅ Loaded 476 media messages [19:54:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18434 [19:54:07] [INCREMENTAL_SYNC] ✅ No new messages [19:54:07] [GALLERY] Filtered 476 -> 436 (only with local thumbnails) [19:54:07] [GALLERY] First 5 after sort (newest first): [19:54:07] [GALLERY] 0: id=18409, date=2026-01-21 15:37:22, file=f733dc0a9f704916.jpg [19:54:07] [GALLERY] 1: id=18407, date=2026-01-21 15:35:55, file=7494d317859e38fb.jpg [19:54:07] [GALLERY] 2: id=18380, date=2026-01-21 10:30:35, file=47f0a79ffd2469ec.jpg [19:54:07] [GALLERY] 3: id=18378, date=2026-01-21 10:26:20, file=7fcf17ed21a942d6.jpg [19:54:07] [GALLERY] 4: id=18340, date=2026-01-21 08:29:40, file=a4f205035ad487c7.jpg [19:54:07] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [19:54:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:54:07] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [19:54:07] [SERVER] Starting reconnect polling (5s interval) [19:54:07] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [19:54:07] [ICONS] Offset applied: -14.6 [19:54:07] [ICONS] New left margin: 11.2, New right margin: 11.3 [19:54:07] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=true owner=false animating=false completed=false [19:54:07] [GIF] msgId=18430 START fresh animation [19:54:07] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:54:07] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:54:07] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:54:07] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18433 → 18434 [19:54:07] [PURGE] ⚠️ Media cache purge DISABLED for debugging [19:54:07] [UNSENT_RETRY] Checking for unsent messages... [19:54:07] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [19:54:07] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [19:54:07] [UPLOAD_RECOVERY] Session: ILUIWU [19:54:07] [UPLOAD_RECOVERY] ✅ No stuck uploads found [19:54:07] [UPLOAD_RECOVERY] Checking recent media messages on server... [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [19:54:07] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [19:54:07] [PENDING_UPLOAD] Total pending upload messages: 0 [19:54:07] [UNSENT_RETRY] No unsent messages found [19:54:07] [ICONS] Chat center: (31.2, 87.0) [19:54:07] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [19:54:07] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [19:54:07] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [19:54:07] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [19:54:07] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [19:54:07] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [19:54:07] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [19:54:07] [ICONS] Screen width: 440.0 [19:54:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:54:07] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:54:07] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [19:54:07] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [19:54:07] [UPLOAD_RECOVERY] ✅ All media files verified on server [19:54:07] new_session POST ok: token len=157 [19:54:07] HELLO → sent (fetched token, role=query) [19:54:07] [SIG] hello_ok received for query connection - ready to query agents [19:54:07] [SIG] get_agents request sent for sessionId=ILUIWU [19:54:07] [SIG] get_agents request sent for sessionId=iosILUIWU [19:54:07] [SERVER] Stopped reconnect polling [19:54:07] [SIG] agents_list received: [] [19:54:07] [SIG] agents_list received: [] [19:54:08] [COMBINED_FETCH] Loaded 7200 read receipts, 875 messages with reactions [19:54:08] [READBY_ENRICH] Enriched 50 messages with readBy data [19:54:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:54:08] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=true animating=false completed=false [19:54:08] [GIF] msgId=18430 CONTINUE animation (elapsed=0.6861100196838379s) [19:54:08] [CELL_UPLOAD] configure: msgId=18430, file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=true, uploadStatus=0 [19:54:08] [CELL_UPLOAD] → giphy file, no upload needed, setting complete [19:54:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif, overlayExists=true [19:54:10] [PUSH] Silent push received [19:54:10] [PUSH_EMBED] No embedded message_data in notification [19:54:10] [PUSH] No embedded data, pre-loading messages from server [19:54:10] [PUSH_PRELOAD] Fetching messages for instant display cache [19:54:10] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:54:10] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [19:54:10] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:54:10] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18434, AnyHashable("aps"): { "content-available" = 1; }] [19:54:10] [PUSH] Parsed message_id: 18434 [19:54:10] [PUSH] Parsed operation_type: 3 [19:54:10] [PUSH] Taking direct action: opType=3, messageId=18434 [19:54:10] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18434 [19:54:11] [CLIENT_SIG] Event received: type=3 messageId=18434 [19:54:11] [WS_EVENT] Received event: type=3, messageId=18434 [19:54:11] [WS_EVENT] Read receipt for message 18434 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:54:13] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:54:14] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:54:14] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [19:54:14] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [19:54:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 18434, 18433, 18432, 18431] [19:54:14] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:54:14] [GIF] SKIP - same msg, completed [19:54:14] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:54:14] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:54:16] [CLIENT_SIG] Event received: type=0 messageId=18435 [19:54:16] [WS_EVENT] Received event: type=0, messageId=18435 [19:54:16] [WS_EVENT] 📨 New message notification (msgId=18435) - triggering incremental refresh, currentMsgCount=51 [19:54:16] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [19:54:16] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18434 [19:54:16] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-21 18:54:16 +0000 - type: unknown, operation_type: 0, message_id: 18435, session_id: ILUIWU, state: 0 [19:54:16] [PUSH_DEBUG] Full userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18435, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:54:13"; "file_name" = ""; message = "Oki Im not gonna say but.. \Ud83e\Udd13\Ud83e\Udd23"; "message_id" = 18435; "message_type" = 0; "prev_session_message_id" = 18434; "replied_message" = "But please when you reconnect I don't want you to be sorry. If you tell sorry a single time, you'll get punished \Ud83d\Ude08"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18432; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [19:54:16] [PUSH] App active - suppressing notification UI, posting internal event [19:54:16] [PUSH_EMBED] 📩 Received embedded message: id=18435, type=0, sender=Esra [19:54:16] [PUSH_EMBED] ✅ Saved message 18435 to local DB (sync) [19:54:16] [PUSH_EMBED] Inserted message 18435 into existing cache (now 51 messages) [19:54:16] [PUSH_EMBED] Fetching evolution data for message 18435 in background [19:54:16] [PUSH_EMBED] ✅ Fully processed message 18435 [19:54:16] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18435, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:54:13"; "file_name" = ""; message = "Oki Im not gonna say but.. \Ud83e\Udd13\Ud83e\Udd23"; "message_id" = 18435; "message_type" = 0; "prev_session_message_id" = 18434; "replied_message" = "But please when you reconnect I don't want you to be sorry. If you tell sorry a single time, you'll get punished \Ud83d\Ude08"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18432; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [19:54:16] [PUSH_EMBED_VC] Processing embedded message: id=18435, type=0, sender=Esra, prevId=18434 [19:54:16] [PUSH_EMBED_VC] Inserted message 18435 into allMessagesWithReadBy (now 52 messages) [19:54:16] [PUSH_EMBED_VC] ✅ Previous message 18434 exists in memory [19:54:16] [PUSH] ⚡ Embedded message handled directly in ViewController [19:54:16] [PUSH] Parsed message_id: 18435 [19:54:16] [PUSH] Parsed operation_type: 0 [19:54:16] [PUSH] Taking direct action: opType=0, messageId=18435 [19:54:16] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18435 [19:54:16] [PUSH] ⚡ Message 18435 already in memory - skipping duplicate notification entirely [19:54:16] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:54:16] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:54:16] [PUSH_UI] Message 18435 already in memory - skipping insert [19:54:16] [PUSH_EMBED_VC] Saved message 18435 to local DB [19:54:16] [PUSH] Silent push received [19:54:16] [PUSH_EMBED] 📩 Received embedded message: id=18435, type=0, sender=Esra [19:54:16] [INCREMENTAL_SYNC] ✅ Found 2 new messages [19:54:16] [PUSH_EMBED] ✅ Saved message 18435 to local DB (sync) [19:54:16] [PUSH_EMBED] Fetching evolution data for message 18435 in background [19:54:16] [PUSH_EMBED] ✅ Fully processed message 18435 [19:54:16] [PUSH] Embedded message handled instantly from silent push [19:54:16] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:54:16] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:54:16] [PUSH_UI] Message 18435 already in memory - skipping insert [19:54:16] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18435, AnyHashable("message_data"): { datesent = "2026-01-21 18:54:13"; "file_name" = ""; message = "Oki Im not gonna say but.. \Ud83e\Udd13\Ud83e\Udd23"; "message_id" = 18435; "message_type" = 0; "prev_session_message_id" = 18434; "replied_message" = "But please when you reconnect I don't want you to be sorry. If you tell sorry a single time, you'll get punished \Ud83d\Ude08"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18432; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [19:54:16] [PUSH_EMBED_VC] Message 18435 already in memory - skipping [19:54:16] [PUSH] ⚡ Embedded message handled directly in ViewController [19:54:16] [PUSH] Parsed message_id: 18435 [19:54:16] [PUSH] Parsed operation_type: 0 [19:54:16] [PUSH] Taking direct action: opType=0, messageId=18435 [19:54:16] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18435 [19:54:16] [PUSH] ⚡ Message 18435 already in memory - skipping duplicate notification entirely [19:54:16] [INCREMENTAL_SYNC] Replaced optimistic message (id=-1) with server message (id=18436) [19:54:16] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=2 [19:54:16] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:54:16] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [19:54:16] [PUSH_EMBED] Got evolution data for message 18435, saving to local DB [19:54:16] [PUSH_EMBED] Saved evolution data for message 18435 [19:54:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:54:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18434 → 18435 [19:54:16] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:54:16] [GIF] SKIP - same msg, completed [19:54:18] [CLIENT_SIG] Event received: type=0 messageId=18436 [19:54:18] [WS_EVENT] Received event: type=0, messageId=18436 [19:54:18] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18436,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:54:15"} [19:54:18] [WS_EVENT] 📨 New message notification (msgId=18436) - triggering incremental refresh, currentMsgCount=52 [19:54:18] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [19:54:18] [CHAT] receive_message.php JSON: ["ok": 1, "message_id": 18436, "message_type": 0, "session_id": ILUIWU, "datesent_utc": 2026-01-21 18:54:15, "file_name": ] [19:54:18] [DB_UPGRADE] Upgrading message ID: -1 → 18436, preserveOriginalDate=false [19:54:18] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18436 [19:54:18] [DB_UPGRADE] ⚠️ No rows affected - message -1 not found in DB [19:54:18] [SEND_UPGRADE] ⚠️ Server ID 18436 already exists - removing provisional entry -1 [19:54:18] ReloadData 9 [19:54:18] [PUSH_EMBED] Got evolution data for message 18435, saving to local DB [19:54:18] [PUSH_EMBED] Saved evolution data for message 18435 [19:54:18] [INCREMENTAL_SYNC] ✅ No new messages [19:54:18] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [19:54:21] [PUSH] Silent push received [19:54:21] [PUSH_EMBED] No embedded message_data in notification [19:54:21] [PUSH] No embedded data, pre-loading messages from server [19:54:21] [PUSH_PRELOAD] Fetching messages for instant display cache [19:54:21] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:54:21] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [18386, 18385] [19:54:21] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [19:54:21] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:54:21] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 18435, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [19:54:21] [PUSH] Parsed message_id: 18435 [19:54:21] [PUSH] Parsed operation_type: 3 [19:54:21] [PUSH] Taking direct action: opType=3, messageId=18435 [19:54:21] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18435 [19:54:21] [PUSH] Silent push received [19:54:21] [PUSH_EMBED] No embedded message_data in notification [19:54:21] [PUSH] No embedded data, pre-loading messages from server [19:54:21] [PUSH_PRELOAD] Fetching messages for instant display cache [19:54:21] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:54:21] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [18386, 18385] [19:54:21] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [19:54:21] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:54:21] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 18436, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [19:54:21] [PUSH] Parsed message_id: 18436 [19:54:21] [PUSH] Parsed operation_type: 3 [19:54:21] [PUSH] Taking direct action: opType=3, messageId=18436 [19:54:21] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18436 [19:54:22] [CLIENT_SIG] Event received: type=3 messageId=18435 [19:54:22] [WS_EVENT] Received event: type=3, messageId=18435 [19:54:22] [WS_EVENT] Read receipt for message 18435 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:54:22] [CLIENT_SIG] Event received: type=3 messageId=18436 [19:54:22] [WS_EVENT] Received event: type=3, messageId=18436 [19:54:22] [WS_EVENT] Read receipt for message 18436 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:54:33] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:54:33] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [19:54:33] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=53 [19:54:33] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-2, 18436, 18435, 18434, 18433] [19:54:33] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:54:33] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:54:35] [CLIENT_SIG] Event received: type=0 messageId=18437 [19:54:35] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18437,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:54:33"} [19:54:35] [WS_EVENT] Received event: type=0, messageId=18437 [19:54:35] [WS_EVENT] 📨 New message notification (msgId=18437) - triggering incremental refresh, currentMsgCount=53 [19:54:35] [CHAT] receive_message.php JSON: ["ok": 1, "session_id": ILUIWU, "file_name": , "message_type": 0, "message_id": 18437, "datesent_utc": 2026-01-21 18:54:33] [19:54:35] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [19:54:35] [DB_UPGRADE] Upgrading message ID: -2 → 18437, preserveOriginalDate=false [19:54:35] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18436 [19:54:35] [DB_UPGRADE] ✅ Upgraded -2 → 18437 with send_status=0, 1 row(s) affected [19:54:35] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 18437 [19:54:35] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 18437 [19:54:35] ReloadData 9 [19:54:35] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:54:35] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:54:35] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [19:54:35] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:54:49] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:54:49] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [19:54:49] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=54 [19:54:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-3, 18437, 18436, 18435, 18434] [19:54:49] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:54:49] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:54:51] [CLIENT_SIG] Event received: type=0 messageId=18438 [19:54:51] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18438,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:54:49"} [19:54:51] [WS_EVENT] Received event: type=0, messageId=18438 [19:54:51] [WS_EVENT] 📨 New message notification (msgId=18438) - triggering incremental refresh, currentMsgCount=54 [19:54:51] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "file_name": , "datesent_utc": 2026-01-21 18:54:49, "ok": 1, "message_type": 0, "message_id": 18438] [19:54:51] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [19:54:51] [DB_UPGRADE] Upgrading message ID: -3 → 18438, preserveOriginalDate=false [19:54:51] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18437 [19:54:51] [DB_UPGRADE] ✅ Upgraded -3 → 18438 with send_status=0, 1 row(s) affected [19:54:51] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 18438 [19:54:51] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 18438 [19:54:51] ReloadData 9 [19:54:51] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:54:51] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:54:51] [GIF] SKIP - same msg, completed [19:54:51] [LOCK] Lock button tapped - locking app immediately [19:54:51] [LOCK] Received lock app notification [19:54:51] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:54:51] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [19:54:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:54:51] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:54:51] [GIF] SKIP - same msg, completed [19:54:51] [LIFECYCLE] App resigning active - cleared crash flag [19:54:52] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:54:52] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:54:52] [LIFECYCLE] App entering background - cleared crash flag [19:54:52] [CLIENT_SIG] Disconnecting [19:54:52] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:54:52] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [19:54:52] [WS] Canceling WebSocket for query connection to iosILUIWU [19:54:52] In cleanupPeer [19:54:52] In cleanupPeer [19:54:52] [LIFECYCLE] WebRTC audio disabled [19:54:52] [LIFECYCLE] AVAudioSession deactivated [19:54:52] [LIFECYCLE] All connections stopped [19:54:52] [CLIENT_SIG] WebSocket closed with code 1001 [19:54:52] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:54:52] [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/} [19:54:52] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:54:52] [SERVER] Stopped reconnect polling [19:54:52] Will request stop of video 0 [19:54:52] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [19:54:52] [WS] Query connection error - cleaning up all agent connections and views [19:54:52] Will request stop of video 0 [19:54:52] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [19:54:52] [WS] Query connection failed - cleaning up all agent connections and views [19:54:52] [PIP] Removing 0 tracks from PiP for connection 0 [19:54:52] [PIP] ✅ All tracks removed for connection 0 [19:54:52] [CLEANUP] ======================================== [19:54:52] [CLEANUP] Cleaning up all agent connections and views [19:54:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:54:52] [CLEANUP] Stopped and removed 0 video connections [19:54:52] [CLEANUP] Removed 0 video views [19:54:52] [CLEANUP] Removed 0 feed scroll views [19:54:52] [CLEANUP] Removed 0 status labels [19:54:52] [CLEANUP] Reset agent query state [19:54:52] [CLEANUP] Updated page indicator [19:54:52] [CLEANUP] Rebuilt video layout [19:54:52] [CLEANUP] ✅ All agent connections and views cleaned up [19:54:52] [CLEANUP] ======================================== [19:54:52] [SERVER] Skipping reconnect polling - app is in background [19:54:52] [WS] URLSession invalidated successfully [19:54:52] [PIP] Removing 0 tracks from PiP for connection 0 [19:54:52] [PIP] ✅ All tracks removed for connection 0 [19:54:52] [CLEANUP] ======================================== [19:54:52] [CLEANUP] Cleaning up all agent connections and views [19:54:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:54:52] [CLEANUP] Stopped and removed 0 video connections [19:54:52] [CLEANUP] Removed 0 video views [19:54:52] [CLEANUP] Removed 0 feed scroll views [19:54:52] [CLEANUP] Removed 0 status labels [19:54:52] [CLEANUP] Reset agent query state [19:54:52] [CLEANUP] Updated page indicator [19:54:52] [CLEANUP] Rebuilt video layout [19:54:52] [CLEANUP] ✅ All agent connections and views cleaned up [19:54:52] [CLEANUP] ======================================== [19:54:52] [SERVER] Skipping reconnect polling - app is in background [19:55:04] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:55:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:55:04] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:55:04] [PUSH] Notification tapped - session_id: ILUIWU [19:55:04] [PUSH] Max message_id before tap: 18438 [19:55:04] [PUSH] Stored pending session: ILUIWU [19:55:04] [PUSH_EMBED] No embedded message_data in notification [19:55:04] [PUSH] Pre-loading messages on notification tap... [19:55:04] [PUSH_PRELOAD] Fetching messages for instant display cache [19:55:04] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:55:04] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:55:04] [LIFECYCLE] App entering foreground - restoring connections [19:55:04] [UPLOAD_RETRY] No pending uploads to retry [19:55:04] [LIFECYCLE] Merged 868 reactions from local DB [19:55:04] [LIFECYCLE] WebRTC audio re-enabled [19:55:04] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:55:04] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:55:04] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:55:04] [VIEWER] Reconnecting after background - querying agents [19:55:04] [UNSENT_RETRY] Checking for unsent messages... [19:55:04] [PENDING_UPLOAD] Total pending upload messages: 0 [19:55:04] [UNSENT_RETRY] No unsent messages found [19:55:04] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:55:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:55:04] [PRELOAD_CACHE] Preserving 5 push-inserted messages: [18389, 18388, 18387, 18386, 18385] [19:55:04] [PUSH_PRELOAD] ⚡ Pre-cached 55 messages for instant display (preserved 5 from push) [19:55:04] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:55:04] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:55:04] [GIF] SKIP - same msg, completed [19:55:04] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18439, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [19:55:04] [PUSH] Parsed message_id: 18439 [19:55:04] [PUSH] Parsed operation_type: 0 [19:55:04] [PUSH] Taking direct action: opType=0, messageId=18439 [19:55:04] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18439 [19:55:04] [PUSH] Handling message fetch for opType=0, messageId=18439 [19:55:04] [PUSH] Requesting URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?session_id=ILUIWU&viewer=1&messages=18439 [19:55:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:55:04] HELLO → sent (cached token, role=query) [19:55:04] [SIG] hello_ok received for query connection - ready to query agents [19:55:04] [SIG] get_agents request sent for sessionId=ILUIWU [19:55:04] [SIG] get_agents request sent for sessionId=iosILUIWU [19:55:04] [CLIENT_SIG] WebSocket opened [19:55:04] [SERVER] Stopped reconnect polling [19:55:04] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:55:04] [CLIENT_SIG] Connected! clientId=GoqLtFmVxl9f6qZY [19:55:04] [SIG] agents_list received: [] [19:55:04] [SIG] agents_list received: [] [19:55:04] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:55:04] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:04] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:55:04] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:55:04] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:55:04] [PUSH] handlePollEventsNotification userInfo: [:] [19:55:04] [PUSH] No message_id in userInfo [19:55:04] [PUSH] No operation_type in userInfo [19:55:04] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:55:04] [FAST_REFRESH] Already have 54 messages - skipping local DB load [19:55:04] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:55:04] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:55:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [19:55:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18439 [19:55:04] [COMBINED_FETCH] Loaded 7205 read receipts, 875 messages with reactions [19:55:04] [FOREGROUND] Enriched 2 messages with readBy data from server [19:55:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:55:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18385, 18386, 18387, 18388, 18389] [19:55:05] [GIF] configure msgId=18430 file=giphy:https://media3.giphy.com/media/v1.Y2lkPWE5ZTU0NDAzZGQ1dXAwMm5qMXVzanR0b2V2OTg0Y2c0cmxlOWN4ZzVid25iNHdvMyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/5WSdgFuyGNK7Zt8ajG/giphy.gif msgChanged=false owner=false animating=false completed=true [19:55:05] [GIF] SKIP - same msg, completed [19:55:05] [PIN_AUTH] Correct PIN [19:55:05] [SECURITY] Restored real session: ILUIWU [19:55:05] [SECURITY] Restored real session: ILUIWU [19:55:06] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [19:55:06] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [19:55:06] [AUTH] Cache had 55 messages, maxExistingId=18438, inserted 1 truly new [19:55:06] [AUTH] UI update complete [19:55:06] [FAKE MODE] Exiting fake mode, restoring real session [19:55:06] [SECURITY] Restored real session: ILUIWU [19:55:06] [SECURITY] Saved real session: ILUIWU [19:55:06] [FAKE MODE] ✅ Restored real session: ILUIWU [19:55:06] [FAKE MODE] Loaded 50 messages (limited to page size) [19:55:06] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:06] [CELL_UPLOAD] → not my message, setting complete [19:55:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:06] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18438 → 18439 [19:55:06] DOWNLOADIIING t_41101b95fabc37ab.jpg [19:55:06] DOWNLOADIIING 41101b95fabc37ab.jpg [19:55:06] [MEDIA_DOWNLOAD] ✅ t_41101b95fabc37ab.jpg complete [19:55:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:06] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 41101b95fabc37ab.jpg from downloaded: t_41101b95fabc37ab.jpg [19:55:06] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:06] [CELL_UPLOAD] → not my message, setting complete [19:55:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:55:06] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:06] [CELL_UPLOAD] → not my message, setting complete [19:55:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:06] [MEDIA_DOWNLOAD] ✅ 41101b95fabc37ab.jpg complete [19:55:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:06] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 41101b95fabc37ab.jpg from downloaded: 41101b95fabc37ab.jpg [19:55:06] [PUSH] Silent push received [19:55:06] [PUSH_EMBED] No embedded message_data in notification [19:55:06] [PUSH] No embedded data, pre-loading messages from server [19:55:06] [PUSH_PRELOAD] Fetching messages for instant display cache [19:55:06] [PUSH] Silent push received [19:55:06] [PUSH_EMBED] No embedded message_data in notification [19:55:06] [PUSH] No embedded data, pre-loading messages from server [19:55:06] [PUSH_PRELOAD] Fetching messages for instant display cache [19:55:07] [PUSH] get_message response: HTTP 200, 640 bytes [19:55:07] [PUSH] get_message response body: [{"message_type":1,"message_id":18439,"session_id":"ILUIWU","message":"","file_name":"41101b95fabc37ab.jpg","msgread":0,"datesent":"2026-01-21 18:54:54","timer":0,"timer_started_at":null,"timer_played":0,"sender_id":"EDAD55A1-003F-415D-AA60-672B34B504FE","sender_name":"Esra","distance":null,"link_url":null,"link_title":null,"link_description":null,"link_image_url":null,"reply_to_id":18433,"replied_message":"Just be the free lady who decides when her boyfriend deserves attention, and I want you to act as such 🥰","replied_sender_id":"3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF","replied_sender_name":"Laurent","read_by":[],"reactions":[]}] [19:55:07] [PUSH] Updated readBy in allMessagesWithReadBy for message 18439: readBy=0 [19:55:07] [PUSH] Updated readBy in chatMessages for message 18439: readBy=0 [19:55:07] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:55:07] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:55:07] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:55:07] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [19:55:07] [USER] ✅ User registered successfully [19:55:07] [PUSH] User registration after token update: success [19:55:07] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:55:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18439, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [19:55:07] [PUSH] Parsed message_id: 18439 [19:55:07] [PUSH] Parsed operation_type: 0 [19:55:07] [PUSH] Taking direct action: opType=0, messageId=18439 [19:55:07] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18439 [19:55:07] [PUSH] ⚡ Message 18439 already in memory - skipping duplicate notification entirely [19:55:07] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:55:07] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [19:55:07] [INCREMENTAL_SYNC] ✅ No new messages [19:55:07] [FAST_REFRESH] Incremental sync complete - 50 messages [19:55:07] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:55:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18439] [19:55:07] [PUSH] Parsed message_id: 18439 [19:55:07] [PUSH] Parsed operation_type: 3 [19:55:07] [PUSH] Taking direct action: opType=3, messageId=18439 [19:55:07] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18439 [19:55:08] [COMBINED_FETCH] Loaded 7205 read receipts, 876 messages with reactions [19:55:08] [FAST_REFRESH] Enriched 50 messages with readBy data [19:55:08] [COMBINED_FETCH] Loaded 7205 read receipts, 876 messages with reactions [19:55:08] [FAKE MODE] Enriched 50 messages with readBy data [19:55:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:55:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:55:08] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:08] [CELL_UPLOAD] → not my message, setting complete [19:55:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:10] [CLIENT_SIG] Event received: type=3 messageId=18439 [19:55:10] [WS_EVENT] Received event: type=3, messageId=18439 [19:55:10] [WS_EVENT] Read receipt for message 18439 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:55:10] [PUSH] Silent push received [19:55:10] [PUSH_EMBED] No embedded message_data in notification [19:55:10] [PUSH] No embedded data, pre-loading messages from server [19:55:10] [PUSH_PRELOAD] Fetching messages for instant display cache [19:55:10] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:55:10] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [19:55:10] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:55:10] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18439] [19:55:10] [PUSH] Parsed message_id: 18439 [19:55:10] [PUSH] Parsed operation_type: 3 [19:55:10] [PUSH] Taking direct action: opType=3, messageId=18439 [19:55:10] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18439 [19:55:14] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [19:55:14] [WS] Query connection error - cleaning up all agent connections and views [19:55:14] [CLEANUP] ======================================== [19:55:14] [CLEANUP] Cleaning up all agent connections and views [19:55:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:55:14] [CLEANUP] Stopped and removed 0 video connections [19:55:14] [CLEANUP] Removed 0 video views [19:55:14] [CLEANUP] Removed 0 feed scroll views [19:55:14] [CLEANUP] Removed 0 status labels [19:55:14] [CLEANUP] Reset agent query state [19:55:14] [CLEANUP] Updated page indicator [19:55:14] [CLEANUP] Rebuilt video layout [19:55:14] [CLEANUP] ✅ All agent connections and views cleaned up [19:55:14] [CLEANUP] ======================================== [19:55:14] [SERVER] Starting reconnect polling (5s interval) [19:55:18] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:55:18] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [19:55:18] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=51 [19:55:18] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-4, 18439, 18438, 18437, 18436] [19:55:18] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:18] [CELL_UPLOAD] → not my message, setting complete [19:55:18] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:18] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:55:18] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:55:19] [SERVER] Polling - attempting to reconnect... [19:55:20] [CLIENT_SIG] Event received: type=0 messageId=18440 [19:55:20] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18440,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:55:18"} [19:55:20] [WS_EVENT] Received event: type=0, messageId=18440 [19:55:20] [WS_EVENT] 📨 New message notification (msgId=18440) - triggering incremental refresh, currentMsgCount=51 [19:55:20] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [19:55:20] [CHAT] receive_message.php JSON: ["ok": 1, "session_id": ILUIWU, "file_name": , "message_type": 0, "message_id": 18440, "datesent_utc": 2026-01-21 18:55:18] [19:55:20] [DB_UPGRADE] Upgrading message ID: -4 → 18440, preserveOriginalDate=false [19:55:20] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18439 [19:55:20] [DB_UPGRADE] ✅ Upgraded -4 → 18440 with send_status=0, 1 row(s) affected [19:55:20] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 18440 [19:55:20] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 18440 [19:55:20] ReloadData 9 [19:55:20] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:20] [CELL_UPLOAD] → not my message, setting complete [19:55:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:20] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:55:20] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:55:20] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [19:55:20] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:55:20] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:20] [CELL_UPLOAD] → not my message, setting complete [19:55:20] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:22] [PUSH] Silent push received [19:55:22] [PUSH_EMBED] No embedded message_data in notification [19:55:22] [PUSH] No embedded data, pre-loading messages from server [19:55:22] [PUSH_PRELOAD] Fetching messages for instant display cache [19:55:22] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:55:23] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [18390] [19:55:23] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [19:55:23] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:55:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18440, AnyHashable("session_id"): ILUIWU] [19:55:23] [PUSH] Parsed message_id: 18440 [19:55:23] [PUSH] Parsed operation_type: 3 [19:55:23] [PUSH] Taking direct action: opType=3, messageId=18440 [19:55:23] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18440 [19:55:23] [CLIENT_SIG] Event received: type=3 messageId=18440 [19:55:23] [WS_EVENT] Received event: type=3, messageId=18440 [19:55:23] [WS_EVENT] Read receipt for message 18440 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:24] [SERVER] Polling - attempting to reconnect... [19:55:25] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:55:25] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [19:55:25] [SEND_MESSAGE] ✅ Added optimistic message id=-5 to arrays, newMsgCount=52 [19:55:25] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-5, 18440, 18439, 18438, 18437] [19:55:25] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:25] [CELL_UPLOAD] → not my message, setting complete [19:55:25] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:25] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:55:25] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:55:26] [CLIENT_SIG] Event received: type=0 messageId=18441 [19:55:26] [WS_EVENT] Received event: type=0, messageId=18441 [19:55:26] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18441,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:55:25"} [19:55:26] [WS_EVENT] 📨 New message notification (msgId=18441) - triggering incremental refresh, currentMsgCount=52 [19:55:26] [CHAT] receive_message.php JSON: ["message_id": 18441, "ok": 1, "file_name": , "message_type": 0, "session_id": ILUIWU, "datesent_utc": 2026-01-21 18:55:25] [19:55:26] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [19:55:26] [DB_UPGRADE] Upgrading message ID: -5 → 18441, preserveOriginalDate=false [19:55:26] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18440 [19:55:26] [DB_UPGRADE] ✅ Upgraded -5 → 18441 with send_status=0, 1 row(s) affected [19:55:26] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -5 → 18441 [19:55:26] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -5 → 18441 [19:55:26] ReloadData 9 [19:55:26] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:55:27] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:27] [CELL_UPLOAD] → not my message, setting complete [19:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:27] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:55:27] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [19:55:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:55:27] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:55:27] [CELL_UPLOAD] → not my message, setting complete [19:55:27] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:55:29] [SERVER] Polling - attempting to reconnect... [19:55:30] [PUSH] Silent push received [19:55:30] [PUSH_EMBED] No embedded message_data in notification [19:55:30] [PUSH] No embedded data, pre-loading messages from server [19:55:30] [PUSH_PRELOAD] Fetching messages for instant display cache [19:55:30] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:55:30] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [18391, 18390] [19:55:30] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [19:55:30] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:55:30] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18441] [19:55:30] [PUSH] Parsed message_id: 18441 [19:55:30] [PUSH] Parsed operation_type: 3 [19:55:30] [PUSH] Taking direct action: opType=3, messageId=18441 [19:55:30] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18441 [19:55:30] [CLIENT_SIG] Event received: type=3 messageId=18441 [19:55:30] [WS_EVENT] Received event: type=3, messageId=18441 [19:55:30] [WS_EVENT] Read receipt for message 18441 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:34] [SERVER] Polling - attempting to reconnect... [19:55:36] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:38] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:39] [SERVER] Polling - attempting to reconnect... [19:55:40] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:41] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:42] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:55:44] [SERVER] Polling - attempting to reconnect... [19:55:49] [SERVER] Polling - attempting to reconnect... [19:55:54] [SERVER] Polling - attempting to reconnect... [19:55:56] [LIFECYCLE] App resigning active - cleared crash flag [19:55:56] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [19:55:56] [SECURITY] Saved background timestamp [19:55:56] [LIFECYCLE] App entering background - cleared crash flag [19:55:56] [CLIENT_SIG] Disconnecting [19:55:56] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:55:56] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [19:55:56] [WS] Canceling WebSocket for query connection to iosILUIWU [19:55:56] In cleanupPeer [19:55:56] In cleanupPeer [19:55:56] [LIFECYCLE] WebRTC audio disabled [19:55:56] [LIFECYCLE] AVAudioSession deactivated [19:55:56] [LIFECYCLE] All connections stopped [19:55:56] [CLIENT_SIG] WebSocket closed with code 1001 [19:55:56] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:55:56] [SERVER] Stopped reconnect polling [19:55:56] [WS] URLSession invalidated successfully [19:55:56] Will request stop of video 0 [19:55:56] Will request stop of video 0 [19:55:56] [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/} [19:55:56] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:55:56] [PIP] Removing 0 tracks from PiP for connection 0 [19:55:56] [PIP] ✅ All tracks removed for connection 0 [19:55:56] [PIP] Removing 0 tracks from PiP for connection 0 [19:55:56] [PIP] ✅ All tracks removed for connection 0 [19:56:29] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [19:56:29] [WS] Query connection failed - cleaning up all agent connections and views [19:56:29] [CLEANUP] ======================================== [19:56:29] [CLEANUP] Cleaning up all agent connections and views [19:56:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:56:29] [CLEANUP] Stopped and removed 0 video connections [19:56:29] [CLEANUP] Removed 0 video views [19:56:29] [CLEANUP] Removed 0 feed scroll views [19:56:29] [CLEANUP] Removed 0 status labels [19:56:29] [CLEANUP] Reset agent query state [19:56:29] [CLEANUP] Updated page indicator [19:56:29] [CLEANUP] Rebuilt video layout [19:56:29] [CLEANUP] ✅ All agent connections and views cleaned up [19:56:29] [CLEANUP] ======================================== [19:56:29] [SERVER] Skipping reconnect polling - app is in background [19:56:30] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:56:30] [SECURITY] Timeout check: elapsed=34.30516290664673s, timeout=300.0s [19:56:30] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:56:30] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:56:30] [LIFECYCLE] App entering foreground - restoring connections [19:56:30] [UPLOAD_RETRY] No pending uploads to retry [19:56:30] [LIFECYCLE] Merged 868 reactions from local DB [19:56:30] [LIFECYCLE] WebRTC audio re-enabled [19:56:30] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:56:30] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:56:30] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:56:30] [VIEWER] Reconnecting after background - querying agents [19:56:30] [UNSENT_RETRY] Checking for unsent messages... [19:56:30] [PENDING_UPLOAD] Total pending upload messages: 0 [19:56:30] [UNSENT_RETRY] No unsent messages found [19:56:30] [PUSH] Notification tapped - session_id: ILUIWU [19:56:30] [PUSH] Max message_id before tap: 18441 [19:56:30] [PUSH] Stored pending session: ILUIWU [19:56:30] [PUSH_EMBED] 📩 Received embedded message: id=18442, type=0, sender=Esra [19:56:30] [PUSH_EMBED] ✅ Saved message 18442 to local DB (sync) [19:56:30] [PUSH_EMBED] Inserted message 18442 into existing cache (now 53 messages) [19:56:30] [PUSH_EMBED] Fetching evolution data for message 18442 in background [19:56:30] [PUSH_EMBED] ✅ Fully processed message 18442 [19:56:30] [PUSH] Embedded message handled instantly on tap [19:56:30] [PUSH] Fetching server messages since_id=18441 to catch coalesced notifications on tap [19:56:30] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:56:30] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:56:30] [PUSH_PRELOAD] Fetching up to 50 messages since_id=18441 to catch coalesced notifications [19:56:30] [PUSH_UI] Inserted message 18442 into UI (now 53 messages) [19:56:30] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:56:30] [PUSH_PRELOAD] Fetching messages for instant display cache [19:56:30] [PUSH_EMBED] Got evolution data for message 18442, saving to local DB [19:56:30] [PUSH_EMBED] Saved evolution data for message 18442 [19:56:30] [PUSH_PRELOAD] Fetched 1 messages - caching for instant display [19:56:30] [PRELOAD_CACHE] Preserving 52 push-inserted messages: [18441, 18440, 18439, 18438, 18437, 18436, 18435, 18434, 18433, 18432, 18431, 18430, 18429, 18428, 18427, 18426, 18425, 18424, 18423, 18422, 18421, 18420, 18419, 18418, 18417, 18416, 18415, 18414, 18413, 18412, 18411, 18410, 18409, 18408, 18407, 18406, 18405, 18404, 18403, 18402, 18401, 18400, 18399, 18398, 18397, 18396, 18395, 18394, 18393, 18392, 18391, 18390] [19:56:30] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 52 from push) [19:56:30] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:56:30] [PUSH] Server fetch on tap completed (success=true) [19:56:30] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18442, AnyHashable("message_data"): { datesent = "2026-01-21 18:56:25"; "file_name" = ""; message = "I want you to do 5 1-0s until tomorrow lunch time\Ud83d\Ude0f"; "message_id" = 18442; "message_type" = 0; "prev_session_message_id" = 18441; "replied_message" = "If my baby is in the mood and wants to give me orders for tonight in bed and / or tomorrow morning at wake up and / or under shower, her slave will have no other choice than to obey. If my baby is less in the mood, then absolutely no problem \U2764\Ufe0f"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18429; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [19:56:30] [PUSH_EMBED_VC] Message 18442 already in memory - skipping [19:56:30] [PUSH] ⚡ Embedded message handled directly in ViewController [19:56:30] [PUSH] Parsed message_id: 18442 [19:56:30] [PUSH] Parsed operation_type: 0 [19:56:30] [PUSH] Taking direct action: opType=0, messageId=18442 [19:56:30] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18442 [19:56:30] [PUSH] ⚡ Message 18442 already in memory - skipping duplicate notification entirely [19:56:30] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18442, 18390, 18391, 18392, 18393] [19:56:30] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:56:30] [CELL_UPLOAD] → not my message, setting complete [19:56:30] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:56:30] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18441 → 18442 [19:56:30] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [19:56:30] [WS] Opening session at ws://crivello.dyndns.org:8081/ [19:56:30] [CLIENT_SIG] WebSocket opened [19:56:30] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:56:30] [CLIENT_SIG] Connected! clientId=8IRSrYLE6c7uftd0 [19:56:30] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:56:30] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:56:30] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:56:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [19:56:31] HELLO → sent (cached token, role=query) [19:56:31] [SIG] hello_ok received for query connection - ready to query agents [19:56:31] [SIG] get_agents request sent for sessionId=ILUIWU [19:56:31] [SIG] get_agents request sent for sessionId=iosILUIWU [19:56:31] [SERVER] Stopped reconnect polling [19:56:31] [SIG] agents_list received: [] [19:56:31] [SIG] agents_list received: [] [19:56:31] [COMBINED_FETCH] Loaded 7208 read receipts, 877 messages with reactions [19:56:31] [FOREGROUND] Enriched 1 messages with readBy data from server [19:56:31] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [19:56:31] [SECURITY] Within timeout - cleared background flag [19:56:31] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:56:31] [PUSH] handlePollEventsNotification userInfo: [:] [19:56:31] [PUSH] No message_id in userInfo [19:56:31] [PUSH] No operation_type in userInfo [19:56:31] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:56:31] [FAST_REFRESH] Already have 53 messages - skipping local DB load [19:56:31] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:56:31] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:56:31] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:56:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [19:56:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18442 [19:56:31] [INCREMENTAL_SYNC] ✅ No new messages [19:56:31] [FAST_REFRESH] Incremental sync complete - 53 messages [19:56:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18442, 18390, 18391, 18392, 18393] [19:56:31] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:56:31] [CELL_UPLOAD] → not my message, setting complete [19:56:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:56:31] [COMBINED_FETCH] Loaded 7208 read receipts, 877 messages with reactions [19:56:31] [FAST_REFRESH] Enriched 53 messages with readBy data [19:56:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18442, 18390, 18391, 18392, 18393] [19:56:31] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:56:31] [CELL_UPLOAD] → not my message, setting complete [19:56:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:56:32] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [19:56:32] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [19:56:32] [PUSH] Silent push received [19:56:32] [PUSH_EMBED] 📩 Received embedded message: id=18442, type=0, sender=Esra [19:56:32] [PUSH_EMBED] ✅ Saved message 18442 to local DB (sync) [19:56:32] [PUSH_EMBED] Fetching evolution data for message 18442 in background [19:56:32] [PUSH_EMBED] ✅ Fully processed message 18442 [19:56:32] [PUSH] Embedded message handled instantly from silent push [19:56:32] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:56:32] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:56:32] [PUSH_UI] Message 18442 already in memory - skipping insert [19:56:32] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 18442, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:56:25"; "file_name" = ""; message = "I want you to do 5 1-0s until tomorrow lunch time\Ud83d\Ude0f"; "message_id" = 18442; "message_type" = 0; "prev_session_message_id" = 18441; "replied_message" = "If my baby is in the mood and wants to give me orders for tonight in bed and / or tomorrow morning at wake up and / or under shower, her slave will have no other choice than to obey. If my baby is less in the mood, then absolutely no problem \U2764\Ufe0f"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 18429; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [19:56:32] [PUSH_EMBED_VC] Message 18442 already in memory - skipping [19:56:32] [PUSH] ⚡ Embedded message handled directly in ViewController [19:56:32] [PUSH] Parsed message_id: 18442 [19:56:32] [PUSH] Parsed operation_type: 0 [19:56:32] [PUSH] Taking direct action: opType=0, messageId=18442 [19:56:32] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18442 [19:56:32] [PUSH] ⚡ Message 18442 already in memory - skipping duplicate notification entirely [19:56:32] [PUSH_EMBED] Got evolution data for message 18442, saving to local DB [19:56:32] [PUSH_EMBED] Saved evolution data for message 18442 [19:56:32] [PUSH] Silent push received [19:56:32] [PUSH_EMBED] No embedded message_data in notification [19:56:32] [PUSH] No embedded data, pre-loading messages from server [19:56:32] [PUSH_PRELOAD] Fetching messages for instant display cache [19:56:33] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:56:33] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [18392, 18391, 18390] [19:56:33] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [19:56:33] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:56:33] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18442, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [19:56:33] [PUSH] Parsed message_id: 18442 [19:56:33] [PUSH] Parsed operation_type: 3 [19:56:33] [PUSH] Taking direct action: opType=3, messageId=18442 [19:56:33] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18442 [19:56:33] [CLIENT_SIG] Event received: type=3 messageId=18442 [19:56:33] [WS_EVENT] Received event: type=3, messageId=18442 [19:56:33] [WS_EVENT] Read receipt for message 18442 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:56:40] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [19:56:40] [WS] Query connection error - cleaning up all agent connections and views [19:56:40] [CLEANUP] ======================================== [19:56:40] [CLEANUP] Cleaning up all agent connections and views [19:56:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [19:56:40] [CLEANUP] Stopped and removed 0 video connections [19:56:40] [CLEANUP] Removed 0 video views [19:56:40] [CLEANUP] Removed 0 feed scroll views [19:56:40] [CLEANUP] Removed 0 status labels [19:56:40] [CLEANUP] Reset agent query state [19:56:40] [CLEANUP] Updated page indicator [19:56:40] [CLEANUP] Rebuilt video layout [19:56:40] [CLEANUP] ✅ All agent connections and views cleaned up [19:56:40] [CLEANUP] ======================================== [19:56:40] [SERVER] Starting reconnect polling (5s interval) [19:56:45] [SERVER] Polling - attempting to reconnect... [19:56:48] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:56:48] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [19:56:48] [SEND_MESSAGE] ✅ Added optimistic message id=-6 to arrays, newMsgCount=54 [19:56:48] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-6, 18442, 18441, 18440, 18439] [19:56:48] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:56:48] [CELL_UPLOAD] → not my message, setting complete [19:56:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:56:48] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:56:48] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:56:50] [CLIENT_SIG] Event received: type=0 messageId=18443 [19:56:50] [WS_EVENT] Received event: type=0, messageId=18443 [19:56:50] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18443,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:56:48"} [19:56:50] [WS_EVENT] 📨 New message notification (msgId=18443) - triggering incremental refresh, currentMsgCount=54 [19:56:50] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "file_name": , "datesent_utc": 2026-01-21 18:56:48, "message_id": 18443, "ok": 1, "message_type": 0] [19:56:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [19:56:50] [DB_UPGRADE] Upgrading message ID: -6 → 18443, preserveOriginalDate=false [19:56:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18442 [19:56:50] [DB_UPGRADE] ✅ Upgraded -6 → 18443 with send_status=0, 1 row(s) affected [19:56:50] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -6 → 18443 [19:56:50] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -6 → 18443 [19:56:50] ReloadData 9 [19:56:50] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:56:50] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:56:50] [CELL_UPLOAD] → not my message, setting complete [19:56:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:56:50] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:56:50] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [19:56:50] [MENU] dismissAnyExistingMenu called [19:56:50] [MENU] dismissAnyExistingMenu completed [19:56:50] [EMOJI_PICKER] Starting emoji picker for message 18442 [19:56:50] [MENU] Created button 'Reply' at index 0 [19:56:50] [MENU] Created button 'Copy' at index 1 [19:56:50] [MENU] Created button 'Delete' at index 2 [19:56:50] [MENU] Menu added at y=539.0 [19:56:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:56:50] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:56:50] [CELL_UPLOAD] → not my message, setting complete [19:56:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:56:50] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [19:56:50] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [19:56:50] [EMOJI_PICKER] ✅ Picker shown at y=337.0 [19:56:50] [SERVER] Polling - attempting to reconnect... [19:56:51] [REACTION] add 👄 to message 18442 (alreadyReacted: false) [19:56:51] [MENU] dismissAnyExistingMenu called [19:56:51] [MENU] Found menu with tag 9999, removing [19:56:51] [MENU] Removing blur effect [19:56:51] [MENU] Removing floating message snapshot [19:56:51] [MENU] Dismissing emoji picker [19:56:51] [MENU] Recorded dismissal time for debounce [19:56:51] [MENU] dismissAnyExistingMenu completed [19:56:52] [REACTION] Added 👄 reaction to message 18442 [19:56:54] [MENU] dismissAnyExistingMenu called [19:56:54] [MENU] dismissAnyExistingMenu completed [19:56:55] [SERVER] Polling - attempting to reconnect... [19:56:58] [LOCK] Lock button tapped - locking app immediately [19:56:58] [LOCK] Received lock app notification [19:56:58] [LIFECYCLE] App resigning active - cleared crash flag [19:56:59] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:56:59] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:56:59] [LIFECYCLE] App entering background - cleared crash flag [19:56:59] [CLIENT_SIG] Disconnecting [19:56:59] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:56:59] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [19:56:59] [WS] Canceling WebSocket for query connection to iosILUIWU [19:56:59] In cleanupPeer [19:56:59] In cleanupPeer [19:56:59] [LIFECYCLE] WebRTC audio disabled [19:56:59] [LIFECYCLE] AVAudioSession deactivated [19:56:59] [LIFECYCLE] All connections stopped [19:56:59] [CLIENT_SIG] WebSocket closed with code 1001 [19:56:59] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:56:59] [SERVER] Stopped reconnect polling [19:56:59] [WS] URLSession invalidated successfully [19:56:59] Will request stop of video 0 [19:56:59] Will request stop of video 0 [19:56:59] [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/} [19:56:59] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:56:59] [PIP] Removing 0 tracks from PiP for connection 0 [19:56:59] [PIP] ✅ All tracks removed for connection 0 [19:56:59] [PIP] Removing 0 tracks from PiP for connection 0 [19:56:59] [PIP] ✅ All tracks removed for connection 0 [19:57:42] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:57:42] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:57:42] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:57:42] [LIFECYCLE] App entering foreground - restoring connections [19:57:42] [UPLOAD_RETRY] No pending uploads to retry [19:57:42] [LIFECYCLE] Merged 869 reactions from local DB [19:57:42] [LIFECYCLE] WebRTC audio re-enabled [19:57:42] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:57:42] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:57:42] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:57:42] [VIEWER] Reconnecting after background - querying agents [19:57:42] [UNSENT_RETRY] Checking for unsent messages... [19:57:42] [PENDING_UPLOAD] Total pending upload messages: 0 [19:57:42] [UNSENT_RETRY] No unsent messages found [19:57:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:57:43] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:43] [CELL_UPLOAD] → not my message, setting complete [19:57:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:43] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [19:57:43] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:57:43] [PUSH] handlePollEventsNotification userInfo: [:] [19:57:43] [PUSH] No message_id in userInfo [19:57:43] [PUSH] No operation_type in userInfo [19:57:43] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:57:43] [FAST_REFRESH] Already have 54 messages - skipping local DB load [19:57:43] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:57:43] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:57:43] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [19:57:43] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18443 [19:57:43] [CLIENT_SIG] WebSocket opened [19:57:43] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:57:43] [CLIENT_SIG] Connected! clientId=lBQOtIB-_p04CUVO [19:57:43] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:57:43] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:57:43] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:57:43] [INCREMENTAL_SYNC] ✅ No new messages [19:57:43] [FAST_REFRESH] Incremental sync complete - 54 messages [19:57:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:57:43] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:43] [CELL_UPLOAD] → not my message, setting complete [19:57:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:43] [PUSH] Silent push received [19:57:43] [PUSH_EMBED] No embedded message_data in notification [19:57:43] [PUSH] No embedded data, pre-loading messages from server [19:57:43] [PUSH_PRELOAD] Fetching messages for instant display cache [19:57:43] [COMBINED_FETCH] Loaded 7209 read receipts, 878 messages with reactions [19:57:43] [FOREGROUND] Enriched 1 messages with readBy data from server [19:57:43] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:57:43] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [18393, 18392, 18391, 18390] [19:57:43] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [19:57:43] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:57:43] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 18443] [19:57:43] [PUSH] Parsed message_id: 18443 [19:57:43] [PUSH] Parsed operation_type: 3 [19:57:43] [PUSH] Taking direct action: opType=3, messageId=18443 [19:57:43] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18443 [19:57:43] [COMBINED_FETCH] Loaded 7209 read receipts, 878 messages with reactions [19:57:43] [FAST_REFRESH] Enriched 54 messages with readBy data [19:57:43] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:57:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[18390, 18391, 18392, 18393, 18394] [19:57:43] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:43] [CELL_UPLOAD] → not my message, setting complete [19:57:43] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:44] [PIN_AUTH] Correct PIN [19:57:44] [SECURITY] Restored real session: ILUIWU [19:57:44] [SECURITY] Restored real session: ILUIWU [19:57:44] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [19:57:44] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [19:57:44] [AUTH] Cache had 54 messages, maxExistingId=18443, inserted 0 truly new [19:57:44] [AUTH] UI update complete [19:57:44] [FAKE MODE] Exiting fake mode, restoring real session [19:57:44] [SECURITY] Restored real session: ILUIWU [19:57:44] [SECURITY] Saved real session: ILUIWU [19:57:44] [FAKE MODE] ✅ Restored real session: ILUIWU [19:57:44] [FAKE MODE] Loaded 50 messages (limited to page size) [19:57:44] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [19:57:44] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [19:57:44] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:44] [CELL_UPLOAD] → not my message, setting complete [19:57:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18394, 18395, 18396, 18397, 18398] [19:57:44] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:44] [CELL_UPLOAD] → not my message, setting complete [19:57:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:44] [USER] ✅ User registered successfully [19:57:44] [PUSH] User registration after token update: success [19:57:45] [COMBINED_FETCH] Loaded 7209 read receipts, 878 messages with reactions [19:57:45] [FAKE MODE] Enriched 50 messages with readBy data [19:57:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18394, 18395, 18396, 18397, 18398] [19:57:45] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:45] [CELL_UPLOAD] → not my message, setting complete [19:57:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:47] [MENU] dismissAnyExistingMenu called [19:57:47] [MENU] dismissAnyExistingMenu completed [19:57:49] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:57:49] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:57:50] [CLIENT_SIG] Event received: type=0 messageId=18444 [19:57:50] [WS_EVENT] Received event: type=0, messageId=18444 [19:57:50] [WS_EVENT] 📨 New message notification (msgId=18444) - triggering incremental refresh, currentMsgCount=50 [19:57:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [19:57:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18443 [19:57:50] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-21 18:57:50 +0000 - type: unknown, operation_type: 0, message_id: 18444, session_id: ILUIWU, state: 0 [19:57:50] [PUSH_DEBUG] Full userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:57:49"; "file_name" = ""; message = "You should start in 1 hr"; "message_id" = 18444; "message_type" = 0; "prev_session_message_id" = 18443; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18444] [19:57:50] [PUSH] App active - suppressing notification UI, posting internal event [19:57:50] [PUSH_EMBED] 📩 Received embedded message: id=18444, type=0, sender=Esra [19:57:50] [PUSH_EMBED] ✅ Saved message 18444 to local DB (sync) [19:57:50] [PUSH_EMBED] Created new cache with embedded message 18444 [19:57:50] [PUSH_EMBED] Fetching evolution data for message 18444 in background [19:57:50] [PUSH_EMBED] ✅ Fully processed message 18444 [19:57:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:57:49"; "file_name" = ""; message = "You should start in 1 hr"; "message_id" = 18444; "message_type" = 0; "prev_session_message_id" = 18443; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18444] [19:57:50] [PUSH_EMBED_VC] Processing embedded message: id=18444, type=0, sender=Esra, prevId=18443 [19:57:50] [PUSH_EMBED_VC] Inserted message 18444 into allMessagesWithReadBy (now 51 messages) [19:57:50] [PUSH_EMBED_VC] ✅ Previous message 18443 exists in memory [19:57:50] [PUSH] ⚡ Embedded message handled directly in ViewController [19:57:50] [PUSH] Parsed message_id: 18444 [19:57:50] [PUSH] Parsed operation_type: 0 [19:57:50] [PUSH] Taking direct action: opType=0, messageId=18444 [19:57:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18444 [19:57:50] [PUSH] ⚡ Message 18444 already in memory - skipping duplicate notification entirely [19:57:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:57:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:57:50] [PUSH_UI] Message 18444 already in memory - skipping insert [19:57:50] [PUSH_EMBED_VC] Saved message 18444 to local DB [19:57:50] [PUSH] Silent push received [19:57:50] [PUSH_EMBED] 📩 Received embedded message: id=18444, type=0, sender=Esra [19:57:50] [PUSH_EMBED] ✅ Saved message 18444 to local DB (sync) [19:57:50] [PUSH_EMBED] Created new cache with embedded message 18444 [19:57:50] [PUSH_EMBED] Fetching evolution data for message 18444 in background [19:57:50] [PUSH_EMBED] ✅ Fully processed message 18444 [19:57:50] [PUSH] Embedded message handled instantly from silent push [19:57:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:57:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:57:50] [PUSH_UI] Message 18444 already in memory - skipping insert [19:57:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-21 18:57:49"; "file_name" = ""; message = "You should start in 1 hr"; "message_id" = 18444; "message_type" = 0; "prev_session_message_id" = 18443; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18444] [19:57:50] [PUSH_EMBED_VC] Message 18444 already in memory - skipping [19:57:50] [PUSH] ⚡ Embedded message handled directly in ViewController [19:57:50] [PUSH] Parsed message_id: 18444 [19:57:50] [PUSH] Parsed operation_type: 0 [19:57:50] [PUSH] Taking direct action: opType=0, messageId=18444 [19:57:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18444 [19:57:50] [PUSH] ⚡ Message 18444 already in memory - skipping duplicate notification entirely [19:57:50] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:57:50] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:57:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [19:57:50] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [19:57:50] [PUSH_EMBED] Got evolution data for message 18444, saving to local DB [19:57:50] [PUSH_EMBED] Saved evolution data for message 18444 [19:57:50] [PUSH_EMBED] Got evolution data for message 18444, saving to local DB [19:57:50] [PUSH_EMBED] Saved evolution data for message 18444 [19:57:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[18394, 18395, 18396, 18397, 18398] [19:57:50] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:50] [CELL_UPLOAD] → not my message, setting complete [19:57:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:57:50] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18443 → 18444 [19:57:52] [PUSH] Silent push received [19:57:52] [PUSH_EMBED] No embedded message_data in notification [19:57:52] [PUSH] No embedded data, pre-loading messages from server [19:57:52] [PUSH_PRELOAD] Fetching messages for instant display cache [19:57:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:57:52] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [19:57:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:57:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 18444] [19:57:52] [PUSH] Parsed message_id: 18444 [19:57:52] [PUSH] Parsed operation_type: 3 [19:57:52] [PUSH] Taking direct action: opType=3, messageId=18444 [19:57:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18444 [19:57:52] [CLIENT_SIG] Event received: type=3 messageId=18444 [19:57:52] [WS_EVENT] Received event: type=3, messageId=18444 [19:57:52] [WS_EVENT] Read receipt for message 18444 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:57:52] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [19:57:58] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:57:58] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [19:57:58] [SEND_MESSAGE] ✅ Added optimistic message id=-7 to arrays, newMsgCount=52 [19:57:58] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-7, 18444, 18443, 18442, 18441] [19:57:58] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:57:58] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:57:58] [CELL_UPLOAD] configure: msgId=18439, file=41101b95fabc37ab.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [19:57:58] [CELL_UPLOAD] → not my message, setting complete [19:57:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=41101b95fabc37ab.jpg, overlayExists=true [19:58:00] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:58:00] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [19:58:00] [SEND_MESSAGE] ✅ Added optimistic message id=-8 to arrays, newMsgCount=53 [19:58:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-8, -7, 18444, 18443, 18442] [19:58:00] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:58:00] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:58:00] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18445,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:57:58"} [19:58:00] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-21 18:57:58, "message_type": 0, "file_name": , "ok": 1, "session_id": ILUIWU, "message_id": 18445] [19:58:00] [DB_UPGRADE] Upgrading message ID: -7 → 18445, preserveOriginalDate=false [19:58:00] [DB_UPGRADE] ✅ Upgraded -7 → 18445 with send_status=0, 1 row(s) affected [19:58:00] [CLIENT_SIG] Event received: type=0 messageId=18445 [19:58:00] [WS_EVENT] Received event: type=0, messageId=18445 [19:58:00] [WS_EVENT] 📨 New message notification (msgId=18445) - triggering incremental refresh, currentMsgCount=53 [19:58:00] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [19:58:00] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18445 [19:58:00] [SEND_UPGRADE] ✅ Updated chatMessages[1].id: -7 → 18445 [19:58:00] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[1].id: -7 → 18445 [19:58:00] ReloadData 9 [19:58:01] [INCREMENTAL_SYNC] ✅ Found 1 new messages [19:58:01] [INCREMENTAL_SYNC] Replaced optimistic message (id=-8) with server message (id=18446) [19:58:01] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [19:58:01] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [19:58:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[18394, 18395, 18396, 18397, 18398] [19:58:02] [CLIENT_SIG] Event received: type=0 messageId=18446 [19:58:02] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18446,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:58:00"} [19:58:02] [WS_EVENT] Received event: type=0, messageId=18446 [19:58:02] [WS_EVENT] 📨 New message notification (msgId=18446) - triggering incremental refresh, currentMsgCount=53 [19:58:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [19:58:02] [CHAT] receive_message.php JSON: ["file_name": , "ok": 1, "datesent_utc": 2026-01-21 18:58:00, "session_id": ILUIWU, "message_id": 18446, "message_type": 0] [19:58:02] [DB_UPGRADE] Upgrading message ID: -8 → 18446, preserveOriginalDate=false [19:58:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18446 [19:58:02] [DB_UPGRADE] ⚠️ No rows affected - message -8 not found in DB [19:58:02] [SEND_UPGRADE] ⚠️ Server ID 18446 already exists - removing provisional entry -8 [19:58:02] ReloadData 9 [19:58:02] [INCREMENTAL_SYNC] ✅ No new messages [19:58:02] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [19:58:03] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:58:03] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [19:58:03] [SEND_MESSAGE] ✅ Added optimistic message id=-9 to arrays, newMsgCount=54 [19:58:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-9, 18446, 18445, 18444, 18443] [19:58:03] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:58:03] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:58:05] [PUSH] Silent push received [19:58:05] [PUSH_EMBED] No embedded message_data in notification [19:58:05] [PUSH] No embedded data, pre-loading messages from server [19:58:05] [PUSH_PRELOAD] Fetching messages for instant display cache [19:58:05] [PUSH] Silent push received [19:58:05] [PUSH_EMBED] No embedded message_data in notification [19:58:05] [PUSH] No embedded data, pre-loading messages from server [19:58:05] [PUSH_PRELOAD] Fetching messages for instant display cache [19:58:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:58:05] [CLIENT_SIG] Event received: type=0 messageId=18447 [19:58:05] [WS_EVENT] Received event: type=0, messageId=18447 [19:58:05] [WS_EVENT] 📨 New message notification (msgId=18447) - triggering incremental refresh, currentMsgCount=54 [19:58:05] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [19:58:05] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18447 [19:58:05] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:58:05] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=54, isReloading=true [19:58:05] [SEND_MESSAGE] ✅ Added optimistic message id=-10 to arrays, newMsgCount=55 [19:58:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[-10, -9, 18446, 18445, 18444] [19:58:05] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [18397, 18396, 18395] [19:58:05] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [19:58:05] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18447,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:58:03"} [19:58:05] [CHAT] receive_message.php JSON: ["ok": 1, "session_id": ILUIWU, "message_id": 18447, "message_type": 0, "datesent_utc": 2026-01-21 18:58:03, "file_name": ] [19:58:05] [DB_UPGRADE] Upgrading message ID: -9 → 18447, preserveOriginalDate=false [19:58:05] [DB_UPGRADE] ❌ Step fail: UNIQUE constraint failed: local_messages.message_id [19:58:05] [INCREMENTAL_SYNC] ✅ No new messages [19:58:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:58:05] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [18397, 18396, 18395] [19:58:05] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [19:58:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:58:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:58:05] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:58:05] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:58:05] ReloadData 9 [19:58:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 18445, AnyHashable("session_id"): ILUIWU] [19:58:05] [PUSH] Parsed message_id: 18445 [19:58:05] [PUSH] Parsed operation_type: 3 [19:58:05] [PUSH] Taking direct action: opType=3, messageId=18445 [19:58:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18445 [19:58:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18446, AnyHashable("aps"): { "content-available" = 1; }] [19:58:05] [PUSH] Parsed message_id: 18446 [19:58:05] [PUSH] Parsed operation_type: 3 [19:58:05] [PUSH] Taking direct action: opType=3, messageId=18446 [19:58:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18446 [19:58:05] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=55 [19:58:07] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [19:58:07] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=55, isReloading=false [19:58:07] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18448,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:58:05"} [19:58:07] [CHAT] receive_message.php JSON: ["message_id": 18448, "message_type": 0, "session_id": ILUIWU, "datesent_utc": 2026-01-21 18:58:05, "file_name": , "ok": 1] [19:58:07] [DB_UPGRADE] Upgrading message ID: -10 → 18448, preserveOriginalDate=false [19:58:07] [DB_UPGRADE] ✅ Upgraded -10 → 18448 with send_status=0, 1 row(s) affected [19:58:07] [SEND_MESSAGE] ✅ Added optimistic message id=-11 to arrays, newMsgCount=56 [19:58:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[-11, -10, 18447, 18446, 18445] [19:58:07] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [19:58:07] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [19:58:07] [CLIENT_SIG] Event received: type=0 messageId=18448 [19:58:07] [WS_EVENT] Received event: type=0, messageId=18448 [19:58:07] [WS_EVENT] 📨 New message notification (msgId=18448) - triggering incremental refresh, currentMsgCount=56 [19:58:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=56 [19:58:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18448 [19:58:07] [SEND_UPGRADE] ✅ Updated chatMessages[1].id: -10 → 18448 [19:58:07] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[1].id: -10 → 18448 [19:58:07] ReloadData 9 [19:58:08] [CLIENT_SIG] Event received: type=3 messageId=18445 [19:58:08] [WS_EVENT] Received event: type=3, messageId=18445 [19:58:08] [WS_EVENT] Read receipt for message 18445 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:08] [INCREMENTAL_SYNC] ✅ No new messages [19:58:08] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=56 [19:58:08] [CLIENT_SIG] Event received: type=3 messageId=18446 [19:58:08] [WS_EVENT] Received event: type=3, messageId=18446 [19:58:08] [WS_EVENT] Read receipt for message 18446 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:09] [LIFECYCLE] App resigning active - cleared crash flag [19:58:09] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [19:58:09] [SECURITY] Saved background timestamp [19:58:09] [LIFECYCLE] App entering background - cleared crash flag [19:58:09] [CLIENT_SIG] Disconnecting [19:58:09] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:58:09] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [19:58:09] In cleanupPeer [19:58:09] In cleanupPeer [19:58:09] [LIFECYCLE] WebRTC audio disabled [19:58:09] [LIFECYCLE] AVAudioSession deactivated [19:58:09] [LIFECYCLE] All connections stopped [19:58:09] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18449,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 18:58:08"} [19:58:09] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-21 18:58:08, "ok": 1, "session_id": ILUIWU, "message_type": 0, "message_id": 18449, "file_name": ] [19:58:09] [DB_UPGRADE] Upgrading message ID: -11 → 18449, preserveOriginalDate=false [19:58:09] [DB_UPGRADE] ⚠️ No rows affected - message -11 not found in DB [19:58:10] [CLIENT_SIG] WebSocket closed with code 1001 [19:58:10] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:58:10] [SERVER] Stopped reconnect polling [19:58:10] Will request stop of video 0 [19:58:10] Will request stop of video 0 [19:58:10] [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/} [19:58:10] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:58:10] ReloadData 9 [19:58:10] [PIP] Removing 0 tracks from PiP for connection 0 [19:58:10] [PIP] ✅ All tracks removed for connection 0 [19:58:10] [PIP] Removing 0 tracks from PiP for connection 0 [19:58:10] [PIP] ✅ All tracks removed for connection 0 [19:58:10] [PUSH] Silent push received [19:58:10] [PUSH_EMBED] No embedded message_data in notification [19:58:10] [PUSH] No embedded data, pre-loading messages from server [19:58:10] [PUSH_PRELOAD] Fetching messages for instant display cache [19:58:10] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:58:10] [PRELOAD_CACHE] Preserving 5 push-inserted messages: [18399, 18398, 18397, 18396, 18395] [19:58:10] [PUSH_PRELOAD] ⚡ Pre-cached 55 messages for instant display (preserved 5 from push) [19:58:10] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:58:10] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18448, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [19:58:10] [PUSH] Parsed message_id: 18448 [19:58:10] [PUSH] Parsed operation_type: 3 [19:58:10] [PUSH] Taking direct action: opType=3, messageId=18448 [19:58:10] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18448 [19:58:11] [SECURITY] Timeout check: elapsed=1.158776044845581s, timeout=300.0s [19:58:11] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [19:58:11] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:58:11] [LIFECYCLE] App entering foreground - restoring connections [19:58:11] [UPLOAD_RETRY] No pending uploads to retry [19:58:11] [LIFECYCLE] Merged 869 reactions from local DB [19:58:11] [LIFECYCLE] WebRTC audio re-enabled [19:58:11] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [19:58:11] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [19:58:11] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:58:11] [VIEWER] Reconnecting after background - querying agents [19:58:11] [UNSENT_RETRY] Checking for unsent messages... [19:58:11] [PENDING_UPLOAD] Total pending upload messages: 0 [19:58:11] [UNSENT_RETRY] No unsent messages found [19:58:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[18449, 18448, 18447, 18446, 18445] [19:58:11] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [19:58:11] [SECURITY] Within timeout - cleared background flag [19:58:11] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [19:58:11] [PUSH] handlePollEventsNotification userInfo: [:] [19:58:11] [PUSH] No message_id in userInfo [19:58:11] [PUSH] No operation_type in userInfo [19:58:11] [FAST_REFRESH] Evolution disabled - performing incremental sync [19:58:11] [FAST_REFRESH] Already have 56 messages - skipping local DB load [19:58:11] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [19:58:11] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [19:58:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=56 [19:58:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18449 [19:58:11] [CLIENT_SIG] WebSocket opened [19:58:11] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:58:11] [CLIENT_SIG] Connected! clientId=5KHq4QHIBphAc-Vv [19:58:11] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:58:11] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:11] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:58:11] [INCREMENTAL_SYNC] ✅ No new messages [19:58:11] [FAST_REFRESH] Incremental sync complete - 56 messages [19:58:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[18449, 18448, 18447, 18446, 18445] [19:58:11] [CLIENT_SIG] Event received: type=3 messageId=18448 [19:58:11] [WS_EVENT] Received event: type=3, messageId=18448 [19:58:11] [WS_EVENT] Read receipt for message 18448 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:11] [COMBINED_FETCH] Loaded 7215 read receipts, 878 messages with reactions [19:58:11] [FOREGROUND] Enriched 2 messages with readBy data from server [19:58:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[18449, 18448, 18447, 18446, 18445] [19:58:11] [COMBINED_FETCH] Loaded 7215 read receipts, 878 messages with reactions [19:58:11] [FAST_REFRESH] Enriched 56 messages with readBy data [19:58:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[18449, 18448, 18447, 18446, 18445] [19:58:12] [MUTE] Status sent to server: muted=1, response code=200 [19:58:12] [MUTE] Status sent to server: muted=1, response code=200 [19:58:12] [PUSH] Silent push received [19:58:12] [PUSH_EMBED] No embedded message_data in notification [19:58:12] [PUSH] No embedded data, pre-loading messages from server [19:58:12] [PUSH_PRELOAD] Fetching messages for instant display cache [19:58:12] [PUSH] Silent push received [19:58:12] [PUSH_EMBED] No embedded message_data in notification [19:58:12] [PUSH] No embedded data, pre-loading messages from server [19:58:12] [PUSH_PRELOAD] Fetching messages for instant display cache [19:58:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:58:12] [PRELOAD_CACHE] Preserving 5 push-inserted messages: [18399, 18398, 18397, 18396, 18395] [19:58:12] [PUSH_PRELOAD] ⚡ Pre-cached 55 messages for instant display (preserved 5 from push) [19:58:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:58:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 18447, AnyHashable("aps"): { "content-available" = 1; }] [19:58:12] [PUSH] Parsed message_id: 18447 [19:58:12] [PUSH] Parsed operation_type: 3 [19:58:12] [PUSH] Taking direct action: opType=3, messageId=18447 [19:58:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18447 [19:58:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:58:12] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:12] [PRELOAD_CACHE] Preserving 5 push-inserted messages: [18399, 18398, 18397, 18396, 18395] [19:58:12] [PUSH_PRELOAD] ⚡ Pre-cached 55 messages for instant display (preserved 5 from push) [19:58:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:58:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18449, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [19:58:12] [PUSH] Parsed message_id: 18449 [19:58:12] [PUSH] Parsed operation_type: 3 [19:58:12] [PUSH] Taking direct action: opType=3, messageId=18449 [19:58:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18449 [19:58:13] [LOCK] Lock button tapped - locking app immediately [19:58:13] [LOCK] Received lock app notification [19:58:13] [CLIENT_SIG] Event received: type=3 messageId=18447 [19:58:13] [WS_EVENT] Received event: type=3, messageId=18447 [19:58:13] [WS_EVENT] Read receipt for message 18447 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:13] [CLIENT_SIG] Event received: type=3 messageId=18449 [19:58:13] [WS_EVENT] Received event: type=3, messageId=18449 [19:58:13] [WS_EVENT] Read receipt for message 18449 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:13] [LIFECYCLE] App resigning active - cleared crash flag [19:58:14] [CLIENT_SIG] Already connected/connecting to session ILUIWU [19:58:14] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [19:58:14] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [19:58:14] [LIFECYCLE] App entering background - cleared crash flag [19:58:14] [CLIENT_SIG] Disconnecting [19:58:14] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [19:58:14] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [19:58:14] In cleanupPeer [19:58:14] In cleanupPeer [19:58:14] [LIFECYCLE] WebRTC audio disabled [19:58:14] [LIFECYCLE] AVAudioSession deactivated [19:58:14] [LIFECYCLE] All connections stopped [19:58:14] [CLIENT_SIG] WebSocket closed with code 1001 [19:58:14] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [19:58:14] [SERVER] Stopped reconnect polling [19:58:14] Will request stop of video 0 [19:58:14] Will request stop of video 0 [19:58:14] [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/} [19:58:14] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [19:58:14] [PIP] Removing 0 tracks from PiP for connection 0 [19:58:14] [PIP] ✅ All tracks removed for connection 0 [19:58:14] [PIP] Removing 0 tracks from PiP for connection 0 [19:58:14] [PIP] ✅ All tracks removed for connection 0 [19:58:15] [PUSH] Silent push received [19:58:15] [PUSH_EMBED] 📩 Received embedded message: id=18450, type=0, sender=Esra [19:58:15] [PUSH_EMBED] ✅ Saved message 18450 to local DB (sync) [19:58:15] [PUSH_EMBED] Inserted message 18450 into existing cache (now 56 messages) [19:58:15] [PUSH_EMBED] Fetching evolution data for message 18450 in background [19:58:15] [PUSH_EMBED] ✅ Fully processed message 18450 [19:58:15] [PUSH] Embedded message handled instantly from silent push [19:58:15] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [19:58:15] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [19:58:15] [PUSH_UI] Inserted message 18450 into UI (now 57 messages) [19:58:15] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-21 18:58:12"; "file_name" = ""; message = "For the next sessions I\U2019ll let you know \Ud83d\Ude0f"; "message_id" = 18450; "message_type" = 0; "prev_session_message_id" = 18449; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 18450, AnyHashable("session_id"): ILUIWU] [19:58:15] [PUSH_EMBED_VC] Message 18450 already in memory - skipping [19:58:15] [PUSH] ⚡ Embedded message handled directly in ViewController [19:58:15] [PUSH] Parsed message_id: 18450 [19:58:15] [PUSH] Parsed operation_type: 0 [19:58:15] [PUSH] Taking direct action: opType=0, messageId=18450 [19:58:15] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=18450 [19:58:15] [PUSH] ⚡ Message 18450 already in memory - skipping duplicate notification entirely [19:58:15] [PUSH_EMBED] Got evolution data for message 18450, saving to local DB [19:58:15] [PUSH_EMBED] Saved evolution data for message 18450 [19:58:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18450, 18449, 18448, 18447, 18446] [19:58:16] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 18449 → 18450 [19:58:19] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:58:19] [PUSH] Silent push received [19:58:19] [PUSH_EMBED] No embedded message_data in notification [19:58:19] [PUSH] No embedded data, pre-loading messages from server [19:58:19] [PUSH_PRELOAD] Fetching messages for instant display cache [19:58:19] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [19:58:19] [PRELOAD_CACHE] Preserving 6 push-inserted messages: [18400, 18399, 18398, 18397, 18396, 18395] [19:58:19] [PUSH_PRELOAD] ⚡ Pre-cached 56 messages for instant display (preserved 6 from push) [19:58:19] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [19:58:19] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 18450, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [19:58:19] [PUSH] Parsed message_id: 18450 [19:58:19] [PUSH] Parsed operation_type: 3 [19:58:19] [PUSH] Taking direct action: opType=3, messageId=18450 [19:58:19] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=18450 [19:58:19] [CLIENT_SIG] WebSocket opened [19:58:19] [CLIENT_SIG] HELLO sent as client for session ILUIWU [19:58:19] [CLIENT_SIG] Connected! clientId=wYUFmhOjUWwRE-JO [19:58:19] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [19:58:19] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [19:58:19] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [19:58:19] [CLIENT_SIG] Event received: type=3 messageId=18450 [19:58:19] [WS_EVENT] Received event: type=3, messageId=18450 [19:58:19] [WS_EVENT] Read receipt for message 18450 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [20:00:49] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [20:00:49] [CLIENT_SIG] Already connected/connecting to session ILUIWU [20:00:49] [LIFECYCLE] App entering foreground - restoring connections [20:00:49] [LIFECYCLE] Away > 2 minutes (154s) - will scroll to bottom [20:00:49] [UPLOAD_RETRY] No pending uploads to retry [20:00:49] [LIFECYCLE] Merged 869 reactions from local DB [20:00:49] [LIFECYCLE] WebRTC audio re-enabled [20:00:49] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [20:00:49] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [20:00:49] [CLIENT_SIG] Already connected/connecting to session ILUIWU [20:00:49] [VIEWER] Reconnecting after background - querying agents [20:00:49] [UNSENT_RETRY] Checking for unsent messages... [20:00:49] [PENDING_UPLOAD] Total pending upload messages: 0 [20:00:49] [UNSENT_RETRY] No unsent messages found [20:00:49] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [20:00:49] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [20:00:49] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <993FA04D-7827-4411-B1BC-9A841D07A0D8>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <993FA04D-7827-4411-B1BC-9A841D07A0D8>.<1>} [20:00:49] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [20:00:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18450, 18449, 18448, 18447, 18446] [20:00:49] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [20:00:49] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [20:00:49] [PUSH] handlePollEventsNotification userInfo: [:] [20:00:49] [PUSH] No message_id in userInfo [20:00:49] [PUSH] No operation_type in userInfo [20:00:49] [FAST_REFRESH] Evolution disabled - performing incremental sync [20:00:49] [FAST_REFRESH] Already have 57 messages - skipping local DB load [20:00:49] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [20:00:49] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [20:00:49] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=57 [20:00:49] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18450 [20:00:49] [INCREMENTAL_SYNC] ✅ No new messages [20:00:49] [FAST_REFRESH] Incremental sync complete - 57 messages [20:00:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18450, 18449, 18448, 18447, 18446] [20:00:49] [COMBINED_FETCH] Loaded 7216 read receipts, 878 messages with reactions [20:00:49] [FOREGROUND] Enriched 0 messages with readBy data from server [20:00:49] [COMBINED_FETCH] Loaded 7216 read receipts, 878 messages with reactions [20:00:49] [FAST_REFRESH] Enriched 57 messages with readBy data [20:00:49] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [20:00:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[18450, 18449, 18448, 18447, 18446] [20:00:50] [PIN_AUTH] Correct PIN [20:00:50] [SECURITY] Restored real session: ILUIWU [20:00:50] [SECURITY] Restored real session: ILUIWU [20:00:50] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [20:00:50] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [20:00:50] [AUTH] Cache had 56 messages, maxExistingId=18450, inserted 0 truly new [20:00:50] [AUTH] UI update complete [20:00:50] [FAKE MODE] Exiting fake mode, restoring real session [20:00:50] [SECURITY] Restored real session: ILUIWU [20:00:50] [SECURITY] Saved real session: ILUIWU [20:00:50] [FAKE MODE] ✅ Restored real session: ILUIWU [20:00:50] [FAKE MODE] Loaded 0 messages (limited to page size) [20:00:50] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [20:00:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=0, first5Ids=[] [20:00:50] [RELOAD_TAB] ⚠️ allMessagesWithReadBy is EMPTY - falling back to DB [20:00:50] [RELOAD_TAB] Loaded 0 messages from DB (limited) [20:00:50] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [20:00:50] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [20:00:50] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [20:00:50] [USER] ✅ User registered successfully [20:00:50] [PUSH] User registration after token update: success [20:00:51] [COMBINED_FETCH] Loaded 7216 read receipts, 878 messages with reactions [20:00:51] [FAKE MODE] Enriched 0 messages with readBy data [20:00:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=0, first5Ids=[] [20:00:51] [RELOAD_TAB] ⚠️ allMessagesWithReadBy is EMPTY - falling back to DB [20:00:51] [RELOAD_TAB] Loaded 0 messages from DB (limited) [20:00:51] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [20:00:52] [MENU] dismissAnyExistingMenu called [20:00:52] [MENU] dismissAnyExistingMenu completed [20:00:53] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [20:00:53] [CLIENT_SIG] WebSocket opened [20:00:53] [CLIENT_SIG] HELLO sent as client for session ILUIWU [20:00:53] [CLIENT_SIG] Connected! clientId=okkxCZ77TkCADLU0 [20:00:53] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [20:00:53] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [20:00:54] [MENU] dismissAnyExistingMenu called [20:00:54] [MENU] dismissAnyExistingMenu completed [20:00:54] [CHAT] top pull-to-refresh triggered on tab 0 [20:00:54] [REFRESH_ALL] 🔄 refreshAllFromServer called from: pullToRefresh, currentMsgCount=0 [20:00:54] [REFRESH_ALL] 📸 Captured 0 message IDs before request [20:00:54] [REFRESH_ALL] 📡 Fetching URL: https://crivello.dyndns.org:443/WebRTC/chat/chat_get_messages.php?viewer=1&session_id=ILUIWU&mark_read=0&viewer_id=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [20:00:54] [REFRESH_ALL] 🔄 refreshAllFromServer called from: editMessage, currentMsgCount=0 [20:00:54] [REFRESH_ALL] ⚠️ Already reloading - skipping request from: editMessage [20:00:54] [PENDING_UPLOAD] Total pending upload messages: 0 [20:00:54] [PENDING_UPLOAD] Preserved 0 pending messages before server refresh [20:00:54] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=0, first5Ids=[] [20:00:54] [RELOAD_TAB] ⚠️ allMessagesWithReadBy is EMPTY - falling back to DB [20:00:54] [RELOAD_TAB] Loaded 0 messages from DB (limited) [20:00:54] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [20:00:55] DOWNLOADIIING t_A838C8A7-6ACB-4EC0-8A9C-B457DDC4006E.jpg [20:00:55] DOWNLOADIIING t_203DADEC-DEED-4A33-908B-8F8E344461B1.jpg [20:00:55] DOWNLOADIIING t_1b1a78050ebe099b.jpg [20:00:55] DOWNLOADIIING t_bae538c2a3076c11.jpg [20:00:55] DOWNLOADIIING t_ee42d57ffd8ab767.jpg [20:00:55] DOWNLOADIIING t_5cfd84d52271d308.jpg [20:00:55] DOWNLOADIIING t_919f4df51be24b2c.jpg [20:00:55] DOWNLOADIIING t_0f2dda66cccdeadf.jpg [20:00:55] DOWNLOADIIING t_32675c319a37fee7.jpg [20:00:55] DOWNLOADIIING t_a45f085b5a2c50aa.jpg [20:00:55] DOWNLOADIIING t_7cd3ce3d7797eb3c.jpg [20:00:55] DOWNLOADIIING t_abb65f630e55dc61.jpg [20:00:55] DOWNLOADIIING t_2a4c7380908d6595.jpg [20:00:55] DOWNLOADIIING t_1ee77a72ee5013e0.jpg [20:00:55] DOWNLOADIIING t_02f48c94671cc64e.jpg [20:00:55] DOWNLOADIIING t_d0fd8cabebf807d5.jpg [20:00:55] DOWNLOADIIING t_364b0669ed2f3378.jpg [20:00:55] DOWNLOADIIING t_7f3c34ff05eb7c95.jpg [20:00:55] DOWNLOADIIING t_66e5f4c7c82fef18.jpg [20:00:55] DOWNLOADIIING t_f4d9bbe2fc21d5ae.jpg [20:00:55] DOWNLOADIIING t_e1d06c52c18e20ce.jpg [20:00:55] DOWNLOADIIING t_722d39e0d91dd954.jpg [20:00:55] DOWNLOADIIING t_97828ef5de49a612.jpg [20:00:55] DOWNLOADIIING t_98986cbb2cd2ae48.jpg [20:00:55] [CHANNEL_SWITCH] 📊 About to set loaded messages. Count=7216 [20:00:55] [REFRESH_ALL] 📊 Server returned 7216 messages [20:00:55] [REFRESH_ALL] 📊 Final merge: server=7216, preserved=0, total=7216 [20:00:55] [REFRESH_ALL] 📊 Displaying 50 of 7216 messages, hasMore=true [20:00:55] [PULL_REFRESH] Loaded 50 messages (first page), displaying 50 for tab 0, hasMore: true [20:00:55] ReloadData 15 (pull-to-refresh completed) [20:00:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18401, 18402, 18403, 18404, 18405] [20:00:55] [CELL_UPLOAD] configure: msgId=18407, file=7494d317859e38fb.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [20:00:55] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [20:00:55] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7494d317859e38fb.jpg, overlayExists=true [20:00:55] [SCROLL_BTN] Showing button - 4813pt from bottom > half 379pt [20:00:56] [COMBINED_FETCH] Loaded 7216 read receipts, 878 messages with reactions [20:00:58] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [20:00:59] ReloadData 14 (all 42 media thumbnails loaded) - applying tab 0 filtering [20:00:59] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18401, 18402, 18403, 18404, 18405] [20:01:11] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [20:01:11] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [20:01:11] [SEND_MESSAGE] ✅ Added optimistic message id=-12 to arrays, newMsgCount=51 [20:01:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-12, 18450, 18449, 18448, 18447] [20:01:11] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [20:01:11] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [20:01:13] [CLIENT_SIG] Event received: type=0 messageId=18451 [20:01:13] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":18451,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-21 19:01:11"} [20:01:13] [WS_EVENT] Received event: type=0, messageId=18451 [20:01:13] [CHAT] receive_message.php JSON: ["ok": 1, "datesent_utc": 2026-01-21 19:01:11, "message_id": 18451, "message_type": 0, "session_id": ILUIWU, "file_name": ] [20:01:13] [WS_EVENT] 📨 New message notification (msgId=18451) - triggering incremental refresh, currentMsgCount=51 [20:01:13] [DB_UPGRADE] Upgrading message ID: -12 → 18451, preserveOriginalDate=false [20:01:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [20:01:13] [DB_UPGRADE] ✅ Upgraded -12 → 18451 with send_status=0, 1 row(s) affected [20:01:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18451 [20:01:13] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -12 → 18451 [20:01:13] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -12 → 18451 [20:01:13] ReloadData 9 [20:01:13] [INCREMENTAL_SYNC] ✅ No new messages [20:01:13] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [20:01:13] [LOCK] Lock button tapped - locking app immediately [20:01:13] [LOCK] Received lock app notification [20:01:14] [LIFECYCLE] App resigning active - cleared crash flag [20:01:15] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [20:01:15] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [20:01:15] [LIFECYCLE] App entering background - cleared crash flag [20:01:15] [CLIENT_SIG] Disconnecting [20:01:15] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [20:01:15] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=-1 [20:01:15] In cleanupPeer [20:01:15] In cleanupPeer [20:01:15] [LIFECYCLE] WebRTC audio disabled [20:01:15] [LIFECYCLE] AVAudioSession deactivated [20:01:15] [LIFECYCLE] All connections stopped [20:01:15] [CLIENT_SIG] WebSocket closed with code 1001 [20:01:15] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [20:01:15] [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/}[20:27:54] [LOG] Pruned 1247 entries older than 3 hours [20:27:54] [FONT] Roboto fonts loaded successfully: Roboto-Regular [20:27:54] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [20:27:54] [GIPHY] SDK not available - using REST API fallback [20:27:54] [BACKGROUND] Background fetch enabled [20:27:54] [AUTH] Starting PIN authentication [20:27:54] [BACKGROUND] Background fetch triggered [20:27:54] [BACKGROUND] Fetching recent messages for pre-cache [20:27:54] [CLEANUP] ✅ Deleted 4 timer messages older than 24h [20:27:54] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [20:27:54] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [20:27:54] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [20:27:54] [USER] ✅ User registered successfully [20:27:54] [PUSH] User registration after token update: success [20:27:54] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=18451)... [20:27:54] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [20:27:54] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [20:27:54] [PRELOAD] No messages or parse error [20:27:54] [BACKGROUND] Pre-downloaded 0 thumbnails [20:27:54] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [20:32:45] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [20:32:45] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [20:32:45] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [20:32:45] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [20:32:45] [CLIENT_SIG] WebSocket opened [20:32:45] [CLIENT_SIG] HELLO sent as client for session ILUIWU [20:32:45] [CLIENT_SIG] Connected! clientId=JAy_YtbIAiyhsc_3 [20:32:45] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [20:32:45] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)[20:32:46] [LOG] Pruned 1603 entries older than 3 hours [20:32:46] [SECURITY] Restored real session: ILUIWU [20:32:46] [SECURITY] Restored real session: ILUIWU [20:32:47] [SECURITY] Saved real session: ILUIWU [20:32:47] [SCENE] Launched directly to chat view with sessionId: ILUIWU [20:32:47] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [20:32:47] Documents Directory: /var/mobile/Containers/Data/Application/FEAD2E1F-C4A1-4969-9070-16A67DA77312/Documents [20:32:47] [THEME] Applying current theme [20:32:47] [CHAT] Applied day theme (mode: day) [20:32:47] [SECURITY] Saved real session: ILUIWU [20:32:47] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [20:32:47] [CLIENT_SIG] Already connected/connecting to session ILUIWU [20:32:47] [NETWORK] Network monitor started [20:32:47] [NETWORK] Status changed: connected [20:32:47] [UPLOAD_QUEUE] Found 0 pending uploads to resume [20:32:47] Did transition [20:32:47] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [20:32:47] [VIEWER] Screen lock enabled - normal idle behavior [20:32:47] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [20:32:47] [VCC] ========== VideoConnectionClass INIT ========== [20:32:47] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [20:32:47] [DATA AUDIO] ========== setupWebRTC() START ========== [20:32:47] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [20:32:47] [DATA AUDIO] Creating encoder/decoder factories... [20:32:47] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [20:32:47] [CODEC] Viewer selected encoder: AV1 (best quality) [20:32:47] [DATA AUDIO] Creating RTCPeerConnectionFactory... [20:32:47] [DATA AUDIO] ✅ Factory created [20:32:47] [DATA AUDIO] RTCAudioSession locked [20:32:47] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [20:32:47] [DATA AUDIO] RTCAudioSession unlocked [20:32:47] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [20:32:47] [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"] [20:32:47] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [20:32:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [20:32:47] [QUERY] ✅ tempQueryConnection created for iosILUIWU [20:32:47] [VIEWER_INIT] Already have 50 messages - just filtering for tab [20:32:47] [EVENT_POLL] Event polling disabled - using WebSocket events instead [20:32:47] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [20:32:47] Did transition [20:32:47] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [20:32:47] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [20:32:47] [CHUNK] Merged 884 reactions synchronously [20:32:47] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [20:32:47] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [20:32:47] [MIGRATION] No messages need sender_name backfill [20:32:47] [GALLERY_DB] ✅ Loaded 0 media messages [20:32:47] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [20:32:47] [GALLERY] Filtered 0 -> 0 (only with local thumbnails) [20:32:47] [GALLERY] First 5 after sort (newest first): [20:32:47] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18451 [20:32:47] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [20:32:47] [SERVER] Starting reconnect polling (5s interval) [20:32:47] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [20:32:47] [ICONS] Offset applied: -14.6 [20:32:47] [ICONS] New left margin: 11.2, New right margin: 11.3 [20:32:47] [INCREMENTAL_SYNC] ✅ No new messages [20:32:47] [PURGE] ⚠️ Media cache purge DISABLED for debugging [20:32:47] [UNSENT_RETRY] Checking for unsent messages... [20:32:47] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [20:32:47] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [20:32:47] [UPLOAD_RECOVERY] Session: ILUIWU [20:32:47] [UPLOAD_RECOVERY] ✅ No stuck uploads found [20:32:47] [UPLOAD_RECOVERY] Checking recent media messages on server... [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18428, file=f36a462089f1685a.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18409, file=f733dc0a9f704916.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18407, file=7494d317859e38fb.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18380, file=47f0a79ffd2469ec.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18338, file=587faef97c05d266.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18329, file=41e6d3f8b6fc3362.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18320, file=79f8421197610988.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18312, file=077bf4aba425ab65.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18306, file=8c29dab4be6eb199.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18296, file=e27abe61119a26c3.mov, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] 📋 Recent media: msgId=18276, file=a9dc1013e9d5a3e6.jpg, upload_status=complete [20:32:47] [UPLOAD_RECOVERY] Verifying 11 media files exist on server... [20:32:47] [PENDING_UPLOAD] Total pending upload messages: 0 [20:32:47] [UNSENT_RETRY] No unsent messages found [20:32:47] [UPLOAD_RECOVERY] ✅ All media files verified on server [20:32:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18402, 18403, 18404, 18405, 18406] [20:32:47] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [20:32:47] [CELL_UPLOAD] configure: msgId=18407, file=7494d317859e38fb.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [20:32:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [20:32:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=7494d317859e38fb.jpg, overlayExists=true [20:32:47] [CELL_UPLOAD] configure: msgId=18409, file=f733dc0a9f704916.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [20:32:47] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [20:32:47] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=f733dc0a9f704916.jpg, overlayExists=true [20:32:47] [ICONS] Chat center: (31.2, 87.0) [20:32:47] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [20:32:47] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [20:32:47] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [20:32:47] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [20:32:47] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [20:32:47] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [20:32:47] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [20:32:47] [ICONS] Screen width: 440.0 [20:32:47] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [20:32:47] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [20:32:47] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [20:32:47] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [20:32:47] [USER] ✅ User registered successfully [20:32:47] [USER] User registration successful [20:32:47] new_session POST ok: token len=157 [20:32:47] HELLO → sent (fetched token, role=query) [20:32:47] [SIG] hello_ok received for query connection - ready to query agents [20:32:47] [SIG] get_agents request sent for sessionId=ILUIWU [20:32:47] [SIG] get_agents request sent for sessionId=iosILUIWU [20:32:47] [SERVER] Stopped reconnect polling [20:32:47] [SIG] agents_list received: [] [20:32:47] [SIG] agents_list received: [] [20:32:47] [COMBINED_FETCH] Loaded 7217 read receipts, 878 messages with reactions [20:32:47] [READBY_ENRICH] Enriched 50 messages with readBy data [20:32:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18402, 18403, 18404, 18405, 18406] [20:32:52] [MENU] dismissAnyExistingMenu called [20:32:52] [MENU] dismissAnyExistingMenu completed [20:32:54] [MENU] dismissAnyExistingMenu called [20:32:54] [MENU] dismissAnyExistingMenu completed [20:33:01] [SCROLL_BTN] Showing button - 306pt from bottom > half 223pt [20:33:07] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [20:33:14] [LIFECYCLE] App resigning active - cleared crash flag [20:33:14] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [20:33:14] [SECURITY] Saved background timestamp [20:33:14] [LIFECYCLE] App entering background - cleared crash flag [20:33:14] [CLIENT_SIG] Disconnecting [20:33:14] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [20:33:14] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [20:33:14] [WS] Canceling WebSocket for query connection to iosILUIWU [20:33:14] In cleanupPeer [20:33:14] In cleanupPeer [20:33:14] [LIFECYCLE] WebRTC audio disabled [20:33:14] [LIFECYCLE] AVAudioSession deactivated [20:33:14] [LIFECYCLE] All connections stopped [20:33:14] [CLIENT_SIG] WebSocket closed with code 1001 [20:33:14] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [20:33:14] [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/} [20:33:14] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [20:33:14] [SERVER] Stopped reconnect polling [20:33:14] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [20:33:14] [WS] Query connection error - cleaning up all agent connections and views [20:33:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [20:33:14] [WS] Query connection failed - cleaning up all agent connections and views [20:33:14] Will request stop of video 0 [20:33:14] Will request stop of video 0 [20:33:14] [CLEANUP] ======================================== [20:33:14] [CLEANUP] Cleaning up all agent connections and views [20:33:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [20:33:14] [CLEANUP] Stopped and removed 0 video connections [20:33:14] [CLEANUP] Removed 0 video views [20:33:14] [CLEANUP] Removed 0 feed scroll views [20:33:14] [CLEANUP] Removed 0 status labels [20:33:14] [CLEANUP] Reset agent query state [20:33:14] [CLEANUP] Updated page indicator [20:33:14] [CLEANUP] Rebuilt video layout [20:33:14] [CLEANUP] ✅ All agent connections and views cleaned up [20:33:14] [CLEANUP] ======================================== [20:33:14] [SERVER] Skipping reconnect polling - app is in background [20:33:14] [WS] URLSession invalidated successfully [20:33:14] [CLEANUP] ======================================== [20:33:14] [CLEANUP] Cleaning up all agent connections and views [20:33:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [20:33:14] [CLEANUP] Stopped and removed 0 video connections [20:33:14] [CLEANUP] Removed 0 video views [20:33:14] [CLEANUP] Removed 0 feed scroll views [20:33:14] [CLEANUP] Removed 0 status labels [20:33:14] [CLEANUP] Reset agent query state [20:33:14] [CLEANUP] Updated page indicator [20:33:14] [CLEANUP] Rebuilt video layout [20:33:14] [CLEANUP] ✅ All agent connections and views cleaned up [20:33:14] [CLEANUP] ======================================== [20:33:14] [SERVER] Skipping reconnect polling - app is in background [20:33:14] [PIP] Removing 0 tracks from PiP for connection 0 [20:33:14] [PIP] ✅ All tracks removed for connection 0 [20:33:14] [PIP] Removing 0 tracks from PiP for connection 0 [20:33:14] [PIP] ✅ All tracks removed for connection 0 [20:33:41] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [20:33:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [20:33:41] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [20:33:43] [SECURITY] Timeout check: elapsed=29.42506694793701s, timeout=300.0s [20:33:43] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [20:33:43] [CLIENT_SIG] Already connected/connecting to session ILUIWU [20:33:43] [LIFECYCLE] App entering foreground - restoring connections [20:33:43] [UPLOAD_RETRY] No pending uploads to retry [20:33:43] [LIFECYCLE] Merged 884 reactions from local DB [20:33:43] [LIFECYCLE] WebRTC audio re-enabled [20:33:43] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [20:33:43] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [20:33:43] [CLIENT_SIG] Already connected/connecting to session ILUIWU [20:33:43] [VIEWER] Reconnecting after background - querying agents [20:33:43] [UNSENT_RETRY] Checking for unsent messages... [20:33:43] [PENDING_UPLOAD] Total pending upload messages: 0 [20:33:43] [UNSENT_RETRY] No unsent messages found [20:33:43] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [20:33:43] [CLIENT_SIG] WebSocket opened [20:33:43] HELLO → sent (cached token, role=query) [20:33:43] [CLIENT_SIG] HELLO sent as client for session ILUIWU [20:33:43] [SIG] hello_ok received for query connection - ready to query agents [20:33:43] [SIG] get_agents request sent for sessionId=ILUIWU [20:33:43] [SIG] get_agents request sent for sessionId=iosILUIWU [20:33:43] [CLIENT_SIG] Connected! clientId=vWGdiFgVrMOHNqjB [20:33:43] [SERVER] Stopped reconnect polling [20:33:43] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [20:33:43] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [20:33:43] [SIG] agents_list received: [] [20:33:43] [SIG] agents_list received: [] [20:33:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18402, 18403, 18404, 18405, 18406] [20:33:44] [COMBINED_FETCH] Loaded 7217 read receipts, 878 messages with reactions [20:33:44] [FOREGROUND] Enriched 0 messages with readBy data from server [20:33:44] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [20:33:44] [SECURITY] Within timeout - cleared background flag [20:33:44] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [20:33:44] [PUSH] handlePollEventsNotification userInfo: [:] [20:33:44] [PUSH] No message_id in userInfo [20:33:44] [PUSH] No operation_type in userInfo [20:33:44] [FAST_REFRESH] Evolution disabled - performing incremental sync [20:33:44] [FAST_REFRESH] Already have 50 messages - skipping local DB load [20:33:44] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [20:33:44] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [20:33:44] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [20:33:44] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [20:33:44] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 18451 [20:33:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18402, 18403, 18404, 18405, 18406] [20:33:44] [INCREMENTAL_SYNC] ✅ No new messages [20:33:44] [FAST_REFRESH] Incremental sync complete - 50 messages [20:33:44] [COMBINED_FETCH] Loaded 7217 read receipts, 878 messages with reactions [20:33:44] [FAST_REFRESH] Enriched 50 messages with readBy data [20:33:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[18402, 18403, 18404, 18405, 18406] [20:33:47] [LOG] Long press on chat icon detected! Triggering log upload... [20:33:47] [SCROLL_BTN] Showing button - 283pt from bottom > half 223pt