=== Eye Viewer Log Cleared at 2026-01-15 16:33:05 +0000 === [17:33:05] [CRASH] No crash detected [17:33:05] [LOG] Log rotation interval exceeded (2h) - clearing logs [17:33:05] [FONT] Roboto fonts loaded successfully: Roboto-Regular [17:33:05] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [17:33:05] [GIPHY] SDK not available - using REST API fallback [17:33:05] [BACKGROUND] Background fetch enabled [17:33:05] [AUTH] Starting PIN authentication [17:33:05] [CLEANUP] No old timer messages to delete [17:33:05] [PUSH] Silent push received [17:33:05] [PUSH_EMBED] 📩 Received embedded message: id=17867, type=0, sender=Esra [17:33:05] [PUSH_EMBED] ✅ Saved message 17867 to local DB (sync) [17:33:05] [PUSH_EMBED] Created new cache with embedded message 17867 [17:33:05] [PUSH_EMBED] Fetching evolution data for message 17867 in background [17:33:05] [PUSH_EMBED] ✅ Fully processed message 17867 [17:33:05] [PUSH] Embedded message handled instantly from silent push [17:33:05] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [17:33:05] [PUSH_EMBED] Got evolution data for message 17867, saving to local DB [17:33:05] [PUSH_EMBED] Saved evolution data for message 17867 [17:33:05] [PRELOAD] Cache has only 1 messages (from push) - will load full history [17:33:05] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=17867)... [17:33:05] [PRELOAD] No messages or parse error [17:33:06] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [17:33:06] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:33:06] [USER] ✅ User registered successfully [17:33:06] [PUSH] User registration after token update: success [17:33:29] [PUSH] Silent push received [17:33:29] [PUSH_EMBED] 📩 Received embedded message: id=17868, type=0, sender=Esra [17:33:29] [PUSH_EMBED] ✅ Saved message 17868 to local DB (sync) [17:33:29] [PUSH_EMBED] Created new cache with embedded message 17868 [17:33:29] [PUSH_EMBED] Fetching evolution data for message 17868 in background [17:33:29] [PUSH_EMBED] ✅ Fully processed message 17868 [17:33:29] [PUSH] Embedded message handled instantly from silent push [17:33:29] [PUSH_EMBED] Got evolution data for message 17868, saving to local DB [17:33:29] [PUSH_EMBED] Saved evolution data for message 17868 [17:38:04] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:38:04] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:38:04] [CLIENT_SIG] WebSocket opened [17:38:04] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:38:04] [CLIENT_SIG] Connected! clientId=ZSjzGq_ZDJEK81pU [17:38:04] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:38:04] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:38:04] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [17:38:04] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:38:07] [PIN_AUTH] Correct PIN [17:38:07] [SECURITY] Restored real session: ILUIWU [17:38:07] [SECURITY] Restored real session: ILUIWU [17:38:07] [SECURITY] Saved real session: ILUIWU [17:38:07] [SCENE] Launched directly to chat view with sessionId: ILUIWU [17:38:07] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:38:07] Documents Directory: /var/mobile/Containers/Data/Application/5D68AE23-01E3-48EB-8D9C-FB9D6AD5BDD0/Documents [17:38:07] [UPLOAD_QUEUE] Found 0 pending uploads to resume [17:38:07] [THEME] Applying current theme [17:38:07] [CHAT] Applied day theme (mode: day) [17:38:07] [SECURITY] Saved real session: ILUIWU [17:38:07] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:38:07] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:38:07] [NETWORK] Network monitor started [17:38:07] [NETWORK] Status changed: connected [17:38:07] Did transition [17:38:07] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [17:38:07] [VIEWER] Screen lock enabled - normal idle behavior [17:38:07] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [17:38:07] [VCC] ========== VideoConnectionClass INIT ========== [17:38:07] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [17:38:07] [DATA AUDIO] ========== setupWebRTC() START ========== [17:38:07] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [17:38:07] [DATA AUDIO] Creating encoder/decoder factories... [17:38:07] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [17:38:07] [CODEC] Viewer selected encoder: AV1 (best quality) [17:38:07] [DATA AUDIO] Creating RTCPeerConnectionFactory... [17:38:07] [DATA AUDIO] ✅ Factory created [17:38:07] [DATA AUDIO] RTCAudioSession locked [17:38:07] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [17:38:07] [DATA AUDIO] RTCAudioSession unlocked [17:38:07] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [17:38: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"] [17:38:07] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [17:38:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:38:07] [QUERY] ✅ tempQueryConnection created for iosILUIWU [17:38:07] [VIEWER_INIT] Already have 50 messages - just filtering for tab [17:38:07] [EVENT_POLL] Event polling disabled - using WebSocket events instead [17:38:07] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [17:38:07] Did transition [17:38:07] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [17:38:07] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:38:07] [CHUNK] Merged 789 reactions synchronously [17:38:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [17:38:07] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [17:38:07] [MIGRATION] No messages need sender_name backfill [17:38:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [17:38:07] [GALLERY_DB] Raw datesent for msg 17856: '2026-01-15 16:00:07' [17:38:07] [GALLERY_DB] Raw datesent for msg 17827: '2026-01-15 14:28:14' [17:38:07] [GALLERY_DB] Raw datesent for msg 17752: '2026-01-15 10:47:04' [17:38:07] [USER] ✅ User registered successfully [17:38:07] [USER] User registration successful [17:38:07] [GALLERY_DB] ✅ Loaded 431 media messages [17:38:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17868 [17:38:07] [INCREMENTAL_SYNC] ✅ No new messages [17:38:07] [GALLERY] Filtered 431 -> 392 (only with local thumbnails) [17:38:07] [GALLERY] First 5 after sort (newest first): [17:38:07] [GALLERY] 0: id=17856, date=2026-01-15 16:00:07, file=00580186bdfc055b.jpg [17:38:07] [GALLERY] 1: id=17827, date=2026-01-15 14:28:14, file=09c585e34fc5bc20.jpg [17:38:07] [GALLERY] 2: id=17752, date=2026-01-15 10:47:04, file=c3ee2fbb5839abc5.jpg [17:38:07] [GALLERY] 3: id=17739, date=2026-01-15 08:42:20, file=cd7d50cf024abd2a.jpg [17:38:07] [GALLERY] 4: id=17738, date=2026-01-15 08:22:37, file=d77fdc187ac423b2.jpg [17:38:07] [NETWORK] Status changed: connected [17:38:07] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [17:38:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17819, 17820, 17821, 17822, 17823] [17:38:07] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [17:38:07] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17866 → 17867 [17:38:07] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17867 → 17868 [17:38:07] [SERVER] Starting reconnect polling (5s interval) [17:38:07] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [17:38:07] [ICONS] Offset applied: -14.6 [17:38:07] [ICONS] New left margin: 11.2, New right margin: 11.3 [17:38:07] [ICONS] Chat center: (31.2, 87.0) [17:38:07] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [17:38:07] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [17:38:07] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [17:38:07] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [17:38:07] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [17:38:07] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [17:38:07] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [17:38:07] [ICONS] Screen width: 440.0 [17:38:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:38:07] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [17:38:07] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [17:38:07] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [17:38:07] [PURGE] ⚠️ Media cache purge DISABLED for debugging [17:38:07] [UNSENT_RETRY] Checking for unsent messages... [17:38:07] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [17:38:07] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [17:38:07] [UPLOAD_RECOVERY] Session: ILUIWU [17:38:07] [UPLOAD_RECOVERY] ✅ No stuck uploads found [17:38:07] [UPLOAD_RECOVERY] Checking recent media messages on server... [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17856, file=00580186bdfc055b.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17827, file=09c585e34fc5bc20.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17739, file=cd7d50cf024abd2a.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17696, file=674206d67fc0fa03.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17687, file=67c77e91dc086f47.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17664, file=8a1b4fb11ea64c53.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17639, file=ceaa5688dd6bf7e9.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17611, file=999c5a9ae1fc9a20.jpg, upload_status=complete [17:38:07] [UPLOAD_RECOVERY] Verifying 8 media files exist on server... [17:38:07] [PENDING_UPLOAD] Total pending upload messages: 0 [17:38:07] [UNSENT_RETRY] No unsent messages found [17:38:07] new_session POST ok: token len=157 [17:38:07] HELLO → sent (fetched token, role=query) [17:38:07] [SIG] hello_ok received for query connection - ready to query agents [17:38:07] [SIG] get_agents request sent for sessionId=ILUIWU [17:38:07] [SIG] get_agents request sent for sessionId=iosILUIWU [17:38:07] [SERVER] Stopped reconnect polling [17:38:07] [SIG] agents_list received: [] [17:38:07] [SIG] agents_list received: [] [17:38:08] [COMBINED_FETCH] Loaded 6640 read receipts, 790 messages with reactions [17:38:08] [READBY_ENRICH] Enriched 50 messages with readBy data [17:38:08] [UPLOAD_RECOVERY] ✅ All media files verified on server [17:38:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17819, 17820, 17821, 17822, 17823] [17:38:08] [NETWORK] Status changed: connected [17:38:09] [PUSH] Silent push received [17:38:09] [PUSH_EMBED] No embedded message_data in notification [17:38:09] [PUSH] No embedded data, pre-loading messages from server [17:38:09] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:09] [PUSH] Silent push received [17:38:09] [PUSH_EMBED] No embedded message_data in notification [17:38:09] [PUSH] No embedded data, pre-loading messages from server [17:38:09] [PUSH_PRELOAD] Fetching messages for instant display cache [17:38:09] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:09] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [17:38:09] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:09] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17867, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [17:38:09] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [17:38:09] [PUSH] Parsed message_id: 17867 [17:38:09] [PUSH] Parsed operation_type: 3 [17:38:09] [PUSH] Taking direct action: opType=3, messageId=17867 [17:38:09] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17867 [17:38:09] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [17:38:09] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [17:38:09] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 17868, AnyHashable("operation_type"): 3] [17:38:09] [PUSH] Parsed message_id: 17868 [17:38:09] [PUSH] Parsed operation_type: 3 [17:38:09] [PUSH] Taking direct action: opType=3, messageId=17868 [17:38:09] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17868 [17:38:11] [CLIENT_SIG] Event received: type=3 messageId=17867 [17:38:11] [WS_EVENT] Received event: type=3, messageId=17867 [17:38:11] [WS_EVENT] Read receipt for message 17867 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:38:11] [CLIENT_SIG] Event received: type=3 messageId=17868 [17:38:11] [WS_EVENT] Received event: type=3, messageId=17868 [17:38:11] [WS_EVENT] Read receipt for message 17868 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:38:11] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:38:11] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [17:38:11] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=51 [17:38:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-1, 17868, 17867, 17866, 17865] [17:38:12] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:38:12] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:38:14] [CLIENT_SIG] Event received: type=0 messageId=17869 [17:38:14] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":17869,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-15 16:38:12"} [17:38:14] [WS_EVENT] Received event: type=0, messageId=17869 [17:38:14] [WS_EVENT] 📨 New message notification (msgId=17869) - triggering incremental refresh, currentMsgCount=51 [17:38:14] [CHAT] receive_message.php JSON: ["message_type": 0, "file_name": , "ok": 1, "session_id": ILUIWU, "datesent_utc": 2026-01-15 16:38:12, "message_id": 17869] [17:38:14] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [17:38:14] [DB_UPGRADE] Upgrading message ID: -1 → 17869, preserveOriginalDate=false [17:38:14] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17868 [17:38:14] [DB_UPGRADE] ✅ Upgraded -1 → 17869 with send_status=0, 1 row(s) affected [17:38:14] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 17869 [17:38:14] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 17869 [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=51 [17:38:14] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[17819, 17820, 17821, 17822, 17823] [17:38:16] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:38:16] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [17:38:16] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=52 [17:38:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-2, 17869, 17868, 17867, 17866] [17:38:16] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:38:16] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:38:18] [CLIENT_SIG] Event received: type=0 messageId=17870 [17:38:18] [WS_EVENT] Received event: type=0, messageId=17870 [17:38:18] [WS_EVENT] 📨 New message notification (msgId=17870) - triggering incremental refresh, currentMsgCount=52 [17:38:18] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [17:38:18] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17869 [17:38:18] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":17870,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-15 16:38:16"} [17:38:18] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "datesent_utc": 2026-01-15 16:38:16, "message_id": 17870, "ok": 1, "message_type": 0, "file_name": ] [17:38:18] [DB_UPGRADE] Upgrading message ID: -2 → 17870, preserveOriginalDate=false [17:38:18] [DB_UPGRADE] ✅ Upgraded -2 → 17870 with send_status=0, 1 row(s) affected [17:38:18] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 17870 [17:38:18] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 17870 [17:38:18] ReloadData 9 [17:38:18] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:38:18] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:38:18] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [17:38:18] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[17819, 17820, 17821, 17822, 17823] [17:38:29] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:38:29] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [17:38:29] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=53 [17:38:29] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-3, 17870, 17869, 17868, 17867] [17:38:29] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:38:29] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:38:31] [CLIENT_SIG] Event received: type=0 messageId=17871 [17:38:31] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":17871,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-15 16:38:29"} [17:38:31] [WS_EVENT] Received event: type=0, messageId=17871 [17:38:31] [WS_EVENT] 📨 New message notification (msgId=17871) - triggering incremental refresh, currentMsgCount=53 [17:38:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [17:38:31] [CHAT] receive_message.php JSON: ["message_type": 0, "datesent_utc": 2026-01-15 16:38:29, "message_id": 17871, "session_id": ILUIWU, "file_name": , "ok": 1] [17:38:31] [DB_UPGRADE] Upgrading message ID: -3 → 17871, preserveOriginalDate=false [17:38:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17870 [17:38:31] [DB_UPGRADE] ✅ Upgraded -3 → 17871 with send_status=0, 1 row(s) affected [17:38:31] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 17871 [17:38:31] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 17871 [17:38:31] ReloadData 9 [17:38:31] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:38:31] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:38:31] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [17:38:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[17819, 17820, 17821, 17822, 17823] [17:39:01] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [17:39:01] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [17:39:01] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=54 [17:39:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-4, 17871, 17870, 17869, 17868] [17:39:01] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [17:39:01] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [17:39:02] [CLIENT_SIG] Event received: type=0 messageId=17872 [17:39:02] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":17872,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-15 16:39:01"} [17:39:02] [WS_EVENT] Received event: type=0, messageId=17872 [17:39:02] [WS_EVENT] 📨 New message notification (msgId=17872) - triggering incremental refresh, currentMsgCount=54 [17:39:02] [CHAT] receive_message.php JSON: ["file_name": , "message_type": 0, "message_id": 17872, "session_id": ILUIWU, "ok": 1, "datesent_utc": 2026-01-15 16:39:01] [17:39:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [17:39:02] [DB_UPGRADE] Upgrading message ID: -4 → 17872, preserveOriginalDate=false [17:39:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17871 [17:39:02] [DB_UPGRADE] ✅ Upgraded -4 → 17872 with send_status=0, 1 row(s) affected [17:39:02] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 17872 [17:39:02] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 17872 [17:39:02] ReloadData 9 [17:39:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [17:39:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [17:39:02] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [17:39:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[17819, 17820, 17821, 17822, 17823] [17:39:03] [LOCK] Lock button tapped - locking app immediately [17:39:03] [LOCK] Received lock app notification [17:39:04] [LIFECYCLE] App resigning active - cleared crash flag [17:39:04] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [17:39:04] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [17:39:04] [LIFECYCLE] App entering background - cleared crash flag [17:39:04] [CLIENT_SIG] Disconnecting [17:39:04] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:39:04] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [17:39:04] [WS] Canceling WebSocket for query connection to iosILUIWU [17:39:04] In cleanupPeer [17:39:04] In cleanupPeer [17:39:04] [LIFECYCLE] WebRTC audio disabled [17:39:04] [LIFECYCLE] AVAudioSession deactivated [17:39:04] [LIFECYCLE] All connections stopped [17:39:04] [SERVER] Stopped reconnect polling [17:39:04] [CLIENT_SIG] WebSocket closed with code 1001 [17:39:04] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [17:39:04] Will request stop of video 0 [17:39:04] Will request stop of video 0 [17:39:04] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [17:39:04] [WS] Query connection error - cleaning up all agent connections and views [17:39:04] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [17:39:04] [WS] Query connection failed - cleaning up all agent connections and views [17:39:04] [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:04] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [17:39:04] [LIFECYCLE] ViewController deallocated [17:50:09] [CRASH] No crash detected [17:50:09] [LOG] Within rotation interval - preserving logs (102m until next clear) [17:50:09] [FONT] Roboto fonts loaded successfully: Roboto-Regular [17:50:09] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [17:50:09] [GIPHY] SDK not available - using REST API fallback [17:50:09] [BACKGROUND] Background fetch enabled [17:50:09] [AUTH] Starting PIN authentication [17:50:09] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [17:50:09] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:50:09] [CLEANUP] No old timer messages to delete [17:50:09] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [17:50:10] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [17:50:10] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:50:10] [USER] ✅ User registered successfully [17:50:10] [PUSH] User registration after token update: success [17:50:10] [CLIENT_SIG] WebSocket opened [17:50:10] [CLIENT_SIG] HELLO sent as client for session ILUIWU [17:50:10] [CLIENT_SIG] Connected! clientId=c4T2DVO-jwcxRYhF [17:50:10] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [17:50:10] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [17:50:10] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [17:50:10] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [17:50:10] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=17872)... [17:50:10] [PRELOAD] No messages or parse error [17:50:11] [PIN_AUTH] Correct PIN [17:50:11] [SECURITY] Restored real session: ILUIWU [17:50:11] [SECURITY] Restored real session: ILUIWU [17:50:11] [SECURITY] Saved real session: ILUIWU [17:50:11] [SCENE] Launched directly to chat view with sessionId: ILUIWU [17:50:11] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [17:50:11] Documents Directory: /var/mobile/Containers/Data/Application/5D68AE23-01E3-48EB-8D9C-FB9D6AD5BDD0/Documents [17:50:11] [THEME] Applying current theme [17:50:11] [CHAT] Applied day theme (mode: day) [17:50:11] [SECURITY] Saved real session: ILUIWU [17:50:11] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [17:50:11] [CLIENT_SIG] Already connected/connecting to session ILUIWU [17:50:11] [NETWORK] Network monitor started [17:50:11] [NETWORK] Status changed: connected [17:50:11] [UPLOAD_QUEUE] Found 0 pending uploads to resume [17:50:11] Did transition [17:50:11] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [17:50:11] [VIEWER] Screen lock enabled - normal idle behavior [17:50:11] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [17:50:11] [VCC] ========== VideoConnectionClass INIT ========== [17:50:11] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [17:50:11] [DATA AUDIO] ========== setupWebRTC() START ========== [17:50:11] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [17:50:11] [DATA AUDIO] Creating encoder/decoder factories... [17:50:11] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [17:50:11] [CODEC] Viewer selected encoder: AV1 (best quality) [17:50:11] [DATA AUDIO] Creating RTCPeerConnectionFactory... [17:50:11] [DATA AUDIO] ✅ Factory created [17:50:11] [DATA AUDIO] RTCAudioSession locked [17:50:11] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [17:50:11] [DATA AUDIO] RTCAudioSession unlocked [17:50:11] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [17:50:11] [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:50:11] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [17:50:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [17:50:11] [QUERY] ✅ tempQueryConnection created for iosILUIWU [17:50:11] [VIEWER_INIT] Already have 50 messages - just filtering for tab [17:50:11] [EVENT_POLL] Event polling disabled - using WebSocket events instead [17:50:11] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [17:50:11] Did transition [17:50:11] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [17:50:11] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [17:50:11] [CHUNK] Merged 789 reactions synchronously [17:50:11] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [17:50:11] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [17:50:11] [GALLERY_DB] Raw datesent for msg 17856: '2026-01-15 16:00:07' [17:50:11] [GALLERY_DB] Raw datesent for msg 17827: '2026-01-15 14:28:14' [17:50:11] [GALLERY_DB] Raw datesent for msg 17752: '2026-01-15 10:47:04' [17:50:11] [USER] ✅ User registered successfully [17:50:11] [USER] User registration successful [17:50:11] [GALLERY_DB] ✅ Loaded 431 media messages [17:50:11] [MIGRATION] No messages need sender_name backfill [17:50:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [17:50:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17872 [17:50:11] [INCREMENTAL_SYNC] ✅ No new messages [17:50:11] [GALLERY] Filtered 431 -> 392 (only with local thumbnails) [17:50:11] [GALLERY] First 5 after sort (newest first): [17:50:11] [GALLERY] 0: id=17856, date=2026-01-15 16:00:07, file=00580186bdfc055b.jpg [17:50:11] [GALLERY] 1: id=17827, date=2026-01-15 14:28:14, file=09c585e34fc5bc20.jpg [17:50:11] [GALLERY] 2: id=17752, date=2026-01-15 10:47:04, file=c3ee2fbb5839abc5.jpg [17:50:11] [GALLERY] 3: id=17739, date=2026-01-15 08:42:20, file=cd7d50cf024abd2a.jpg [17:50:11] [GALLERY] 4: id=17738, date=2026-01-15 08:22:37, file=d77fdc187ac423b2.jpg [17:50:11] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [17:50:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17823, 17824, 17825, 17826, 17827] [17:50:11] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [17:50:11] [SERVER] Starting reconnect polling (5s interval) [17:50:11] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [17:50:11] [ICONS] Offset applied: -14.6 [17:50:11] [ICONS] New left margin: 11.2, New right margin: 11.3 [17:50:11] [ICONS] Chat center: (31.2, 87.0) [17:50:11] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [17:50:11] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [17:50:11] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [17:50:11] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [17:50:11] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [17:50:11] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [17:50:11] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [17:50:11] [ICONS] Screen width: 440.0 [17:50:11] [PURGE] ⚠️ Media cache purge DISABLED for debugging [17:50:11] [UNSENT_RETRY] Checking for unsent messages... [17:50:11] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [17:50:11] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [17:50:11] [UPLOAD_RECOVERY] Session: ILUIWU [17:50:11] [UPLOAD_RECOVERY] ✅ No stuck uploads found [17:50:11] [UPLOAD_RECOVERY] Checking recent media messages on server... [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17856, file=00580186bdfc055b.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17827, file=09c585e34fc5bc20.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17739, file=cd7d50cf024abd2a.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17696, file=674206d67fc0fa03.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17687, file=67c77e91dc086f47.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17664, file=8a1b4fb11ea64c53.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17639, file=ceaa5688dd6bf7e9.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17611, file=999c5a9ae1fc9a20.jpg, upload_status=complete [17:50:11] [UPLOAD_RECOVERY] Verifying 8 media files exist on server... [17:50:11] [PENDING_UPLOAD] Total pending upload messages: 0 [17:50:11] [UNSENT_RETRY] No unsent messages found [17:50:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [17:50:11] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [17:50:11] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [17:50:11] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [17:50:12] [UPLOAD_RECOVERY] ✅ All media files verified on server [17:50:12] new_session POST ok: token len=157 [17:50:12] HELLO → sent (fetched token, role=query) [17:50:12] [SIG] hello_ok received for query connection - ready to query agents [17:50:12] [SIG] get_agents request sent for sessionId=ILUIWU [17:50:12] [SIG] get_agents request sent for sessionId=iosILUIWU [17:50:12] [SERVER] Stopped reconnect polling [17:50:12] [SIG] agents_list received: [] [17:50:12] [SIG] agents_list received: [] [17:50:12] [COMBINED_FETCH] Loaded 6644 read receipts, 790 messages with reactions [17:50:12] [READBY_ENRICH] Enriched 50 messages with readBy data [17:50:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17823, 17824, 17825, 17826, 17827] [17:50:14] [LOCK] Lock button tapped - locking app immediately [17:50:14] [LOCK] Received lock app notification [17:50:15] [LIFECYCLE] App resigning active - cleared crash flag [17:50:15] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [17:50:15] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [17:50:15] [LIFECYCLE] App entering background - cleared crash flag [17:50:15] [CLIENT_SIG] Disconnecting [17:50:15] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [17:50:15] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [18:02:47] [CRASH] No crash detected [18:02:47] [LOG] Within rotation interval - preserving logs (90m until next clear) [18:02:47] [FONT] Roboto fonts loaded successfully: Roboto-Regular [18:02:47] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [18:02:47] [GIPHY] SDK not available - using REST API fallback [18:02:47] [BACKGROUND] Background fetch enabled [18:02:47] [AUTH] Starting PIN authentication [18:02:47] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [18:02:47] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:02:47] [CLEANUP] No old timer messages to delete [18:02:47] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [18:02:47] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [18:02:47] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [18:02:47] [USER] ✅ User registered successfully [18:02:47] [PUSH] User registration after token update: success [18:02:47] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [18:02:47] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [18:02:47] [PRELOAD] ⚡ Starting message pre-load during authentication (since_id=17872)... [18:02:48] [CLIENT_SIG] WebSocket opened [18:02:48] [CLIENT_SIG] HELLO sent as client for session ILUIWU [18:02:48] [CLIENT_SIG] Connected! clientId=Icv34G_WKASNLxfq [18:02:48] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [18:02:48] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:02:48] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:02:48] [PRELOAD] Fetched 1 messages [18:02:48] [PRELOAD] ⚡ Cached 1 messages for instant display (preserved 0 from push) [18:02:49] [PIN_AUTH] Correct PIN [18:02:49] [SECURITY] Restored real session: ILUIWU [18:02:49] [SECURITY] Restored real session: ILUIWU [18:02:49] [SECURITY] Saved real session: ILUIWU [18:02:49] [SCENE] Launched directly to chat view with sessionId: ILUIWU [18:02:49] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [18:02:49] Documents Directory: /var/mobile/Containers/Data/Application/5D68AE23-01E3-48EB-8D9C-FB9D6AD5BDD0/Documents [18:02:49] [UPLOAD_QUEUE] Found 0 pending uploads to resume [18:02:49] [THEME] Applying current theme [18:02:49] [CHAT] Applied day theme (mode: day) [18:02:49] [SECURITY] Saved real session: ILUIWU [18:02:49] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [18:02:49] [CLIENT_SIG] Already connected/connecting to session ILUIWU [18:02:49] [NETWORK] Network monitor started [18:02:49] [NETWORK] Status changed: connected [18:02:49] Did transition [18:02:49] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [18:02:49] [VIEWER] Screen lock enabled - normal idle behavior [18:02:49] [QUERY] 🔍 Creating query connection for iOS slave: iosILUIWU [18:02:49] [VCC] ========== VideoConnectionClass INIT ========== [18:02:49] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [18:02:49] [DATA AUDIO] ========== setupWebRTC() START ========== [18:02:49] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [18:02:49] [DATA AUDIO] Creating encoder/decoder factories... [18:02:49] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [18:02:49] [CODEC] Viewer selected encoder: AV1 (best quality) [18:02:49] [DATA AUDIO] Creating RTCPeerConnectionFactory... [18:02:49] [DATA AUDIO] ✅ Factory created [18:02:49] [DATA AUDIO] RTCAudioSession locked [18:02:49] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [18:02:49] [DATA AUDIO] RTCAudioSession unlocked [18:02:49] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [18:02:49] [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:02:49] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [18:02:49] [WS] Opening session at ws://crivello.dyndns.org:8081/ [18:02:49] [QUERY] ✅ tempQueryConnection created for iosILUIWU [18:02:49] [VIEWER_INIT] Already have 50 messages - just filtering for tab [18:02:49] [EVENT_POLL] Event polling disabled - using WebSocket events instead [18:02:49] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [18:02:49] Did transition [18:02:49] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [18:02:49] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [18:02:49] [CHUNK] Merged 789 reactions synchronously [18:02:49] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [18:02:49] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [18:02:49] [MIGRATION] No messages need sender_name backfill [18:02:49] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [18:02:49] [GALLERY_DB] Raw datesent for msg 17856: '2026-01-15 16:00:07' [18:02:49] [GALLERY_DB] Raw datesent for msg 17827: '2026-01-15 14:28:14' [18:02:49] [GALLERY_DB] Raw datesent for msg 17752: '2026-01-15 10:47:04' [18:02:49] [USER] ✅ User registered successfully [18:02:49] [USER] User registration successful [18:02:49] [GALLERY_DB] ✅ Loaded 431 media messages [18:02:49] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17872 [18:02:49] [INCREMENTAL_SYNC] ✅ Found 1 new messages [18:02:49] [GALLERY] Filtered 431 -> 392 (only with local thumbnails) [18:02:49] [GALLERY] First 5 after sort (newest first): [18:02:49] [GALLERY] 0: id=17856, date=2026-01-15 16:00:07, file=00580186bdfc055b.jpg [18:02:49] [GALLERY] 1: id=17827, date=2026-01-15 14:28:14, file=09c585e34fc5bc20.jpg [18:02:49] [GALLERY] 2: id=17752, date=2026-01-15 10:47:04, file=c3ee2fbb5839abc5.jpg [18:02:49] [GALLERY] 3: id=17739, date=2026-01-15 08:42:20, file=cd7d50cf024abd2a.jpg [18:02:49] [GALLERY] 4: id=17738, date=2026-01-15 08:22:37, file=d77fdc187ac423b2.jpg [18:02:49] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [18:02:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:02:50] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [18:02:50] [SERVER] Starting reconnect polling (5s interval) [18:02:50] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [18:02:50] [ICONS] Offset applied: -14.6 [18:02:50] [ICONS] New left margin: 11.2, New right margin: 11.3 [18:02:50] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [18:02:50] [PUSH] Silent push received [18:02:50] [PUSH_EMBED] 📩 Received embedded message: id=17874, type=0, sender=Esra [18:02:50] [PUSH_EMBED] ✅ Saved message 17874 to local DB (sync) [18:02:50] [PUSH_EMBED] Created new cache with embedded message 17874 [18:02:50] [PUSH_EMBED] Fetching evolution data for message 17874 in background [18:02:50] [PUSH_EMBED] ✅ Fully processed message 17874 [18:02:50] [PUSH] Embedded message handled instantly from silent push [18:02:50] [ICONS] Chat center: (31.2, 87.0) [18:02:50] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [18:02:50] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [18:02:50] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [18:02:50] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [18:02:50] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [18:02:50] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [18:02:50] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [18:02:50] [ICONS] Screen width: 440.0 [18:02:50] [PURGE] ⚠️ Media cache purge DISABLED for debugging [18:02:50] [UNSENT_RETRY] Checking for unsent messages... [18:02:50] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [18:02:50] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [18:02:50] [UPLOAD_RECOVERY] Session: ILUIWU [18:02:50] [UPLOAD_RECOVERY] ✅ No stuck uploads found [18:02:50] [UPLOAD_RECOVERY] Checking recent media messages on server... [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17856, file=00580186bdfc055b.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17827, file=09c585e34fc5bc20.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17739, file=cd7d50cf024abd2a.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17696, file=674206d67fc0fa03.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17687, file=67c77e91dc086f47.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17664, file=8a1b4fb11ea64c53.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17639, file=ceaa5688dd6bf7e9.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] 📋 Recent media: msgId=17611, file=999c5a9ae1fc9a20.jpg, upload_status=complete [18:02:50] [UPLOAD_RECOVERY] Verifying 8 media files exist on server... [18:02:50] [PENDING_UPLOAD] Total pending upload messages: 0 [18:02:50] [UNSENT_RETRY] No unsent messages found [18:02:50] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:02:50] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:02:50] [PUSH_UI] Message 17874 already in memory - skipping insert [18:02:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-15 17:02:34"; "file_name" = ""; message = "Oki dokiiii, downloaded \Ud83e\Udd13"; "message_id" = 17874; "message_type" = 0; "prev_session_message_id" = 17872; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 17874, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] [18:02:50] [PUSH_EMBED_VC] Message 17874 already in memory - skipping [18:02:50] [PUSH] ⚡ Embedded message handled directly in ViewController [18:02:50] [PUSH] Parsed message_id: 17874 [18:02:50] [PUSH] Parsed operation_type: 0 [18:02:50] [PUSH] Taking direct action: opType=0, messageId=17874 [18:02:50] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17874 [18:02:50] [PUSH] ⚡ Message 17874 already in memory - skipping duplicate notification entirely [18:02:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [18:02:50] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [18:02:50] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [18:02:50] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [18:02:50] [PUSH_EMBED] Got evolution data for message 17874, saving to local DB [18:02:50] [PUSH_EMBED] Saved evolution data for message 17874 [18:02:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:02:50] [UPLOAD_RECOVERY] ✅ All media files verified on server [18:02:50] new_session POST ok: token len=157 [18:02:50] HELLO → sent (fetched token, role=query) [18:02:50] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17872 → 17874 [18:02:50] [SIG] hello_ok received for query connection - ready to query agents [18:02:50] [SIG] get_agents request sent for sessionId=ILUIWU [18:02:50] [SIG] get_agents request sent for sessionId=iosILUIWU [18:02:50] [SERVER] Stopped reconnect polling [18:02:50] [SIG] agents_list received: [] [18:02:50] [SIG] agents_list received: [] [18:02:50] [COMBINED_FETCH] Loaded 6645 read receipts, 792 messages with reactions [18:02:50] [READBY_ENRICH] Enriched 51 messages with readBy data [18:02:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:02:51] [PUSH] Silent push received [18:02:51] [PUSH_EMBED] No embedded message_data in notification [18:02:51] [PUSH] No embedded data, pre-loading messages from server [18:02:51] [PUSH_PRELOAD] Fetching messages for instant display cache [18:02:51] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:02:51] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [18:02:51] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:02:51] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 17874, AnyHashable("session_id"): ILUIWU] [18:02:51] [PUSH] Parsed message_id: 17874 [18:02:51] [PUSH] Parsed operation_type: 3 [18:02:51] [PUSH] Taking direct action: opType=3, messageId=17874 [18:02:51] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17874 [18:02:52] [DOUBLE_TAP] Adding heart reaction to message 17874 [18:02:52] [DOUBLE_TAP] Action: add (alreadyReactedWithHeart: false) [18:02:52] [DOUBLE_TAP] Heart reaction added successfully (status: ok) [18:02:52] [CLIENT_SIG] Event received: type=3 messageId=17874 [18:02:52] [WS_EVENT] Received event: type=3, messageId=17874 [18:02:52] [WS_EVENT] Read receipt for message 17874 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:02:54] [MENU] dismissAnyExistingMenu called [18:02:54] [MENU] dismissAnyExistingMenu completed [18:02:54] [EMOJI_PICKER] Starting emoji picker for message 17874 [18:02:54] [MENU] Created button 'Reply' at index 0 [18:02:54] [MENU] Created button 'Copy' at index 1 [18:02:54] [MENU] Created button 'Delete' at index 2 [18:02:54] [MENU] Menu added at y=516.5 [18:02:54] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [18:02:54] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [18:02:54] [EMOJI_PICKER] ✅ Picker shown at y=359.5 [18:02:57] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:02:58] [MENU] dismissMenu gesture triggered - tap on blur view [18:02:58] [MENU] Dismissing menu (tap was on blur, outside menu area) [18:03:00] [SCROLL_BTN] Showing button - 328pt from bottom > half 223pt [18:03:01] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:01] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:02] [PUSH] Silent push received [18:03:02] [PUSH_EMBED] 📩 Received embedded message: id=17875, type=0, sender=Esra [18:03:02] [PUSH_EMBED] ✅ Saved message 17875 to local DB (sync) [18:03:02] [PUSH_EMBED] Inserted message 17875 into existing cache (now 51 messages) [18:03:02] [PUSH_EMBED] Fetching evolution data for message 17875 in background [18:03:02] [PUSH_EMBED] ✅ Fully processed message 17875 [18:03:02] [PUSH] Embedded message handled instantly from silent push [18:03:02] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:03:02] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:03:02] [PUSH_UI] Inserted message 17875 into UI (now 52 messages) [18:03:02] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17875, AnyHashable("message_data"): { datesent = "2026-01-15 17:03:01"; "file_name" = ""; message = "Never used before"; "message_id" = 17875; "message_type" = 0; "prev_session_message_id" = 17874; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] [18:03:02] [PUSH_EMBED_VC] Message 17875 already in memory - skipping [18:03:02] [PUSH] ⚡ Embedded message handled directly in ViewController [18:03:02] [PUSH] Parsed message_id: 17875 [18:03:02] [PUSH] Parsed operation_type: 0 [18:03:02] [PUSH] Taking direct action: opType=0, messageId=17875 [18:03:02] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17875 [18:03:02] [PUSH] ⚡ Message 17875 already in memory - skipping duplicate notification entirely [18:03:02] [PUSH_EMBED] Got evolution data for message 17875, saving to local DB [18:03:02] [PUSH_EMBED] Saved evolution data for message 17875 [18:03:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[17875, 17823, 17824, 17825, 17826] [18:03:02] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17874 → 17875 [18:03:02] [CLIENT_SIG] Event received: type=0 messageId=17875 [18:03:02] [WS_EVENT] Received event: type=0, messageId=17875 [18:03:02] [WS_EVENT] 📨 New message notification (msgId=17875) - triggering incremental refresh, currentMsgCount=52 [18:03:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [18:03:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17875 [18:03:02] [INCREMENTAL_SYNC] ✅ No new messages [18:03:02] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [18:03:03] [PUSH] Silent push received [18:03:03] [PUSH_EMBED] No embedded message_data in notification [18:03:03] [PUSH] No embedded data, pre-loading messages from server [18:03:03] [PUSH_PRELOAD] Fetching messages for instant display cache [18:03:03] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:03:03] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [17824] [18:03:03] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [18:03:03] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:03:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 17875, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [18:03:03] [PUSH] Parsed message_id: 17875 [18:03:03] [PUSH] Parsed operation_type: 3 [18:03:03] [PUSH] Taking direct action: opType=3, messageId=17875 [18:03:03] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17875 [18:03:04] [CLIENT_SIG] Event received: type=3 messageId=17875 [18:03:04] [WS_EVENT] Received event: type=3, messageId=17875 [18:03:04] [WS_EVENT] Read receipt for message 17875 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:03:04] [MENU] dismissAnyExistingMenu called [18:03:04] [MENU] dismissAnyExistingMenu completed [18:03:14] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:15] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:15] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:16] [PUSH] Silent push received [18:03:16] [PUSH_EMBED] 📩 Received embedded message: id=17876, type=0, sender=Esra [18:03:16] [PUSH_EMBED] ✅ Saved message 17876 to local DB (sync) [18:03:16] [PUSH_EMBED] Inserted message 17876 into existing cache (now 52 messages) [18:03:16] [PUSH_EMBED] Fetching evolution data for message 17876 in background [18:03:16] [PUSH_EMBED] ✅ Fully processed message 17876 [18:03:16] [PUSH] Embedded message handled instantly from silent push [18:03:16] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:03:16] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:03:16] [PUSH_UI] Inserted message 17876 into UI (now 53 messages) [18:03:16] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_data"): { datesent = "2026-01-15 17:03:15"; "file_name" = ""; message = "But I\U2019ll try\Ud83d\Ude43"; "message_id" = 17876; "message_type" = 0; "prev_session_message_id" = 17875; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 17876] [18:03:16] [PUSH_EMBED_VC] Message 17876 already in memory - skipping [18:03:16] [PUSH] ⚡ Embedded message handled directly in ViewController [18:03:16] [PUSH] Parsed message_id: 17876 [18:03:16] [PUSH] Parsed operation_type: 0 [18:03:16] [PUSH] Taking direct action: opType=0, messageId=17876 [18:03:16] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17876 [18:03:16] [PUSH] ⚡ Message 17876 already in memory - skipping duplicate notification entirely [18:03:16] [PUSH_EMBED] Got evolution data for message 17876, saving to local DB [18:03:16] [PUSH_EMBED] Saved evolution data for message 17876 [18:03:16] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[17876, 17875, 17823, 17824, 17825] [18:03:16] [CLIENT_SIG] Event received: type=0 messageId=17876 [18:03:16] [WS_EVENT] Received event: type=0, messageId=17876 [18:03:16] [WS_EVENT] 📨 New message notification (msgId=17876) - triggering incremental refresh, currentMsgCount=53 [18:03:16] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [18:03:16] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17876 [18:03:16] [INCREMENTAL_SYNC] ✅ No new messages [18:03:16] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [18:03:35] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [18:03:35] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=53, isReloading=false [18:03:35] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=54 [18:03:35] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[-1, 17876, 17875, 17874, 17872] [18:03:35] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [18:03:35] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17875 → 17876 [18:03:35] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [18:03:36] [CLIENT_SIG] Event received: type=0 messageId=17877 [18:03:36] [WS_EVENT] Received event: type=0, messageId=17877 [18:03:36] [WS_EVENT] 📨 New message notification (msgId=17877) - triggering incremental refresh, currentMsgCount=54 [18:03:36] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":17877,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-15 17:03:35"} [18:03:36] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [18:03:36] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-01-15 17:03:35, "ok": 1, "file_name": , "session_id": ILUIWU, "message_id": 17877, "message_type": 0] [18:03:36] [DB_UPGRADE] Upgrading message ID: -1 → 17877, preserveOriginalDate=false [18:03:36] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17876 [18:03:36] [DB_UPGRADE] ✅ Upgraded -1 → 17877 with send_status=0, 1 row(s) affected [18:03:36] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 17877 [18:03:36] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 17877 [18:03:36] ReloadData 9 [18:03:36] [INCREMENTAL_SYNC] ✅ Found 1 new messages [18:03:36] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [18:03:36] [PUSH] Silent push received [18:03:36] [PUSH_EMBED] No embedded message_data in notification [18:03:36] [PUSH] No embedded data, pre-loading messages from server [18:03:36] [PUSH_PRELOAD] Fetching messages for instant display cache [18:03:36] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=54 [18:03:36] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:03:36] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [17826, 17825, 17824] [18:03:36] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [18:03:36] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:03:36] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17876, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [18:03:36] [PUSH] Parsed message_id: 17876 [18:03:36] [PUSH] Parsed operation_type: 3 [18:03:36] [PUSH] Taking direct action: opType=3, messageId=17876 [18:03:36] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17876 [18:03:36] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:03:37] [CLIENT_SIG] Event received: type=3 messageId=17876 [18:03:37] [WS_EVENT] Received event: type=3, messageId=17876 [18:03:37] [WS_EVENT] Read receipt for message 17876 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:03:37] [PUSH] Silent push received [18:03:37] [PUSH_EMBED] No embedded message_data in notification [18:03:37] [PUSH] No embedded data, pre-loading messages from server [18:03:37] [PUSH_PRELOAD] Fetching messages for instant display cache [18:03:37] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:03:37] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [17826, 17825, 17824] [18:03:37] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [18:03:37] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:03:37] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17877, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [18:03:37] [PUSH] Parsed message_id: 17877 [18:03:37] [PUSH] Parsed operation_type: 3 [18:03:37] [PUSH] Taking direct action: opType=3, messageId=17877 [18:03:37] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17877 [18:03:38] [CLIENT_SIG] Event received: type=3 messageId=17877 [18:03:38] [WS_EVENT] Received event: type=3, messageId=17877 [18:03:38] [WS_EVENT] Read receipt for message 17877 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:40] [LIFECYCLE] App resigning active - cleared crash flag [18:03:41] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [18:03:41] [SECURITY] Saved background timestamp [18:03:41] [LIFECYCLE] App entering background - cleared crash flag [18:03:41] [CLIENT_SIG] Disconnecting [18:03:41] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [18:03:41] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [18:03:41] [WS] Canceling WebSocket for query connection to iosILUIWU [18:03:41] In cleanupPeer [18:03:41] In cleanupPeer [18:03:41] [LIFECYCLE] WebRTC audio disabled [18:03:41] [LIFECYCLE] AVAudioSession deactivated [18:03:41] [LIFECYCLE] All connections stopped [18:03:41] [CLIENT_SIG] WebSocket closed with code 1001 [18:03:41] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [18:03:41] [SERVER] Stopped reconnect polling [18:03:41] Will request stop of video 0 [18:03:41] Will request stop of video 0 [18:03:41] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [18:03:41] [WS] Query connection error - cleaning up all agent connections and views [18:03:41] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [18:03:41] [WS] Query connection failed - cleaning up all agent connections and views [18:03:41] [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:03:41] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [18:03:42] [PIP] Removing 0 tracks from PiP for connection 0 [18:03:42] [PIP] ✅ All tracks removed for connection 0 [18:03:42] [PIP] Removing 0 tracks from PiP for connection 0 [18:03:42] [PIP] ✅ All tracks removed for connection 0 [18:03:42] [CLEANUP] ======================================== [18:03:42] [CLEANUP] Cleaning up all agent connections and views [18:03:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [18:03:42] [CLEANUP] Stopped and removed 0 video connections [18:03:42] [CLEANUP] Removed 0 video views [18:03:42] [CLEANUP] Removed 0 feed scroll views [18:03:42] [CLEANUP] Removed 0 status labels [18:03:42] [CLEANUP] Reset agent query state [18:03:42] [CLEANUP] Updated page indicator [18:03:42] [CLEANUP] Rebuilt video layout [18:03:42] [CLEANUP] ✅ All agent connections and views cleaned up [18:03:42] [CLEANUP] ======================================== [18:03:42] [SERVER] Skipping reconnect polling - app is in background [18:03:42] [WS] URLSession invalidated successfully [18:03:42] [CLEANUP] ======================================== [18:03:42] [CLEANUP] Cleaning up all agent connections and views [18:03:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [18:03:42] [CLEANUP] Stopped and removed 0 video connections [18:03:42] [CLEANUP] Removed 0 video views [18:03:42] [CLEANUP] Removed 0 feed scroll views [18:03:42] [CLEANUP] Removed 0 status labels [18:03:42] [CLEANUP] Reset agent query state [18:03:42] [CLEANUP] Updated page indicator [18:03:42] [CLEANUP] Rebuilt video layout [18:03:42] [CLEANUP] ✅ All agent connections and views cleaned up [18:03:42] [CLEANUP] ======================================== [18:03:42] [SERVER] Skipping reconnect polling - app is in background [18:03:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [18:03:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [18:03:56] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:03:56] [SECURITY] Timeout check: elapsed=14.351491212844849s, timeout=300.0s [18:03:56] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [18:03:56] [CLIENT_SIG] Already connected/connecting to session ILUIWU [18:03:56] [LIFECYCLE] App entering foreground - restoring connections [18:03:56] [UPLOAD_RETRY] No pending uploads to retry [18:03:56] [LIFECYCLE] Merged 790 reactions from local DB [18:03:56] [LIFECYCLE] WebRTC audio re-enabled [18:03:56] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [18:03:56] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [18:03:56] [CLIENT_SIG] Already connected/connecting to session ILUIWU [18:03:56] [VIEWER] Reconnecting after background - querying agents [18:03:56] [UNSENT_RETRY] Checking for unsent messages... [18:03:56] [PENDING_UPLOAD] Total pending upload messages: 0 [18:03:56] [UNSENT_RETRY] No unsent messages found [18:03:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:03:56] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [18:03:56] [SECURITY] Within timeout - cleared background flag [18:03:56] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [18:03:56] [PUSH] handlePollEventsNotification userInfo: [:] [18:03:56] [PUSH] No message_id in userInfo [18:03:56] [PUSH] No operation_type in userInfo [18:03:56] [FAST_REFRESH] Evolution disabled - performing incremental sync [18:03:56] [FAST_REFRESH] Already have 54 messages - skipping local DB load [18:03:56] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [18:03:56] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [18:03:56] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [18:03:56] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17877 [18:03:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [18:03:56] [CLIENT_SIG] WebSocket opened [18:03:56] HELLO → sent (cached token, role=query) [18:03:56] [CLIENT_SIG] HELLO sent as client for session ILUIWU [18:03:56] [CLIENT_SIG] Connected! clientId=WJsmho5AB-1lXTmD [18:03:56] [SIG] hello_ok received for query connection - ready to query agents [18:03:56] [SIG] get_agents request sent for sessionId=ILUIWU [18:03:56] [SIG] get_agents request sent for sessionId=iosILUIWU [18:03:56] [SERVER] Stopped reconnect polling [18:03:56] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [18:03:56] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:03:56] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:03:56] [SIG] agents_list received: [] [18:03:56] [SIG] agents_list received: [] [18:03:56] [INCREMENTAL_SYNC] ✅ No new messages [18:03:56] [FAST_REFRESH] Incremental sync complete - 54 messages [18:03:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:03:56] [COMBINED_FETCH] Loaded 6648 read receipts, 793 messages with reactions [18:03:56] [FOREGROUND] Enriched 0 messages with readBy data from server [18:03:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:03:56] [COMBINED_FETCH] Loaded 6648 read receipts, 793 messages with reactions [18:03:56] [FAST_REFRESH] Enriched 54 messages with readBy data [18:03:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:03:57] [MUTE] Status sent to server: muted=0, response code=200 [18:03:57] [MUTE] Status sent to server: muted=0, response code=200 [18:03:59] [BROADCAST] Starting camera broadcast on session: iosILUIWU [18:03:59] Initing with camera 0 [18:03:59] [START] AgentController.start() called with session: iosILUIWU [18:03:59] [START] Cancelling any existing idle stop timer [18:03:59] [BROADCAST] Lightbulb shown at lower left, frame=(20.0, 800.0, 50.0, 50.0) [18:04:00] WS connected [18:04:01] [CAM] ✅ Connected to signaling server. Session: iosILUIWU, agentId: AzGtLx-354OjdtFl [18:04:01] [CAM] helloOK → connected=true, myAgentId=AzGtLx-354OjdtFl [18:04:01] [WEBRTC] Creating new WebRTC client [18:04:01] [CODEC] Available video codecs: H264, H264, VP8, VP9, AV1 [18:04:01] [CODEC] Agent selected encoder: AV1 (best quality) [18:04:01] [WS AUDIO] Initializing WebSocket audio sender... [18:04:01] [WS AUDIO] ✅ WebSocket audio sender initialized [18:04:01] [ICE] Agent using 4 ICE urls: - stun:stun.l.google.com:19302 - turn:crivello.dyndns.org:3478?transport=udp - turn:crivello.dyndns.org:3478?transport=tcp - turns:crivello.dyndns.org:5349?transport=tcp [18:04:01] [ICE] Using 2 ICE server entries [18:04:01] [SIG] agent_connected received for sessionId=iosILUIWU agentId=AzGtLx-354OjdtFl [18:04:01] [CLIENT_SIG] Event received: type=0 messageId=17878 [18:04:01] [WS_EVENT] Received event: type=0, messageId=17878 [18:04:01] [WS_EVENT] 📨 New message notification (msgId=17878) - triggering incremental refresh, currentMsgCount=54 [18:04:01] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [18:04:01] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17877 [18:04:01] [AGENTS] Skipping own broadcast connection (by agentId): iosILUIWU:AzGtLx-354OjdtFl [18:04:01] [SIG] agents_list received: [["agentId": AzGtLx-354OjdtFl, "connected": 1, "sessionId": iosILUIWU]] [18:04:01] [SIG] agent_connected received for sessionId=iosILUIWU agentId=AzGtLx-354OjdtFl [18:04:01] [AGENTS] Skipping own broadcast connection (by agentId): iosILUIWU:AzGtLx-354OjdtFl [18:04:01] [SIG] agents_list received: [["agentId": AzGtLx-354OjdtFl, "sessionId": iosILUIWU, "connected": 1]] [18:04:01] [CAPTURE] startCapture() called with width:1920, height:1080, fps:30 [18:04:01] [CAPTURE] Creating audio track [18:04:01] [CAPTURE] DataChannelAudioSender already exists [18:04:01] [CAPTURE] Creating front video source and track [18:04:01] [CAPTURE] Creating back video source and track [18:04:01] localVideoTrackFront ok [18:04:01] localVideoTrackBack ok [18:04:01] Marking tracks as ready and firing callbacks [18:04:01] [CAPTURE] ✅ Device supports MultiCam, starting dual camera session [18:04:01] [CAPTURE] configureAndStartMultiCamSession() starting... [18:04:01] Video capture stopped (audio still running) [18:04:01] [CAPTURE] Created MultiCamSession and began configuration [18:04:01] [CAPTURE] Looking for camera devices... [18:04:01] [INCREMENTAL_SYNC] ✅ Found 1 new messages [18:04:01] DOWNLOADIIING t_ac06049ed4fee223.jpg [18:04:01] [CAPTURE] ✅ Found front camera: Front Camera [18:04:01] [CAPTURE] ✅ Found back camera: Back Camera [18:04:01] Selected camera format: 1920x1080, pixel format: 875704438 [18:04:01] [CAPTURE] Enabled continuous autofocus for front camera [18:04:01] Selected camera format: 1920x1080, pixel format: 875704438 [18:04:01] [CAPTURE] Enabled continuous autofocus for back camera [18:04:01] Selected camera format: 640x480, pixel format: 875704438 [18:04:01] Selected camera format: 640x480, pixel format: 875704438 [18:04:01] [iOS AUDIO] ========== START CAPTURE ========== [18:04:01] [iOS AUDIO] BEFORE - category: AVAudioSessionCategorySoloAmbient [18:04:01] [iOS AUDIO] BEFORE - mode: AVAudioSessionModeDefault [18:04:01] [iOS AUDIO] BEFORE - isOtherAudioPlaying: false [18:04:01] [iOS AUDIO] BEFORE - availableInputs: ["iPhone Microphone"] [18:04:01] [iOS AUDIO] BEFORE - currentRoute.inputs: [] [18:04:01] [iOS AUDIO] BEFORE - currentRoute.outputs: ["Speaker"] [18:04:01] [iOS AUDIO] Setting category to .playAndRecord... [18:04:01] [iOS AUDIO] Activating audio session... [18:04:01] [iOS AUDIO] ✅ Audio session configured [18:04:01] [iOS AUDIO] AFTER - category: AVAudioSessionCategoryPlayAndRecord [18:04:01] [iOS AUDIO] AFTER - mode: AVAudioSessionModeVideoChat [18:04:01] [iOS AUDIO] AFTER - currentRoute.inputs: ["iPhone Microphone"] [18:04:01] [iOS AUDIO] AFTER - currentRoute.outputs: ["Speaker"] [18:04:01] [iOS AUDIO] AFTER - recordPermission: 1735552628 [18:04:01] [iOS AUDIO] Creating AVAudioEngine... [18:04:01] [iOS AUDIO] Got inputNode: [18:04:01] [iOS AUDIO] Input format: 48000.0Hz, 1 channels, 1 [18:04:01] [iOS AUDIO] Installing tap on inputNode... [18:04:01] [iOS AUDIO] ✅ Tap installed [18:04:01] [iOS AUDIO] Starting engine... [18:04:01] [iOS AUDIO] ✅ AVAudioEngine started [18:04:01] [iOS AUDIO] engine.isRunning: true [18:04:01] [iOS AUDIO] inputNode.isVoiceProcessingEnabled: false [18:04:01] [iOS AUDIO] ========== END START CAPTURE ========== [18:04:01] [CAPTURE] Configuration committed [18:04:01] [CAPTURE] Starting MultiCam session... [18:04:01] [iOS AUDIO] 📤 Sent packet #1: 9600 bytes (4800 samples, ~100ms) [18:04:01] [CAPTURE] ✅ AVCaptureMultiCamSession started successfully (front + back) [18:04:01] [CAPTURE] Session running: true [18:04:01] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [18:04:01] [CAM] viewerJoin → session: iosILUIWU, viewerId: FXC1fxqgL-VaENMd [18:04:01] [WEBRTC] WebRTC client already exists, reusing it [18:04:01] [WEBRTC] WebRTC client already exists, reusing it [18:04:01] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=55 [18:04:01] ensureCaptureStarted - adding peer [18:04:01] tracksReady = true [18:04:01] [iOS AUDIO] 📤 Sent packet #2: 9600 bytes (4800 samples, ~100ms) [18:04:01] Added front video track to peer connection for FXC1fxqgL-VaENMd [18:04:01] Added back video track to peer connection for FXC1fxqgL-VaENMd [18:04:01] Added audio track to peer connection for FXC1fxqgL-VaENMd [18:04:01] localVideoTrackFront ok [18:04:01] localVideoTrackBack ok [18:04:01] tracks already marked as ready [18:04:01] Peer added with tracks, notifying viewer ready [18:04:01] notifyViewerReady called [18:04:01] notifyViewerReady -> Will send [18:04:02] [iOS AUDIO] 📤 Sent packet #3: 9600 bytes (4800 samples, ~100ms) [18:04:02] [CAM] Offer → session: iosILUIWU, viewerId: FXC1fxqgL-VaENMd [18:04:02] [WEBRTC] WebRTC client already exists, reusing it [18:04:02] [CAM] Peer connection ready, processing offer immediately [18:04:02] Creating answer for FXC1fxqgL-VaENMd. Found 3 transceivers: [18:04:02] Transceiver 0: video, direction=sendRecv, hasTrack=true [18:04:02] Transceiver 1: video, direction=sendRecv, hasTrack=true [18:04:02] Transceiver 2: audio, direction=sendRecv, hasTrack=true [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:978869916 1 udp 2122260224 192.168.1.14 58100 typ host generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote host → applying [18:04:02] SEND answer for viewerId=FXC1fxqgL-VaENMd [18:04:02] SDP length: 4813 [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2057448501 1 udp 1686052608 212.252.117.163 27090 typ srflx raddr 192.168.1.14 rport 58100 generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] ICE gathering state: 1 [18:04:02] [ICE] remote srflx → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1677435352 1 udp 2122129152 10.121.142.99 60509 typ host generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:408491700 1 udp 2121670400 192.0.0.6 57313 typ host generation 0 ufrag xno5 network-id 5 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] ICE state for vid=FXC1fxqgL-VaENMd: 1 ( RTCIceConnectionState ) [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:408491700 1 udp 2121604864 192.0.0.6 58632 typ host generation 0 ufrag xno5 network-id 8 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "candidate": "candidate:2566850315 1 udp 2122129151 192.168.1.177 58168 typ host generation 0 ufrag tFn6 network-id 1 network-cost 10", "sdpMid": Optional("0")] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:123747551 1 udp 2122063615 10.56.51.84 52456 typ host generation 0 ufrag tFn6 network-id 9 network-cost 900", "sdpMLineIndex": 0] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["candidate": "candidate:3373987885 1 udp 2121998079 10.9.194.14 57013 typ host generation 0 ufrag tFn6 network-id 10 network-cost 900", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:3373987885 1 udp 2121932543 10.9.194.14 51659 typ host generation 0 ufrag tFn6 network-id 4 network-cost 50", "sdpMLineIndex": 0] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["candidate": "candidate:3373987885 1 udp 2121867007 10.9.194.14 52565 typ host generation 0 ufrag tFn6 network-id 5 network-cost 50", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:3373987885 1 udp 2121801471 10.9.194.14 52994 typ host generation 0 ufrag tFn6 network-id 6 network-cost 50", "sdpMLineIndex": 0] [18:04:02] [ICE] agent local host [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] Found s:candidate:482399285 1 udp 2122197248 2a02:4e0:522:2925:bc71:d20c:e3ea:26eb 52233 typ host generation 0 ufrag xno5 network-id 13 network-cost 900 [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:2342128740 1 udp 2122265343 fdaa:bbcc:ddee:0:1841:8c4f:993a:7857 59778 typ host generation 0 ufrag tFn6 network-id 3 network-cost 10", "sdpMLineIndex": 0] [18:04:02] [ICE] remote host → applying [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["candidate": "candidate:4148340274 1 udp 2122197247 2001:1708:bb9:ed00:6837:b3c:b252:392e 49804 typ host generation 0 ufrag tFn6 network-id 2 network-cost 10", "sdpMid": Optional("0"), "sdpMLineIndex": 0] [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2305418320 1 udp 2122068736 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 60037 typ host generation 0 ufrag xno5 network-id 6 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2670795132 1 udp 2122003200 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 65022 typ host generation 0 ufrag xno5 network-id 7 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2670795132 1 udp 2121937664 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 64186 typ host generation 0 ufrag xno5 network-id 9 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2923134377 1 udp 2121869568 2a02:4e0:522:2925:78:8dcf:c46b:bbf4 59150 typ host generation 0 ufrag xno5 network-id 2 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1150794756 1 tcp 1518280448 192.168.1.14 52953 typ host tcptype passive generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:489964352 1 tcp 1518149376 10.121.142.99 52954 typ host tcptype passive generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1721168940 1 tcp 1517690624 192.0.0.6 52955 typ host tcptype passive generation 0 ufrag xno5 network-id 5 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1721168940 1 tcp 1517625088 192.0.0.6 52956 typ host tcptype passive generation 0 ufrag xno5 network-id 8 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1645164205 1 tcp 1518217472 2a02:4e0:522:2925:bc71:d20c:e3ea:26eb 52957 typ host tcptype passive generation 0 ufrag xno5 network-id 13 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:4154853064 1 tcp 1518088960 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 52958 typ host tcptype passive generation 0 ufrag xno5 network-id 6 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3791584228 1 tcp 1518023424 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 52959 typ host tcptype passive generation 0 ufrag xno5 network-id 7 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3791584228 1 tcp 1517957888 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 52960 typ host tcptype passive generation 0 ufrag xno5 network-id 9 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3505692465 1 tcp 1517889792 2a02:4e0:522:2925:78:8dcf:c46b:bbf4 52961 typ host tcptype passive generation 0 ufrag xno5 network-id 2 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:978869916 1 udp 2122260224 192.168.1.14 63976 typ host generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2057448501 1 udp 1686052608 212.252.117.163 26701 typ srflx raddr 192.168.1.14 rport 63976 generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote srflx → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1677435352 1 udp 2122129152 10.121.142.99 59278 typ host generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:408491700 1 udp 2121670400 192.0.0.6 55774 typ host generation 0 ufrag xno5 network-id 5 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:408491700 1 udp 2121604864 192.0.0.6 64697 typ host generation 0 ufrag xno5 network-id 8 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:482399285 1 udp 2122197248 2a02:4e0:522:2925:bc71:d20c:e3ea:26eb 59780 typ host generation 0 ufrag xno5 network-id 13 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:04:02] [ICE] agent local srflx [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) srflx candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:934667829 1 udp 1685921535 84.227.75.34 58168 typ srflx raddr 192.168.1.177 rport 58168 generation 0 ufrag tFn6 network-id 1 network-cost 10", "sdpMLineIndex": 0] [18:04:02] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:02] [CELL_UPLOAD] → not my message, setting complete [18:04:02] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:02] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17877 → 17878 [18:04:02] DOWNLOADIIING ac06049ed4fee223.jpg [18:04:02] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:02] [CELL_UPLOAD] → not my message, setting complete [18:04:02] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2305418320 1 udp 2122068736 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 60151 typ host generation 0 ufrag xno5 network-id 6 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2670795132 1 udp 2122003200 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 51851 typ host generation 0 ufrag xno5 network-id 7 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2670795132 1 udp 2121937664 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 62878 typ host generation 0 ufrag xno5 network-id 9 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2923134377 1 udp 2121869568 2a02:4e0:522:2925:78:8dcf:c46b:bbf4 60020 typ host generation 0 ufrag xno5 network-id 2 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1150794756 1 tcp 1518280448 192.168.1.14 52962 typ host tcptype passive generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:489964352 1 tcp 1518149376 10.121.142.99 52963 typ host tcptype passive generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1721168940 1 tcp 1517690624 192.0.0.6 52964 typ host tcptype passive generation 0 ufrag xno5 network-id 5 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1721168940 1 tcp 1517625088 192.0.0.6 52965 typ host tcptype passive generation 0 ufrag xno5 network-id 8 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:1645164205 1 tcp 1518217472 2a02:4e0:522:2925:bc71:d20c:e3ea:26eb 52966 typ host tcptype passive generation 0 ufrag xno5 network-id 13 network-cost 900 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:4154853064 1 tcp 1518088960 fd74:6572:6d6e:7573:c:e0f6:10fa:d736 52970 typ host tcptype passive generation 0 ufrag xno5 network-id 6 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3791584228 1 tcp 1518023424 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 52971 typ host tcptype passive generation 0 ufrag xno5 network-id 7 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3791584228 1 tcp 1517957888 fd74:6572:6d6e:7573:d:e0f6:10fa:d736 52972 typ host tcptype passive generation 0 ufrag xno5 network-id 9 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3505692465 1 tcp 1517889792 2a02:4e0:522:2925:78:8dcf:c46b:bbf4 52973 typ host tcptype passive generation 0 ufrag xno5 network-id 2 network-cost 50 [18:04:02] [ICE] remote host → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2147996777 1 udp 41886207 192.168.1.31 50462 typ relay raddr 212.252.117.163 rport 26701 generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote relay → applying (ip=192.168.1.31 port=50462) [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2147996777 1 udp 41886207 192.168.1.31 61466 typ relay raddr 212.252.117.163 rport 27090 generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote relay → applying (ip=192.168.1.31 port=61466) [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3434168550 1 udp 1685921535 5.24.152.206 37018 typ srflx raddr 10.121.142.99 rport 59278 generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote srflx → applying [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:3434168550 1 udp 1685921535 5.24.152.206 35799 typ srflx raddr 10.121.142.99 rport 60509 generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote srflx → applying [18:04:02] [ICE] agent local relay → ip=192.168.1.31 port=60224 [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) relay candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "sdpMLineIndex": 0, "candidate": "candidate:3127265035 1 udp 24977663 192.168.1.31 60224 typ relay raddr 84.227.75.34 rport 52356 generation 0 ufrag tFn6 network-id 1 network-cost 10"] [18:04:02] [ICE] agent local relay → ip=192.168.1.31 port=64019 [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) relay candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "candidate": "candidate:3299452307 1 udp 41755135 192.168.1.31 64019 typ relay raddr 84.227.75.34 rport 58168 generation 0 ufrag tFn6 network-id 1 network-cost 10", "sdpMid": Optional("0")] [18:04:02] [iOS AUDIO] 📤 Sent packet #4: 9600 bytes (4800 samples, ~100ms) [18:04:02] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "candidate": "candidate:3861964179 1 tcp 1518149375 192.168.1.177 52372 typ host tcptype passive generation 0 ufrag tFn6 network-id 1 network-cost 10", "sdpMid": Optional("0")] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["candidate": "candidate:2041568839 1 tcp 1518083839 10.56.51.84 52377 typ host tcptype passive generation 0 ufrag tFn6 network-id 9 network-cost 900", "sdpMLineIndex": 0, "sdpMid": Optional("0")] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "candidate": "candidate:3084196533 1 tcp 1518018303 10.9.194.14 52382 typ host tcptype passive generation 0 ufrag tFn6 network-id 10 network-cost 900", "sdpMid": Optional("0")] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["candidate": "candidate:3084196533 1 tcp 1517952767 10.9.194.14 52387 typ host tcptype passive generation 0 ufrag tFn6 network-id 4 network-cost 50", "sdpMLineIndex": 0, "sdpMid": Optional("0")] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:3084196533 1 tcp 1517887231 10.9.194.14 52392 typ host tcptype passive generation 0 ufrag tFn6 network-id 5 network-cost 50"] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:3084196533 1 tcp 1517821695 10.9.194.14 52397 typ host tcptype passive generation 0 ufrag tFn6 network-id 6 network-cost 50", "sdpMLineIndex": 0] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "sdpMid": Optional("0"), "candidate": "candidate:4116049660 1 tcp 1518285567 fdaa:bbcc:ddee:0:1841:8c4f:993a:7857 52402 typ host tcptype passive generation 0 ufrag tFn6 network-id 3 network-cost 10"] [18:04:02] [ICE] agent local host [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) host candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:2307736746 1 tcp 1518217471 2001:1708:bb9:ed00:6837:b3c:b252:392e 52408 typ host tcptype passive generation 0 ufrag tFn6 network-id 2 network-cost 10", "sdpMLineIndex": 0] [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:4274534129 1 udp 25108735 192.168.1.31 64835 typ relay raddr 212.252.117.163 rport 26602 generation 0 ufrag xno5 network-id 1 network-cost 10 [18:04:02] [ICE] remote relay → applying (ip=192.168.1.31 port=64835) [18:04:02] [iOS AUDIO] 📤 Sent packet #5: 9600 bytes (4800 samples, ~100ms) [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:2147996777 1 udp 41755135 192.168.1.31 58859 typ relay raddr 5.24.152.206 rport 35799 generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote relay → applying (ip=192.168.1.31 port=58859) [18:04:02] [iOS AUDIO] 📤 Sent packet #6: 9600 bytes (4800 samples, ~100ms) [18:04:02] [CAM] iceFromViewer viewerId=FXC1fxqgL-VaENMd [18:04:02] [CAM] Peer connection ready, processing ICE candidate immediately [18:04:02] addRemoteCandidate for vid=FXC1fxqgL-VaENMd [18:04:02] Found s:candidate:4274534129 1 udp 24977663 192.168.1.31 53390 typ relay raddr 5.24.152.206 rport 35568 generation 0 ufrag xno5 network-id 12 network-cost 900 [18:04:02] [ICE] remote relay → applying (ip=192.168.1.31 port=53390) [18:04:02] [ICE] agent local srflx [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) srflx candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMLineIndex": 0, "candidate": "candidate:572126005 1 udp 1685855999 194.230.158.50 56332 typ srflx raddr 10.56.51.84 rport 52456 generation 0 ufrag tFn6 network-id 9 network-cost 900", "sdpMid": Optional("0")] [18:04:02] [ICE] agent local srflx [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) srflx candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["candidate": "candidate:572126005 1 udp 1685855999 194.230.158.50 2400 typ srflx raddr 10.56.51.84 rport 52456 generation 0 ufrag tFn6 network-id 9 network-cost 900", "sdpMLineIndex": 0, "sdpMid": Optional("0")] [18:04:02] [iOS AUDIO] 📤 Sent packet #7: 9600 bytes (4800 samples, ~100ms) [18:04:02] [ICE] agent local relay → ip=192.168.1.31 port=51398 [18:04:02] [ICE] local → remote (FXC1fxqgL-VaENMd) relay candidate [18:04:02] SEND ice for viewerId=FXC1fxqgL-VaENMd [18:04:02] Candidate: ["sdpMid": Optional("0"), "candidate": "candidate:3299452307 1 udp 41689599 192.168.1.31 51398 typ relay raddr 194.230.158.50 rport 56332 generation 0 ufrag tFn6 network-id 9 network-cost 900", "sdpMLineIndex": 0] [18:04:02] [iOS AUDIO] 📤 Sent packet #8: 9600 bytes (4800 samples, ~100ms) [18:04:02] ICE state for vid=FXC1fxqgL-VaENMd: 2 ( RTCIceConnectionState ) [18:04:02] [STATS] starting poll for vid=FXC1fxqgL-VaENMd [18:04:02] [iOS AUDIO] 📤 Sent packet #9: 9600 bytes (4800 samples, ~100ms) [18:04:02] [iOS AUDIO] 📤 Sent packet #10: 9600 bytes (4800 samples, ~100ms) [18:04:03] [PUSH] Silent push received [18:04:03] [PUSH_EMBED] No embedded message_data in notification [18:04:03] [PUSH] No embedded data, pre-loading messages from server [18:04:03] [PUSH_PRELOAD] Fetching messages for instant display cache [18:04:03] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:04:03] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [17827, 17826, 17825, 17824] [18:04:03] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [18:04:03] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:04:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 17878, AnyHashable("session_id"): ILUIWU] [18:04:03] [PUSH] Parsed message_id: 17878 [18:04:03] [PUSH] Parsed operation_type: 3 [18:04:03] [PUSH] Taking direct action: opType=3, messageId=17878 [18:04:03] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17878 [18:04:03] [CLIENT_SIG] Event received: type=3 messageId=17878 [18:04:03] [WS_EVENT] Received event: type=3, messageId=17878 [18:04:03] [WS_EVENT] Read receipt for message 17878 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:04:04] [MENU] dismissAnyExistingMenu called [18:04:04] [MENU] dismissAnyExistingMenu completed [18:04:04] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-15 17:04:04 +0000 - type: unknown, operation_type: 0, message_id: 17878, session_id: ILUIWU, state: 0 [18:04:04] [PUSH_DEBUG] Full userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 17878, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] [18:04:04] [PUSH] App active - suppressing notification UI, posting internal event [18:04:04] [PUSH_EMBED] No embedded message_data in notification [18:04:04] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 17878, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] [18:04:04] [PUSH] Parsed message_id: 17878 [18:04:04] [PUSH] Parsed operation_type: 0 [18:04:04] [PUSH] Taking direct action: opType=0, messageId=17878 [18:04:04] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17878 [18:04:04] [PUSH] ⚡ Message 17878 already in memory - skipping duplicate notification entirely [18:04:05] [PUSH] Silent push received [18:04:05] [PUSH_EMBED] No embedded message_data in notification [18:04:05] [PUSH] No embedded data, pre-loading messages from server [18:04:05] [PUSH_PRELOAD] Fetching messages for instant display cache [18:04:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:04:05] [PRELOAD_CACHE] Preserving 4 push-inserted messages: [17827, 17826, 17825, 17824] [18:04:05] [PUSH_PRELOAD] ⚡ Pre-cached 54 messages for instant display (preserved 4 from push) [18:04:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:04:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 17878, AnyHashable("session_id"): ILUIWU] [18:04:05] [PUSH] Parsed message_id: 17878 [18:04:05] [PUSH] Parsed operation_type: 0 [18:04:05] [PUSH] Taking direct action: opType=0, messageId=17878 [18:04:05] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17878 [18:04:05] [PUSH] ⚡ Message 17878 already in memory - skipping duplicate notification entirely [18:04:06] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [18:04:06] [WS] Query connection error - cleaning up all agent connections and views [18:04:06] [CLEANUP] ======================================== [18:04:06] [CLEANUP] Cleaning up all agent connections and views [18:04:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [18:04:06] [CLEANUP] Stopped and removed 0 video connections [18:04:06] [CLEANUP] Removed 0 video views [18:04:06] [CLEANUP] Removed 0 feed scroll views [18:04:06] [CLEANUP] Removed 0 status labels [18:04:06] [CLEANUP] Reset agent query state [18:04:06] [CLEANUP] Updated page indicator [18:04:06] [CLEANUP] Rebuilt video layout [18:04:06] [CLEANUP] ✅ All agent connections and views cleaned up [18:04:06] [CLEANUP] ======================================== [18:04:06] [SERVER] Starting reconnect polling (5s interval) [18:04:06] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:06] [iOS AUDIO] ✅ Streaming: 50 packets sent [18:04:07] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:09] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-15 17:04:09 +0000 - type: unknown, operation_type: 0, message_id: 17879, session_id: ILUIWU, state: 0 [18:04:09] [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_id"): 17879, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:07"; "file_name" = ""; message = Babyyyy; "message_id" = 17879; "message_type" = 0; "prev_session_message_id" = 17878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [18:04:09] [PUSH] App active - suppressing notification UI, posting internal event [18:04:09] [PUSH_EMBED] 📩 Received embedded message: id=17879, type=0, sender=Esra [18:04:09] [PUSH_EMBED] ✅ Saved message 17879 to local DB (sync) [18:04:09] [PUSH_EMBED] Inserted message 17879 into existing cache (now 55 messages) [18:04:09] [PUSH_EMBED] Fetching evolution data for message 17879 in background [18:04:09] [PUSH_EMBED] ✅ Fully processed message 17879 [18:04:09] [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_id"): 17879, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:07"; "file_name" = ""; message = Babyyyy; "message_id" = 17879; "message_type" = 0; "prev_session_message_id" = 17878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [18:04:09] [PUSH_EMBED_VC] Processing embedded message: id=17879, type=0, sender=Esra, prevId=17878 [18:04:09] [PUSH_EMBED_VC] Inserted message 17879 into allMessagesWithReadBy (now 56 messages) [18:04:09] [PUSH_EMBED_VC] ✅ Previous message 17878 exists in memory [18:04:09] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:09] [PUSH] Parsed message_id: 17879 [18:04:09] [PUSH] Parsed operation_type: 0 [18:04:09] [PUSH] Taking direct action: opType=0, messageId=17879 [18:04:09] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17879 [18:04:09] [PUSH] ⚡ Message 17879 already in memory - skipping duplicate notification entirely [18:04:09] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:09] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:09] [PUSH_UI] Message 17879 already in memory - skipping insert [18:04:09] [PUSH_EMBED_VC] Saved message 17879 to local DB [18:04:09] [PUSH] Silent push received [18:04:09] [PUSH_EMBED] 📩 Received embedded message: id=17879, type=0, sender=Esra [18:04:09] [PUSH_EMBED] ✅ Saved message 17879 to local DB (sync) [18:04:09] [PUSH_EMBED] Fetching evolution data for message 17879 in background [18:04:09] [PUSH_EMBED] ✅ Fully processed message 17879 [18:04:09] [PUSH] Embedded message handled instantly from silent push [18:04:09] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:09] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:09] [PUSH_UI] Message 17879 already in memory - skipping insert [18:04:09] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17879, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:07"; "file_name" = ""; message = Babyyyy; "message_id" = 17879; "message_type" = 0; "prev_session_message_id" = 17878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] [18:04:09] [PUSH_EMBED_VC] Message 17879 already in memory - skipping [18:04:09] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:09] [PUSH] Parsed message_id: 17879 [18:04:09] [PUSH] Parsed operation_type: 0 [18:04:09] [PUSH] Taking direct action: opType=0, messageId=17879 [18:04:09] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17879 [18:04:09] [PUSH] ⚡ Message 17879 already in memory - skipping duplicate notification entirely [18:04:09] [PUSH] Silent push received [18:04:09] [PUSH_EMBED] 📩 Received embedded message: id=17879, type=0, sender=Esra [18:04:09] [PUSH_EMBED] ✅ Saved message 17879 to local DB (sync) [18:04:09] [PUSH_EMBED] Fetching evolution data for message 17879 in background [18:04:09] [PUSH_EMBED] ✅ Fully processed message 17879 [18:04:09] [PUSH] Embedded message handled instantly from silent push [18:04:09] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:09] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:09] [PUSH_UI] Message 17879 already in memory - skipping insert [18:04:09] [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"): 17879, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:07"; "file_name" = ""; message = Babyyyy; "message_id" = 17879; "message_type" = 0; "prev_session_message_id" = 17878; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }] [18:04:09] [PUSH_EMBED_VC] Message 17879 already in memory - skipping [18:04:09] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:09] [PUSH] Parsed message_id: 17879 [18:04:09] [PUSH] Parsed operation_type: 0 [18:04:09] [PUSH] Taking direct action: opType=0, messageId=17879 [18:04:09] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17879 [18:04:09] [PUSH] ⚡ Message 17879 already in memory - skipping duplicate notification entirely [18:04:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[17879, 17823, 17824, 17825, 17826] [18:04:09] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:09] [CELL_UPLOAD] → not my message, setting complete [18:04:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:09] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17878 → 17879 [18:04:10] [CLIENT_SIG] Event received: type=0 messageId=17879 [18:04:10] [WS_EVENT] Received event: type=0, messageId=17879 [18:04:10] [WS_EVENT] 📨 New message notification (msgId=17879) - triggering incremental refresh, currentMsgCount=56 [18:04:10] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=56 [18:04:10] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17879 [18:04:10] [PUSH_EMBED] Got evolution data for message 17879, saving to local DB [18:04:10] [PUSH_EMBED] Saved evolution data for message 17879 [18:04:10] [INCREMENTAL_SYNC] ✅ No new messages [18:04:10] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=56 [18:04:10] [PUSH_EMBED] Got evolution data for message 17879, saving to local DB [18:04:10] [PUSH_EMBED] Saved evolution data for message 17879 [18:04:10] [PUSH_EMBED] Got evolution data for message 17879, saving to local DB [18:04:10] [PUSH_EMBED] Saved evolution data for message 17879 [18:04:11] [SERVER] Polling - attempting to reconnect... [18:04:11] [PUSH] Silent push received [18:04:11] [PUSH_EMBED] No embedded message_data in notification [18:04:11] [PUSH] No embedded data, pre-loading messages from server [18:04:11] [PUSH_PRELOAD] Fetching messages for instant display cache [18:04:11] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:04:11] [PRELOAD_CACHE] Preserving 5 push-inserted messages: [17828, 17827, 17826, 17825, 17824] [18:04:11] [PUSH_PRELOAD] ⚡ Pre-cached 55 messages for instant display (preserved 5 from push) [18:04:11] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:04:11] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 17879, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [18:04:11] [PUSH] Parsed message_id: 17879 [18:04:11] [PUSH] Parsed operation_type: 3 [18:04:11] [PUSH] Taking direct action: opType=3, messageId=17879 [18:04:11] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17879 [18:04:13] [CLIENT_SIG] Event received: type=3 messageId=17879 [18:04:13] [WS_EVENT] Received event: type=3, messageId=17879 [18:04:13] [WS_EVENT] Read receipt for message 17879 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:04:14] [NETWORK] Status changed: connected [18:04:15] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:16] [SERVER] Polling - attempting to reconnect... [18:04:16] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:18] [NETWORK] Status changed: connected [18:04:18] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-15 17:04:18 +0000 - type: unknown, operation_type: 0, message_id: 17880, session_id: ILUIWU, state: 0 [18:04:18] [PUSH_DEBUG] Full 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_data"): { datesent = "2026-01-15 17:04:16"; "file_name" = ""; message = "\Ud83d\Udc8b\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 17880; "message_type" = 0; "prev_session_message_id" = 17879; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 17880] [18:04:18] [PUSH] App active - suppressing notification UI, posting internal event [18:04:18] [PUSH_EMBED] 📩 Received embedded message: id=17880, type=0, sender=Esra [18:04:18] [PUSH_EMBED] ✅ Saved message 17880 to local DB (sync) [18:04:18] [PUSH_EMBED] Inserted message 17880 into existing cache (now 56 messages) [18:04:18] [PUSH_EMBED] Fetching evolution data for message 17880 in background [18:04:18] [PUSH_EMBED] ✅ Fully processed message 17880 [18:04:18] [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_data"): { datesent = "2026-01-15 17:04:16"; "file_name" = ""; message = "\Ud83d\Udc8b\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 17880; "message_type" = 0; "prev_session_message_id" = 17879; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("message_id"): 17880] [18:04:18] [PUSH_EMBED_VC] Processing embedded message: id=17880, type=0, sender=Esra, prevId=17879 [18:04:18] [PUSH_EMBED_VC] Inserted message 17880 into allMessagesWithReadBy (now 57 messages) [18:04:18] [PUSH_EMBED_VC] ✅ Previous message 17879 exists in memory [18:04:18] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:18] [PUSH] Parsed message_id: 17880 [18:04:18] [PUSH] Parsed operation_type: 0 [18:04:18] [PUSH] Taking direct action: opType=0, messageId=17880 [18:04:18] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17880 [18:04:18] [PUSH] ⚡ Message 17880 already in memory - skipping duplicate notification entirely [18:04:18] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:18] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:18] [PUSH_UI] Message 17880 already in memory - skipping insert [18:04:18] [PUSH_EMBED_VC] Saved message 17880 to local DB [18:04:18] [PUSH] Silent push received [18:04:18] [PUSH_EMBED] 📩 Received embedded message: id=17880, type=0, sender=Esra [18:04:18] [PUSH_EMBED] ✅ Saved message 17880 to local DB (sync) [18:04:18] [PUSH_EMBED] Fetching evolution data for message 17880 in background [18:04:18] [PUSH_EMBED] ✅ Fully processed message 17880 [18:04:18] [PUSH] Embedded message handled instantly from silent push [18:04:18] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:18] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:18] [PUSH_UI] Message 17880 already in memory - skipping insert [18:04:18] [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_id"): 17880, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:16"; "file_name" = ""; message = "\Ud83d\Udc8b\Ud83d\Udc8b\Ud83d\Udc8b\U2665\Ufe0f"; "message_id" = 17880; "message_type" = 0; "prev_session_message_id" = 17879; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [18:04:18] [PUSH_EMBED_VC] Message 17880 already in memory - skipping [18:04:18] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:18] [PUSH] Parsed message_id: 17880 [18:04:18] [PUSH] Parsed operation_type: 0 [18:04:18] [PUSH] Taking direct action: opType=0, messageId=17880 [18:04:18] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17880 [18:04:18] [PUSH] ⚡ Message 17880 already in memory - skipping duplicate notification entirely [18:04:18] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[17880, 17879, 17823, 17824, 17825] [18:04:18] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:18] [CELL_UPLOAD] → not my message, setting complete [18:04:18] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:18] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17879 → 17880 [18:04:19] [CLIENT_SIG] Event received: type=0 messageId=17880 [18:04:19] [WS_EVENT] Received event: type=0, messageId=17880 [18:04:19] [WS_EVENT] 📨 New message notification (msgId=17880) - triggering incremental refresh, currentMsgCount=57 [18:04:19] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=57 [18:04:19] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17880 [18:04:19] [PUSH_EMBED] Got evolution data for message 17880, saving to local DB [18:04:19] [PUSH_EMBED] Saved evolution data for message 17880 [18:04:19] [INCREMENTAL_SYNC] ✅ No new messages [18:04:19] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=57 [18:04:19] [PUSH_EMBED] Got evolution data for message 17880, saving to local DB [18:04:19] [PUSH_EMBED] Saved evolution data for message 17880 [18:04:19] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [18:04:20] [PUSH] Silent push received [18:04:20] [PUSH_EMBED] No embedded message_data in notification [18:04:20] [PUSH] No embedded data, pre-loading messages from server [18:04:20] [PUSH_PRELOAD] Fetching messages for instant display cache [18:04:20] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:04:20] [PRELOAD_CACHE] Preserving 6 push-inserted messages: [17829, 17828, 17827, 17826, 17825, 17824] [18:04:20] [PUSH_PRELOAD] ⚡ Pre-cached 56 messages for instant display (preserved 6 from push) [18:04:20] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:04:20] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17880, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [18:04:20] [PUSH] Parsed message_id: 17880 [18:04:20] [PUSH] Parsed operation_type: 3 [18:04:20] [PUSH] Taking direct action: opType=3, messageId=17880 [18:04:20] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17880 [18:04:21] [SERVER] Polling - attempting to reconnect... [18:04:22] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:22] [NETWORK] Status changed: connected [18:04:22] [CLIENT_SIG] Event received: type=3 messageId=17880 [18:04:22] [WS_EVENT] Received event: type=3, messageId=17880 [18:04:22] [WS_EVENT] Read receipt for message 17880 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:04:26] [SERVER] Polling - attempting to reconnect... [18:04:31] [SERVER] Polling - attempting to reconnect... [18:04:31] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [18:04:31] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=57, isReloading=false [18:04:31] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=58 [18:04:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[-2, 17880, 17879, 17878, 17877] [18:04:31] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:31] [CELL_UPLOAD] → not my message, setting complete [18:04:31] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:31] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [18:04:31] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [18:04:33] [CLIENT_SIG] Event received: type=0 messageId=17881 [18:04:33] [WS_EVENT] Received event: type=0, messageId=17881 [18:04:33] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":17881,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-01-15 17:04:31"} [18:04:33] [WS_EVENT] 📨 New message notification (msgId=17881) - triggering incremental refresh, currentMsgCount=58 [18:04:33] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [18:04:33] [CHAT] receive_message.php JSON: ["ok": 1, "message_id": 17881, "session_id": ILUIWU, "file_name": , "datesent_utc": 2026-01-15 17:04:31, "message_type": 0] [18:04:33] [DB_UPGRADE] Upgrading message ID: -2 → 17881, preserveOriginalDate=false [18:04:33] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17880 [18:04:33] [DB_UPGRADE] ✅ Upgraded -2 → 17881 with send_status=0, 1 row(s) affected [18:04:33] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 17881 [18:04:33] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 17881 [18:04:33] ReloadData 9 [18:04:33] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:33] [CELL_UPLOAD] → not my message, setting complete [18:04:33] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:33] [INCREMENTAL_SYNC] ✅ Found 1 new messages [18:04:33] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [18:04:33] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=58 [18:04:34] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[17823, 17824, 17825, 17826, 17827] [18:04:34] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:34] [CELL_UPLOAD] → not my message, setting complete [18:04:34] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:35] [PUSH] Silent push received [18:04:35] [PUSH_EMBED] No embedded message_data in notification [18:04:35] [PUSH] No embedded data, pre-loading messages from server [18:04:35] [PUSH_PRELOAD] Fetching messages for instant display cache [18:04:35] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:04:35] [PRELOAD_CACHE] Preserving 7 push-inserted messages: [17830, 17829, 17828, 17827, 17826, 17825, 17824] [18:04:35] [PUSH_PRELOAD] ⚡ Pre-cached 57 messages for instant display (preserved 7 from push) [18:04:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:04:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 17881] [18:04:35] [PUSH] Parsed message_id: 17881 [18:04:35] [PUSH] Parsed operation_type: 3 [18:04:35] [PUSH] Taking direct action: opType=3, messageId=17881 [18:04:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17881 [18:04:35] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=17876 [18:04:35] [TAP_REPLAY] 📦 Found message: text.count=13, evolutionData.isEmpty=true [18:04:35] [TAP_REPLAY] 📡 No local evolution data - fetching from server [18:04:35] [TAP_REPLAY] 🔍 Server response keys: ["created_at", "evolution", "has_evolution", "message_id", "ok"] [18:04:35] [TAP_REPLAY] ✅ Successfully fetched 27 events from server - calling playEvolutionInline [18:04:35] [EVOLUTION] 🎬 playEvolutionInline called for message 17876 with 27 events [18:04:35] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:35] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:35] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:35] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText=' ', text='But I’ll try🙃' [18:04:35] [UPDATE_CELL] ✅ Updating ChatCell label to: ' ' [18:04:35] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:35] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:35] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:35] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='B', text='But I’ll try🙃' [18:04:35] [UPDATE_CELL] ✅ Updating ChatCell label to: 'B' [18:04:35] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:35] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:35] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:35] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='Bu', text='But I’ll try🙃' [18:04:35] [UPDATE_CELL] ✅ Updating ChatCell label to: 'Bu' [18:04:36] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:36] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:36] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:36] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But', text='But I’ll try🙃' [18:04:36] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But' [18:04:36] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:36] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:36] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:36] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But ', text='But I’ll try🙃' [18:04:36] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But ' [18:04:36] [SERVER] Polling - attempting to reconnect... [18:04:37] [CLIENT_SIG] Event received: type=3 messageId=17881 [18:04:37] [WS_EVENT] Received event: type=3, messageId=17881 [18:04:37] [WS_EVENT] Read receipt for message 17881 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:37] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:37] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:37] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:37] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But e', text='But I’ll try🙃' [18:04:37] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But e' [18:04:37] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:37] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:37] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:37] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But ei', text='But I’ll try🙃' [18:04:37] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But ei' [18:04:37] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:37] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:37] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:37] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But eil', text='But I’ll try🙃' [18:04:37] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But eil' [18:04:37] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:37] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:37] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:37] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But eill', text='But I’ll try🙃' [18:04:37] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But eill' [18:04:38] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:38] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:38] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:38] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But ill', text='But I’ll try🙃' [18:04:38] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But ill' [18:04:38] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:38] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:38] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:38] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But Will', text='But I’ll try🙃' [18:04:38] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But Will' [18:04:38] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:38] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:38] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:38] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But Will ', text='But I’ll try🙃' [18:04:38] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But Will ' [18:04:38] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:38] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:38] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:38] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But Will', text='But I’ll try🙃' [18:04:38] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But Will' [18:04:38] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:38] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:38] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:38] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But Wil', text='But I’ll try🙃' [18:04:38] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But Wil' [18:04:39] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:39] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:39] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:39] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But Wi', text='But I’ll try🙃' [18:04:39] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But Wi' [18:04:39] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:39] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:39] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:39] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But W', text='But I’ll try🙃' [18:04:39] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But W' [18:04:39] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:39] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:39] [UPDATE_CELL] ⚡ Updated chatRows in place (evolution mode) [18:04:39] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=true, evolutionText='But ', text='But I’ll try🙃' [18:04:39] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But ' [18:04:40] [TAP_REPLAY] 🔄 replayEvolutionAnimation called for messageId=17876 [18:04:40] [TAP_REPLAY] ⏹️ Animation already playing - stopping and showing final text [18:04:40] [UPDATE_CELL] 🔍 updateMessageCell called for message 17876 [18:04:40] [UPDATE_CELL] Initial targetRowIndex=53 [18:04:40] [UPDATE_CELL] Rebuilt chatRows, count=59 [18:04:40] [UPDATE_CELL] After rebuild targetRowIndex=53 [18:04:40] [UPDATE_CELL] 📝 Message state: isPlayingEvolution=false, evolutionText='But I’ll try🙃', text='But I’ll try🙃' [18:04:40] [UPDATE_CELL] ✅ Updating ChatCell label to: 'But I’ll try🙃' [18:04:40] [UPDATE_CELL] 📐 Height recalculated with scroll position preserved [18:04:41] [SERVER] Polling - attempting to reconnect... [18:04:41] [MENU] dismissAnyExistingMenu called [18:04:41] [MENU] dismissAnyExistingMenu completed [18:04:41] [SCROLL_BTN] Showing button - 382pt from bottom > half 379pt [18:04:42] [MENU] dismissAnyExistingMenu called [18:04:42] [MENU] dismissAnyExistingMenu completed [18:04:42] [MENU] dismissAnyExistingMenu called [18:04:42] [MENU] dismissAnyExistingMenu completed [18:04:42] [SCROLL_BTN] Showing button - 380pt from bottom > half 379pt [18:04:42] [SCROLL_BTN] Showing button - 415pt from bottom > half 379pt [18:04:42] [CELL_UPLOAD] configure: msgId=17856, file=00580186bdfc055b.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:42] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:42] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=00580186bdfc055b.jpg, overlayExists=true [18:04:43] [MENU] dismissAnyExistingMenu called [18:04:43] [MENU] dismissAnyExistingMenu completed [18:04:43] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:43] [MENU] dismissAnyExistingMenu called [18:04:43] [MENU] dismissAnyExistingMenu completed [18:04:44] [MENU] dismissAnyExistingMenu called [18:04:44] [MENU] dismissAnyExistingMenu completed [18:04:44] [CELL_UPLOAD] configure: msgId=17827, file=09c585e34fc5bc20.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=09c585e34fc5bc20.jpg, overlayExists=true [18:04:44] [COMBINED_FETCH] Loaded 6653 read receipts, 793 messages with reactions [18:04:44] [PAGINATION] 📜 Loading 42 older messages, firstVisibleRow=0, oldOffset=-47.333333333333336 [18:04:44] [PAGINATION] 📜 Total now: 100 [18:04:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=100, first5Ids=[17781, 17782, 17783, 17784, 17785] [18:04:44] [PAGINATION] 📜 newHeight=9580.0, heightDiff=3854.0, newOffset=3806.6666666666665 [18:04:44] [PAGINATION] 📜 After setContentOffset, actual offset=3806.6666666666665 [18:04:44] [PAGINATION] 📜 After main queue, offset=3806.6666666666665 [18:04:44] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-15 17:04:44 +0000 - type: unknown, operation_type: 0, message_id: 17882, session_id: ILUIWU, state: 0 [18:04:44] [PUSH_DEBUG] Full userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:43"; "file_name" = ""; message = "I will miss you too my love. Sooo much! A lot !"; "message_id" = 17882; "message_type" = 0; "prev_session_message_id" = 17881; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 17882, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [18:04:44] [PUSH] App active - suppressing notification UI, posting internal event [18:04:44] [PUSH_EMBED] 📩 Received embedded message: id=17882, type=0, sender=Esra [18:04:44] [PUSH_EMBED] ✅ Saved message 17882 to local DB (sync) [18:04:44] [PUSH_EMBED] Inserted message 17882 into existing cache (now 58 messages) [18:04:44] [PUSH_EMBED] Fetching evolution data for message 17882 in background [18:04:44] [PUSH_EMBED] ✅ Fully processed message 17882 [18:04:44] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:43"; "file_name" = ""; message = "I will miss you too my love. Sooo much! A lot !"; "message_id" = 17882; "message_type" = 0; "prev_session_message_id" = 17881; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 17882, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] [18:04:44] [PUSH_EMBED_VC] Processing embedded message: id=17882, type=0, sender=Esra, prevId=17881 [18:04:44] [PUSH_EMBED_VC] Inserted message 17882 into allMessagesWithReadBy (now 101 messages) [18:04:44] [PUSH_EMBED_VC] ✅ Previous message 17881 exists in memory [18:04:44] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:44] [PUSH] Parsed message_id: 17882 [18:04:44] [PUSH] Parsed operation_type: 0 [18:04:44] [PUSH] Taking direct action: opType=0, messageId=17882 [18:04:44] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17882 [18:04:44] [PUSH] ⚡ Message 17882 already in memory - skipping duplicate notification entirely [18:04:44] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:44] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:44] [PUSH_UI] Message 17882 already in memory - skipping insert [18:04:44] [PUSH_EMBED_VC] Saved message 17882 to local DB [18:04:44] [PUSH] Silent push received [18:04:44] [PUSH_EMBED] 📩 Received embedded message: id=17882, type=0, sender=Esra [18:04:44] [PUSH_EMBED] ✅ Saved message 17882 to local DB (sync) [18:04:44] [PUSH_EMBED] Fetching evolution data for message 17882 in background [18:04:44] [PUSH_EMBED] ✅ Fully processed message 17882 [18:04:44] [PUSH] Embedded message handled instantly from silent push [18:04:44] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:04:44] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:04:44] [PUSH_UI] Message 17882 already in memory - skipping insert [18:04:44] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_id"): 17882, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { datesent = "2026-01-15 17:04:43"; "file_name" = ""; message = "I will miss you too my love. Sooo much! A lot !"; "message_id" = 17882; "message_type" = 0; "prev_session_message_id" = 17881; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; timer = 0; }, AnyHashable("session_id"): ILUIWU] [18:04:44] [PUSH_EMBED_VC] Message 17882 already in memory - skipping [18:04:44] [PUSH] ⚡ Embedded message handled directly in ViewController [18:04:44] [PUSH] Parsed message_id: 17882 [18:04:44] [PUSH] Parsed operation_type: 0 [18:04:44] [PUSH] Taking direct action: opType=0, messageId=17882 [18:04:44] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17882 [18:04:44] [PUSH] ⚡ Message 17882 already in memory - skipping duplicate notification entirely [18:04:44] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=101, first5Ids=[17882, 17781, 17782, 17783, 17784] [18:04:44] [CELL_UPLOAD] configure: msgId=17827, file=09c585e34fc5bc20.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:44] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:44] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=09c585e34fc5bc20.jpg, overlayExists=true [18:04:45] [CELL_UPLOAD] configure: msgId=17856, file=00580186bdfc055b.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:45] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=00580186bdfc055b.jpg, overlayExists=true [18:04:45] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:45] [CELL_UPLOAD] → not my message, setting complete [18:04:45] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:04:45] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17881 → 17882 [18:04:45] [CLIENT_SIG] Event received: type=0 messageId=17882 [18:04:45] [WS_EVENT] Received event: type=0, messageId=17882 [18:04:45] [WS_EVENT] 📨 New message notification (msgId=17882) - triggering incremental refresh, currentMsgCount=101 [18:04:45] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=101 [18:04:45] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17882 [18:04:45] [PUSH_EMBED] Got evolution data for message 17882, saving to local DB [18:04:45] [PUSH_EMBED] Saved evolution data for message 17882 [18:04:45] [PUSH_EMBED] Got evolution data for message 17882, saving to local DB [18:04:45] [PUSH_EMBED] Saved evolution data for message 17882 [18:04:45] [INCREMENTAL_SYNC] ✅ No new messages [18:04:45] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=101 [18:04:46] [SERVER] Polling - attempting to reconnect... [18:04:46] [NETWORK] Status changed: connected [18:04:46] [MENU] dismissAnyExistingMenu called [18:04:46] [MENU] dismissAnyExistingMenu completed [18:04:46] [SCROLL_BTN] Showing button - 404pt from bottom > half 379pt [18:04:46] [CELL_UPLOAD] configure: msgId=17856, file=00580186bdfc055b.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:46] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:46] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=00580186bdfc055b.jpg, overlayExists=true [18:04:47] [PUSH] Silent push received [18:04:47] [PUSH_EMBED] No embedded message_data in notification [18:04:47] [PUSH] No embedded data, pre-loading messages from server [18:04:47] [PUSH_PRELOAD] Fetching messages for instant display cache [18:04:47] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:04:47] [PRELOAD_CACHE] Preserving 8 push-inserted messages: [17831, 17830, 17829, 17828, 17827, 17826, 17825, 17824] [18:04:47] [PUSH_PRELOAD] ⚡ Pre-cached 58 messages for instant display (preserved 8 from push) [18:04:47] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:04:47] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 17882, AnyHashable("aps"): { "content-available" = 1; }] [18:04:47] [PUSH] Parsed message_id: 17882 [18:04:47] [PUSH] Parsed operation_type: 3 [18:04:47] [PUSH] Taking direct action: opType=3, messageId=17882 [18:04:47] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17882 [18:04:47] [MENU] dismissAnyExistingMenu called [18:04:47] [MENU] dismissAnyExistingMenu completed [18:04:48] [MENU] dismissAnyExistingMenu called [18:04:48] [MENU] dismissAnyExistingMenu completed [18:04:48] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:04:48] [CELL_UPLOAD] configure: msgId=17827, file=09c585e34fc5bc20.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:48] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:48] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=09c585e34fc5bc20.jpg, overlayExists=true [18:04:48] [CLIENT_SIG] Event received: type=3 messageId=17882 [18:04:48] [WS_EVENT] Received event: type=3, messageId=17882 [18:04:48] [WS_EVENT] Read receipt for message 17882 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [18:04:49] [MENU] dismissAnyExistingMenu called [18:04:49] [MENU] dismissAnyExistingMenu completed [18:04:50] [MENU] dismissAnyExistingMenu called [18:04:50] [MENU] dismissAnyExistingMenu completed [18:04:50] [MENU] dismissAnyExistingMenu called [18:04:50] [MENU] dismissAnyExistingMenu completed [18:04:51] [MENU] dismissAnyExistingMenu called [18:04:51] [MENU] dismissAnyExistingMenu completed [18:04:51] [COMBINED_FETCH] Loaded 6653 read receipts, 793 messages with reactions [18:04:51] [PAGINATION] 📜 Loading 41 older messages, firstVisibleRow=0, oldOffset=-84.66666666666667 [18:04:51] [PAGINATION] 📜 Total now: 142 [18:04:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=142, first5Ids=[17740, 17741, 17742, 17743, 17744] [18:04:51] [PAGINATION] 📜 newHeight=13045.0, heightDiff=3367.0, newOffset=3282.3333333333335 [18:04:51] [PAGINATION] 📜 After setContentOffset, actual offset=3282.3333333333335 [18:04:51] [PAGINATION] 📜 After main queue, offset=3282.3333333333335 [18:04:51] [SERVER] Polling - attempting to reconnect... [18:04:51] [iOS AUDIO] 📊 500 audio packets sent [18:04:52] [MENU] dismissAnyExistingMenu called [18:04:52] [MENU] dismissAnyExistingMenu completed [18:04:53] [MENU] dismissAnyExistingMenu called [18:04:53] [MENU] dismissAnyExistingMenu completed [18:04:53] [CELL_UPLOAD] configure: msgId=17752, file=c3ee2fbb5839abc5.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:53] [CELL_UPLOAD] → not my message, setting complete [18:04:53] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=c3ee2fbb5839abc5.jpg, overlayExists=true [18:04:53] [MENU] dismissAnyExistingMenu called [18:04:53] [MENU] dismissAnyExistingMenu completed [18:04:54] [MENU] dismissAnyExistingMenu called [18:04:54] [MENU] dismissAnyExistingMenu completed [18:04:54] [COMBINED_FETCH] Loaded 6653 read receipts, 793 messages with reactions [18:04:54] [PAGINATION] 📜 Loading 41 older messages, firstVisibleRow=0, oldOffset=-130.0 [18:04:54] [PAGINATION] 📜 Total now: 183 [18:04:54] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=183, first5Ids=[17699, 17700, 17701, 17702, 17703] [18:04:55] [PAGINATION] 📜 newHeight=17077.0, heightDiff=4032.0, newOffset=3902.0 [18:04:55] [PAGINATION] 📜 After setContentOffset, actual offset=3902.0 [18:04:55] [PAGINATION] 📜 After main queue, offset=3902.0 [18:04:55] [CELL_UPLOAD] configure: msgId=17739, file=cd7d50cf024abd2a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:55] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:55] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=cd7d50cf024abd2a.jpg, overlayExists=true [18:04:55] [MENU] dismissAnyExistingMenu called [18:04:55] [MENU] dismissAnyExistingMenu completed [18:04:55] [CELL_UPLOAD] configure: msgId=17738, file=d77fdc187ac423b2.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:55] [CELL_UPLOAD] → not my message, setting complete [18:04:55] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d77fdc187ac423b2.jpg, overlayExists=true [18:04:56] [MENU] dismissAnyExistingMenu called [18:04:56] [MENU] dismissAnyExistingMenu completed [18:04:57] [MENU] dismissAnyExistingMenu called [18:04:57] [MENU] dismissAnyExistingMenu completed [18:04:58] [CELL_UPLOAD] configure: msgId=17738, file=d77fdc187ac423b2.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:58] [CELL_UPLOAD] → not my message, setting complete [18:04:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d77fdc187ac423b2.jpg, overlayExists=true [18:04:58] [CELL_UPLOAD] configure: msgId=17739, file=cd7d50cf024abd2a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:04:58] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:04:58] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=cd7d50cf024abd2a.jpg, overlayExists=true [18:04:58] [MENU] dismissAnyExistingMenu called [18:04:58] [MENU] dismissAnyExistingMenu completed [18:04:59] [SERVER] Polling - attempting to reconnect... [18:04:59] [MENU] dismissAnyExistingMenu called [18:04:59] [MENU] dismissAnyExistingMenu completed [18:05:00] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:05:01] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:05:01] [SERVER] Polling - attempting to reconnect... [18:05:01] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [18:05:03] [LOG_GESTURE] handleLongPress called, state=1, isToday=true [18:05:03] [LOG_GESTURE] Long press on Today detected! Triggering log upload... [18:05:03] [LOG] Long-press on 'Today' detected - prompting for description [18:05:03] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-01-15 17:05:03 +0000 - type: unknown, operation_type: 0, message_id: 17883, session_id: ILUIWU, state: 0 [18:05:03] [PUSH_DEBUG] Full userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-15 17:05:01"; "file_name" = ""; message = "Yes but exiting too\Ud83e\Udd2d"; "message_id" = 17883; "message_type" = 0; "prev_session_message_id" = 17882; "replied_message" = "Not easy for you to watch me while not being alone at home !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 17881; "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("message_id"): 17883] [18:05:03] [PUSH] App active - suppressing notification UI, posting internal event [18:05:03] [PUSH_EMBED] 📩 Received embedded message: id=17883, type=0, sender=Esra [18:05:03] [PUSH_EMBED] ✅ Saved message 17883 to local DB (sync) [18:05:03] [PUSH_EMBED] Inserted message 17883 into existing cache (now 59 messages) [18:05:03] [PUSH_EMBED] Fetching evolution data for message 17883 in background [18:05:03] [PUSH_EMBED] ✅ Fully processed message 17883 [18:05:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-15 17:05:01"; "file_name" = ""; message = "Yes but exiting too\Ud83e\Udd2d"; "message_id" = 17883; "message_type" = 0; "prev_session_message_id" = 17882; "replied_message" = "Not easy for you to watch me while not being alone at home !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 17881; "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("message_id"): 17883] [18:05:03] [PUSH_EMBED_VC] Processing embedded message: id=17883, type=0, sender=Esra, prevId=17882 [18:05:03] [PUSH_EMBED_VC] Inserted message 17883 into allMessagesWithReadBy (now 184 messages) [18:05:03] [PUSH_EMBED_VC] ✅ Previous message 17882 exists in memory [18:05:03] [PUSH] ⚡ Embedded message handled directly in ViewController [18:05:03] [PUSH] Parsed message_id: 17883 [18:05:03] [PUSH] Parsed operation_type: 0 [18:05:03] [PUSH] Taking direct action: opType=0, messageId=17883 [18:05:03] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17883 [18:05:03] [PUSH] ⚡ Message 17883 already in memory - skipping duplicate notification entirely [18:05:03] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:05:03] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:05:03] [PUSH_UI] Message 17883 already in memory - skipping insert [18:05:03] [PUSH_EMBED_VC] Saved message 17883 to local DB [18:05:03] [PUSH] Silent push received [18:05:03] [PUSH_EMBED] 📩 Received embedded message: id=17883, type=0, sender=Esra [18:05:03] [PUSH_EMBED] ✅ Saved message 17883 to local DB (sync) [18:05:03] [PUSH_EMBED] Fetching evolution data for message 17883 in background [18:05:03] [PUSH_EMBED] ✅ Fully processed message 17883 [18:05:03] [PUSH] Embedded message handled instantly from silent push [18:05:03] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [18:05:03] [PUSH_UI_BLACKOUT] blackoutView=false, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [18:05:03] [PUSH_UI] Message 17883 already in memory - skipping insert [18:05:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { datesent = "2026-01-15 17:05:01"; "file_name" = ""; message = "Yes but exiting too\Ud83e\Udd2d"; "message_id" = 17883; "message_type" = 0; "prev_session_message_id" = 17882; "replied_message" = "Not easy for you to watch me while not being alone at home !"; "replied_sender_id" = "3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF"; "replied_sender_name" = Laurent; "reply_to_id" = 17881; "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("message_id"): 17883] [18:05:03] [PUSH_EMBED_VC] Message 17883 already in memory - skipping [18:05:03] [PUSH] ⚡ Embedded message handled directly in ViewController [18:05:03] [PUSH] Parsed message_id: 17883 [18:05:03] [PUSH] Parsed operation_type: 0 [18:05:03] [PUSH] Taking direct action: opType=0, messageId=17883 [18:05:03] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=17883 [18:05:03] [PUSH] ⚡ Message 17883 already in memory - skipping duplicate notification entirely [18:05:03] [CELL_UPLOAD] configure: msgId=17738, file=d77fdc187ac423b2.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:05:03] [CELL_UPLOAD] → not my message, setting complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=d77fdc187ac423b2.jpg, overlayExists=true [18:05:03] [CELL_UPLOAD] configure: msgId=17739, file=cd7d50cf024abd2a.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:05:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=cd7d50cf024abd2a.jpg, overlayExists=true [18:05:03] [CELL_UPLOAD] configure: msgId=17752, file=c3ee2fbb5839abc5.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:05:03] [CELL_UPLOAD] → not my message, setting complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=c3ee2fbb5839abc5.jpg, overlayExists=true [18:05:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=184, first5Ids=[17883, 17699, 17700, 17701, 17702] [18:05:03] [LOG_GESTURE] handleLongPress called, state=4, isToday=true [18:05:03] [CELL_UPLOAD] configure: msgId=17827, file=09c585e34fc5bc20.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:05:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=09c585e34fc5bc20.jpg, overlayExists=true [18:05:03] [CELL_UPLOAD] configure: msgId=17856, file=00580186bdfc055b.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [18:05:03] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=00580186bdfc055b.jpg, overlayExists=true [18:05:03] [CELL_UPLOAD] configure: msgId=17878, file=ac06049ed4fee223.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [18:05:03] [CELL_UPLOAD] → not my message, setting complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:05:03] DOWNLOADIIING t_ac06049ed4fee223.jpg [18:05:03] [MEDIA_DOWNLOAD] ✅ t_ac06049ed4fee223.jpg complete [18:05:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=ac06049ed4fee223.jpg, overlayExists=true [18:05:03] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: ac06049ed4fee223.jpg from downloaded: t_ac06049ed4fee223.jpg [18:05:03] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 17882 → 17883 [18:05:04] [CLIENT_SIG] Event received: type=0 messageId=17883 [18:05:04] [WS_EVENT] Received event: type=0, messageId=17883 [18:05:04] [WS_EVENT] 📨 New message notification (msgId=17883) - triggering incremental refresh, currentMsgCount=184 [18:05:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=184 [18:05:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 17883 [18:05:04] [PUSH_EMBED] Got evolution data for message 17883, saving to local DB [18:05:04] [PUSH_EMBED] Saved evolution data for message 17883 [18:05:04] [PUSH_EMBED] Got evolution data for message 17883, saving to local DB [18:05:04] [PUSH_EMBED] Saved evolution data for message 17883 [18:05:04] [INCREMENTAL_SYNC] ✅ No new messages [18:05:04] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=184 [18:05:05] [PUSH] Silent push received [18:05:05] [PUSH_EMBED] No embedded message_data in notification [18:05:05] [PUSH] No embedded data, pre-loading messages from server [18:05:05] [PUSH_PRELOAD] Fetching messages for instant display cache [18:05:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [18:05:05] [PRELOAD_CACHE] Preserving 9 push-inserted messages: [17832, 17831, 17830, 17829, 17828, 17827, 17826, 17825, 17824] [18:05:05] [PUSH_PRELOAD] ⚡ Pre-cached 59 messages for instant display (preserved 9 from push) [18:05:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [18:05:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 17883, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [18:05:05] [PUSH] Parsed message_id: 17883 [18:05:05] [PUSH] Parsed operation_type: 3 [18:05:05] [PUSH] Taking direct action: opType=3, messageId=17883 [18:05:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=17883 [18:05:06] [SERVER] Polling - attempting to reconnect... [18:05:06] [NETWORK] Status changed: connected [18:05:07] [CLIENT_SIG] Event received: type=3 messageId=17883 [18:05:07] [WS_EVENT] Received event: type=3, messageId=17883 [18:05:07] [WS_EVENT] Read receipt for message 17883 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF)