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