← Back to list | Download | 2026-01-15-18-05-media-unavailable.log (165,336 bytes)
=== 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: <AVAudioInputNode: 0x15e2e1fe0>
[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)